commit 7e09fad64e455d9d409d31c8f3235a3085cf4bf3 Author: andyeisenberg <125768484+andyeisenberg@users.noreply.github.com> Date: Sun Dec 28 17:55:29 2025 +0000 Latest build deployed. diff --git a/.mapping.json b/.mapping.json new file mode 100644 index 0000000..f274a1b --- /dev/null +++ b/.mapping.json @@ -0,0 +1 @@ +{"source/main.ptx": ["my-great-book"], "source/frontmatter.ptx": ["frontmatter", "front-colophon"], "source/ch-1-Probability.ptx": ["ch-Probability"], "source/sec-section-name.ptx": ["sec-section-name"], "source/ch-2-Random-Variables.ptx": ["ch-Random-Variables"], "source/ch-3-Expected-Value.ptx": ["ch-Expected-Value"], "source/ch-4-Confidence-Intervals.ptx": ["ch-Confidence-Intervals"], "source/ch-5-Hypothesis-Testing.ptx": ["ch-Hypothesis-Testing"], "source/ch-6-Linear-Regression.ptx": ["ch-Linear-Regression"], "source/backmatter.ptx": ["backmatter"]} \ No newline at end of file diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/_static/._009b407a9881be10.ttf b/_static/._009b407a9881be10.ttf new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._009b407a9881be10.ttf differ diff --git a/_static/._009b407a9881be10.ttf.gz b/_static/._009b407a9881be10.ttf.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._009b407a9881be10.ttf.gz differ diff --git a/_static/._115.648ff4b5650f4c7c.js b/_static/._115.648ff4b5650f4c7c.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._115.648ff4b5650f4c7c.js differ diff --git a/_static/._115.648ff4b5650f4c7c.js.gz b/_static/._115.648ff4b5650f4c7c.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._115.648ff4b5650f4c7c.js.gz differ diff --git a/_static/._115.648ff4b5650f4c7c.js.map b/_static/._115.648ff4b5650f4c7c.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._115.648ff4b5650f4c7c.js.map differ diff --git a/_static/._115.648ff4b5650f4c7c.js.map.gz b/_static/._115.648ff4b5650f4c7c.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._115.648ff4b5650f4c7c.js.map.gz differ diff --git a/_static/._126.a976f62852f30b51.js b/_static/._126.a976f62852f30b51.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._126.a976f62852f30b51.js differ diff --git a/_static/._126.a976f62852f30b51.js.gz b/_static/._126.a976f62852f30b51.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._126.a976f62852f30b51.js.gz differ diff --git a/_static/._126.a976f62852f30b51.js.map b/_static/._126.a976f62852f30b51.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._126.a976f62852f30b51.js.map differ diff --git a/_static/._126.a976f62852f30b51.js.map.gz b/_static/._126.a976f62852f30b51.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._126.a976f62852f30b51.js.map.gz differ diff --git a/_static/._128.5bed857c54ac4e8b.js b/_static/._128.5bed857c54ac4e8b.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._128.5bed857c54ac4e8b.js differ diff --git a/_static/._128.5bed857c54ac4e8b.js.gz b/_static/._128.5bed857c54ac4e8b.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._128.5bed857c54ac4e8b.js.gz differ diff --git a/_static/._128.5bed857c54ac4e8b.js.map b/_static/._128.5bed857c54ac4e8b.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._128.5bed857c54ac4e8b.js.map differ diff --git a/_static/._128.5bed857c54ac4e8b.js.map.gz b/_static/._128.5bed857c54ac4e8b.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._128.5bed857c54ac4e8b.js.map.gz differ diff --git a/_static/._131.ee437eeefadd750d.js b/_static/._131.ee437eeefadd750d.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._131.ee437eeefadd750d.js differ diff --git a/_static/._131.ee437eeefadd750d.js.gz b/_static/._131.ee437eeefadd750d.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._131.ee437eeefadd750d.js.gz differ diff --git a/_static/._131.ee437eeefadd750d.js.map b/_static/._131.ee437eeefadd750d.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._131.ee437eeefadd750d.js.map differ diff --git a/_static/._131.ee437eeefadd750d.js.map.gz b/_static/._131.ee437eeefadd750d.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._131.ee437eeefadd750d.js.map.gz differ diff --git a/_static/._168.fe63e6dec2d06468.js b/_static/._168.fe63e6dec2d06468.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._168.fe63e6dec2d06468.js differ diff --git a/_static/._168.fe63e6dec2d06468.js.gz b/_static/._168.fe63e6dec2d06468.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._168.fe63e6dec2d06468.js.gz differ diff --git a/_static/._168.fe63e6dec2d06468.js.map b/_static/._168.fe63e6dec2d06468.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._168.fe63e6dec2d06468.js.map differ diff --git a/_static/._168.fe63e6dec2d06468.js.map.gz b/_static/._168.fe63e6dec2d06468.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._168.fe63e6dec2d06468.js.map.gz differ diff --git a/_static/._186.be52164d57f4b7e4.js b/_static/._186.be52164d57f4b7e4.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._186.be52164d57f4b7e4.js differ diff --git a/_static/._186.be52164d57f4b7e4.js.gz b/_static/._186.be52164d57f4b7e4.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._186.be52164d57f4b7e4.js.gz differ diff --git a/_static/._186.be52164d57f4b7e4.js.map b/_static/._186.be52164d57f4b7e4.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._186.be52164d57f4b7e4.js.map differ diff --git a/_static/._186.be52164d57f4b7e4.js.map.gz b/_static/._186.be52164d57f4b7e4.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._186.be52164d57f4b7e4.js.map.gz differ diff --git a/_static/._249.7ec032cf0b3ede9a.js b/_static/._249.7ec032cf0b3ede9a.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._249.7ec032cf0b3ede9a.js differ diff --git a/_static/._249.7ec032cf0b3ede9a.js.LICENSE.txt b/_static/._249.7ec032cf0b3ede9a.js.LICENSE.txt new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._249.7ec032cf0b3ede9a.js.LICENSE.txt differ diff --git a/_static/._249.7ec032cf0b3ede9a.js.LICENSE.txt.gz b/_static/._249.7ec032cf0b3ede9a.js.LICENSE.txt.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._249.7ec032cf0b3ede9a.js.LICENSE.txt.gz differ diff --git a/_static/._249.7ec032cf0b3ede9a.js.gz b/_static/._249.7ec032cf0b3ede9a.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._249.7ec032cf0b3ede9a.js.gz differ diff --git a/_static/._249.7ec032cf0b3ede9a.js.map b/_static/._249.7ec032cf0b3ede9a.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._249.7ec032cf0b3ede9a.js.map differ diff --git a/_static/._249.7ec032cf0b3ede9a.js.map.gz b/_static/._249.7ec032cf0b3ede9a.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._249.7ec032cf0b3ede9a.js.map.gz differ diff --git a/_static/._28.bb005543f41af5fb.js b/_static/._28.bb005543f41af5fb.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._28.bb005543f41af5fb.js differ diff --git a/_static/._28.bb005543f41af5fb.js.LICENSE.txt b/_static/._28.bb005543f41af5fb.js.LICENSE.txt new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._28.bb005543f41af5fb.js.LICENSE.txt differ diff --git a/_static/._28.bb005543f41af5fb.js.gz b/_static/._28.bb005543f41af5fb.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._28.bb005543f41af5fb.js.gz differ diff --git a/_static/._28.bb005543f41af5fb.js.map b/_static/._28.bb005543f41af5fb.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._28.bb005543f41af5fb.js.map differ diff --git a/_static/._28.bb005543f41af5fb.js.map.gz b/_static/._28.bb005543f41af5fb.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._28.bb005543f41af5fb.js.map.gz differ diff --git a/_static/._296.37eb8c05642d8ef9.js b/_static/._296.37eb8c05642d8ef9.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._296.37eb8c05642d8ef9.js differ diff --git a/_static/._296.37eb8c05642d8ef9.js.gz b/_static/._296.37eb8c05642d8ef9.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._296.37eb8c05642d8ef9.js.gz differ diff --git a/_static/._296.37eb8c05642d8ef9.js.map b/_static/._296.37eb8c05642d8ef9.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._296.37eb8c05642d8ef9.js.map differ diff --git a/_static/._296.37eb8c05642d8ef9.js.map.gz b/_static/._296.37eb8c05642d8ef9.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._296.37eb8c05642d8ef9.js.map.gz differ diff --git a/_static/._340.c525bd899366c5f9.js b/_static/._340.c525bd899366c5f9.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._340.c525bd899366c5f9.js differ diff --git a/_static/._340.c525bd899366c5f9.js.gz b/_static/._340.c525bd899366c5f9.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._340.c525bd899366c5f9.js.gz differ diff --git a/_static/._340.c525bd899366c5f9.js.map b/_static/._340.c525bd899366c5f9.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._340.c525bd899366c5f9.js.map differ diff --git a/_static/._340.c525bd899366c5f9.js.map.gz b/_static/._340.c525bd899366c5f9.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._340.c525bd899366c5f9.js.map.gz differ diff --git a/_static/._357.a6fa55aea0c38a63.js b/_static/._357.a6fa55aea0c38a63.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._357.a6fa55aea0c38a63.js differ diff --git a/_static/._357.a6fa55aea0c38a63.js.LICENSE.txt b/_static/._357.a6fa55aea0c38a63.js.LICENSE.txt new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._357.a6fa55aea0c38a63.js.LICENSE.txt differ diff --git a/_static/._357.a6fa55aea0c38a63.js.LICENSE.txt.gz b/_static/._357.a6fa55aea0c38a63.js.LICENSE.txt.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._357.a6fa55aea0c38a63.js.LICENSE.txt.gz differ diff --git a/_static/._357.a6fa55aea0c38a63.js.gz b/_static/._357.a6fa55aea0c38a63.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._357.a6fa55aea0c38a63.js.gz differ diff --git a/_static/._357.a6fa55aea0c38a63.js.map b/_static/._357.a6fa55aea0c38a63.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._357.a6fa55aea0c38a63.js.map differ diff --git a/_static/._357.a6fa55aea0c38a63.js.map.gz b/_static/._357.a6fa55aea0c38a63.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._357.a6fa55aea0c38a63.js.map.gz differ diff --git a/_static/._39.dc45aaf5abca8027.js b/_static/._39.dc45aaf5abca8027.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._39.dc45aaf5abca8027.js differ diff --git a/_static/._39.dc45aaf5abca8027.js.LICENSE.txt b/_static/._39.dc45aaf5abca8027.js.LICENSE.txt new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._39.dc45aaf5abca8027.js.LICENSE.txt differ diff --git a/_static/._39.dc45aaf5abca8027.js.gz b/_static/._39.dc45aaf5abca8027.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._39.dc45aaf5abca8027.js.gz differ diff --git a/_static/._39.dc45aaf5abca8027.js.map b/_static/._39.dc45aaf5abca8027.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._39.dc45aaf5abca8027.js.map differ diff --git a/_static/._39.dc45aaf5abca8027.js.map.gz b/_static/._39.dc45aaf5abca8027.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._39.dc45aaf5abca8027.js.map.gz differ diff --git a/_static/._412.5965503d81003593.js b/_static/._412.5965503d81003593.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._412.5965503d81003593.js differ diff --git a/_static/._412.5965503d81003593.js.gz b/_static/._412.5965503d81003593.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._412.5965503d81003593.js.gz differ diff --git a/_static/._412.5965503d81003593.js.map b/_static/._412.5965503d81003593.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._412.5965503d81003593.js.map differ diff --git a/_static/._412.5965503d81003593.js.map.gz b/_static/._412.5965503d81003593.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._412.5965503d81003593.js.map.gz differ diff --git a/_static/._420.8dae5ad08a4e52ad.js b/_static/._420.8dae5ad08a4e52ad.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._420.8dae5ad08a4e52ad.js differ diff --git a/_static/._420.8dae5ad08a4e52ad.js.LICENSE.txt b/_static/._420.8dae5ad08a4e52ad.js.LICENSE.txt new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._420.8dae5ad08a4e52ad.js.LICENSE.txt differ diff --git a/_static/._420.8dae5ad08a4e52ad.js.gz b/_static/._420.8dae5ad08a4e52ad.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._420.8dae5ad08a4e52ad.js.gz differ diff --git a/_static/._420.8dae5ad08a4e52ad.js.map b/_static/._420.8dae5ad08a4e52ad.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._420.8dae5ad08a4e52ad.js.map differ diff --git a/_static/._420.8dae5ad08a4e52ad.js.map.gz b/_static/._420.8dae5ad08a4e52ad.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._420.8dae5ad08a4e52ad.js.map.gz differ diff --git a/_static/._442.f48919e396acaa18.js b/_static/._442.f48919e396acaa18.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._442.f48919e396acaa18.js differ diff --git a/_static/._442.f48919e396acaa18.js.gz b/_static/._442.f48919e396acaa18.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._442.f48919e396acaa18.js.gz differ diff --git a/_static/._442.f48919e396acaa18.js.map b/_static/._442.f48919e396acaa18.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._442.f48919e396acaa18.js.map differ diff --git a/_static/._442.f48919e396acaa18.js.map.gz b/_static/._442.f48919e396acaa18.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._442.f48919e396acaa18.js.map.gz differ diff --git a/_static/._460.bae9001422d7a484.js b/_static/._460.bae9001422d7a484.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._460.bae9001422d7a484.js differ diff --git a/_static/._460.bae9001422d7a484.js.gz b/_static/._460.bae9001422d7a484.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._460.bae9001422d7a484.js.gz differ diff --git a/_static/._460.bae9001422d7a484.js.map b/_static/._460.bae9001422d7a484.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._460.bae9001422d7a484.js.map differ diff --git a/_static/._460.bae9001422d7a484.js.map.gz b/_static/._460.bae9001422d7a484.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._460.bae9001422d7a484.js.map.gz differ diff --git a/_static/._466.4e1a3fb09520281a.js b/_static/._466.4e1a3fb09520281a.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._466.4e1a3fb09520281a.js differ diff --git a/_static/._466.4e1a3fb09520281a.js.gz b/_static/._466.4e1a3fb09520281a.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._466.4e1a3fb09520281a.js.gz differ diff --git a/_static/._466.4e1a3fb09520281a.js.map b/_static/._466.4e1a3fb09520281a.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._466.4e1a3fb09520281a.js.map differ diff --git a/_static/._466.4e1a3fb09520281a.js.map.gz b/_static/._466.4e1a3fb09520281a.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._466.4e1a3fb09520281a.js.map.gz differ diff --git a/_static/._486.78d96ffc5c65634b.js b/_static/._486.78d96ffc5c65634b.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._486.78d96ffc5c65634b.js differ diff --git a/_static/._486.78d96ffc5c65634b.js.gz b/_static/._486.78d96ffc5c65634b.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._486.78d96ffc5c65634b.js.gz differ diff --git a/_static/._486.78d96ffc5c65634b.js.map b/_static/._486.78d96ffc5c65634b.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._486.78d96ffc5c65634b.js.map differ diff --git a/_static/._486.78d96ffc5c65634b.js.map.gz b/_static/._486.78d96ffc5c65634b.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._486.78d96ffc5c65634b.js.map.gz differ diff --git a/_static/._4ba85deaf3670942.woff b/_static/._4ba85deaf3670942.woff new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._4ba85deaf3670942.woff differ diff --git a/_static/._529.115400ffea03835d.js b/_static/._529.115400ffea03835d.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._529.115400ffea03835d.js differ diff --git a/_static/._529.115400ffea03835d.js.gz b/_static/._529.115400ffea03835d.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._529.115400ffea03835d.js.gz differ diff --git a/_static/._529.115400ffea03835d.js.map b/_static/._529.115400ffea03835d.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._529.115400ffea03835d.js.map differ diff --git a/_static/._529.115400ffea03835d.js.map.gz b/_static/._529.115400ffea03835d.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._529.115400ffea03835d.js.map.gz differ diff --git a/_static/._566.0e38ac5442cc38c2.js b/_static/._566.0e38ac5442cc38c2.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._566.0e38ac5442cc38c2.js differ diff --git a/_static/._566.0e38ac5442cc38c2.js.gz b/_static/._566.0e38ac5442cc38c2.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._566.0e38ac5442cc38c2.js.gz differ diff --git a/_static/._566.0e38ac5442cc38c2.js.map b/_static/._566.0e38ac5442cc38c2.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._566.0e38ac5442cc38c2.js.map differ diff --git a/_static/._566.0e38ac5442cc38c2.js.map.gz b/_static/._566.0e38ac5442cc38c2.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._566.0e38ac5442cc38c2.js.map.gz differ diff --git a/_static/._576.f923ab1e9910a1be.js b/_static/._576.f923ab1e9910a1be.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._576.f923ab1e9910a1be.js differ diff --git a/_static/._576.f923ab1e9910a1be.js.gz b/_static/._576.f923ab1e9910a1be.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._576.f923ab1e9910a1be.js.gz differ diff --git a/_static/._576.f923ab1e9910a1be.js.map b/_static/._576.f923ab1e9910a1be.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._576.f923ab1e9910a1be.js.map differ diff --git a/_static/._576.f923ab1e9910a1be.js.map.gz b/_static/._576.f923ab1e9910a1be.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._576.f923ab1e9910a1be.js.map.gz differ diff --git a/_static/._580.f387819ad2e14f0a.js b/_static/._580.f387819ad2e14f0a.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._580.f387819ad2e14f0a.js differ diff --git a/_static/._580.f387819ad2e14f0a.js.gz b/_static/._580.f387819ad2e14f0a.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._580.f387819ad2e14f0a.js.gz differ diff --git a/_static/._580.f387819ad2e14f0a.js.map b/_static/._580.f387819ad2e14f0a.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._580.f387819ad2e14f0a.js.map differ diff --git a/_static/._580.f387819ad2e14f0a.js.map.gz b/_static/._580.f387819ad2e14f0a.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._580.f387819ad2e14f0a.js.map.gz differ diff --git a/_static/._616.89f80a32caf41aef.js b/_static/._616.89f80a32caf41aef.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._616.89f80a32caf41aef.js differ diff --git a/_static/._616.89f80a32caf41aef.js.gz b/_static/._616.89f80a32caf41aef.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._616.89f80a32caf41aef.js.gz differ diff --git a/_static/._616.89f80a32caf41aef.js.map b/_static/._616.89f80a32caf41aef.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._616.89f80a32caf41aef.js.map differ diff --git a/_static/._616.89f80a32caf41aef.js.map.gz b/_static/._616.89f80a32caf41aef.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._616.89f80a32caf41aef.js.map.gz differ diff --git a/_static/._625.120987bdd5293ae3.js b/_static/._625.120987bdd5293ae3.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._625.120987bdd5293ae3.js differ diff --git a/_static/._625.120987bdd5293ae3.js.LICENSE.txt b/_static/._625.120987bdd5293ae3.js.LICENSE.txt new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._625.120987bdd5293ae3.js.LICENSE.txt differ diff --git a/_static/._625.120987bdd5293ae3.js.LICENSE.txt.gz b/_static/._625.120987bdd5293ae3.js.LICENSE.txt.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._625.120987bdd5293ae3.js.LICENSE.txt.gz differ diff --git a/_static/._625.120987bdd5293ae3.js.gz b/_static/._625.120987bdd5293ae3.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._625.120987bdd5293ae3.js.gz differ diff --git a/_static/._625.120987bdd5293ae3.js.map b/_static/._625.120987bdd5293ae3.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._625.120987bdd5293ae3.js.map differ diff --git a/_static/._625.120987bdd5293ae3.js.map.gz b/_static/._625.120987bdd5293ae3.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._625.120987bdd5293ae3.js.map.gz differ diff --git a/_static/._640.cbc8d3a34deb8837.js b/_static/._640.cbc8d3a34deb8837.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._640.cbc8d3a34deb8837.js differ diff --git a/_static/._640.cbc8d3a34deb8837.js.map b/_static/._640.cbc8d3a34deb8837.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._640.cbc8d3a34deb8837.js.map differ diff --git a/_static/._640.cbc8d3a34deb8837.js.map.gz b/_static/._640.cbc8d3a34deb8837.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._640.cbc8d3a34deb8837.js.map.gz differ diff --git a/_static/._662.1bb5065279414751.js b/_static/._662.1bb5065279414751.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._662.1bb5065279414751.js differ diff --git a/_static/._662.1bb5065279414751.js.gz b/_static/._662.1bb5065279414751.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._662.1bb5065279414751.js.gz differ diff --git a/_static/._662.1bb5065279414751.js.map b/_static/._662.1bb5065279414751.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._662.1bb5065279414751.js.map differ diff --git a/_static/._662.1bb5065279414751.js.map.gz b/_static/._662.1bb5065279414751.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._662.1bb5065279414751.js.map.gz differ diff --git a/_static/._669.05a3639d12541567.js b/_static/._669.05a3639d12541567.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._669.05a3639d12541567.js differ diff --git a/_static/._669.05a3639d12541567.js.LICENSE.txt b/_static/._669.05a3639d12541567.js.LICENSE.txt new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._669.05a3639d12541567.js.LICENSE.txt differ diff --git a/_static/._669.05a3639d12541567.js.gz b/_static/._669.05a3639d12541567.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._669.05a3639d12541567.js.gz differ diff --git a/_static/._669.05a3639d12541567.js.map b/_static/._669.05a3639d12541567.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._669.05a3639d12541567.js.map differ diff --git a/_static/._669.05a3639d12541567.js.map.gz b/_static/._669.05a3639d12541567.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._669.05a3639d12541567.js.map.gz differ diff --git a/_static/._680.ec85c3ce31480628.js b/_static/._680.ec85c3ce31480628.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._680.ec85c3ce31480628.js differ diff --git a/_static/._680.ec85c3ce31480628.js.gz b/_static/._680.ec85c3ce31480628.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._680.ec85c3ce31480628.js.gz differ diff --git a/_static/._680.ec85c3ce31480628.js.map b/_static/._680.ec85c3ce31480628.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._680.ec85c3ce31480628.js.map differ diff --git a/_static/._680.ec85c3ce31480628.js.map.gz b/_static/._680.ec85c3ce31480628.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._680.ec85c3ce31480628.js.map.gz differ diff --git a/_static/._759.f27ff66e7ad33076.js b/_static/._759.f27ff66e7ad33076.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._759.f27ff66e7ad33076.js differ diff --git a/_static/._759.f27ff66e7ad33076.js.gz b/_static/._759.f27ff66e7ad33076.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._759.f27ff66e7ad33076.js.gz differ diff --git a/_static/._759.f27ff66e7ad33076.js.map b/_static/._759.f27ff66e7ad33076.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._759.f27ff66e7ad33076.js.map differ diff --git a/_static/._759.f27ff66e7ad33076.js.map.gz b/_static/._759.f27ff66e7ad33076.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._759.f27ff66e7ad33076.js.map.gz differ diff --git a/_static/._764.c33a81cafe63d2b6.js b/_static/._764.c33a81cafe63d2b6.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._764.c33a81cafe63d2b6.js differ diff --git a/_static/._764.c33a81cafe63d2b6.js.LICENSE.txt b/_static/._764.c33a81cafe63d2b6.js.LICENSE.txt new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._764.c33a81cafe63d2b6.js.LICENSE.txt differ diff --git a/_static/._764.c33a81cafe63d2b6.js.LICENSE.txt.gz b/_static/._764.c33a81cafe63d2b6.js.LICENSE.txt.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._764.c33a81cafe63d2b6.js.LICENSE.txt.gz differ diff --git a/_static/._764.c33a81cafe63d2b6.js.gz b/_static/._764.c33a81cafe63d2b6.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._764.c33a81cafe63d2b6.js.gz differ diff --git a/_static/._764.c33a81cafe63d2b6.js.map b/_static/._764.c33a81cafe63d2b6.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._764.c33a81cafe63d2b6.js.map differ diff --git a/_static/._764.c33a81cafe63d2b6.js.map.gz b/_static/._764.c33a81cafe63d2b6.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._764.c33a81cafe63d2b6.js.map.gz differ diff --git a/_static/._770.7bd6d39128dde910.js b/_static/._770.7bd6d39128dde910.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._770.7bd6d39128dde910.js differ diff --git a/_static/._770.7bd6d39128dde910.js.LICENSE.txt b/_static/._770.7bd6d39128dde910.js.LICENSE.txt new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._770.7bd6d39128dde910.js.LICENSE.txt differ diff --git a/_static/._770.7bd6d39128dde910.js.LICENSE.txt.gz b/_static/._770.7bd6d39128dde910.js.LICENSE.txt.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._770.7bd6d39128dde910.js.LICENSE.txt.gz differ diff --git a/_static/._770.7bd6d39128dde910.js.gz b/_static/._770.7bd6d39128dde910.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._770.7bd6d39128dde910.js.gz differ diff --git a/_static/._770.7bd6d39128dde910.js.map b/_static/._770.7bd6d39128dde910.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._770.7bd6d39128dde910.js.map differ diff --git a/_static/._770.7bd6d39128dde910.js.map.gz b/_static/._770.7bd6d39128dde910.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._770.7bd6d39128dde910.js.map.gz differ diff --git a/_static/._7a0f4b092e86cb52.eot b/_static/._7a0f4b092e86cb52.eot new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._7a0f4b092e86cb52.eot differ diff --git a/_static/._817.3438cd0f1b0f98bc.js b/_static/._817.3438cd0f1b0f98bc.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._817.3438cd0f1b0f98bc.js differ diff --git a/_static/._817.3438cd0f1b0f98bc.js.gz b/_static/._817.3438cd0f1b0f98bc.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._817.3438cd0f1b0f98bc.js.gz differ diff --git a/_static/._817.3438cd0f1b0f98bc.js.map b/_static/._817.3438cd0f1b0f98bc.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._817.3438cd0f1b0f98bc.js.map differ diff --git a/_static/._817.3438cd0f1b0f98bc.js.map.gz b/_static/._817.3438cd0f1b0f98bc.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._817.3438cd0f1b0f98bc.js.map.gz differ diff --git a/_static/._819.3e20e27de12f3abf.js b/_static/._819.3e20e27de12f3abf.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._819.3e20e27de12f3abf.js differ diff --git a/_static/._819.3e20e27de12f3abf.js.gz b/_static/._819.3e20e27de12f3abf.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._819.3e20e27de12f3abf.js.gz differ diff --git a/_static/._819.3e20e27de12f3abf.js.map b/_static/._819.3e20e27de12f3abf.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._819.3e20e27de12f3abf.js.map differ diff --git a/_static/._819.3e20e27de12f3abf.js.map.gz b/_static/._819.3e20e27de12f3abf.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._819.3e20e27de12f3abf.js.map.gz differ diff --git a/_static/._824.4343b78afc34c12f.js b/_static/._824.4343b78afc34c12f.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._824.4343b78afc34c12f.js differ diff --git a/_static/._824.4343b78afc34c12f.js.gz b/_static/._824.4343b78afc34c12f.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._824.4343b78afc34c12f.js.gz differ diff --git a/_static/._824.4343b78afc34c12f.js.map b/_static/._824.4343b78afc34c12f.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._824.4343b78afc34c12f.js.map differ diff --git a/_static/._824.4343b78afc34c12f.js.map.gz b/_static/._824.4343b78afc34c12f.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._824.4343b78afc34c12f.js.map.gz differ diff --git a/_static/._85f0466cb4ab3a4d.svg b/_static/._85f0466cb4ab3a4d.svg new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._85f0466cb4ab3a4d.svg differ diff --git a/_static/._85f0466cb4ab3a4d.svg.gz b/_static/._85f0466cb4ab3a4d.svg.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._85f0466cb4ab3a4d.svg.gz differ diff --git a/_static/._877.fc49cc812ccc4937.js b/_static/._877.fc49cc812ccc4937.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._877.fc49cc812ccc4937.js differ diff --git a/_static/._877.fc49cc812ccc4937.js.gz b/_static/._877.fc49cc812ccc4937.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._877.fc49cc812ccc4937.js.gz differ diff --git a/_static/._877.fc49cc812ccc4937.js.map b/_static/._877.fc49cc812ccc4937.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._877.fc49cc812ccc4937.js.map differ diff --git a/_static/._877.fc49cc812ccc4937.js.map.gz b/_static/._877.fc49cc812ccc4937.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._877.fc49cc812ccc4937.js.map.gz differ diff --git a/_static/._915.8f500bccc86f901d.js b/_static/._915.8f500bccc86f901d.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._915.8f500bccc86f901d.js differ diff --git a/_static/._915.8f500bccc86f901d.js.gz b/_static/._915.8f500bccc86f901d.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._915.8f500bccc86f901d.js.gz differ diff --git a/_static/._915.8f500bccc86f901d.js.map b/_static/._915.8f500bccc86f901d.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._915.8f500bccc86f901d.js.map differ diff --git a/_static/._915.8f500bccc86f901d.js.map.gz b/_static/._915.8f500bccc86f901d.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._915.8f500bccc86f901d.js.map.gz differ diff --git a/_static/._919.237aced0c044e4b6.js b/_static/._919.237aced0c044e4b6.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._919.237aced0c044e4b6.js differ diff --git a/_static/._919.237aced0c044e4b6.js.gz b/_static/._919.237aced0c044e4b6.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._919.237aced0c044e4b6.js.gz differ diff --git a/_static/._919.237aced0c044e4b6.js.map b/_static/._919.237aced0c044e4b6.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._919.237aced0c044e4b6.js.map differ diff --git a/_static/._919.237aced0c044e4b6.js.map.gz b/_static/._919.237aced0c044e4b6.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._919.237aced0c044e4b6.js.map.gz differ diff --git a/_static/._b70781972ce7320b.woff2 b/_static/._b70781972ce7320b.woff2 new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._b70781972ce7320b.woff2 differ diff --git a/_static/._prefix-115.83df5da0966564d5.css b/_static/._prefix-115.83df5da0966564d5.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-115.83df5da0966564d5.css differ diff --git a/_static/._prefix-115.83df5da0966564d5.css.gz b/_static/._prefix-115.83df5da0966564d5.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-115.83df5da0966564d5.css.gz differ diff --git a/_static/._prefix-115.83df5da0966564d5.css.map b/_static/._prefix-115.83df5da0966564d5.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-115.83df5da0966564d5.css.map differ diff --git a/_static/._prefix-115.83df5da0966564d5.css.map.gz b/_static/._prefix-115.83df5da0966564d5.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-115.83df5da0966564d5.css.map.gz differ diff --git a/_static/._prefix-131.b184379d0dc5871b.css b/_static/._prefix-131.b184379d0dc5871b.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-131.b184379d0dc5871b.css differ diff --git a/_static/._prefix-131.b184379d0dc5871b.css.gz b/_static/._prefix-131.b184379d0dc5871b.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-131.b184379d0dc5871b.css.gz differ diff --git a/_static/._prefix-131.b184379d0dc5871b.css.map b/_static/._prefix-131.b184379d0dc5871b.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-131.b184379d0dc5871b.css.map differ diff --git a/_static/._prefix-131.b184379d0dc5871b.css.map.gz b/_static/._prefix-131.b184379d0dc5871b.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-131.b184379d0dc5871b.css.map.gz differ diff --git a/_static/._prefix-168.1c4deaed00ca1f5e.css b/_static/._prefix-168.1c4deaed00ca1f5e.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-168.1c4deaed00ca1f5e.css differ diff --git a/_static/._prefix-168.1c4deaed00ca1f5e.css.gz b/_static/._prefix-168.1c4deaed00ca1f5e.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-168.1c4deaed00ca1f5e.css.gz differ diff --git a/_static/._prefix-168.1c4deaed00ca1f5e.css.map b/_static/._prefix-168.1c4deaed00ca1f5e.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-168.1c4deaed00ca1f5e.css.map differ diff --git a/_static/._prefix-168.1c4deaed00ca1f5e.css.map.gz b/_static/._prefix-168.1c4deaed00ca1f5e.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-168.1c4deaed00ca1f5e.css.map.gz differ diff --git a/_static/._prefix-186.0d47de180767fda9.css b/_static/._prefix-186.0d47de180767fda9.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-186.0d47de180767fda9.css differ diff --git a/_static/._prefix-186.0d47de180767fda9.css.map b/_static/._prefix-186.0d47de180767fda9.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-186.0d47de180767fda9.css.map differ diff --git a/_static/._prefix-186.0d47de180767fda9.css.map.gz b/_static/._prefix-186.0d47de180767fda9.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-186.0d47de180767fda9.css.map.gz differ diff --git a/_static/._prefix-198.86b6b2a70a576922.css b/_static/._prefix-198.86b6b2a70a576922.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-198.86b6b2a70a576922.css differ diff --git a/_static/._prefix-198.86b6b2a70a576922.css.gz b/_static/._prefix-198.86b6b2a70a576922.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-198.86b6b2a70a576922.css.gz differ diff --git a/_static/._prefix-198.86b6b2a70a576922.css.map b/_static/._prefix-198.86b6b2a70a576922.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-198.86b6b2a70a576922.css.map differ diff --git a/_static/._prefix-198.86b6b2a70a576922.css.map.gz b/_static/._prefix-198.86b6b2a70a576922.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-198.86b6b2a70a576922.css.map.gz differ diff --git a/_static/._prefix-249.6ca19da539a8ed1a.css b/_static/._prefix-249.6ca19da539a8ed1a.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-249.6ca19da539a8ed1a.css differ diff --git a/_static/._prefix-249.6ca19da539a8ed1a.css.gz b/_static/._prefix-249.6ca19da539a8ed1a.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-249.6ca19da539a8ed1a.css.gz differ diff --git a/_static/._prefix-249.6ca19da539a8ed1a.css.map b/_static/._prefix-249.6ca19da539a8ed1a.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-249.6ca19da539a8ed1a.css.map differ diff --git a/_static/._prefix-249.6ca19da539a8ed1a.css.map.gz b/_static/._prefix-249.6ca19da539a8ed1a.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-249.6ca19da539a8ed1a.css.map.gz differ diff --git a/_static/._prefix-294.986bf74bfa4ccbd4.css b/_static/._prefix-294.986bf74bfa4ccbd4.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-294.986bf74bfa4ccbd4.css differ diff --git a/_static/._prefix-294.986bf74bfa4ccbd4.css.gz b/_static/._prefix-294.986bf74bfa4ccbd4.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-294.986bf74bfa4ccbd4.css.gz differ diff --git a/_static/._prefix-294.986bf74bfa4ccbd4.css.map b/_static/._prefix-294.986bf74bfa4ccbd4.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-294.986bf74bfa4ccbd4.css.map differ diff --git a/_static/._prefix-294.986bf74bfa4ccbd4.css.map.gz b/_static/._prefix-294.986bf74bfa4ccbd4.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-294.986bf74bfa4ccbd4.css.map.gz differ diff --git a/_static/._prefix-350.dbca9271f6e2dfbf.css b/_static/._prefix-350.dbca9271f6e2dfbf.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-350.dbca9271f6e2dfbf.css differ diff --git a/_static/._prefix-350.dbca9271f6e2dfbf.css.gz b/_static/._prefix-350.dbca9271f6e2dfbf.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-350.dbca9271f6e2dfbf.css.gz differ diff --git a/_static/._prefix-350.dbca9271f6e2dfbf.css.map b/_static/._prefix-350.dbca9271f6e2dfbf.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-350.dbca9271f6e2dfbf.css.map differ diff --git a/_static/._prefix-350.dbca9271f6e2dfbf.css.map.gz b/_static/._prefix-350.dbca9271f6e2dfbf.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-350.dbca9271f6e2dfbf.css.map.gz differ diff --git a/_static/._prefix-380.67748940131a4a84.css b/_static/._prefix-380.67748940131a4a84.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-380.67748940131a4a84.css differ diff --git a/_static/._prefix-380.67748940131a4a84.css.map b/_static/._prefix-380.67748940131a4a84.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-380.67748940131a4a84.css.map differ diff --git a/_static/._prefix-380.67748940131a4a84.css.map.gz b/_static/._prefix-380.67748940131a4a84.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-380.67748940131a4a84.css.map.gz differ diff --git a/_static/._prefix-39.89cf817b9a35aeca.css b/_static/._prefix-39.89cf817b9a35aeca.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-39.89cf817b9a35aeca.css differ diff --git a/_static/._prefix-39.89cf817b9a35aeca.css.gz b/_static/._prefix-39.89cf817b9a35aeca.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-39.89cf817b9a35aeca.css.gz differ diff --git a/_static/._prefix-39.89cf817b9a35aeca.css.map b/_static/._prefix-39.89cf817b9a35aeca.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-39.89cf817b9a35aeca.css.map differ diff --git a/_static/._prefix-39.89cf817b9a35aeca.css.map.gz b/_static/._prefix-39.89cf817b9a35aeca.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-39.89cf817b9a35aeca.css.map.gz differ diff --git a/_static/._prefix-412.25f3c4ff23eb9893.css b/_static/._prefix-412.25f3c4ff23eb9893.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-412.25f3c4ff23eb9893.css differ diff --git a/_static/._prefix-412.25f3c4ff23eb9893.css.gz b/_static/._prefix-412.25f3c4ff23eb9893.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-412.25f3c4ff23eb9893.css.gz differ diff --git a/_static/._prefix-412.25f3c4ff23eb9893.css.map b/_static/._prefix-412.25f3c4ff23eb9893.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-412.25f3c4ff23eb9893.css.map differ diff --git a/_static/._prefix-412.25f3c4ff23eb9893.css.map.gz b/_static/._prefix-412.25f3c4ff23eb9893.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-412.25f3c4ff23eb9893.css.map.gz differ diff --git a/_static/._prefix-442.6ae0ea584f8e75c5.css b/_static/._prefix-442.6ae0ea584f8e75c5.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-442.6ae0ea584f8e75c5.css differ diff --git a/_static/._prefix-442.6ae0ea584f8e75c5.css.gz b/_static/._prefix-442.6ae0ea584f8e75c5.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-442.6ae0ea584f8e75c5.css.gz differ diff --git a/_static/._prefix-442.6ae0ea584f8e75c5.css.map b/_static/._prefix-442.6ae0ea584f8e75c5.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-442.6ae0ea584f8e75c5.css.map differ diff --git a/_static/._prefix-442.6ae0ea584f8e75c5.css.map.gz b/_static/._prefix-442.6ae0ea584f8e75c5.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-442.6ae0ea584f8e75c5.css.map.gz differ diff --git a/_static/._prefix-460.7c0b70502d117f7d.css b/_static/._prefix-460.7c0b70502d117f7d.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-460.7c0b70502d117f7d.css differ diff --git a/_static/._prefix-460.7c0b70502d117f7d.css.map b/_static/._prefix-460.7c0b70502d117f7d.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-460.7c0b70502d117f7d.css.map differ diff --git a/_static/._prefix-486.990aca82e7ba3e1c.css b/_static/._prefix-486.990aca82e7ba3e1c.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-486.990aca82e7ba3e1c.css differ diff --git a/_static/._prefix-486.990aca82e7ba3e1c.css.gz b/_static/._prefix-486.990aca82e7ba3e1c.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-486.990aca82e7ba3e1c.css.gz differ diff --git a/_static/._prefix-486.990aca82e7ba3e1c.css.map b/_static/._prefix-486.990aca82e7ba3e1c.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-486.990aca82e7ba3e1c.css.map differ diff --git a/_static/._prefix-486.990aca82e7ba3e1c.css.map.gz b/_static/._prefix-486.990aca82e7ba3e1c.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-486.990aca82e7ba3e1c.css.map.gz differ diff --git a/_static/._prefix-576.9b1852878840651d.css b/_static/._prefix-576.9b1852878840651d.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-576.9b1852878840651d.css differ diff --git a/_static/._prefix-576.9b1852878840651d.css.gz b/_static/._prefix-576.9b1852878840651d.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-576.9b1852878840651d.css.gz differ diff --git a/_static/._prefix-576.9b1852878840651d.css.map b/_static/._prefix-576.9b1852878840651d.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-576.9b1852878840651d.css.map differ diff --git a/_static/._prefix-576.9b1852878840651d.css.map.gz b/_static/._prefix-576.9b1852878840651d.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-576.9b1852878840651d.css.map.gz differ diff --git a/_static/._prefix-580.22958d4327b0425a.css b/_static/._prefix-580.22958d4327b0425a.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-580.22958d4327b0425a.css differ diff --git a/_static/._prefix-580.22958d4327b0425a.css.gz b/_static/._prefix-580.22958d4327b0425a.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-580.22958d4327b0425a.css.gz differ diff --git a/_static/._prefix-580.22958d4327b0425a.css.map b/_static/._prefix-580.22958d4327b0425a.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-580.22958d4327b0425a.css.map differ diff --git a/_static/._prefix-580.22958d4327b0425a.css.map.gz b/_static/._prefix-580.22958d4327b0425a.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-580.22958d4327b0425a.css.map.gz differ diff --git a/_static/._prefix-616.5c78f604ddad1ec0.css b/_static/._prefix-616.5c78f604ddad1ec0.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-616.5c78f604ddad1ec0.css differ diff --git a/_static/._prefix-616.5c78f604ddad1ec0.css.gz b/_static/._prefix-616.5c78f604ddad1ec0.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-616.5c78f604ddad1ec0.css.gz differ diff --git a/_static/._prefix-616.5c78f604ddad1ec0.css.map b/_static/._prefix-616.5c78f604ddad1ec0.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-616.5c78f604ddad1ec0.css.map differ diff --git a/_static/._prefix-616.5c78f604ddad1ec0.css.map.gz b/_static/._prefix-616.5c78f604ddad1ec0.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-616.5c78f604ddad1ec0.css.map.gz differ diff --git a/_static/._prefix-621.8c109e297bdd8ce7.css b/_static/._prefix-621.8c109e297bdd8ce7.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-621.8c109e297bdd8ce7.css differ diff --git a/_static/._prefix-621.8c109e297bdd8ce7.css.gz b/_static/._prefix-621.8c109e297bdd8ce7.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-621.8c109e297bdd8ce7.css.gz differ diff --git a/_static/._prefix-621.8c109e297bdd8ce7.css.map b/_static/._prefix-621.8c109e297bdd8ce7.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-621.8c109e297bdd8ce7.css.map differ diff --git a/_static/._prefix-621.8c109e297bdd8ce7.css.map.gz b/_static/._prefix-621.8c109e297bdd8ce7.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-621.8c109e297bdd8ce7.css.map.gz differ diff --git a/_static/._prefix-723.3bccd435914aa0ff.css b/_static/._prefix-723.3bccd435914aa0ff.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-723.3bccd435914aa0ff.css differ diff --git a/_static/._prefix-723.3bccd435914aa0ff.css.gz b/_static/._prefix-723.3bccd435914aa0ff.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-723.3bccd435914aa0ff.css.gz differ diff --git a/_static/._prefix-723.3bccd435914aa0ff.css.map b/_static/._prefix-723.3bccd435914aa0ff.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-723.3bccd435914aa0ff.css.map differ diff --git a/_static/._prefix-723.3bccd435914aa0ff.css.map.gz b/_static/._prefix-723.3bccd435914aa0ff.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-723.3bccd435914aa0ff.css.map.gz differ diff --git a/_static/._prefix-723.3e6434f80549315a.bundle.js b/_static/._prefix-723.3e6434f80549315a.bundle.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-723.3e6434f80549315a.bundle.js differ diff --git a/_static/._prefix-723.3e6434f80549315a.bundle.js.LICENSE.txt b/_static/._prefix-723.3e6434f80549315a.bundle.js.LICENSE.txt new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-723.3e6434f80549315a.bundle.js.LICENSE.txt differ diff --git a/_static/._prefix-723.3e6434f80549315a.bundle.js.LICENSE.txt.gz b/_static/._prefix-723.3e6434f80549315a.bundle.js.LICENSE.txt.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-723.3e6434f80549315a.bundle.js.LICENSE.txt.gz differ diff --git a/_static/._prefix-723.3e6434f80549315a.bundle.js.gz b/_static/._prefix-723.3e6434f80549315a.bundle.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-723.3e6434f80549315a.bundle.js.gz differ diff --git a/_static/._prefix-723.3e6434f80549315a.bundle.js.map b/_static/._prefix-723.3e6434f80549315a.bundle.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-723.3e6434f80549315a.bundle.js.map differ diff --git a/_static/._prefix-723.3e6434f80549315a.bundle.js.map.gz b/_static/._prefix-723.3e6434f80549315a.bundle.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-723.3e6434f80549315a.bundle.js.map.gz differ diff --git a/_static/._prefix-737.cf869b6ea8bfad2f.css b/_static/._prefix-737.cf869b6ea8bfad2f.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-737.cf869b6ea8bfad2f.css differ diff --git a/_static/._prefix-737.cf869b6ea8bfad2f.css.gz b/_static/._prefix-737.cf869b6ea8bfad2f.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-737.cf869b6ea8bfad2f.css.gz differ diff --git a/_static/._prefix-737.cf869b6ea8bfad2f.css.map b/_static/._prefix-737.cf869b6ea8bfad2f.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-737.cf869b6ea8bfad2f.css.map differ diff --git a/_static/._prefix-737.cf869b6ea8bfad2f.css.map.gz b/_static/._prefix-737.cf869b6ea8bfad2f.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-737.cf869b6ea8bfad2f.css.map.gz differ diff --git a/_static/._prefix-819.6edefe408d7482c2.css b/_static/._prefix-819.6edefe408d7482c2.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-819.6edefe408d7482c2.css differ diff --git a/_static/._prefix-819.6edefe408d7482c2.css.gz b/_static/._prefix-819.6edefe408d7482c2.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-819.6edefe408d7482c2.css.gz differ diff --git a/_static/._prefix-819.6edefe408d7482c2.css.map b/_static/._prefix-819.6edefe408d7482c2.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-819.6edefe408d7482c2.css.map differ diff --git a/_static/._prefix-819.6edefe408d7482c2.css.map.gz b/_static/._prefix-819.6edefe408d7482c2.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-819.6edefe408d7482c2.css.map.gz differ diff --git a/_static/._prefix-824.271ae6cff6401ed5.css b/_static/._prefix-824.271ae6cff6401ed5.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-824.271ae6cff6401ed5.css differ diff --git a/_static/._prefix-824.271ae6cff6401ed5.css.gz b/_static/._prefix-824.271ae6cff6401ed5.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-824.271ae6cff6401ed5.css.gz differ diff --git a/_static/._prefix-824.271ae6cff6401ed5.css.map b/_static/._prefix-824.271ae6cff6401ed5.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-824.271ae6cff6401ed5.css.map differ diff --git a/_static/._prefix-824.271ae6cff6401ed5.css.map.gz b/_static/._prefix-824.271ae6cff6401ed5.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-824.271ae6cff6401ed5.css.map.gz differ diff --git a/_static/._prefix-877.fa7c46f756cd5a82.css b/_static/._prefix-877.fa7c46f756cd5a82.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-877.fa7c46f756cd5a82.css differ diff --git a/_static/._prefix-877.fa7c46f756cd5a82.css.gz b/_static/._prefix-877.fa7c46f756cd5a82.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-877.fa7c46f756cd5a82.css.gz differ diff --git a/_static/._prefix-877.fa7c46f756cd5a82.css.map b/_static/._prefix-877.fa7c46f756cd5a82.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-877.fa7c46f756cd5a82.css.map differ diff --git a/_static/._prefix-877.fa7c46f756cd5a82.css.map.gz b/_static/._prefix-877.fa7c46f756cd5a82.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-877.fa7c46f756cd5a82.css.map.gz differ diff --git a/_static/._prefix-915.882512b642b7fffa.css b/_static/._prefix-915.882512b642b7fffa.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-915.882512b642b7fffa.css differ diff --git a/_static/._prefix-915.882512b642b7fffa.css.gz b/_static/._prefix-915.882512b642b7fffa.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-915.882512b642b7fffa.css.gz differ diff --git a/_static/._prefix-915.882512b642b7fffa.css.map b/_static/._prefix-915.882512b642b7fffa.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-915.882512b642b7fffa.css.map differ diff --git a/_static/._prefix-915.882512b642b7fffa.css.map.gz b/_static/._prefix-915.882512b642b7fffa.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-915.882512b642b7fffa.css.map.gz differ diff --git a/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js b/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js differ diff --git a/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.LICENSE.txt b/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.LICENSE.txt new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.LICENSE.txt differ diff --git a/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.LICENSE.txt.gz b/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.LICENSE.txt.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.LICENSE.txt.gz differ diff --git a/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.gz b/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.gz differ diff --git a/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.map b/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.map differ diff --git a/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.map.gz b/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-runestone.7e141ad8414abf4a.bundle.js.map.gz differ diff --git a/_static/._prefix-runestone.f4ab138da65f4203.css b/_static/._prefix-runestone.f4ab138da65f4203.css new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-runestone.f4ab138da65f4203.css differ diff --git a/_static/._prefix-runestone.f4ab138da65f4203.css.gz b/_static/._prefix-runestone.f4ab138da65f4203.css.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-runestone.f4ab138da65f4203.css.gz differ diff --git a/_static/._prefix-runestone.f4ab138da65f4203.css.map b/_static/._prefix-runestone.f4ab138da65f4203.css.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-runestone.f4ab138da65f4203.css.map differ diff --git a/_static/._prefix-runestone.f4ab138da65f4203.css.map.gz b/_static/._prefix-runestone.f4ab138da65f4203.css.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-runestone.f4ab138da65f4203.css.map.gz differ diff --git a/_static/._prefix-runtime.42217a82c75796c8.bundle.js b/_static/._prefix-runtime.42217a82c75796c8.bundle.js new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-runtime.42217a82c75796c8.bundle.js differ diff --git a/_static/._prefix-runtime.42217a82c75796c8.bundle.js.gz b/_static/._prefix-runtime.42217a82c75796c8.bundle.js.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-runtime.42217a82c75796c8.bundle.js.gz differ diff --git a/_static/._prefix-runtime.42217a82c75796c8.bundle.js.map b/_static/._prefix-runtime.42217a82c75796c8.bundle.js.map new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-runtime.42217a82c75796c8.bundle.js.map differ diff --git a/_static/._prefix-runtime.42217a82c75796c8.bundle.js.map.gz b/_static/._prefix-runtime.42217a82c75796c8.bundle.js.map.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._prefix-runtime.42217a82c75796c8.bundle.js.map.gz differ diff --git a/_static/._sql-wasm.wasm b/_static/._sql-wasm.wasm new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._sql-wasm.wasm differ diff --git a/_static/._sql-wasm.wasm.gz b/_static/._sql-wasm.wasm.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._sql-wasm.wasm.gz differ diff --git a/_static/._webpack_static_imports.json b/_static/._webpack_static_imports.json new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._webpack_static_imports.json differ diff --git a/_static/._webpack_static_imports.json.gz b/_static/._webpack_static_imports.json.gz new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._webpack_static_imports.json.gz differ diff --git a/_static/._webpack_static_imports.xml b/_static/._webpack_static_imports.xml new file mode 100644 index 0000000..d4c6384 Binary files /dev/null and b/_static/._webpack_static_imports.xml differ diff --git a/_static/009b407a9881be10.ttf b/_static/009b407a9881be10.ttf new file mode 100644 index 0000000..1413fc6 Binary files /dev/null and b/_static/009b407a9881be10.ttf differ diff --git a/_static/009b407a9881be10.ttf.gz b/_static/009b407a9881be10.ttf.gz new file mode 100644 index 0000000..9dd569e Binary files /dev/null and b/_static/009b407a9881be10.ttf.gz differ diff --git a/_static/115.648ff4b5650f4c7c.js b/_static/115.648ff4b5650f4c7c.js new file mode 100644 index 0000000..7a7615a --- /dev/null +++ b/_static/115.648ff4b5650f4c7c.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[115,198,294,350,380,621,737,819],{46424:(t,e,i)=>{i.r(e),i.d(e,{default:()=>o});var s=i(78673),n=(i(64466),i(9919),i(48819),i(73565),i(58529),i(56759),i(52420),i(14566));class r extends n.MatchingProblem{constructor(t){super(t),this.renderTimedIcon(this.containerDiv),this.hideButtons(),this.needsReinitialization=!0}hideButtons(){this.gradeBtn.style.display="none",this.helpBtn.style.display="none"}renderTimedIcon(t){var e=document.createElement("div"),i=document.createElement("img");i.src="../_static/clock.png",i.style.width="15px",i.style.height="15px",e.className="timeTip",e.title="",e.appendChild(i),t.prepend(e)}checkCorrectTimed(){switch(this.correct){case!0:return"T";case!1:return"F";default:return null}}hideFeedback(){this.connList.style.display="none"}reinitializeListeners(){}}void 0===window.component_factory&&(window.component_factory={}),window.component_factory.matching=function(t){return t.timed?new r(t):new n.MatchingProblem(t)};var a=i(10662);class o extends s.A{constructor(t){super(t);var e=t.orig;this.origElem=e,this.divid=e.id,this.children=this.origElem.childNodes,this.visited=[],this.timeLimit=0,this.limitedTime=!1,isNaN($(this.origElem).data("time"))||(this.timeLimit=60*parseInt($(this.origElem).data("time"),10),this.startingTime=this.timeLimit,this.limitedTime=!0),this.showFeedback=!0,this.origElem.hasAttribute("data-no-feedback")&&(this.showFeedback=!1),this.origElem.hasAttribute("data-show-feedback")&&("yes"===this.origElem.getAttribute("data-show-feedback")?this.showFeedback=!0:this.showFeedback=!1),this.showResults=!1,this.origElem.hasAttribute("data-result")&&(this.showResults=!1),this.random=!1,this.origElem.hasAttribute("data-random")&&(this.random=!0),this.showTimer=!0,this.origElem.hasAttribute("data-no-timer")&&(this.showTimer=!1),this.origElem.hasAttribute("data-timer")&&("yes"===this.origElem.getAttribute("data-timer")?this.showTimer=!0:this.showTimer=!1),this.fullwidth=!1,this.origElem.hasAttribute("data-fullwidth")&&(this.fullwidth=!0),this.nopause=!1,this.origElem.hasAttribute("data-no-pause")&&(this.nopause=!0),this.origElem.hasAttribute("data-pause")&&("yes"===this.origElem.getAttribute("data-pause")?this.nopause=!1:this.nopause=!0),eBookConfig.enableScratchAC=!1,this.running=0,this.paused=0,this.done=0,this.taken=0,this.score=0,this.incorrect=0,this.correctStr="",this.incorrectStr="",this.skippedStr="",this.skipped=0,this.currentQuestionIndex=0,this.renderedQuestionArray=[],this.getNewChildren(),eBookConfig.enableDebug||(document.body.oncontextmenu=function(){return!1}),this.checkAssessmentStatus().then(function(){this.renderTimedAssess()}.bind(this))}getNewChildren(){this.newChildren=[];let t=this.origElem.querySelectorAll(".runestone");for(var e=0;e1&&this.renderNavControls(),this.renderSubmitButton(),this.renderFeedbackContainer(),this.useRunestoneServices=eBookConfig.useRunestoneServices,$(this.origElem).replaceWith(this.containerDiv),this.styleExamElements(),this.checkServer("timedExam",!0)}disableCutCopyPaste(){document.addEventListener("cut",(function(t){t.preventDefault()})),document.addEventListener("copy",(function(t){t.preventDefault()})),document.addEventListener("paste",(function(t){t.preventDefault()}))}renderContainer(){this.containerDiv=document.createElement("div"),this.fullwidth&&$(this.containerDiv).attr({style:"max-width:none"}),this.containerDiv.classList.add("runestone-sphinx"),this.containerDiv.id=this.divid,this.timedDiv=document.createElement("div"),this.navDiv=document.createElement("div"),$(this.navDiv).attr({style:"text-align:center"}),this.flagDiv=document.createElement("div"),$(this.flagDiv).attr({style:"text-align: center"}),this.switchContainer=document.createElement("div"),this.switchContainer.classList.add("switchcontainer"),this.switchDiv=document.createElement("div"),this.timedDiv.appendChild(this.navDiv),this.timedDiv.appendChild(this.flagDiv),this.timedDiv.appendChild(this.switchContainer),this.switchContainer.appendChild(this.switchDiv),$(this.timedDiv).attr({id:"timed_Test",style:"display:none"})}renderTimer(){this.wrapperDiv=document.createElement("div"),this.timerContainer=document.createElement("P"),this.wrapperDiv.id=this.divid+"-startWrapper",this.timerContainer.id=this.divid+"-output",this.wrapperDiv.appendChild(this.timerContainer),this.showTime()}renderControlButtons(){this.controlDiv=document.createElement("div"),$(this.controlDiv).attr({id:"controls",style:"text-align: center"}),this.startBtn=document.createElement("button"),this.pauseBtn=document.createElement("button"),$(this.startBtn).attr({class:"btn btn-success",id:"start",tabindex:"0",role:"button"}),this.startBtn.textContent="Start",this.startBtn.addEventListener("click",async function(){$(this.finishButton).hide(),$(this.flagButton).show();let t=document.createElement("p");t.innerHTML="Warning: You will not be able to continue the exam if you close this tab, close the window, or navigate away from this page! Make sure you click the Finish Exam button when you are done to submit your work!",this.controlDiv.appendChild(t),t.classList.add("examwarning"),await this.renderTimedQuestion(),this.startAssessment()}.bind(this),!1),$(this.pauseBtn).attr({class:"btn btn-default",id:"pause",disabled:"true",tabindex:"0",role:"button"}),this.pauseBtn.textContent="Pause",this.pauseBtn.addEventListener("click",function(){this.pauseAssessment()}.bind(this),!1),this.taken||this.controlDiv.appendChild(this.startBtn),this.nopause||this.controlDiv.appendChild(this.pauseBtn),this.containerDiv.appendChild(this.wrapperDiv),this.containerDiv.appendChild(this.controlDiv)}renderNavControls(){var t,e;this.pagNavList=document.createElement("ul"),$(this.pagNavList).addClass("pagination"),this.leftContainer=document.createElement("li"),this.leftNavButton=document.createElement("button"),this.leftNavButton.innerHTML="‹ Prev",$(this.leftNavButton).attr("aria-label","Previous"),$(this.leftNavButton).attr("tabindex","0"),$(this.leftNavButton).attr("role","button"),$(this.rightNavButton).attr("id","prev"),$(this.leftNavButton).css("cursor","pointer"),this.leftContainer.appendChild(this.leftNavButton),this.pagNavList.appendChild(this.leftContainer),this.flaggingPlace=document.createElement("ul"),$(this.flaggingPlace).addClass("pagination"),this.flagContainer=document.createElement("li"),this.flagButton=document.createElement("button"),$(this.flagButton).addClass("flagBtn"),this.flagButton.innerHTML="Flag Question",$(this.flagButton).attr("aria-labelledby","Flag"),$(this.flagButton).attr("tabindex","5"),$(this.flagButton).attr("role","button"),$(this.flagButton).attr("id","flag"),$(this.flagButton).css("cursor","pointer"),this.flagContainer.appendChild(this.flagButton),this.flaggingPlace.appendChild(this.flagContainer),this.rightContainer=document.createElement("li"),this.rightNavButton=document.createElement("button"),$(this.rightNavButton).attr("aria-label","Next"),$(this.rightNavButton).attr("tabindex","0"),$(this.rightNavButton).attr("role","button"),$(this.rightNavButton).attr("id","next"),this.rightNavButton.innerHTML="Next ›",$(this.rightNavButton).css("cursor","pointer"),this.rightContainer.appendChild(this.rightNavButton),this.pagNavList.appendChild(this.rightContainer),this.ensureButtonSafety(),this.navDiv.appendChild(this.pagNavList),this.flagDiv.appendChild(this.flaggingPlace),this.break=document.createElement("br"),this.navDiv.appendChild(this.break),this.qNumList=document.createElement("ul"),$(this.qNumList).attr("id","pageNums"),this.qNumWrapperList=document.createElement("ul"),$(this.qNumWrapperList).addClass("pagination");for(var i=0;i ul > li:eq("+this.currentQuestionIndex+")").addClass("broken"),"exam_ended"==this.renderedQuestionArray[this.currentQuestionIndex].state&&$("ul#pageNums > ul > li:eq("+this.currentQuestionIndex+")").addClass("toolate"),this.renderedQuestionArray[this.currentQuestionIndex].question.isAnswered&&($("ul#pageNums > ul > li:eq("+this.currentQuestionIndex+")").addClass("answered"),await this.renderedQuestionArray[this.currentQuestionIndex].question.checkCurrentAnswer(),this.done||await this.renderedQuestionArray[this.currentQuestionIndex].question.logCurrentAnswer())}async handleNextPrev(t){this.taken||await this.navigateAway();var e=$(t.target).text();if(e.match(/Next/)){if($(this.rightContainer).hasClass("disabled"))return;this.currentQuestionIndex++}else if(e.match(/Prev/)){if($(this.leftContainer).hasClass("disabled"))return;this.currentQuestionIndex--}await this.renderTimedQuestion(),this.ensureButtonSafety();for(var i=0;i ul > li:eq("+this.currentQuestionIndex+")").addClass("active"),$("ul#pageNums > ul > li:eq("+this.currentQuestionIndex+")").hasClass("flagcolor")?this.flagButton.innerHTML="Unflag Question":this.flagButton.innerHTML="Flag Question"}async handleFlag(t){$(t.target).text().match(/Flag Question/)?($("ul#pageNums > ul > li:eq("+this.currentQuestionIndex+")").addClass("flagcolor"),this.flagButton.innerHTML="Unflag Question"):($("ul#pageNums > ul > li:eq("+this.currentQuestionIndex+")").removeClass("flagcolor"),this.flagButton.innerHTML="Flag Question")}async handleNumberedNav(t){this.taken||await this.navigateAway();for(var e=0;ethis.renderedQuestionArray.length&&(console.log(`Error: bad index for ${s}`),this.currentQuestionIndex=n),$("ul#pageNums > ul > li:eq("+this.currentQuestionIndex+")").addClass("active"),$("ul#pageNums > ul > li:eq("+this.currentQuestionIndex+")").hasClass("flagcolor")?this.flagButton.innerHTML="Unflag Question":this.flagButton.innerHTML="Flag Question",await this.renderTimedQuestion(),this.ensureButtonSafety()}navBtnListeners(){this.pagNavList.addEventListener("click",this.handleNextPrev.bind(this),!1),this.qNumList.addEventListener("click",this.handleNumberedNav.bind(this),!1)}flagBtnListener(){this.flaggingPlace.addEventListener("click",this.handleFlag.bind(this),!1)}renderSubmitButton(){this.buttonContainer=document.createElement("div"),$(this.buttonContainer).attr({style:"text-align:center"}),this.finishButton=document.createElement("button"),$(this.finishButton).attr({id:"finish",class:"btn btn-primary"}),this.finishButton.textContent="Finish Exam",this.finishButton.addEventListener("click",async function(){let t=this.renderedQuestionArray.filter((t=>!t.question.isAnswered)).length,e=t>0?`You have skipped ${t} question(s).`:"";window.confirm(`${e} Clicking OK means you are ready to submit your answers and are finished with this assessment.`)&&(await this.finishAssessment(),$(this.flagButton).hide())}.bind(this),!1),this.controlDiv.appendChild(this.finishButton),$(this.finishButton).hide(),this.timedDiv.appendChild(this.buttonContainer)}ensureButtonSafety(){0===this.currentQuestionIndex&&(1!=this.renderedQuestionArray.length&&$(this.rightContainer).removeClass("disabled"),$(this.leftContainer).addClass("disabled")),this.currentQuestionIndex>=this.renderedQuestionArray.length-1&&(1!=this.renderedQuestionArray.length&&$(this.leftContainer).removeClass("disabled"),$(this.rightContainer).addClass("disabled")),this.currentQuestionIndex>0&&this.currentQuestionIndexYou have already taken this exam",this.scoreDiv.style.display="block"):(this.scoreDiv.id=this.divid+"results",this.scoreDiv.style.display="none"),this.containerDiv.appendChild(this.scoreDiv)}createRenderedQuestionArray(){for(var t,e=0;e0&&(i=$(i).children("[data-component]")[0],t.orig=i),$(i).is("[data-component]")&&this.renderedQuestionArray.push(t)}}randomizeRQA(){for(var t,e,i=this.renderedQuestionArray.length;0!==i;)e=Math.floor(Math.random()*i),i-=1,t=this.renderedQuestionArray[i],this.renderedQuestionArray[i]=this.renderedQuestionArray[e],this.renderedQuestionArray[e]=t}async renderTimedQuestion(){if(this.currentQuestionIndex>=this.renderedQuestionArray.length)return;let t,e=this.renderedQuestionArray[this.currentQuestionIndex];if("prepared"===e.state||"forreview"===e.state||"broken_exam"===e.state&&e.initAttempts<3){let t=e.orig;if($(t).is("[data-component=selectquestion]"))if(this.done&&"prepared"==e.state)this.renderedQuestionArray[this.currentQuestionIndex].state="exam_ended";else{e.rqa=this.renderedQuestionArray;let t=new a.default(e);this.renderedQuestionArray[this.currentQuestionIndex]={question:t};try{await t.initialize(),"broken_exam"==e.state&&$(`ul#pageNums > ul > li:eq(${this.currentQuestionIndex})`).removeClass("broken")}catch(t){e.state="broken_exam",this.renderedQuestionArray[this.currentQuestionIndex]=e,console.log(`Error initializing question: Details ${t}`)}}else if($(t).is("[data-component]")){let i=$(t).data("component");this.renderedQuestionArray[this.currentQuestionIndex]={question:window.component_factory[i](e),state:e.state}}}else if("broken_exam"===e.state)return;t=this.renderedQuestionArray[this.currentQuestionIndex].question,"forreview"===e.state&&(await t.component_ready_promise,await t.checkCurrentAnswer(),t.renderFeedback(),t.disableInteraction()),this.visited.includes(this.currentQuestionIndex)||(this.visited.push(this.currentQuestionIndex),this.visited.length!==this.renderedQuestionArray.length||this.done||$(this.finishButton).show()),t.containerDiv&&(0==t.containerDiv.classList.contains("runestone")&&t.containerDiv.classList.add("runestone"),$(this.switchDiv).replaceWith(t.containerDiv),this.switchDiv=t.containerDiv),t.needsReinitialization&&t.reinitializeListeners(this.taken)}handlePrevAssessment(){$(this.startBtn).hide(),$(this.pauseBtn).attr("disabled",!0),$(this.finishButton).attr("disabled",!0),this.running=0,this.done=1,this.showResults&&this.showFeedback?($(this.timedDiv).show(),this.restoreAnsweredQuestions()):($(this.pauseBtn).hide(),$(this.timerContainer).hide())}startAssessment(){if(this.taken)this.handlePrevAssessment();else{if($("#relations-next").hide(),$("#relations-prev").hide(),$(this.startBtn).hide(),$(this.pauseBtn).attr("disabled",!1),0===this.running&&0===this.paused){this.running=1,this.lastTime=Date.now(),$(this.timedDiv).show(),this.increment(),this.logBookEvent({event:"timedExam",act:"start",div_id:this.divid});var t=new Date,e={answer:[0,0,this.renderedQuestionArray.length,0],timestamp:t};localStorage.setItem(this.localStorageKey(),JSON.stringify(e))}$(window).on("beforeunload",function(t){if(!this.done)return t.preventDefault(),t.returnValue="Are you sure you want to leave? Your work will be lost! And you will need your instructor to reset the exam!","Are you sure you want to leave? Your work will be lost!"}.bind(this)),window.addEventListener("pagehide",async function(t){this.done||(await this.finishAssessment(),console.log("Exam exited by leaving page"))}.bind(this))}}pauseAssessment(){0===this.done&&(1===this.running?(this.logBookEvent({event:"timedExam",act:"pause",div_id:this.divid}),this.running=0,this.paused=1,this.pauseBtn.innerHTML="Resume",$(this.timedDiv).hide()):(this.logBookEvent({event:"timedExam",act:"resume",div_id:this.divid}),this.running=1,this.paused=0,this.increment(),this.pauseBtn.innerHTML="Pause",$(this.timedDiv).show()))}showTime(){if(this.showTimer){var t=Math.floor(this.timeLimit/60),e=Math.floor(this.timeLimit)%60,i=t,s=e;t<10&&(i="0"+t),e<10&&(s="0"+e);var n="Time Remaining ";this.limitedTime||(n="Time Taken ");var r=n+i+":"+s;if(this.done||this.taken){var a=Math.floor(this.timeTaken/60),o=Math.floor(this.timeTaken%60);a<10&&(a="0"+a),o<10&&(o="0"+o),r="Time taken: "+a+":"+o}this.timerContainer.innerHTML=r;for(var h=document.getElementsByClassName("timeTip"),d=0;d<=h.length-1;d++)h[d].title=r}else $(this.timerContainer).hide()}increment(){1!==this.running||this.taken||setTimeout(function(){let t=Date.now();if(this.limitedTime?this.timeLimit=this.timeLimit-Math.floor((t-this.lastTime)/1e3):this.timeLimit=this.timeLimit+Math.floor((t-this.lastTime)/1e3),this.lastTime=t,localStorage.setItem(eBookConfig.email+":"+this.divid+"-time",this.timeLimit),this.showTime(),this.timeLimit>0)this.increment();else if($(this.startBtn).attr({disabled:"true"}),$(this.finishButton).attr({disabled:"true"}),this.running=0,this.done=1,!this.taken){this.taken=!0;let t=document.createElement("h1");t.innerHTML="Sorry but you ran out of time. Your answers are being submitted",this.controlDiv.appendChild(t),this.finishAssessment()}}.bind(this),1e3)}styleExamElements(){$(this.timerContainer).css({width:"50%",margin:"0 auto","background-color":"#DFF0D8","text-align":"center",border:"2px solid #DFF0D8","border-radius":"25px"}),$(this.scoreDiv).css({width:"50%",margin:"0 auto","background-color":"#DFF0D8","text-align":"center",border:"2px solid #DFF0D8","border-radius":"25px"}),$(".tooltipTime").css({margin:"0",padding:"0","background-color":"black",color:"white"})}async finishAssessment(){$("#relations-next").show(),$("#relations-prev").show(),this.showFeedback||($(this.timedDiv).hide(),$(this.pauseBtn).hide(),$(this.timerContainer).hide()),this.findTimeTaken(),this.running=0,this.done=1,this.taken=1,await this.finalizeProblems(),this.checkScore(),this.displayScore(),this.storeScore(),this.logScore(),$(this.pauseBtn).attr("disabled",!0),this.finishButton.disabled=!0,$(window).off("beforeunload");let t=this.divid;setTimeout((function(){jQuery.ajax({url:eBookConfig.app+"/assignments/student_autograde",type:"POST",dataType:"JSON",data:{assignment_id:t,is_timed:!0},success:function(t){0==t.success?console.log(t.message):console.log("Autograder completed")}})}),2e3)}async finalizeProblems(){var t=this.renderedQuestionArray[this.currentQuestionIndex].question;await t.checkCurrentAnswer(),await t.logCurrentAnswer(),t.renderFeedback(),t.disableInteraction();for(var e=0;e0?this.correctStr=this.correctStr.substring(0,this.correctStr.length-2):this.correctStr="None",this.skippedStr.length>0?this.skippedStr=this.skippedStr.substring(0,this.skippedStr.length-2):this.skippedStr="None",this.incorrectStr.length>0?this.incorrectStr=this.incorrectStr.substring(0,this.incorrectStr.length-2):this.incorrectStr="None"}findTimeTaken(){this.limitedTime?this.timeTaken=this.startingTime-this.timeLimit:this.timeTaken=this.timeLimit}storeScore(){var t=[];t.push(this.score,this.correctStr,this.incorrect,this.incorrectStr,this.skipped,this.skippedStr,this.timeTaken);var e=new Date,i=JSON.stringify({answer:t,timestamp:e});localStorage.setItem(this.localStorageKey(),i)}logScore(){this.logBookEvent({event:"timedExam",act:"finish",div_id:this.divid,correct:this.score,incorrect:this.incorrect,skipped:this.skipped,time_taken:this.timeTaken})}shouldUseServer(t){var e;if(0===localStorage.length)return!0;var i=localStorage.getItem(this.localStorageKey());if(null===i)return!0;try{var s=JSON.parse(i).answer;if(4==s.length){if(t.correct==s[0]&&t.incorrect==s[1]&&t.skipped==s[2]&&t.timeTaken==s[3])return!0}else if(7==s.length&&t.correct==s[0]&&t.incorrect==s[2]&&t.skipped==s[4]&&t.timeTaken==s[6])return!1;e=new Date(JSON.parse(i[1]).timestamp)}catch(t){return console.log(t.message),localStorage.removeItem(this.localStorageKey()),!0}return!(new Date(t.timestamp)0&&null!==localStorage.getItem(this.localStorageKey())?(this.taken=1,this.restoreAnswers("")):this.taken=0}async restoreAnswers(t){var e;if(this.taken=1,""===t)try{e=JSON.parse(localStorage.getItem(this.localStorageKey())).answer}catch(t){return console.log(t.message),localStorage.removeItem(this.localStorageKey()),void(this.taken=0)}else e=[parseInt(t.correct),parseInt(t.incorrect),parseInt(t.skipped),parseInt(t.time_taken),t.reset],this.setLocalStorage(e);if(1==e.length)return this.reset=!0,void(this.taken=0);4==e.length||5==e.length?(this.score=e[0],this.incorrect=e[1],this.skipped=e[2],this.timeTaken=e[3]):7==e.length?(this.score=e[0],this.correctStr=e[1],this.incorrect=e[2],this.incorrectStr=e[3],this.skipped=e[4],this.skippedStr=e[5],this.timeTaken=e[6]):(this.score=0,this.incorrect=0,this.skipped=this.renderedQuestionArray.length,this.timeTaken=0),this.taken&&(this.skipped===this.renderedQuestionArray.length&&(this.showFeedback=!1),this.handlePrevAssessment()),await this.renderTimedQuestion(),this.displayScore(),this.showTime()}setLocalStorage(t){var e={answer:t,timestamp:new Date};localStorage.setItem(this.localStorageKey(),JSON.stringify(e))}displayScore(){if(this.showResults){var t,e="";this.correctStr.length>0||this.incorrectStr.length>0||this.skippedStr.length>0?(e=`Num Correct: ${this.score}. Questions: ${this.correctStr}
Num Wrong: ${this.incorrect}. Questions: ${this.incorrectStr}
Num Skipped: ${this.skipped}. Questions: ${this.skippedStr}
`,t=this.score+this.incorrect+this.skipped,e+="Percent Correct: "+(this.score/t*100).toFixed(2)+"%",$(this.scoreDiv).html(e),this.scoreDiv.style.display="block"):(e=`Num Correct: ${this.score}
Num Wrong: ${this.incorrect}
Num Skipped: ${this.skipped}
`,t=this.score+this.incorrect+this.skipped,e+="Percent Correct: "+(this.score/t*100).toFixed(2)+"%",$(this.scoreDiv).html(e),this.scoreDiv.style.display="block"),this.highlightNumberedList()}else $(this.scoreDiv).html("Thank you for taking the exam. Your answers have been recorded."),this.scoreDiv.style.display="block"}highlightNumberedList(){var t=this.correctStr,e=this.incorrectStr,i=this.skippedStr;t=t.replace(/ /g,"").split(","),e=e.replace(/ /g,"").split(","),i=i.replace(/ /g,"").split(","),$((function(){var s=$("ul#pageNums > ul > li");s.hasClass("answered")&&s.removeClass("answered");for(var n=0;n{i.r(e),i.d(e,{default:()=>a});var s=i(78673),n=i(83057);class r extends s.A{constructor(t){if(super(t),t){var e=t.orig;this.useRunestoneServices=t.useRunestoneServices||eBookConfig.useRunestoneServices,this.origElem=e,this.divid=e.id,this.question=this.origElem.innerHTML,this.optional=!1,this.attachURL=t.attachURL,this.origElem.hasAttribute("data-optional")&&(this.optional=!0),this.origElem.hasAttribute("data-attachment")&&(this.attachment=!0),this.placeholder=this.origElem.getAttribute("data-placeholder")||"Write your answer here",this.renderHTML(),this.caption="shortanswer",this.addCaption("runestone"),this.checkServer("shortanswer",!0),"undefined"!=typeof Prism&&Prism.highlightAllUnder(this.containerDiv),this.attachment&&this.getAttachmentName()}}renderHTML(){this.containerDiv=document.createElement("div"),this.containerDiv.id=this.divid,this.containerDiv.classList.add(...(this.origElem.getAttribute("class")||"").split(" ").filter(Boolean)),this.newForm=document.createElement("form"),this.newForm.id=this.divid+"_journal",this.newForm.name=this.newForm.id,this.newForm.action="",this.containerDiv.appendChild(this.newForm),this.fieldSet=document.createElement("fieldset"),this.newForm.appendChild(this.fieldSet),this.firstLegendDiv=document.createElement("div"),this.firstLegendDiv.innerHTML=this.question,this.firstLegendDiv.classList.add("journal-question"),this.firstLegendDiv.classList.add("exercise-statement"),this.fieldSet.appendChild(this.firstLegendDiv),this.jInputDiv=document.createElement("div"),this.jInputDiv.id=this.divid+"_journal_input",this.fieldSet.appendChild(this.jInputDiv),this.jOptionsDiv=document.createElement("div"),this.jOptionsDiv.classList.add("journal-options"),this.jInputDiv.appendChild(this.jOptionsDiv),this.jTextArea=document.createElement("textarea");let t=this;if(this.jTextArea.onchange=function(){t.isAnswered=!0},this.jTextArea.id=this.divid+"_solution",this.jTextArea.setAttribute("aria-label","textarea"),this.jTextArea.placeholder=this.placeholder,this.jTextArea.style.display="inline",this.jTextArea.style.width="530px",this.jTextArea.classList.add("form-control"),this.jTextArea.rows=4,this.jTextArea.cols=50,this.jOptionsDiv.appendChild(this.jTextArea),this.jTextArea.onchange=function(){this.isAnswered=!0,this.isTimed?this.feedbackDiv.innerHTML="Your answer is automatically saved.":this.feedbackDiv.innerHTML="Your answer has not been saved yet!",this.feedbackDiv.classList.remove("alert-success"),this.feedbackDiv.classList.add("alert","alert-danger")}.bind(this),this.jTextArea.addEventListener("input",(()=>{this.jTextArea.style.height="auto",this.jTextArea.style.height=`${this.jTextArea.scrollHeight}px`,this.renderMath(this.jTextArea.value)})),this.buttonDiv=document.createElement("div"),this.fieldSet.appendChild(this.buttonDiv),this.submitButton=document.createElement("button"),this.submitButton.classList.add("btn","btn-success"),this.submitButton.type="button",this.submitButton.textContent="Save",this.submitButton.onclick=function(){this.checkCurrentAnswer(),this.logCurrentAnswer(),this.renderFeedback()}.bind(this),this.buttonDiv.appendChild(this.submitButton),this.otherOptionsDiv=document.createElement("div"),this.otherOptionsDiv.style.paddingLeft="20px",this.otherOptionsDiv.classList.add("journal-options"),this.fieldSet.appendChild(this.otherOptionsDiv),this.feedbackDiv=document.createElement("div"),this.feedbackDiv.style.width="530px",this.feedbackDiv.style.fontStyle="italic",this.feedbackDiv.id=this.divid+"_feedback",this.feedbackDiv.style.display="none",this.fieldSet.appendChild(this.feedbackDiv),this.attachment){let t=document.createElement("div");if(this.attachDiv=t,this.graderactive){let e=document.createElement("button");e.type="button",e.innerHTML="View Attachment",e.onclick=this.viewFile.bind(this),t.appendChild(e)}else this.fileUpload=document.createElement("input"),this.fileUpload.type="file",this.fileUpload.id=`${this.divid}_fileme`,t.appendChild(this.fileUpload);this.containerDiv.appendChild(t)}this.origElem.replaceWith(this.containerDiv),"undefined"!=typeof MathJax&&this.queueMathJax(this.containerDiv)}renderMath(t){(0,n.u)(t)?(this.renderedAnswer||(this.renderedAnswerLabel=document.createElement("label"),this.renderedAnswerLabel.innerHTML="Rendered Answer:",this.renderedAnswerLabel.id=this.divid+"_rendered_answer_label",this.renderedAnswerLabel.style.display="none",this.fieldSet.appendChild(this.renderedAnswerLabel),this.renderedAnswer=document.createElement("div"),this.renderedAnswer.classList.add("latexoutput"),this.renderedAnswer.setAttribute("aria-labelledby",this.renderedAnswerLabel.id),this.renderedAnswer.setAttribute("aria-live","polite"),this.renderedAnswer.style.display="none",this.fieldSet.appendChild(this.renderedAnswer)),t=(t=(t=t.replace(/\$\$(.*?)\$\$/g,"\\[ $1 \\]")).replace(/\$(.*?)\$/g,"\\( $1 \\)")).replace(/\n/g,"
"),this.renderedAnswer.innerHTML=t,this.renderedAnswer.style.display="block",this.renderedAnswerLabel.style.display="block",this.queueMathJax(this.renderedAnswer)):this.renderedAnswer&&(this.renderedAnswer.style.display="none",this.renderedAnswerLabel.style.display="none")}async checkCurrentAnswer(){let t=document.getElementById(this.divid+"_solution").value;this.renderMath(t),this.setLocalStorage({answer:t,timestamp:new Date})}async logCurrentAnswer(t){let e=document.getElementById(this.divid+"_solution").value;this.renderMath(e),this.setLocalStorage({answer:e,timestamp:new Date});let i={event:"shortanswer",act:e,answer:e,div_id:this.divid};void 0!==t&&(i.sid=t),await this.logBookEvent(i),this.attachment&&await this.uploadFile()}renderFeedback(){this.feedbackDiv.innerHTML="Your answer has been saved.",this.feedbackDiv.classList.remove("alert-danger"),this.feedbackDiv.classList.add("alert","alert-success"),this.feedbackDiv.style.display="block"}setLocalStorage(t){if(!this.graderactive){let e=this.localStorageKey();localStorage.setItem(e,JSON.stringify(t))}}checkLocalStorage(){var t="";if(!this.graderactive&&localStorage.length>0){var e=localStorage.getItem(this.localStorageKey());if(null!==e){try{t=JSON.parse(e).answer}catch(t){return console.log(t.message),void localStorage.removeItem(this.localStorageKey())}let i=document.getElementById(this.divid+"_solution");i&&(i.value=t),this.renderMath(t)}}}restoreAnswers(t){t.answer||(t.answer=""),this.answer=t.answer,this.jTextArea.value=this.answer,this.renderMath(this.answer);let e=document.createElement("p");e.classList.add("shortanswer__timestamp"),this.jInputDiv.appendChild(e);var i;if(i=t.timestamp?new Date(t.timestamp).toLocaleString():"",e.textContent=i,this.jTextArea.style.height="auto",this.jTextArea.style.height=`${this.jTextArea.scrollHeight}px`,t.last_answer){this.current_answer="ontime";let s=document.createElement("button");s.type="button",s.textContent="Show Late Answer",s.classList.add("btn","btn-warning"),s.style.marginLeft="5px",s.addEventListener("click",function(){var n,r;"ontime"===this.current_answer?(this.jTextArea.value=t.last_answer,this.answer=t.last_answer,n=new Date(t.last_timestamp).toLocaleString(),r="Show on-Time Answer",this.current_answer="late"):(this.jTextArea.value=t.answer,this.answer=t.answer,n=i,r="Show Late Answer",this.current_answer="ontime"),this.renderMath(this.answer),e.textContent=`Submitted: ${n}`,s.textContent=r}.bind(this)),this.buttonDiv.appendChild(s)}let s="";void 0!==t.score&&(s=`Score: ${t.score}`),t.comment&&(s+=` -- ${t.comment}`),""!==s&&(this.feedbackDiv.innerHTML=s,this.feedbackDiv.style.display="block",this.feedbackDiv.classList.add("alert","alert-success"))}disableInteraction(){this.jTextArea.disabled=!0}async getAttachmentName(){let t=`/ns/assessment/has_attachment/${this.divid}`;this.sid&&(t+=`?sid=${this.sid}`);const e=await fetch(t);if(!e.ok)return console.error("Error fetching attachment name:",e.statusText),null;const i=await e.json();if(i.detail.hasAttachment){let t=i.detail.hasAttachment;t=t.substring(t.lastIndexOf("/")+1);let e=document.createElement("span");e.innerHTML=`Attachment: ${t}`,this.attachDiv.appendChild(e)}}async uploadFile(){const t=this.fileUpload.files,e=t[0].name.split(".").pop();if(!["jpg","jpeg","png","gif","pdf"].includes(e))return void alert("File type not allowed. Please upload a jpg, jpeg, png, gif, or pdf file.");if(t[0].size>5242880)return void alert("File size exceeds 5MB limit. Please upload a smaller file.");const i=new FormData;this.fileUpload.files.length>0&&(i.append("file",t[0]),fetch(`/ns/logger/upload/${this.divid}`,{method:"POST",body:i}).then((t=>t.json())).then((t=>{console.log(t)})).catch((t=>{console.error(t)})))}viewFile(){if(this.attachURL){const t=window.open("","_blank");if(-1!==this.attachURL.indexOf(".pdf?")){const e=t.document.createElement("object");e.setAttribute("data",this.attachURL),e.setAttribute("type","application/pdf"),e.setAttribute("width","800px"),e.setAttribute("height","1040px"),t.document.body.appendChild(e);let i=t.document.createElement("a");i.setAttribute("href",this.attachURL),i.innerText="Download PDF",e.appendChild(i)}else{const e=t.document.createElement("img");e.setAttribute("src",this.attachURL),e.setAttribute("style","width:100%; height:auto;"),t.document.body.appendChild(e)}}else alert("No attachment for this student.")}}document.addEventListener("runestone:login-complete",(function(){document.querySelectorAll("[data-component=shortanswer]").forEach((function(t){if(!t.closest("[data-component=timedAssessment]"))try{window.componentMap[t.id]=new r({orig:t,useRunestoneServices:eBookConfig.useRunestoneServices})}catch(e){console.log(`Error rendering ShortAnswer Problem ${t.id}\n Details: ${e}`)}}))}));class a extends r{constructor(t){super(t),this.renderTimedIcon(this.containerDiv),this.isTimed=!0,this.hideButtons()}hideButtons(){this.submitButton&&(this.submitButton.style.display="none")}renderTimedIcon(t){var e=document.createElement("div"),i=document.createElement("img");i.src="../_static/clock.png",i.style.width="15px",i.style.height="15px",e.className="timeTip",e.title="",e.appendChild(i),t.insertBefore(e,t.firstChild)}checkCorrectTimed(){return"I"}hideFeedback(){this.feedbackDiv&&(this.feedbackDiv.style.display="none")}}void 0===window.component_factory&&(window.component_factory={}),window.component_factory.shortanswer=function(t){return t.timed?new a(t):new r(t)}}}]); +//# sourceMappingURL=115.648ff4b5650f4c7c.js.map \ No newline at end of file diff --git a/_static/115.648ff4b5650f4c7c.js.gz b/_static/115.648ff4b5650f4c7c.js.gz new file mode 100644 index 0000000..e56520e Binary files /dev/null and b/_static/115.648ff4b5650f4c7c.js.gz differ diff --git a/_static/115.648ff4b5650f4c7c.js.map b/_static/115.648ff4b5650f4c7c.js.map new file mode 100644 index 0000000..4f5259a --- /dev/null +++ b/_static/115.648ff4b5650f4c7c.js.map @@ -0,0 +1 @@ +{"version":3,"file":"115.648ff4b5650f4c7c.js","mappings":"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","sources":["webpack://WebComponents/./runestone/matching/js/timed_matching.js","webpack://WebComponents/./runestone/timed/js/timed.js","webpack://WebComponents/./runestone/shortanswer/js/shortanswer.js","webpack://WebComponents/./runestone/shortanswer/js/timed_shortanswer.js"],"sourcesContent":["import {MatchingProblem} from \"./matching.js\";\n\nexport default class TimedMatching extends MatchingProblem {\n constructor(opts) {\n super(opts);\n this.renderTimedIcon(this.containerDiv);\n this.hideButtons();\n this.needsReinitialization = true;\n }\n\n hideButtons() {\n this.gradeBtn.style.display = \"none\";\n this.helpBtn.style.display = \"none\";\n }\n\n renderTimedIcon(component) {\n // renders the clock icon on timed components. The component parameter\n // is the element that the icon should be appended to.\n var timeIconDiv = document.createElement(\"div\");\n var timeIcon = document.createElement(\"img\");\n timeIcon.src = \"../_static/clock.png\";\n timeIcon.style.width = \"15px\";\n timeIcon.style.height = \"15px\";\n\n timeIconDiv.className = \"timeTip\";\n timeIconDiv.title = \"\";\n timeIconDiv.appendChild(timeIcon);\n component.prepend(timeIconDiv);\n }\n\n checkCorrectTimed() {\n // Returns if the question was correct, incorrect, or skipped (return null in the last case)\n switch (this.correct) {\n case true:\n return \"T\";\n case false:\n return \"F\";\n default:\n return null;\n }\n }\n\n hideFeedback() {\n this.connList.style.display = \"none\";\n }\n\n reinitializeListeners() {\n // maybe need to reinitialize the listeners\n }\n}\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\nwindow.component_factory.matching = function (opts) {\n if (opts.timed) {\n return new TimedMatching(opts);\n }\n return new MatchingProblem(opts);\n};\n","/*==========================================\n======== Master timed.js =========\n============================================\n=== This file contains the JS for ===\n=== the Runestone timed component. ===\n============================================\n=== Created By ===\n=== Kirby Olson ===\n=== 6/11/15 ===\n==========================================*/\n\"use strict\";\n\nimport RunestoneBase from \"../../common/js/runestonebase.js\";\nimport TimedFITB from \"../../fitb/js/timedfitb.js\";\nimport TimedMC from \"../../mchoice/js/timedmc.js\";\nimport TimedShortAnswer from \"../../shortanswer/js/timed_shortanswer.js\";\nimport ACFactory from \"../../activecode/js/acfactory.js\";\nimport TimedClickableArea from \"../../clickableArea/js/timedclickable\";\nimport TimedDragNDrop from \"../../dragndrop/js/timeddnd.js\";\nimport TimedParsons from \"../../parsons/js/timedparsons.js\";\nimport TimedMatching from \"../../matching/js/timed_matching.js\";\nimport SelectOne from \"../../selectquestion/js/selectone\";\nimport \"../css/timed.less\";\n\n// Timed constructor\nexport default class Timed extends RunestoneBase {\n constructor(opts) {\n super(opts);\n var orig = opts.orig;\n this.origElem = orig; // the entire element of this timed assessment and all of its children\n this.divid = orig.id;\n this.children = this.origElem.childNodes;\n this.visited = [];\n this.timeLimit = 0;\n this.limitedTime = false;\n if (!isNaN($(this.origElem).data(\"time\"))) {\n this.timeLimit = parseInt($(this.origElem).data(\"time\"), 10) * 60; // time in seconds to complete the exam\n this.startingTime = this.timeLimit;\n this.limitedTime = true;\n }\n this.showFeedback = true;\n if (this.origElem.hasAttribute(\"data-no-feedback\")) {\n this.showFeedback = false;\n }\n // check for attribute data-show-feedback = yes\n if (this.origElem.hasAttribute(\"data-show-feedback\")) {\n if (this.origElem.getAttribute(\"data-show-feedback\") === \"yes\") {\n this.showFeedback = true;\n } else {\n this.showFeedback = false;\n }\n }\n this.showResults = false;\n if (this.origElem.hasAttribute(\"data-result\")) {\n this.showResults = false;\n }\n this.random = false;\n if (this.origElem.hasAttribute(\"data-random\")) {\n this.random = true;\n }\n this.showTimer = true;\n if (this.origElem.hasAttribute(\"data-no-timer\")) {\n this.showTimer = false;\n }\n if (this.origElem.hasAttribute(\"data-timer\")) {\n if (\n this.origElem.getAttribute(\"data-timer\") === \"yes\"\n ) {\n this.showTimer = true;\n } else {\n this.showTimer = false;\n }\n }\n this.fullwidth = false;\n if (this.origElem.hasAttribute(\"data-fullwidth\")) {\n this.fullwidth = true;\n }\n this.nopause = false;\n if (this.origElem.hasAttribute(\"data-no-pause\")) {\n this.nopause = true;\n }\n if (this.origElem.hasAttribute(\"data-pause\")) {\n if (this.origElem.getAttribute(\"data-pause\") === \"yes\") {\n this.nopause = false;\n } else {\n this.nopause = true;\n }\n }\n eBookConfig.enableScratchAC = false;\n this.running = 0;\n this.paused = 0;\n this.done = 0;\n this.taken = 0;\n this.score = 0;\n this.incorrect = 0;\n this.correctStr = \"\";\n this.incorrectStr = \"\";\n this.skippedStr = \"\";\n this.skipped = 0;\n this.currentQuestionIndex = 0; // Which question is currently displaying on the page\n this.renderedQuestionArray = []; // list of all problems\n this.getNewChildren();\n // One small step to eliminate students from doing view source\n // this won't stop anyone with determination but may prevent casual peeking\n if (!eBookConfig.enableDebug) {\n document.body.oncontextmenu = function () {\n return false;\n };\n }\n this.checkAssessmentStatus().then(\n function () {\n this.renderTimedAssess();\n }.bind(this)\n );\n }\n\n getNewChildren() {\n this.newChildren = [];\n let runestoneChildren = this.origElem.querySelectorAll(\".runestone\");\n for (var i = 0; i < runestoneChildren.length; i++) {\n this.newChildren.push(runestoneChildren[i]);\n }\n }\n\n async checkAssessmentStatus() {\n // Has the user taken this exam? Inquiring minds want to know\n // If a user has not taken this exam then we want to make sure\n // that if a question has been seen by the student before we do\n // not populate previous answers.\n let sendInfo = {\n div_id: this.divid,\n course_name: eBookConfig.course,\n };\n console.log(sendInfo);\n if (eBookConfig.useRunestoneServices) {\n let request = new Request(\n `${eBookConfig.new_server_prefix}/assessment/tookTimedAssessment`,\n {\n method: \"POST\",\n headers: this.jsonHeaders,\n body: JSON.stringify(sendInfo),\n }\n );\n let response = await fetch(request);\n let data = await response.json();\n data = data.detail;\n this.taken = data.tookAssessment;\n this.assessmentTaken = this.taken;\n if (!this.taken) {\n localStorage.clear();\n }\n console.log(\"done with check status\");\n return response;\n } else {\n this.taken = false;\n this.assessmentTaken = false;\n return Promise.resolve();\n }\n }\n\n /*===============================\n === Generating new Timed HTML ===\n ===============================*/\n async renderTimedAssess() {\n console.log(\"rendering timed \");\n // create renderedQuestionArray returns a promise\n //\n this.createRenderedQuestionArray();\n if (this.random) {\n this.randomizeRQA();\n }\n this.renderContainer();\n this.renderTimer();\n await this.renderControlButtons();\n // If we decide to disable cut/copy/paste, uncomment the line below \n // this.disableCutCopyPaste();\n this.containerDiv.appendChild(this.timedDiv); // This can't be appended in renderContainer because then it renders above the timer and control buttons.\n if (this.renderedQuestionArray.length > 1) this.renderNavControls();\n this.renderSubmitButton();\n this.renderFeedbackContainer();\n this.useRunestoneServices = eBookConfig.useRunestoneServices;\n // Replace intermediate HTML with rendered HTML\n $(this.origElem).replaceWith(this.containerDiv);\n // check if already taken and if so show results\n this.styleExamElements(); // rename to renderPossibleResults\n this.checkServer(\"timedExam\", true);\n }\n\n disableCutCopyPaste() {\n document.addEventListener(\"cut\", function (e) {\n e.preventDefault();\n });\n document.addEventListener(\"copy\", function (e) {\n e.preventDefault();\n });\n document.addEventListener(\"paste\", function (e) {\n e.preventDefault();\n });\n }\n\n renderContainer() {\n this.containerDiv = document.createElement(\"div\"); // container for the entire Timed Component\n if (this.fullwidth) {\n // allow the container to fill the width - barb\n $(this.containerDiv).attr({\n style: \"max-width:none\",\n });\n }\n this.containerDiv.classList.add(\"runestone-sphinx\");\n this.containerDiv.id = this.divid;\n this.timedDiv = document.createElement(\"div\"); // div that will hold the questions for the timed assessment\n this.navDiv = document.createElement(\"div\"); // For navigation control\n $(this.navDiv).attr({\n style: \"text-align:center\",\n });\n this.flagDiv = document.createElement(\"div\"); // div that will hold the \"Flag Question\" button\n $(this.flagDiv).attr({\n style: \"text-align: center\",\n });\n this.switchContainer = document.createElement(\"div\");\n this.switchContainer.classList.add(\"switchcontainer\");\n this.switchDiv = document.createElement(\"div\"); // is replaced by the questions\n this.timedDiv.appendChild(this.navDiv);\n this.timedDiv.appendChild(this.flagDiv); // add flagDiv to timedDiv, which holds components for navigation and questions for timed assessment\n this.timedDiv.appendChild(this.switchContainer);\n this.switchContainer.appendChild(this.switchDiv);\n $(this.timedDiv).attr({\n id: \"timed_Test\",\n style: \"display:none\",\n });\n }\n\n renderTimer() {\n this.wrapperDiv = document.createElement(\"div\");\n this.timerContainer = document.createElement(\"P\");\n this.wrapperDiv.id = this.divid + \"-startWrapper\";\n this.timerContainer.id = this.divid + \"-output\";\n this.wrapperDiv.appendChild(this.timerContainer);\n this.showTime();\n }\n\n renderControlButtons() {\n this.controlDiv = document.createElement(\"div\");\n $(this.controlDiv).attr({\n id: \"controls\",\n style: \"text-align: center\",\n });\n this.startBtn = document.createElement(\"button\");\n this.pauseBtn = document.createElement(\"button\");\n $(this.startBtn).attr({\n class: \"btn btn-success\",\n id: \"start\",\n tabindex: \"0\",\n role: \"button\",\n });\n this.startBtn.textContent = \"Start\";\n this.startBtn.addEventListener(\n \"click\",\n async function () {\n $(this.finishButton).hide(); // hide the finish button for now\n $(this.flagButton).show();\n let mess = document.createElement(\"p\");\n mess.innerHTML =\n \"Warning: You will not be able to continue the exam if you close this tab, close the window, or navigate away from this page! Make sure you click the Finish Exam button when you are done to submit your work!\";\n this.controlDiv.appendChild(mess);\n mess.classList.add(\"examwarning\");\n await this.renderTimedQuestion();\n this.startAssessment();\n }.bind(this),\n false\n );\n $(this.pauseBtn).attr({\n class: \"btn btn-default\",\n id: \"pause\",\n disabled: \"true\",\n tabindex: \"0\",\n role: \"button\",\n });\n this.pauseBtn.textContent = \"Pause\";\n this.pauseBtn.addEventListener(\n \"click\",\n function () {\n this.pauseAssessment();\n }.bind(this),\n false\n );\n if (!this.taken) {\n this.controlDiv.appendChild(this.startBtn);\n }\n if (!this.nopause) {\n this.controlDiv.appendChild(this.pauseBtn);\n }\n this.containerDiv.appendChild(this.wrapperDiv);\n this.containerDiv.appendChild(this.controlDiv);\n }\n\n renderNavControls() {\n // making \"Prev\" button\n this.pagNavList = document.createElement(\"ul\");\n $(this.pagNavList).addClass(\"pagination\");\n this.leftContainer = document.createElement(\"li\");\n this.leftNavButton = document.createElement(\"button\");\n this.leftNavButton.innerHTML = \"‹ Prev\";\n $(this.leftNavButton).attr(\"aria-label\", \"Previous\");\n $(this.leftNavButton).attr(\"tabindex\", \"0\");\n $(this.leftNavButton).attr(\"role\", \"button\");\n $(this.rightNavButton).attr(\"id\", \"prev\");\n $(this.leftNavButton).css(\"cursor\", \"pointer\");\n this.leftContainer.appendChild(this.leftNavButton);\n this.pagNavList.appendChild(this.leftContainer);\n // making \"Flag Question\" button\n this.flaggingPlace = document.createElement(\"ul\");\n $(this.flaggingPlace).addClass(\"pagination\");\n this.flagContainer = document.createElement(\"li\");\n this.flagButton = document.createElement(\"button\");\n $(this.flagButton).addClass(\"flagBtn\");\n this.flagButton.innerHTML = \"Flag Question\"; // name on button\n $(this.flagButton).attr(\"aria-labelledby\", \"Flag\");\n $(this.flagButton).attr(\"tabindex\", \"5\");\n $(this.flagButton).attr(\"role\", \"button\");\n $(this.flagButton).attr(\"id\", \"flag\");\n $(this.flagButton).css(\"cursor\", \"pointer\");\n this.flagContainer.appendChild(this.flagButton); // adding button to container\n this.flaggingPlace.appendChild(this.flagContainer); // adding container to flaggingPlace\n // making \"Next\" button\n this.rightContainer = document.createElement(\"li\");\n this.rightNavButton = document.createElement(\"button\");\n $(this.rightNavButton).attr(\"aria-label\", \"Next\");\n $(this.rightNavButton).attr(\"tabindex\", \"0\");\n $(this.rightNavButton).attr(\"role\", \"button\");\n $(this.rightNavButton).attr(\"id\", \"next\");\n this.rightNavButton.innerHTML = \"Next ›\";\n $(this.rightNavButton).css(\"cursor\", \"pointer\");\n this.rightContainer.appendChild(this.rightNavButton);\n this.pagNavList.appendChild(this.rightContainer);\n this.ensureButtonSafety();\n this.navDiv.appendChild(this.pagNavList);\n this.flagDiv.appendChild(this.flaggingPlace); // adds flaggingPlace to the flagDiv\n this.break = document.createElement(\"br\");\n this.navDiv.appendChild(this.break);\n // render the question number jump buttons\n this.qNumList = document.createElement(\"ul\");\n $(this.qNumList).attr(\"id\", \"pageNums\");\n this.qNumWrapperList = document.createElement(\"ul\");\n $(this.qNumWrapperList).addClass(\"pagination\");\n var tmpLi, tmpA;\n for (var i = 0; i < this.renderedQuestionArray.length; i++) {\n tmpLi = document.createElement(\"li\");\n tmpA = document.createElement(\"a\");\n tmpA.innerHTML = i + 1;\n $(tmpA).css(\"cursor\", \"pointer\");\n if (i === 0) {\n $(tmpLi).addClass(\"active\");\n }\n tmpLi.appendChild(tmpA);\n this.qNumWrapperList.appendChild(tmpLi);\n }\n this.qNumList.appendChild(this.qNumWrapperList);\n this.navDiv.appendChild(this.qNumList);\n this.navBtnListeners();\n this.flagBtnListener(); // listens for click on flag button\n $(this.flagButton).hide();\n }\n\n // when moving off of a question in an active exam:\n // 1. show that the question has been seen, or mark it broken if it is in error.\n // 2. check and log the current answer\n async navigateAway() {\n if (\n this.renderedQuestionArray[this.currentQuestionIndex].state ==\n \"broken_exam\"\n ) {\n $(\n \"ul#pageNums > ul > li:eq(\" + this.currentQuestionIndex + \")\"\n ).addClass(\"broken\");\n }\n if (\n this.renderedQuestionArray[this.currentQuestionIndex].state ==\n \"exam_ended\"\n ) {\n $(\n \"ul#pageNums > ul > li:eq(\" + this.currentQuestionIndex + \")\"\n ).addClass(\"toolate\");\n }\n if (\n this.renderedQuestionArray[this.currentQuestionIndex].question\n .isAnswered\n ) {\n $(\n \"ul#pageNums > ul > li:eq(\" + this.currentQuestionIndex + \")\"\n ).addClass(\"answered\");\n await this.renderedQuestionArray[\n this.currentQuestionIndex\n ].question.checkCurrentAnswer();\n if (!this.done) {\n await this.renderedQuestionArray[\n this.currentQuestionIndex\n ].question.logCurrentAnswer();\n }\n }\n }\n async handleNextPrev(event) {\n if (!this.taken) {\n await this.navigateAway();\n }\n var target = $(event.target).text();\n if (target.match(/Next/)) {\n // checks given text to match \"Next\"\n if ($(this.rightContainer).hasClass(\"disabled\")) {\n return;\n }\n this.currentQuestionIndex++;\n } else if (target.match(/Prev/)) {\n // checks given text to match \"Prev\"\n if ($(this.leftContainer).hasClass(\"disabled\")) {\n return;\n }\n this.currentQuestionIndex--;\n }\n await this.renderTimedQuestion();\n this.ensureButtonSafety();\n for (var i = 0; i < this.qNumList.childNodes.length; i++) {\n for (\n var j = 0;\n j < this.qNumList.childNodes[i].childNodes.length;\n j++\n ) {\n $(this.qNumList.childNodes[i].childNodes[j]).removeClass(\n \"active\"\n );\n }\n }\n $(\n \"ul#pageNums > ul > li:eq(\" + this.currentQuestionIndex + \")\"\n ).addClass(\"active\");\n if (\n $(\n \"ul#pageNums > ul > li:eq(\" + this.currentQuestionIndex + \")\"\n ).hasClass(\"flagcolor\")\n ) {\n // checking for class\n this.flagButton.innerHTML = \"Unflag Question\"; // changes text on button\n } else {\n this.flagButton.innerHTML = \"Flag Question\"; // changes text on button\n }\n }\n\n async handleFlag(event) {\n // called when flag button is clicked\n var target = $(event.target).text();\n if (target.match(/Flag Question/)) {\n $(\n \"ul#pageNums > ul > li:eq(\" + this.currentQuestionIndex + \")\"\n ).addClass(\"flagcolor\"); // class will change color of question block\n this.flagButton.innerHTML = \"Unflag Question\";\n } else {\n $(\n \"ul#pageNums > ul > li:eq(\" + this.currentQuestionIndex + \")\"\n ).removeClass(\"flagcolor\"); // will restore current color of question block\n this.flagButton.innerHTML = \"Flag Question\"; // also sets name back\n }\n }\n\n async handleNumberedNav(event) {\n if (!this.taken) {\n await this.navigateAway();\n }\n for (var i = 0; i < this.qNumList.childNodes.length; i++) {\n for (\n var j = 0;\n j < this.qNumList.childNodes[i].childNodes.length;\n j++\n ) {\n $(this.qNumList.childNodes[i].childNodes[j]).removeClass(\n \"active\"\n );\n }\n }\n\n var target = $(event.target).text();\n let oldIndex = this.currentQuestionIndex;\n this.currentQuestionIndex = parseInt(target) - 1;\n if (this.currentQuestionIndex > this.renderedQuestionArray.length) {\n console.log(`Error: bad index for ${target}`);\n this.currentQuestionIndex = oldIndex;\n }\n $(\n \"ul#pageNums > ul > li:eq(\" + this.currentQuestionIndex + \")\"\n ).addClass(\"active\");\n if (\n $(\n \"ul#pageNums > ul > li:eq(\" + this.currentQuestionIndex + \")\" // checking for flagcolor class\n ).hasClass(\"flagcolor\")\n ) {\n this.flagButton.innerHTML = \"Unflag Question\";\n } else {\n this.flagButton.innerHTML = \"Flag Question\";\n }\n await this.renderTimedQuestion();\n this.ensureButtonSafety();\n }\n\n // set up events for navigation\n navBtnListeners() {\n // Next and Prev Listener\n this.pagNavList.addEventListener(\n \"click\",\n this.handleNextPrev.bind(this),\n false\n );\n\n // Numbered Listener\n this.qNumList.addEventListener(\n \"click\",\n this.handleNumberedNav.bind(this),\n false\n );\n }\n\n // set up event for flag\n flagBtnListener() {\n this.flaggingPlace.addEventListener(\n \"click\",\n this.handleFlag.bind(this), // calls this to take action\n false\n );\n }\n\n renderSubmitButton() {\n this.buttonContainer = document.createElement(\"div\");\n $(this.buttonContainer).attr({\n style: \"text-align:center\",\n });\n this.finishButton = document.createElement(\"button\");\n $(this.finishButton).attr({\n id: \"finish\",\n class: \"btn btn-primary\",\n });\n this.finishButton.textContent = \"Finish Exam\";\n this.finishButton.addEventListener(\n \"click\",\n async function () {\n let skipped =\n this.renderedQuestionArray.filter((x) => !x.question.isAnswered).length;\n let skipstr = skipped > 0 ? `You have skipped ${skipped} question(s).` : \"\";\n if (\n window.confirm(\n `${skipstr} Clicking OK means you are ready to submit your answers and are finished with this assessment.`\n )\n ) {\n await this.finishAssessment();\n $(this.flagButton).hide();\n }\n }.bind(this),\n false\n );\n this.controlDiv.appendChild(this.finishButton);\n $(this.finishButton).hide();\n this.timedDiv.appendChild(this.buttonContainer);\n }\n ensureButtonSafety() {\n if (this.currentQuestionIndex === 0) {\n if (this.renderedQuestionArray.length != 1) {\n $(this.rightContainer).removeClass(\"disabled\");\n }\n $(this.leftContainer).addClass(\"disabled\");\n }\n if (\n this.currentQuestionIndex >=\n this.renderedQuestionArray.length - 1\n ) {\n if (this.renderedQuestionArray.length != 1) {\n $(this.leftContainer).removeClass(\"disabled\");\n }\n $(this.rightContainer).addClass(\"disabled\");\n }\n if (\n this.currentQuestionIndex > 0 &&\n this.currentQuestionIndex < this.renderedQuestionArray.length - 1\n ) {\n $(this.rightContainer).removeClass(\"disabled\");\n $(this.leftContainer).removeClass(\"disabled\");\n }\n }\n renderFeedbackContainer() {\n this.scoreDiv = document.createElement(\"P\");\n if (this.taken) {\n this.scoreDiv.innerHTML = \"

You have already taken this exam

\";\n this.scoreDiv.style.display = \"block\";\n } else {\n this.scoreDiv.id = this.divid + \"results\";\n this.scoreDiv.style.display = \"none\";\n }\n this.containerDiv.appendChild(this.scoreDiv);\n }\n\n createRenderedQuestionArray() {\n // this finds all the assess questions in this timed assessment\n // We need to make a list of all the questions up front so we can set up navigation\n // but we do not want to render the questions until the student has navigated\n // Also adds them to this.renderedQuestionArray\n\n // todo: This needs to be updated to account for the runestone div wrapper.\n\n // To accommodate the selectquestion type -- which is async! we need to wrap\n // all of this in a promise, so that we don't continue to render the timed\n // exam until all of the questions have been realized.\n var opts;\n for (var i = 0; i < this.newChildren.length; i++) {\n var tmpChild = this.newChildren[i];\n opts = {\n state: \"prepared\",\n orig: tmpChild,\n question: {},\n useRunestoneServices: eBookConfig.useRunestoneServices,\n timed: true,\n assessmentTaken: this.taken,\n timedWrapper: this.divid,\n initAttempts: 0,\n };\n if ($(tmpChild).children(\"[data-component]\").length > 0) {\n tmpChild = $(tmpChild).children(\"[data-component]\")[0];\n opts.orig = tmpChild;\n }\n if ($(tmpChild).is(\"[data-component]\")) {\n this.renderedQuestionArray.push(opts);\n }\n }\n }\n\n randomizeRQA() {\n var currentIndex = this.renderedQuestionArray.length,\n temporaryValue,\n randomIndex;\n // While there remain elements to shuffle...\n while (currentIndex !== 0) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n // And swap it with the current element.\n temporaryValue = this.renderedQuestionArray[currentIndex];\n this.renderedQuestionArray[currentIndex] =\n this.renderedQuestionArray[randomIndex];\n this.renderedQuestionArray[randomIndex] = temporaryValue;\n }\n }\n\n async renderTimedQuestion() {\n if (this.currentQuestionIndex >= this.renderedQuestionArray.length) {\n // sometimes the user clicks in the event area for the qNumList\n // But misses a number in that case the text is the concatenation\n // of all the numbers in the list!\n return;\n }\n // check the renderedQuestionArray to see if it has been rendered.\n let opts = this.renderedQuestionArray[this.currentQuestionIndex];\n let currentQuestion;\n if (\n opts.state === \"prepared\" ||\n opts.state === \"forreview\" ||\n (opts.state === \"broken_exam\" && opts.initAttempts < 3)\n ) {\n let tmpChild = opts.orig;\n if ($(tmpChild).is(\"[data-component=selectquestion]\")) {\n if (this.done && opts.state == \"prepared\") {\n this.renderedQuestionArray[\n this.currentQuestionIndex\n ].state = \"exam_ended\";\n } else {\n // SelectOne is async and will replace itself in this array with\n // the actual selected question\n opts.rqa = this.renderedQuestionArray;\n let newq = new SelectOne(opts);\n this.renderedQuestionArray[this.currentQuestionIndex] = {\n question: newq,\n };\n try {\n await newq.initialize();\n if (opts.state == \"broken_exam\") {\n // remove the broken class from this question if we get here.\n $(\n `ul#pageNums > ul > li:eq(${this.currentQuestionIndex})`\n ).removeClass(\"broken\");\n }\n } catch (e) {\n opts.state = \"broken_exam\";\n this.renderedQuestionArray[this.currentQuestionIndex] =\n opts;\n console.log(\n `Error initializing question: Details ${e}`\n );\n }\n }\n } else if ($(tmpChild).is(\"[data-component]\")) {\n let componentKind = $(tmpChild).data(\"component\");\n this.renderedQuestionArray[this.currentQuestionIndex] = {\n question: window.component_factory[componentKind](opts),\n state: opts.state,\n };\n }\n } else if (opts.state === \"broken_exam\") {\n return;\n }\n\n currentQuestion =\n this.renderedQuestionArray[this.currentQuestionIndex].question;\n if (opts.state === \"forreview\") {\n await currentQuestion.component_ready_promise;\n await currentQuestion.checkCurrentAnswer();\n currentQuestion.renderFeedback();\n currentQuestion.disableInteraction();\n }\n\n if (!this.visited.includes(this.currentQuestionIndex)) {\n this.visited.push(this.currentQuestionIndex);\n if (\n this.visited.length === this.renderedQuestionArray.length &&\n !this.done\n ) {\n $(this.finishButton).show();\n }\n }\n\n if (currentQuestion.containerDiv) {\n if (\n currentQuestion.containerDiv.classList.contains(\"runestone\") ==\n false\n ) {\n currentQuestion.containerDiv.classList.add(\"runestone\");\n }\n $(this.switchDiv).replaceWith(currentQuestion.containerDiv);\n this.switchDiv = currentQuestion.containerDiv;\n }\n\n // If the timed component has listeners, those might need to be reinitialized\n // This flag will only be set in the elements that need it--it will be undefined in the others and thus evaluate to false\n if (currentQuestion.needsReinitialization) {\n currentQuestion.reinitializeListeners(this.taken);\n }\n }\n\n /*=================================\n === Timer and control Functions ===\n =================================*/\n handlePrevAssessment() {\n $(this.startBtn).hide();\n $(this.pauseBtn).attr(\"disabled\", true);\n $(this.finishButton).attr(\"disabled\", true);\n this.running = 0;\n this.done = 1;\n // showFeedback sand showResults should both be true before we show the\n // questions and their state of correctness.\n if (this.showResults && this.showFeedback) {\n $(this.timedDiv).show();\n this.restoreAnsweredQuestions(); // do not log these results\n } else {\n $(this.pauseBtn).hide();\n $(this.timerContainer).hide();\n }\n }\n startAssessment() {\n if (!this.taken) {\n $(\"#relations-next\").hide(); // hide the next page button for now\n $(\"#relations-prev\").hide(); // hide the previous button for now\n $(this.startBtn).hide();\n $(this.pauseBtn).attr(\"disabled\", false);\n if (this.running === 0 && this.paused === 0) {\n this.running = 1;\n this.lastTime = Date.now();\n $(this.timedDiv).show();\n this.increment();\n this.logBookEvent({\n event: \"timedExam\",\n act: \"start\",\n div_id: this.divid,\n });\n var timeStamp = new Date();\n var storageObj = {\n answer: [0, 0, this.renderedQuestionArray.length, 0],\n timestamp: timeStamp,\n };\n localStorage.setItem(\n this.localStorageKey(),\n JSON.stringify(storageObj)\n );\n }\n $(window).on(\n \"beforeunload\",\n function (event) {\n // this actual value gets ignored by newer browsers\n if (this.done) {\n return;\n }\n event.preventDefault();\n event.returnValue =\n \"Are you sure you want to leave? Your work will be lost! And you will need your instructor to reset the exam!\";\n return \"Are you sure you want to leave? Your work will be lost!\";\n }.bind(this)\n );\n window.addEventListener(\n \"pagehide\",\n async function (event) {\n if (!this.done) {\n await this.finishAssessment();\n console.log(\"Exam exited by leaving page\");\n }\n }.bind(this)\n );\n } else {\n this.handlePrevAssessment();\n }\n }\n pauseAssessment() {\n if (this.done === 0) {\n if (this.running === 1) {\n this.logBookEvent({\n event: \"timedExam\",\n act: \"pause\",\n div_id: this.divid,\n });\n this.running = 0;\n this.paused = 1;\n this.pauseBtn.innerHTML = \"Resume\";\n $(this.timedDiv).hide();\n } else {\n this.logBookEvent({\n event: \"timedExam\",\n act: \"resume\",\n div_id: this.divid,\n });\n this.running = 1;\n this.paused = 0;\n this.increment();\n this.pauseBtn.innerHTML = \"Pause\";\n $(this.timedDiv).show();\n }\n }\n }\n\n showTime() {\n if (this.showTimer) {\n var mins = Math.floor(this.timeLimit / 60);\n var secs = Math.floor(this.timeLimit) % 60;\n var minsString = mins;\n var secsString = secs;\n if (mins < 10) {\n minsString = \"0\" + mins;\n }\n if (secs < 10) {\n secsString = \"0\" + secs;\n }\n var beginning = \"Time Remaining \";\n if (!this.limitedTime) {\n beginning = \"Time Taken \";\n }\n var timeString = beginning + minsString + \":\" + secsString;\n if (this.done || this.taken) {\n var minutes = Math.floor(this.timeTaken / 60);\n var seconds = Math.floor(this.timeTaken % 60);\n if (minutes < 10) {\n minutes = \"0\" + minutes;\n }\n if (seconds < 10) {\n seconds = \"0\" + seconds;\n }\n timeString = \"Time taken: \" + minutes + \":\" + seconds;\n }\n this.timerContainer.innerHTML = timeString;\n var timeTips = document.getElementsByClassName(\"timeTip\");\n for (var i = 0; i <= timeTips.length - 1; i++) {\n timeTips[i].title = timeString;\n }\n } else {\n $(this.timerContainer).hide();\n }\n }\n\n increment() {\n // if running (not paused) and not taken\n if (this.running === 1 && !this.taken) {\n setTimeout(\n function () {\n // When a browser loses focus, setTimeout may not be called on the\n // schedule expected. Browsers are free to save power by lengthening\n // the interval to some longer time. So we cannot just subtract 1\n // from the timeLimit we need to measure the elapsed time from the last\n // call to the current call and subtract that number of seconds.\n let currentTime = Date.now();\n if (this.limitedTime) {\n // If there's a time limit, count down to 0\n this.timeLimit =\n this.timeLimit -\n Math.floor((currentTime - this.lastTime) / 1000);\n } else {\n // Else count up to keep track of how long it took to complete\n this.timeLimit =\n this.timeLimit +\n Math.floor((currentTime - this.lastTime) / 1000);\n }\n this.lastTime = currentTime;\n localStorage.setItem(\n eBookConfig.email + \":\" + this.divid + \"-time\",\n this.timeLimit\n );\n this.showTime();\n if (this.timeLimit > 0) {\n this.increment();\n // ran out of time\n } else {\n $(this.startBtn).attr({\n disabled: \"true\",\n });\n $(this.finishButton).attr({\n disabled: \"true\",\n });\n this.running = 0;\n this.done = 1;\n if (!this.taken) {\n this.taken = true;\n // embed the message in the page -- an alert actually prevents\n // the answers from being submitted and if a student closes their\n // laptop then the answers will not be submitted ever! Even when they\n // reopen the laptop their session cookie is likely invalid.\n let mess = document.createElement(\"h1\");\n mess.innerHTML =\n \"Sorry but you ran out of time. Your answers are being submitted\";\n this.controlDiv.appendChild(mess);\n this.finishAssessment();\n }\n }\n }.bind(this),\n 1000\n );\n }\n }\n\n styleExamElements() {\n // Checks if this exam has been taken before\n $(this.timerContainer).css({\n width: \"50%\",\n margin: \"0 auto\",\n \"background-color\": \"#DFF0D8\",\n \"text-align\": \"center\",\n border: \"2px solid #DFF0D8\",\n \"border-radius\": \"25px\",\n });\n $(this.scoreDiv).css({\n width: \"50%\",\n margin: \"0 auto\",\n \"background-color\": \"#DFF0D8\",\n \"text-align\": \"center\",\n border: \"2px solid #DFF0D8\",\n \"border-radius\": \"25px\",\n });\n $(\".tooltipTime\").css({\n margin: \"0\",\n padding: \"0\",\n \"background-color\": \"black\",\n color: \"white\",\n });\n }\n\n async finishAssessment() {\n $(\"#relations-next\").show(); // show the next page button for now\n $(\"#relations-prev\").show(); // show the previous button for now\n if (!this.showFeedback) {\n // bje - changed from showResults\n $(this.timedDiv).hide();\n $(this.pauseBtn).hide();\n $(this.timerContainer).hide();\n }\n this.findTimeTaken();\n this.running = 0;\n this.done = 1;\n this.taken = 1;\n await this.finalizeProblems();\n this.checkScore();\n this.displayScore();\n this.storeScore();\n this.logScore();\n $(this.pauseBtn).attr(\"disabled\", true);\n this.finishButton.disabled = true;\n $(window).off(\"beforeunload\");\n // turn off the pagehide listener\n let assignment_id = this.divid;\n setTimeout(function () {\n jQuery.ajax({\n url: eBookConfig.app + \"/assignments/student_autograde\",\n type: \"POST\",\n dataType: \"JSON\",\n data: {\n assignment_id: assignment_id,\n is_timed: true,\n },\n success: function (retdata) {\n if (retdata.success == false) {\n console.log(retdata.message);\n } else {\n console.log(\"Autograder completed\");\n }\n },\n });\n }, 2000);\n }\n\n // finalizeProblems\n // ----------------\n async finalizeProblems() {\n // Because we have submitted each question as we navigate we only need to\n // send the final version of the question the student is on when they press the\n // finish exam button.\n\n var currentQuestion =\n this.renderedQuestionArray[this.currentQuestionIndex].question;\n await currentQuestion.checkCurrentAnswer();\n await currentQuestion.logCurrentAnswer();\n currentQuestion.renderFeedback();\n currentQuestion.disableInteraction();\n\n for (var i = 0; i < this.renderedQuestionArray.length; i++) {\n let currentQuestion = this.renderedQuestionArray[i];\n // set the state to forreview so we know that feedback may be appropriate\n if (currentQuestion.state !== \"broken_exam\") {\n currentQuestion.state = \"forreview\";\n currentQuestion.question.disableInteraction();\n }\n }\n\n if (!this.showFeedback) {\n this.hideTimedFeedback();\n }\n }\n\n // restoreAnsweredQuestions\n // ------------------------\n restoreAnsweredQuestions() {\n for (var i = 0; i < this.renderedQuestionArray.length; i++) {\n var currentQuestion = this.renderedQuestionArray[i];\n if (currentQuestion.state === \"prepared\") {\n currentQuestion.state = \"forreview\";\n }\n }\n }\n\n // hideTimedFeedback\n // -----------------\n hideTimedFeedback() {\n for (var i = 0; i < this.renderedQuestionArray.length; i++) {\n var currentQuestion = this.renderedQuestionArray[i].question;\n currentQuestion.hideFeedback();\n }\n }\n\n // checkScore\n // ----------\n // This is a simple all or nothing score of one point per question for\n // that includes our best guess if a question was skipped.\n checkScore() {\n this.correctStr = \"\";\n this.skippedStr = \"\";\n this.incorrectStr = \"\";\n // Gets the score of each problem\n for (var i = 0; i < this.renderedQuestionArray.length; i++) {\n var correct =\n this.renderedQuestionArray[i].question.checkCorrectTimed();\n if (correct == \"T\") {\n this.score++;\n this.correctStr = this.correctStr + (i + 1) + \", \";\n } else if (correct == \"F\") {\n this.incorrect++;\n this.incorrectStr = this.incorrectStr + (i + 1) + \", \";\n } else if (correct === null || correct === \"I\") {\n this.skipped++;\n this.skippedStr = this.skippedStr + (i + 1) + \", \";\n } else {\n // ignored question; just do nothing\n }\n }\n // remove extra comma and space at end if any\n if (this.correctStr.length > 0)\n this.correctStr = this.correctStr.substring(\n 0,\n this.correctStr.length - 2\n );\n else this.correctStr = \"None\";\n if (this.skippedStr.length > 0)\n this.skippedStr = this.skippedStr.substring(\n 0,\n this.skippedStr.length - 2\n );\n else this.skippedStr = \"None\";\n if (this.incorrectStr.length > 0)\n this.incorrectStr = this.incorrectStr.substring(\n 0,\n this.incorrectStr.length - 2\n );\n else this.incorrectStr = \"None\";\n }\n findTimeTaken() {\n if (this.limitedTime) {\n this.timeTaken = this.startingTime - this.timeLimit;\n } else {\n this.timeTaken = this.timeLimit;\n }\n }\n storeScore() {\n var storage_arr = [];\n storage_arr.push(\n this.score,\n this.correctStr,\n this.incorrect,\n this.incorrectStr,\n this.skipped,\n this.skippedStr,\n this.timeTaken\n );\n var timeStamp = new Date();\n var storageObj = JSON.stringify({\n answer: storage_arr,\n timestamp: timeStamp,\n });\n localStorage.setItem(this.localStorageKey(), storageObj);\n }\n // _`timed exam endpoint parameters`\n //----------------------------------\n logScore() {\n this.logBookEvent({\n event: \"timedExam\",\n act: \"finish\",\n div_id: this.divid,\n correct: this.score,\n incorrect: this.incorrect,\n skipped: this.skipped,\n time_taken: this.timeTaken,\n });\n }\n shouldUseServer(data) {\n // We override the RunestoneBase version because there is no \"correct\" attribute, and there are 2 possible localStorage schemas\n // --we also want to default to local storage because it contains more information specifically which questions are correct, incorrect, and skipped.\n var storageDate;\n if (localStorage.length === 0) return true;\n var storageObj = localStorage.getItem(this.localStorageKey());\n if (storageObj === null) return true;\n try {\n var storedData = JSON.parse(storageObj).answer;\n if (storedData.length == 4) {\n if (\n data.correct == storedData[0] &&\n data.incorrect == storedData[1] &&\n data.skipped == storedData[2] &&\n data.timeTaken == storedData[3]\n )\n return true;\n } else if (storedData.length == 7) {\n if (\n data.correct == storedData[0] &&\n data.incorrect == storedData[2] &&\n data.skipped == storedData[4] &&\n data.timeTaken == storedData[6]\n ) {\n return false; // In this case, because local storage has more info, we want to use that if it's consistent\n }\n }\n storageDate = new Date(JSON.parse(storageObj[1]).timestamp);\n } catch (err) {\n // error while parsing; likely due to bad value stored in storage\n console.log(err.message);\n localStorage.removeItem(this.localStorageKey());\n return true;\n }\n var serverDate = new Date(data.timestamp);\n if (serverDate < storageDate) {\n this.logScore();\n return false;\n }\n return true;\n }\n\n checkLocalStorage() {\n var len = localStorage.length;\n if (len > 0) {\n if (localStorage.getItem(this.localStorageKey()) !== null) {\n this.taken = 1;\n this.restoreAnswers(\"\");\n } else {\n this.taken = 0;\n }\n } else {\n this.taken = 0;\n }\n }\n async restoreAnswers(data) {\n this.taken = 1;\n var tmpArr;\n if (data === \"\") {\n try {\n tmpArr = JSON.parse(\n localStorage.getItem(this.localStorageKey())\n ).answer;\n } catch (err) {\n // error while parsing; likely due to bad value stored in storage\n console.log(err.message);\n localStorage.removeItem(this.localStorageKey());\n this.taken = 0;\n return;\n }\n } else {\n // Parse results from the database\n tmpArr = [\n parseInt(data.correct),\n parseInt(data.incorrect),\n parseInt(data.skipped),\n parseInt(data.time_taken),\n data.reset,\n ];\n this.setLocalStorage(tmpArr);\n }\n if (tmpArr.length == 1) {\n // Exam was previously reset\n this.reset = true;\n this.taken = 0;\n return;\n }\n if (tmpArr.length == 4) {\n // Accidental Reload OR Database Entry\n this.score = tmpArr[0];\n this.incorrect = tmpArr[1];\n this.skipped = tmpArr[2];\n this.timeTaken = tmpArr[3];\n } else if (tmpArr.length == 5) {\n this.score = tmpArr[0];\n this.incorrect = tmpArr[1];\n this.skipped = tmpArr[2];\n this.timeTaken = tmpArr[3];\n } else if (tmpArr.length == 7) {\n // Loaded Completed Exam\n this.score = tmpArr[0];\n this.correctStr = tmpArr[1];\n this.incorrect = tmpArr[2];\n this.incorrectStr = tmpArr[3];\n this.skipped = tmpArr[4];\n this.skippedStr = tmpArr[5];\n this.timeTaken = tmpArr[6];\n } else {\n // Set localStorage in case of \"accidental\" reload\n this.score = 0;\n this.incorrect = 0;\n this.skipped = this.renderedQuestionArray.length;\n this.timeTaken = 0;\n }\n if (this.taken) {\n if (this.skipped === this.renderedQuestionArray.length) {\n this.showFeedback = false;\n }\n this.handlePrevAssessment();\n }\n await this.renderTimedQuestion();\n this.displayScore();\n this.showTime();\n }\n setLocalStorage(parsedData) {\n var timeStamp = new Date();\n var storageObj = {\n answer: parsedData,\n timestamp: timeStamp,\n };\n localStorage.setItem(\n this.localStorageKey(),\n JSON.stringify(storageObj)\n );\n }\n displayScore() {\n if (this.showResults) {\n var scoreString = \"\";\n var numQuestions;\n var percentCorrect;\n // if we have some information\n if (\n this.correctStr.length > 0 ||\n this.incorrectStr.length > 0 ||\n this.skippedStr.length > 0\n ) {\n scoreString = `Num Correct: ${this.score}. Questions: ${this.correctStr}
Num Wrong: ${this.incorrect}. Questions: ${this.incorrectStr}
Num Skipped: ${this.skipped}. Questions: ${this.skippedStr}
`;\n numQuestions = this.score + this.incorrect + this.skipped;\n percentCorrect = (this.score / numQuestions) * 100;\n scoreString +=\n \"Percent Correct: \" + percentCorrect.toFixed(2) + \"%\";\n $(this.scoreDiv).html(scoreString);\n this.scoreDiv.style.display = \"block\";\n } else {\n scoreString = `Num Correct: ${this.score}
Num Wrong: ${this.incorrect}
Num Skipped: ${this.skipped}
`;\n numQuestions = this.score + this.incorrect + this.skipped;\n percentCorrect = (this.score / numQuestions) * 100;\n scoreString +=\n \"Percent Correct: \" + percentCorrect.toFixed(2) + \"%\";\n $(this.scoreDiv).html(scoreString);\n this.scoreDiv.style.display = \"block\";\n }\n this.highlightNumberedList();\n } else {\n $(this.scoreDiv).html(\n \"Thank you for taking the exam. Your answers have been recorded.\"\n );\n this.scoreDiv.style.display = \"block\";\n }\n }\n highlightNumberedList() {\n var correctCount = this.correctStr;\n var incorrectCount = this.incorrectStr;\n var skippedCount = this.skippedStr;\n correctCount = correctCount.replace(/ /g, \"\").split(\",\");\n incorrectCount = incorrectCount.replace(/ /g, \"\").split(\",\");\n skippedCount = skippedCount.replace(/ /g, \"\").split(\",\");\n $(function () {\n var numberedBtns = $(\"ul#pageNums > ul > li\");\n if (numberedBtns.hasClass(\"answered\")) {\n numberedBtns.removeClass(\"answered\");\n }\n for (var i = 0; i < correctCount.length; i++) {\n var test = parseInt(correctCount[i]) - 1;\n numberedBtns\n .eq(parseInt(correctCount[i]) - 1)\n .addClass(\"correctCount\");\n }\n for (var j = 0; j < incorrectCount.length; j++) {\n numberedBtns\n .eq(parseInt(incorrectCount[j]) - 1)\n .addClass(\"incorrectCount\");\n }\n for (var k = 0; k < skippedCount.length; k++) {\n numberedBtns\n .eq(parseInt(skippedCount[k]) - 1)\n .addClass(\"skippedCount\");\n }\n });\n }\n}\n\n/*=======================================================\n=== Function that calls the constructors on page load ===\n=======================================================*/\n$(document).on(\"runestone:login-complete\", function () {\n $(\"[data-component=timedAssessment]\").each(function (index) {\n window.componentMap[this.id] = new Timed({\n orig: this,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n });\n });\n});\n","/*==========================================\n======= Master shortanswer.js ========\n============================================\n=== This file contains the JS for ===\n=== the Runestone shortanswer component. ===\n============================================\n=== Created by ===\n=== Isaiah Mayerchak ===\n=== 7/2/15 ===\n=== Brad Miller ===\n=== 2019 ===\n==========================================*/\n\nimport RunestoneBase from \"../../common/js/runestonebase.js\";\nimport { looksLikeLatexMath } from \"../../common/js/bookfuncs.js\";\nimport \"./../css/shortanswer.css\";\n\nexport default class ShortAnswer extends RunestoneBase {\n constructor(opts) {\n super(opts);\n if (opts) {\n var orig = opts.orig; // entire

element that will be replaced by new HTML\n this.useRunestoneServices =\n opts.useRunestoneServices || eBookConfig.useRunestoneServices;\n this.origElem = orig;\n this.divid = orig.id;\n this.question = this.origElem.innerHTML;\n this.optional = false;\n this.attachURL = opts.attachURL;\n if (this.origElem.hasAttribute(\"data-optional\")) {\n this.optional = true;\n }\n if (this.origElem.hasAttribute(\"data-attachment\")) {\n this.attachment = true;\n }\n this.placeholder =\n this.origElem.getAttribute(\"data-placeholder\") ||\n \"Write your answer here\";\n this.renderHTML();\n this.caption = \"shortanswer\";\n this.addCaption(\"runestone\");\n this.checkServer(\"shortanswer\", true);\n if (typeof Prism !== \"undefined\") {\n Prism.highlightAllUnder(this.containerDiv);\n }\n if (this.attachment) {\n this.getAttachmentName();\n }\n }\n }\n\n renderHTML() {\n this.containerDiv = document.createElement(\"div\");\n this.containerDiv.id = this.divid;\n this.containerDiv.classList.add(...(this.origElem.getAttribute(\"class\") || \"\").split(\" \").filter(Boolean));\n this.newForm = document.createElement(\"form\");\n this.newForm.id = this.divid + \"_journal\";\n this.newForm.name = this.newForm.id;\n this.newForm.action = \"\";\n this.containerDiv.appendChild(this.newForm);\n this.fieldSet = document.createElement(\"fieldset\");\n this.newForm.appendChild(this.fieldSet);\n this.firstLegendDiv = document.createElement(\"div\");\n this.firstLegendDiv.innerHTML = this.question;\n this.firstLegendDiv.classList.add(\"journal-question\");\n this.firstLegendDiv.classList.add(\"exercise-statement\");\n this.fieldSet.appendChild(this.firstLegendDiv);\n this.jInputDiv = document.createElement(\"div\");\n this.jInputDiv.id = this.divid + \"_journal_input\";\n this.fieldSet.appendChild(this.jInputDiv);\n this.jOptionsDiv = document.createElement(\"div\");\n this.jOptionsDiv.classList.add(\"journal-options\");\n this.jInputDiv.appendChild(this.jOptionsDiv);\n this.jTextArea = document.createElement(\"textarea\");\n let self = this;\n this.jTextArea.onchange = function () {\n self.isAnswered = true;\n };\n this.jTextArea.id = this.divid + \"_solution\";\n this.jTextArea.setAttribute(\"aria-label\", \"textarea\");\n this.jTextArea.placeholder = this.placeholder;\n this.jTextArea.style.display = \"inline\";\n this.jTextArea.style.width = \"530px\";\n this.jTextArea.classList.add(\"form-control\");\n this.jTextArea.rows = 4;\n this.jTextArea.cols = 50;\n this.jOptionsDiv.appendChild(this.jTextArea);\n this.jTextArea.onchange = function () {\n this.isAnswered = true;\n if (this.isTimed) {\n this.feedbackDiv.innerHTML = \"Your answer is automatically saved.\";\n } else {\n this.feedbackDiv.innerHTML = \"Your answer has not been saved yet!\";\n }\n this.feedbackDiv.classList.remove(\"alert-success\");\n this.feedbackDiv.classList.add(\"alert\", \"alert-danger\");\n }.bind(this);\n this.jTextArea.addEventListener(\"input\", () => {\n this.jTextArea.style.height = \"auto\";\n this.jTextArea.style.height = `${this.jTextArea.scrollHeight}px`;\n this.renderMath(this.jTextArea.value);\n });\n this.buttonDiv = document.createElement(\"div\");\n this.fieldSet.appendChild(this.buttonDiv);\n this.submitButton = document.createElement(\"button\");\n this.submitButton.classList.add(\"btn\", \"btn-success\");\n this.submitButton.type = \"button\";\n this.submitButton.textContent = \"Save\";\n this.submitButton.onclick = function () {\n this.checkCurrentAnswer();\n this.logCurrentAnswer();\n this.renderFeedback();\n }.bind(this);\n this.buttonDiv.appendChild(this.submitButton);\n\n this.otherOptionsDiv = document.createElement(\"div\");\n this.otherOptionsDiv.style.paddingLeft = \"20px\";\n this.otherOptionsDiv.classList.add(\"journal-options\");\n this.fieldSet.appendChild(this.otherOptionsDiv);\n // add a feedback div to give user feedback\n this.feedbackDiv = document.createElement(\"div\");\n this.feedbackDiv.style.width = \"530px\";\n this.feedbackDiv.style.fontStyle = \"italic\";\n this.feedbackDiv.id = this.divid + \"_feedback\";\n this.feedbackDiv.style.display = \"none\";\n this.fieldSet.appendChild(this.feedbackDiv);\n if (this.attachment) {\n let attachDiv = document.createElement(\"div\")\n this.attachDiv = attachDiv;\n if (this.graderactive) {\n // If in grading mode make a button to create a popup with the image\n let viewButton = document.createElement(\"button\")\n viewButton.type = \"button\"\n viewButton.innerHTML = \"View Attachment\"\n viewButton.onclick = this.viewFile.bind(this);\n attachDiv.appendChild(viewButton);\n } else {\n // Otherwise make a button for the student to select a file to upload.\n this.fileUpload = document.createElement(\"input\")\n this.fileUpload.type = \"file\";\n this.fileUpload.id = `${this.divid}_fileme`;\n attachDiv.appendChild(this.fileUpload);\n }\n this.containerDiv.appendChild(attachDiv);\n }\n this.origElem.replaceWith(this.containerDiv);\n // This is a stopgap measure for when MathJax is not loaded at all. There is another\n // more difficult case that when MathJax is loaded asynchronously we will get here\n // before MathJax is loaded. In that case we will need to implement something\n // like `the solution described here `_\n if (typeof MathJax !== \"undefined\") {\n this.queueMathJax(this.containerDiv);\n }\n }\n\n renderMath(value) {\n if (looksLikeLatexMath(value)) {\n if (!this.renderedAnswer) {\n this.renderedAnswerLabel = document.createElement(\"label\");\n this.renderedAnswerLabel.innerHTML = \"Rendered Answer:\";\n this.renderedAnswerLabel.id = this.divid + \"_rendered_answer_label\";\n this.renderedAnswerLabel.style.display = \"none\";\n this.fieldSet.appendChild(this.renderedAnswerLabel);\n\n this.renderedAnswer = document.createElement(\"div\");\n this.renderedAnswer.classList.add(\"latexoutput\");\n this.renderedAnswer.setAttribute('aria-labelledby', this.renderedAnswerLabel.id);\n this.renderedAnswer.setAttribute('aria-live', \"polite\");\n this.renderedAnswer.style.display = \"none\";\n this.fieldSet.appendChild(this.renderedAnswer);\n }\n value = value.replace(/\\$\\$(.*?)\\$\\$/g, \"\\\\[ $1 \\\\]\");\n value = value.replace(/\\$(.*?)\\$/g, \"\\\\( $1 \\\\)\");\n value = value.replace(/\\n/g, \"
\");\n this.renderedAnswer.innerHTML = value;\n\n this.renderedAnswer.style.display = \"block\";\n this.renderedAnswerLabel.style.display = \"block\";\n this.queueMathJax(this.renderedAnswer);\n\n } else {\n if (this.renderedAnswer) {\n this.renderedAnswer.style.display = \"none\";\n this.renderedAnswerLabel.style.display = \"none\";\n }\n }\n }\n\n async checkCurrentAnswer() {\n let value = document.getElementById(this.divid + \"_solution\").value;\n this.renderMath(value);\n this.setLocalStorage({\n answer: value,\n timestamp: new Date(),\n });\n }\n\n async logCurrentAnswer(sid) {\n let value = document.getElementById(this.divid + \"_solution\").value;\n this.renderMath(value);\n this.setLocalStorage({\n answer: value,\n timestamp: new Date(),\n });\n let data = {\n event: \"shortanswer\",\n act: value,\n answer: value,\n div_id: this.divid,\n };\n if (typeof sid !== \"undefined\") {\n data.sid = sid;\n }\n await this.logBookEvent(data);\n if (this.attachment) {\n await this.uploadFile();\n }\n }\n\n renderFeedback() {\n this.feedbackDiv.innerHTML = \"Your answer has been saved.\";\n this.feedbackDiv.classList.remove(\"alert-danger\");\n this.feedbackDiv.classList.add(\"alert\", \"alert-success\");\n this.feedbackDiv.style.display = \"block\";\n }\n setLocalStorage(data) {\n if (!this.graderactive) {\n let key = this.localStorageKey();\n localStorage.setItem(key, JSON.stringify(data));\n }\n }\n checkLocalStorage() {\n // Repopulates the short answer text\n // which was stored into local storage.\n var answer = \"\";\n if (this.graderactive) {\n return;\n }\n var len = localStorage.length;\n if (len > 0) {\n var ex = localStorage.getItem(this.localStorageKey());\n if (ex !== null) {\n try {\n var storedData = JSON.parse(ex);\n answer = storedData.answer;\n } catch (err) {\n // error while parsing; likely due to bad value stored in storage\n console.log(err.message);\n localStorage.removeItem(this.localStorageKey());\n return;\n }\n let solution = document.getElementById(this.divid + \"_solution\");\n if (solution) {\n solution.value = answer;\n }\n this.renderMath(answer);\n }\n }\n }\n restoreAnswers(data) {\n // Restore answers from storage retrieval done in RunestoneBase\n // sometimes data.answer can be null\n if (!data.answer) {\n data.answer = \"\";\n }\n this.answer = data.answer;\n this.jTextArea.value = this.answer;\n this.renderMath(this.answer);\n\n let p = document.createElement(\"p\");\n p.classList.add(\"shortanswer__timestamp\");\n this.jInputDiv.appendChild(p);\n var tsString = \"\";\n if (data.timestamp) {\n tsString = new Date(data.timestamp).toLocaleString();\n } else {\n tsString = \"\";\n }\n p.textContent = tsString;\n this.jTextArea.style.height = \"auto\";\n this.jTextArea.style.height = `${this.jTextArea.scrollHeight}px`;\n\n if (data.last_answer) {\n this.current_answer = \"ontime\";\n let toggle_answer_button = document.createElement(\"button\");\n toggle_answer_button.type = \"button\";\n toggle_answer_button.textContent = \"Show Late Answer\";\n toggle_answer_button.classList.add(\"btn\", \"btn-warning\");\n toggle_answer_button.style.marginLeft = \"5px\";\n\n toggle_answer_button.addEventListener(\n \"click\",\n function () {\n var display_timestamp, button_text;\n if (this.current_answer === \"ontime\") {\n this.jTextArea.value = data.last_answer;\n this.answer = data.last_answer;\n display_timestamp = new Date(\n data.last_timestamp\n ).toLocaleString();\n button_text = \"Show on-Time Answer\";\n this.current_answer = \"late\";\n } else {\n this.jTextArea.value = data.answer;\n this.answer = data.answer;\n display_timestamp = tsString;\n button_text = \"Show Late Answer\";\n this.current_answer = \"ontime\";\n }\n this.renderMath(this.answer);\n p.textContent = `Submitted: ${display_timestamp}`;\n toggle_answer_button.textContent = button_text;\n }.bind(this)\n );\n\n this.buttonDiv.appendChild(toggle_answer_button);\n }\n let feedbackStr = \"\";\n if (typeof data.score !== \"undefined\") {\n feedbackStr = `Score: ${data.score}`;\n }\n if (data.comment) {\n feedbackStr += ` -- ${data.comment}`;\n }\n if (feedbackStr !== \"\") {\n this.feedbackDiv.innerHTML = feedbackStr;\n this.feedbackDiv.style.display = \"block\";\n this.feedbackDiv.classList.add(\"alert\", \"alert-success\");\n }\n }\n\n disableInteraction() {\n this.jTextArea.disabled = true;\n }\n\n async getAttachmentName() {\n // Get the attachment name from the /ns/assessment/has_attachment endpoint\n let requestUrl = `/ns/assessment/has_attachment/${this.divid}`;\n if (this.sid) {\n requestUrl += `?sid=${this.sid}`;\n }\n const response = await fetch(requestUrl);\n if (!response.ok) {\n console.error(\"Error fetching attachment name:\", response.statusText);\n return null;\n }\n const obj = await response.json();\n if (obj.detail.hasAttachment) {\n // Return the S3 key for the attachment\n let filename = obj.detail.hasAttachment;\n // filename is everthing after the last slash\n filename = filename.substring(filename.lastIndexOf(\"/\") + 1);\n let fmess = document.createElement(\"span\");\n fmess.innerHTML = `Attachment: ${filename}`;\n this.attachDiv.appendChild(fmess);\n }\n }\n\n async uploadFile() {\n const files = this.fileUpload.files\n // get the suffix from the file name\n const fileName = files[0].name;\n const suffix = fileName.split('.').pop();\n // if the suffix is not in the list of allowed suffixes, return\n if (!['jpg', 'jpeg', 'png', 'gif', 'pdf'].includes(suffix)) {\n alert(\"File type not allowed. Please upload a jpg, jpeg, png, gif, or pdf file.\");\n return;\n }\n // if the file size is greater than 5MB, return\n if (files[0].size > 5 * 1024 * 1024) {\n alert(\"File size exceeds 5MB limit. Please upload a smaller file.\");\n return;\n }\n const data = new FormData()\n if (this.fileUpload.files.length > 0) {\n data.append('file', files[0])\n fetch(`/ns/logger/upload/${this.divid}`, {\n method: 'POST',\n body: data\n })\n .then(response => response.json())\n .then(data => {\n console.log(data)\n })\n .catch(error => {\n console.error(error)\n })\n }\n }\n\n viewFile() {\n // Get the URL from the S3 API -- saved when we display in grader mode\n if (this.attachURL) {\n //window.open(this.attachURL, \"_blank\");\n //\n //switch to \n const image_window = window.open(\"\", \"_blank\")\n if (this.attachURL.indexOf('.pdf?') !== -1) {\n const embed = image_window.document.createElement(\"object\");\n embed.setAttribute(\"data\", this.attachURL);\n embed.setAttribute(\"type\", \"application/pdf\");\n embed.setAttribute(\"width\", \"800px\");\n embed.setAttribute(\"height\", \"1040px\");\n image_window.document.body.appendChild(embed);\n let alt = image_window.document.createElement(\"a\");\n alt.setAttribute(\"href\", this.attachURL);\n alt.innerText = \"Download PDF\";\n embed.appendChild(alt);\n }\n else {\n const img = image_window.document.createElement(\"img\");\n img.setAttribute(\"src\", this.attachURL);\n img.setAttribute(\"style\", \"width:100%; height:auto;\");\n image_window.document.body.appendChild(img);\n }\n } else {\n alert(\"No attachment for this student.\")\n }\n }\n}\n\n/*=================================\n== Find the custom HTML tags and ==\n== execute our code on them ==\n=================================*/\ndocument.addEventListener(\"runestone:login-complete\", function () {\n document.querySelectorAll(\"[data-component=shortanswer]\").forEach(function (el) {\n // If this element exists within a timed component, don't render it here\n if (!el.closest(\"[data-component=timedAssessment]\")) {\n try {\n window.componentMap[el.id] = new ShortAnswer({\n orig: el,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n });\n } catch (err) {\n console.log(`Error rendering ShortAnswer Problem ${el.id}\n Details: ${err}`);\n }\n }\n });\n});\n","import ShortAnswer from \"./shortanswer.js\";\n\nexport default class TimedShortAnswer extends ShortAnswer {\n constructor(opts) {\n super(opts);\n this.renderTimedIcon(this.containerDiv);\n this.isTimed = true;\n this.hideButtons();\n }\n hideButtons() {\n if (this.submitButton) {\n this.submitButton.style.display = \"none\";\n }\n }\n renderTimedIcon(component) {\n // renders the clock icon on timed components. The component parameter\n // is the element that the icon should be appended to.\n var timeIconDiv = document.createElement(\"div\");\n var timeIcon = document.createElement(\"img\");\n\n timeIcon.src = \"../_static/clock.png\";\n timeIcon.style.width = \"15px\";\n timeIcon.style.height = \"15px\";\n\n timeIconDiv.className = \"timeTip\";\n timeIconDiv.title = \"\";\n timeIconDiv.appendChild(timeIcon);\n\n // If firstChild is null, insertBefore acts like appendChild\n component.insertBefore(timeIconDiv, component.firstChild);\n }\n checkCorrectTimed() {\n return \"I\"; // we ignore this in the grading\n }\n hideFeedback() {\n if (this.feedbackDiv) {\n this.feedbackDiv.style.display = \"none\";\n }\n }\n}\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\n\nwindow.component_factory.shortanswer = function (opts) {\n if (opts.timed) {\n return new TimedShortAnswer(opts);\n }\n return new ShortAnswer(opts);\n};\n"],"names":["TimedMatching","MatchingProblem","constructor","opts","super","this","renderTimedIcon","containerDiv","hideButtons","needsReinitialization","gradeBtn","style","display","helpBtn","component","timeIconDiv","document","createElement","timeIcon","src","width","height","className","title","appendChild","prepend","checkCorrectTimed","correct","hideFeedback","connList","reinitializeListeners","window","component_factory","matching","timed","Timed","orig","origElem","divid","id","children","childNodes","visited","timeLimit","limitedTime","isNaN","$","data","parseInt","startingTime","showFeedback","hasAttribute","getAttribute","showResults","random","showTimer","fullwidth","nopause","eBookConfig","enableScratchAC","running","paused","done","taken","score","incorrect","correctStr","incorrectStr","skippedStr","skipped","currentQuestionIndex","renderedQuestionArray","getNewChildren","enableDebug","body","oncontextmenu","checkAssessmentStatus","then","renderTimedAssess","bind","newChildren","runestoneChildren","querySelectorAll","i","length","push","sendInfo","div_id","course_name","course","console","log","useRunestoneServices","request","Request","new_server_prefix","method","headers","jsonHeaders","JSON","stringify","response","fetch","json","detail","tookAssessment","assessmentTaken","localStorage","clear","Promise","resolve","createRenderedQuestionArray","randomizeRQA","renderContainer","renderTimer","renderControlButtons","timedDiv","renderNavControls","renderSubmitButton","renderFeedbackContainer","replaceWith","styleExamElements","checkServer","disableCutCopyPaste","addEventListener","e","preventDefault","attr","classList","add","navDiv","flagDiv","switchContainer","switchDiv","wrapperDiv","timerContainer","showTime","controlDiv","startBtn","pauseBtn","class","tabindex","role","textContent","async","finishButton","hide","flagButton","show","mess","innerHTML","renderTimedQuestion","startAssessment","disabled","pauseAssessment","tmpLi","tmpA","pagNavList","addClass","leftContainer","leftNavButton","rightNavButton","css","flaggingPlace","flagContainer","rightContainer","ensureButtonSafety","break","qNumList","qNumWrapperList","navBtnListeners","flagBtnListener","navigateAway","state","question","isAnswered","checkCurrentAnswer","logCurrentAnswer","handleNextPrev","event","target","text","match","hasClass","j","removeClass","handleFlag","handleNumberedNav","oldIndex","buttonContainer","filter","x","skipstr","confirm","finishAssessment","scoreDiv","tmpChild","timedWrapper","initAttempts","is","temporaryValue","randomIndex","currentIndex","Math","floor","currentQuestion","rqa","newq","initialize","componentKind","component_ready_promise","renderFeedback","disableInteraction","includes","contains","handlePrevAssessment","restoreAnsweredQuestions","lastTime","Date","now","increment","logBookEvent","act","timeStamp","storageObj","answer","timestamp","setItem","localStorageKey","on","returnValue","mins","secs","minsString","secsString","beginning","timeString","minutes","timeTaken","seconds","timeTips","getElementsByClassName","setTimeout","currentTime","email","margin","border","padding","color","findTimeTaken","finalizeProblems","checkScore","displayScore","storeScore","logScore","off","assignment_id","jQuery","ajax","url","app","type","dataType","is_timed","success","retdata","message","hideTimedFeedback","substring","storage_arr","time_taken","shouldUseServer","storageDate","getItem","storedData","parse","err","removeItem","checkLocalStorage","restoreAnswers","tmpArr","reset","setLocalStorage","parsedData","numQuestions","scoreString","toFixed","html","highlightNumberedList","correctCount","incorrectCount","skippedCount","replace","split","numberedBtns","eq","k","each","index","componentMap","ShortAnswer","optional","attachURL","attachment","placeholder","renderHTML","caption","addCaption","Prism","highlightAllUnder","getAttachmentName","Boolean","newForm","name","action","fieldSet","firstLegendDiv","jInputDiv","jOptionsDiv","jTextArea","self","onchange","setAttribute","rows","cols","isTimed","feedbackDiv","remove","scrollHeight","renderMath","value","buttonDiv","submitButton","onclick","otherOptionsDiv","paddingLeft","fontStyle","attachDiv","graderactive","viewButton","viewFile","fileUpload","MathJax","queueMathJax","renderedAnswer","renderedAnswerLabel","getElementById","sid","uploadFile","key","ex","solution","p","tsString","toLocaleString","last_answer","current_answer","toggle_answer_button","marginLeft","display_timestamp","button_text","last_timestamp","feedbackStr","comment","requestUrl","ok","error","statusText","obj","hasAttachment","filename","lastIndexOf","fmess","files","suffix","pop","alert","size","FormData","append","catch","image_window","open","indexOf","embed","alt","innerText","img","forEach","el","closest","TimedShortAnswer","insertBefore","firstChild","shortanswer"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/115.648ff4b5650f4c7c.js.map.gz b/_static/115.648ff4b5650f4c7c.js.map.gz new file mode 100644 index 0000000..ea7b758 Binary files /dev/null and b/_static/115.648ff4b5650f4c7c.js.map.gz differ diff --git a/_static/126.a976f62852f30b51.js b/_static/126.a976f62852f30b51.js new file mode 100644 index 0000000..bde5c42 --- /dev/null +++ b/_static/126.a976f62852f30b51.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[126],{23053:()=>{Symbol("__sensor__");Event},50126:(e,t,r)=>{r.r(t),r.d(t,{SimpleAbsoluteOrientationSensor:()=>w,SimpleAccelerometer:()=>d,SimpleAmbientLightSensor:()=>l,SimpleGeolocationSensor:()=>u,SimpleGravitySensor:()=>p,SimpleGyroscope:()=>m,SimpleLinearAccelerationSensor:()=>h,SimpleMagnetometer:()=>v,SimpleRelativeOrientationSensor:()=>g}),r(52840),r(23053);let s;window.GeolocationSensor||Sensor,screen.orientation?s=screen.orientation:screen.msOrientation?s=screen.msOrientation:(s={},Object.defineProperty(s,"angle",{get:()=>window.orientation||0}));const n=(e,...t)=>class extends e{constructor(...e){super(e);for(const e of t)if(`on${e}`in window){this[slot].eventName=e;break}this[slot].activateCallback=()=>{window.addEventListener(this[slot].eventName,this[slot].handleEvent,{capture:!0})},this[slot].deactivateCallback=()=>{window.removeEventListener(this[slot].eventName,this[slot].handleEvent,{capture:!0})}}};window.RelativeOrientationSensor||n(Sensor,"deviceorientation"),window.AbsoluteOrientationSensor||n(Sensor,"deviceorientationabsolute","deviceorientation"),window.Gyroscope||n(Sensor,"devicemotion"),window.Accelerometer||n(Sensor,"devicemotion"),window.LinearAccelerationSensor||n(Sensor,"devicemotion"),window.GravitySensor||n(Sensor,"devicemotion");var o=r(65865);class i{constructor(){(0,o.e)(this),this.sensor=null}async start(e,t,r){if(this.sensor)throw"In use. Stop the sensor before starting another.";if("function"!=typeof e)throw"Not available.";if(navigator.permissions&&!(await Promise.all(t.map((e=>navigator.permissions.query({name:e}))))).every((e=>"granted"===e.state)))throw`Permission to use the ${t} sensor was denied.`;let s,n;this.sensor=null;let o=new Promise(((t,o)=>{try{this.sensor=new e(r);let i=this;s=e=>{i.sensor.removeEventListener("error",s),"NotAllowedError"===e.error.name?o("Access to this sensor is not allowed."):"NotReadableError"===e.error.name&&o("Cannot connect to the sensor."),o(`Unknown error: ${e.error.name}`)},this.sensor.addEventListener("error",s),n=e=>{i.sensor.removeEventListener("reading",n),t()},this.sensor.addEventListener("reading",n),this.sensor.start()}catch(e){"SecurityError"===e.name?o("Sensor construction was blocked by a feature policy."):"ReferenceError"===e.name?o("Sensor is not supported by the User Agent."):o(e)}}));try{console.log(`Await ${new Date}`),await o}catch(e){throw this.stop(),e}finally{console.log(`Done ${new Date}`),this.sensor.removeEventListener("error",s),this.sensor.removeEventListener("reading",n)}}get ready(){return this.sensor&&this.sensor.activated&&this.sensor.hasReading}stop(){this.sensor&&this.sensor.stop(),this.sensor=null}}class a extends i{get x(){return this.sensor.x}get y(){return this.sensor.y}get z(){return this.sensor.z}}class c extends i{get quaternion(){return this.sensor.quaternion}populateMatrix(e){return this.sensor.populateMatrix(e)}}class l extends i{async start(e){return super.start(window.AmbientLightSensor,["ambient-light-sensor"],e)}get illuminance(){return this.sensor.illuminance}}class u extends i{async start(e){return super.start(GeolocationSensor,["geolocation"],e)}get latitude(){return this.sensor.latitude}get longitude(){return this.sensor.longitude}get altitude(){return this.sensor.altitude}get accuracy(){return this.sensor.accuracy}get altitudeAccuracy(){return this.sensor.altitudeAccuracy}get heading(){return this.sensor.heading}get speed(){return this.sensor.speed}}class d extends a{async start(e){return super.start(Accelerometer,["accelerometer"],e)}}class m extends a{async start(e){return super.start(Gyroscope,["gyroscope"],e)}}class h extends a{async start(e){return super.start(LinearAccelerationSensor,["accelerometer"],e)}}class p extends a{async start(e){return super.start(GravitySensor,["accelerometer"],e)}}class v extends a{async start(e){return super.start(window.Magnetometer,["magnetometer"],e)}}class w extends c{async start(e){return super.start(AbsoluteOrientationSensor,["accelerometer","gyroscope","magnetometer"],e)}}class g extends c{async start(e){return super.start(RelativeOrientationSensor,["accelerometer","gyroscope"],e)}}},52840:()=>{navigator.permissions||"function"!=typeof DeviceMotionEvent.requestPermission||"function"!=typeof DeviceOrientationEvent.requestPermission||(navigator.permissions={query:e=>{switch(e.name){case"accelerometer":case"gyroscope":return new Promise(((e,t)=>{Promise.all([DeviceMotionEvent.requestPermission(),DeviceOrientationEvent.requestPermission()]).then((t=>e({state:t.every((e=>"granted"===e))?"granted":"denied"})))}));default:return Promise.resolve({state:"granted"})}}})},65865:(e,t,r)=>{r.d(t,{e:()=>n});const s=e=>{const t=new Set;do{for(const r of Reflect.ownKeys(e))t.add([e,r])}while((e=Reflect.getPrototypeOf(e))&&e!==Object.prototype);return t};function n(e){for(const[t,r]of s(e.constructor.prototype)){if("constructor"===r)continue;const s=Reflect.getOwnPropertyDescriptor(t,r);s&&"function"==typeof s.value&&(e[r]=e[r].bind(e))}}}}]); +//# sourceMappingURL=126.a976f62852f30b51.js.map \ No newline at end of file diff --git a/_static/126.a976f62852f30b51.js.gz b/_static/126.a976f62852f30b51.js.gz new file mode 100644 index 0000000..c720852 Binary files /dev/null and b/_static/126.a976f62852f30b51.js.gz differ diff --git a/_static/126.a976f62852f30b51.js.map b/_static/126.a976f62852f30b51.js.map new file mode 100644 index 0000000..54ec85f --- /dev/null +++ b/_static/126.a976f62852f30b51.js.map @@ -0,0 +1 @@ +{"version":3,"file":"126.a976f62852f30b51.js","mappings":"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","sources":["webpack://WebComponents/./runestone/cellbotics/js/sensor_polyfill/sensor.js","webpack://WebComponents/./runestone/cellbotics/js/sensor_polyfill/motion-sensors.js","webpack://WebComponents/./runestone/cellbotics/js/sensor_polyfill/geolocation-sensor.js","webpack://WebComponents/./runestone/cellbotics/js/simple_sensor.js","webpack://WebComponents/./runestone/cellbotics/js/permissions_polyfill.js","webpack://WebComponents/./runestone/cellbotics/js/auto-bind.js"],"sourcesContent":["// ********************************\n// |docname| - Base Sensor polyfill\n// ********************************\n// The `geolocation-sensor.js` and `motion-sensors.js` files depend on this.\n\n\"use strict\";\n\n// @ts-check\nconst __sensor__ = Symbol(\"__sensor__\");\n\nconst slot = __sensor__;\n\nfunction defineProperties(target, descriptions) {\n for (const property in descriptions) {\n Object.defineProperty(target, property, {\n configurable: true,\n value: descriptions[property]\n });\n }\n}\n\nconst EventTargetMixin = (superclass, ...eventNames) => class extends superclass {\n constructor(...args) {\n // @ts-ignore\n super(args);\n const eventTarget = document.createDocumentFragment();\n\n this.addEventListener = (type, ...args) => {\n return eventTarget.addEventListener(type, ...args);\n }\n\n this.removeEventListener = (...args) => {\n // @ts-ignore\n return eventTarget.removeEventListener(...args);\n }\n\n this.dispatchEvent = (event) => {\n defineProperties(event, { currentTarget: this });\n if (!event.target) {\n defineProperties(event, { target: this });\n }\n\n const methodName = `on${event.type}`;\n if (typeof this[methodName] == \"function\") {\n this[methodName](event);\n }\n\n const retValue = eventTarget.dispatchEvent(event);\n\n if (retValue && this.parentNode) {\n this.parentNode.dispatchEvent(event);\n }\n\n defineProperties(event, { currentTarget: null, target: null });\n\n return retValue;\n }\n }\n};\n\nclass EventTarget extends EventTargetMixin(Object) {};\n\nfunction defineReadonlyProperties(target, slot, descriptions) {\n const propertyBag = target[slot];\n for (const property in descriptions) {\n propertyBag[property] = descriptions[property];\n Object.defineProperty(target, property, {\n get: () => propertyBag[property]\n });\n }\n}\n\nclass SensorErrorEvent extends Event {\n constructor(type, errorEventInitDict) {\n super(type, errorEventInitDict);\n\n if (!errorEventInitDict || !(errorEventInitDict.error instanceof DOMException)) {\n throw TypeError(\n \"Failed to construct 'SensorErrorEvent':\" +\n \"2nd argument much contain 'error' property\"\n );\n }\n\n Object.defineProperty(this, \"error\", {\n configurable: false,\n writable: false,\n value: errorEventInitDict.error\n });\n }\n};\n\nfunction defineOnEventListener(target, name) {\n Object.defineProperty(target, `on${name}`, {\n enumerable: true,\n configurable: false,\n writable: true,\n value: null\n });\n}\n\nconst SensorState = {\n IDLE: 1,\n ACTIVATING: 2,\n ACTIVE: 3,\n}\n\nclass Sensor extends EventTarget {\n constructor(options) {\n super();\n this[slot] = new WeakMap;\n\n defineOnEventListener(this, \"reading\");\n defineOnEventListener(this, \"activate\");\n defineOnEventListener(this, \"error\");\n\n defineReadonlyProperties(this, slot, {\n activated: false,\n hasReading: false,\n timestamp: null\n })\n\n this[slot].state = SensorState.IDLE;\n\n this[slot].notifyError = (message, name) => {\n let error = new SensorErrorEvent(\"error\", {\n error: new DOMException(message, name)\n });\n this.dispatchEvent(error);\n this.stop();\n }\n\n this[slot].notifyActivatedState = () => {\n let activate = new Event(\"activate\");\n this[slot].activated = true;\n this.dispatchEvent(activate);\n this[slot].state = SensorState.ACTIVE;\n }\n\n this[slot].activateCallback = () => {};\n this[slot].deactivateCallback = () => {};\n\n this[slot].frequency = null;\n\n if (window && window.parent != window.top) {\n throw new DOMException(\"Only instantiable in a top-level browsing context\", \"SecurityError\");\n }\n\n if (options && typeof(options.frequency) == \"number\") {\n if (options.frequency > 60) {\n this.frequency = options.frequency;\n }\n }\n }\n\n start() {\n if (this[slot].state === SensorState.ACTIVATING || this[slot].state === SensorState.ACTIVE) {\n return;\n }\n this[slot].state = SensorState.ACTIVATING;\n this[slot].activateCallback();\n }\n\n stop() {\n if (this[slot].state === SensorState.IDLE) {\n return;\n }\n this[slot].activated = false;\n this[slot].hasReading = false;\n this[slot].timestamp = null;\n this[slot].deactivateCallback();\n\n this[slot].state = SensorState.IDLE;\n }\n}","// ***********************************\n// |docname| - Motion sensors polyfill\n// ***********************************\n// @ts-check\n\"use strict\";\n\nimport \"./sensor.js\";\n\n//const slot = __sensor__;\n\nlet orientation;\n\n// @ts-ignore\nif (screen.orientation) {\n // @ts-ignore\n orientation = screen.orientation;\n} else if (screen.msOrientation) {\n orientation = screen.msOrientation;\n} else {\n orientation = {};\n Object.defineProperty(orientation, \"angle\", {\n get: () => { return (window.orientation || 0) }\n });\n}\n\nconst DeviceOrientationMixin = (superclass, ...eventNames) => class extends superclass {\n constructor(...args) {\n // @ts-ignore\n super(args);\n\n for (const eventName of eventNames) {\n if (`on${eventName}` in window) {\n this[slot].eventName = eventName;\n break;\n }\n }\n\n this[slot].activateCallback = () => {\n window.addEventListener(this[slot].eventName, this[slot].handleEvent, { capture: true });\n }\n\n this[slot].deactivateCallback = () => {\n window.removeEventListener(this[slot].eventName, this[slot].handleEvent, { capture: true });\n }\n }\n};\n\nfunction toQuaternionFromEuler(alpha, beta, gamma) {\n const degToRad = Math.PI / 180\n\n const x = (beta || 0) * degToRad;\n const y = (gamma || 0) * degToRad;\n const z = (alpha || 0) * degToRad;\n\n const cZ = Math.cos(z * 0.5);\n const sZ = Math.sin(z * 0.5);\n const cY = Math.cos(y * 0.5);\n const sY = Math.sin(y * 0.5);\n const cX = Math.cos(x * 0.5);\n const sX = Math.sin(x * 0.5);\n\n const qx = sX * cY * cZ - cX * sY * sZ;\n const qy = cX * sY * cZ + sX * cY * sZ;\n const qz = cX * cY * sZ + sX * sY * cZ;\n const qw = cX * cY * cZ - sX * sY * sZ;\n\n return [qx, qy, qz, qw];\n}\n\nfunction rotateQuaternionByAxisAngle(quat, axis, angle) {\n const sHalfAngle = Math.sin(angle / 2);\n const cHalfAngle = Math.cos(angle / 2);\n\n const transformQuat = [\n axis[0] * sHalfAngle,\n axis[1] * sHalfAngle,\n axis[2] * sHalfAngle,\n cHalfAngle\n ];\n\n function multiplyQuaternion(a, b) {\n const qx = a[0] * b[3] + a[3] * b[0] + a[1] * b[2] - a[2] * b[1];\n const qy = a[1] * b[3] + a[3] * b[1] + a[2] * b[0] - a[0] * b[2];\n const qz = a[2] * b[3] + a[3] * b[2] + a[0] * b[1] - a[1] * b[0];\n const qw = a[3] * b[3] - a[0] * b[0] - a[1] * b[1] - a[2] * b[2];\n\n return [qx, qy, qz, qw];\n }\n\n function normalizeQuaternion(quat) {\n const length = Math.sqrt(quat[0] ** 2 + quat[1] ** 2 + quat[2] ** 2 + quat[3] ** 2);\n if (length === 0) {\n return [0, 0, 0, 1];\n }\n\n return quat.map(v => v / length);\n }\n\n return normalizeQuaternion(multiplyQuaternion(quat, transformQuat));\n}\n\nfunction toMat4FromQuat(mat, q) {\n const typed = mat instanceof Float32Array || mat instanceof Float64Array;\n\n if (typed && mat.length >= 16) {\n mat[0] = 1 - 2 * (q[1] ** 2 + q[2] ** 2);\n mat[1] = 2 * (q[0] * q[1] - q[2] * q[3]);\n mat[2] = 2 * (q[0] * q[2] + q[1] * q[3]);\n mat[3] = 0;\n\n mat[4] = 2 * (q[0] * q[1] + q[2] * q[3]);\n mat[5] = 1 - 2 * (q[0] ** 2 + q[2] ** 2);\n mat[6] = 2 * (q[1] * q[2] - q[0] * q[3]);\n mat[7] = 0;\n\n mat[8] = 2 * (q[0] * q[2] - q[1] * q[3]);\n mat[9] = 2 * (q[1] * q[2] + q[0] * q[3]);\n mat[10] = 1 - 2 * (q[0] ** 2 + q[1] ** 2);\n mat[11] = 0;\n\n mat[12] = 0;\n mat[13] = 0;\n mat[14] = 0;\n mat[15] = 1;\n }\n\n return mat;\n}\n\nfunction worldToScreen(quaternion) {\n return !quaternion ? null :\n rotateQuaternionByAxisAngle(\n quaternion,\n [0, 0, 1],\n - orientation.angle * Math.PI / 180\n );\n}\n\n// @ts-ignore\nconst RelativeOrientationSensor = window.RelativeOrientationSensor ||\nclass RelativeOrientationSensor extends DeviceOrientationMixin(Sensor, \"deviceorientation\") {\n constructor(options = {}) {\n super(options);\n\n switch (options.coordinateSystem || 'world') {\n case 'screen':\n Object.defineProperty(this, \"quaternion\", {\n get: () => worldToScreen(this[slot].quaternion)\n });\n break;\n case 'world':\n default:\n Object.defineProperty(this, \"quaternion\", {\n get: () => this[slot].quaternion\n });\n }\n\n this[slot].handleEvent = event => {\n // If there is no sensor we will get values equal to null.\n if (event.absolute || event.alpha === null) {\n // Spec: The implementation can still decide to provide\n // absolute orientation if relative is not available or\n // the resulting data is more accurate. In either case,\n // the absolute property must be set accordingly to reflect\n // the choice.\n this[slot].notifyError(\"Could not connect to a sensor\", \"NotReadableError\");\n return;\n }\n\n if (!this[slot].activated) {\n this[slot].notifyActivatedState();\n }\n\n this[slot].timestamp = performance.now();\n\n this[slot].quaternion = toQuaternionFromEuler(\n event.alpha,\n event.beta,\n event.gamma\n );\n\n this[slot].hasReading = true;\n this.dispatchEvent(new Event(\"reading\"));\n }\n\n this[slot].deactivateCallback = () => {\n this[slot].quaternion = null;\n }\n }\n\n populateMatrix(mat) {\n toMat4FromQuat(mat, this.quaternion);\n }\n}\n\n// @ts-ignore\nconst AbsoluteOrientationSensor = window.AbsoluteOrientationSensor ||\nclass AbsoluteOrientationSensor extends DeviceOrientationMixin(\n Sensor, \"deviceorientationabsolute\", \"deviceorientation\") {\n constructor(options = {}) {\n super(options);\n\n switch (options.coordinateSystem || 'world') {\n case 'screen':\n Object.defineProperty(this, \"quaternion\", {\n get: () => worldToScreen(this[slot].quaternion)\n });\n break;\n case 'world':\n default:\n Object.defineProperty(this, \"quaternion\", {\n get: () => this[slot].quaternion\n });\n }\n\n this[slot].handleEvent = event => {\n // If absolute is set, or webkitCompassHeading exists,\n // absolute values should be available.\n const isAbsolute = event.absolute === true || \"webkitCompassHeading\" in event;\n const hasValue = event.alpha !== null || event.webkitCompassHeading !== undefined;\n\n if (!isAbsolute || !hasValue) {\n // Spec: If an implementation can never provide absolute\n // orientation information, the event should be fired with\n // the alpha, beta and gamma attributes set to null.\n this[slot].notifyError(\"Could not connect to a sensor\", \"NotReadableError\");\n return;\n }\n\n if (!this[slot].activated) {\n this[slot].notifyActivatedState();\n }\n\n this[slot].hasReading = true;\n this[slot].timestamp = performance.now();\n\n const heading = event.webkitCompassHeading != null ? 360 - event.webkitCompassHeading : event.alpha;\n\n this[slot].quaternion = toQuaternionFromEuler(\n heading,\n event.beta,\n event.gamma\n );\n\n this.dispatchEvent(new Event(\"reading\"));\n }\n\n this[slot].deactivateCallback = () => {\n this[slot].quaternion = null;\n }\n }\n\n populateMatrix(mat) {\n toMat4FromQuat(mat, this.quaternion);\n }\n}\n\n// @ts-ignore\nconst Gyroscope = window.Gyroscope ||\nclass Gyroscope extends DeviceOrientationMixin(Sensor, \"devicemotion\") {\n constructor(options) {\n super(options);\n this[slot].handleEvent = event => {\n // If there is no sensor we will get values equal to null.\n if (event.rotationRate.alpha === null) {\n this[slot].notifyError(\"Could not connect to a sensor\", \"NotReadableError\");\n return;\n }\n\n if (!this[slot].activated) {\n this[slot].notifyActivatedState();\n }\n\n this[slot].timestamp = performance.now();\n\n this[slot].x = event.rotationRate.alpha;\n this[slot].y = event.rotationRate.beta;\n this[slot].z = event.rotationRate.gamma;\n\n this[slot].hasReading = true;\n this.dispatchEvent(new Event(\"reading\"));\n }\n\n defineReadonlyProperties(this, slot, {\n x: null,\n y: null,\n z: null\n });\n\n this[slot].deactivateCallback = () => {\n this[slot].x = null;\n this[slot].y = null;\n this[slot].z = null;\n }\n }\n}\n\n// @ts-ignore\nconst Accelerometer = window.Accelerometer ||\nclass Accelerometer extends DeviceOrientationMixin(Sensor, \"devicemotion\") {\n constructor(options) {\n super(options);\n this[slot].handleEvent = event => {\n // If there is no sensor we will get values equal to null.\n if (event.accelerationIncludingGravity.x === null) {\n this[slot].notifyError(\"Could not connect to a sensor\", \"NotReadableError\");\n return;\n }\n\n if (!this[slot].activated) {\n this[slot].notifyActivatedState();\n }\n\n this[slot].timestamp = performance.now();\n\n this[slot].x = event.accelerationIncludingGravity.x;\n this[slot].y = event.accelerationIncludingGravity.y;\n this[slot].z = event.accelerationIncludingGravity.z;\n\n this[slot].hasReading = true;\n this.dispatchEvent(new Event(\"reading\"));\n }\n\n defineReadonlyProperties(this, slot, {\n x: null,\n y: null,\n z: null\n });\n\n this[slot].deactivateCallback = () => {\n this[slot].x = null;\n this[slot].y = null;\n this[slot].z = null;\n }\n }\n}\n\n// @ts-ignore\nconst LinearAccelerationSensor = window.LinearAccelerationSensor ||\nclass LinearAccelerationSensor extends DeviceOrientationMixin(Sensor, \"devicemotion\") {\n constructor(options) {\n super(options);\n this[slot].handleEvent = event => {\n // If there is no sensor we will get values equal to null.\n if (event.acceleration.x === null) {\n this[slot].notifyError(\"Could not connect to a sensor\", \"NotReadableError\");\n return;\n }\n\n if (!this[slot].activated) {\n this[slot].notifyActivatedState();\n }\n\n this[slot].timestamp = performance.now();\n\n this[slot].x = event.acceleration.x;\n this[slot].y = event.acceleration.y;\n this[slot].z = event.acceleration.z;\n\n this[slot].hasReading = true;\n this.dispatchEvent(new Event(\"reading\"));\n }\n\n defineReadonlyProperties(this, slot, {\n x: null,\n y: null,\n z: null\n });\n\n this[slot].deactivateCallback = () => {\n this[slot].x = null;\n this[slot].y = null;\n this[slot].z = null;\n }\n }\n}\n\n// @ts-ignore\nconst GravitySensor = window.GravitySensor ||\n class GravitySensor extends DeviceOrientationMixin(Sensor, \"devicemotion\") {\n constructor(options) {\n super(options);\n this[slot].handleEvent = event => {\n // If there is no sensor we will get values equal to null.\n if (event.acceleration.x === null || event.accelerationIncludingGravity.x === null) {\n this[slot].notifyError(\"Could not connect to a sensor\", \"NotReadableError\");\n return;\n }\n\n if (!this[slot].activated) {\n this[slot].notifyActivatedState();\n }\n\n this[slot].timestamp = performance.now();\n\n this[slot].x = event.accelerationIncludingGravity.x - event.acceleration.x;\n this[slot].y = event.accelerationIncludingGravity.y - event.acceleration.y;\n this[slot].z = event.accelerationIncludingGravity.z - event.acceleration.z;\n\n this[slot].hasReading = true;\n this.dispatchEvent(new Event(\"reading\"));\n }\n\n defineReadonlyProperties(this, slot, {\n x: null,\n y: null,\n z: null\n });\n\n this[slot].deactivateCallback = () => {\n this[slot].x = null;\n this[slot].y = null;\n this[slot].z = null;\n }\n }\n}","// ***************************************\n// |docname| - Geolocation sensor polyfill\n// ***************************************\n// @ts-check\n\"use strict\";\n\nimport \"./sensor.js\";\n\n//const slot = __sensor__;\n\nclass GeolocationSensorSingleton {\n constructor() {\n if (!this.constructor.instance) {\n this.constructor.instance = this;\n }\n\n this.sensors = new Set();\n this.watchId = null;\n this.accuracy = null;\n this.lastPosition = null;\n\n return this.constructor.instance;\n }\n\n async obtainPermission() {\n let state = \"prompt\"; // Default for geolocation.\n // @ts-ignore\n if (navigator.permissions) {\n // @ts-ignore\n const permission = await navigator.permissions.query({ name:\"geolocation\"});\n state = permission.state;\n }\n\n return new Promise(resolve => {\n const successFn = position => {\n this.lastPosition = position;\n resolve(\"granted\");\n }\n\n const errorFn = err => {\n if (err.code === err.PERMISSION_DENIED) {\n resolve(\"denied\");\n } else {\n resolve(state);\n }\n }\n\n const options = { maximumAge: Infinity, timeout: 10 };\n navigator.geolocation.getCurrentPosition(successFn, errorFn, options);\n });\n }\n\n calculateAccuracy() {\n let enableHighAccuracy = false;\n\n for (const sensor of this.sensors) {\n if (sensor[slot].options.accuracy === \"high\") {\n enableHighAccuracy = true;\n break;\n }\n }\n return enableHighAccuracy;\n }\n\n async register(sensor) {\n const permission = await this.obtainPermission();\n if (permission !== \"granted\") {\n sensor[slot].notifyError(\"Permission denied.\", \"NowAllowedError\");\n return;\n }\n\n if (this.lastPosition) {\n const age = performance.now() - this.lastPosition.timeStamp;\n const maxAge = sensor[slot].options.maxAge;\n if (maxAge == null || age <= maxAge) {\n sensor[slot].handleEvent(age, this.lastPosition.coords);\n }\n }\n\n this.sensors.add(sensor);\n\n // Check whether we need to reconfigure our navigation.geolocation\n // watch, ie. tear it down and recreate.\n const accuracy = this.calculateAccuracy();\n if (this.watchId && this.accuracy === accuracy) {\n // We don't need to reset, return.\n return;\n }\n\n if (this.watchId) {\n navigator.geolocation.clearWatch(this.watchId);\n }\n\n const handleEvent = position => {\n this.lastPosition = position;\n\n const timestamp = position.timestamp - performance.timing.navigationStart;\n const coords = position.coords;\n\n for (const sensor of this.sensors) {\n sensor[slot].handleEvent(timestamp, coords);\n }\n }\n\n const handleError = error => {\n let type;\n switch(error.code) {\n case error.TIMEOUT:\n type = \"TimeoutError\";\n break;\n case error.PERMISSION_DENIED:\n type = \"NotAllowedError\";\n break;\n case error.POSITION_UNAVAILABLE:\n type = \"NotReadableError\";\n break;\n default:\n type = \"UnknownError\";\n }\n for (const sensor of this.sensors) {\n sensor[slot].handleError(error.message, type);\n }\n }\n\n const options = {\n enableHighAccuracy: accuracy,\n maximumAge: 0,\n timeout: Infinity\n }\n\n this.watchId = navigator.geolocation.watchPosition(\n handleEvent, handleError, options\n );\n }\n\n deregister(sensor) {\n this.sensors.delete(sensor);\n if (!this.sensors.size && this.watchId) {\n navigator.geolocation.clearWatch(this.watchId);\n this.watchId = null;\n }\n }\n}\n\n// @ts-ignore\nconst GeolocationSensor = window.GeolocationSensor ||\nclass GeolocationSensor extends Sensor {\n constructor(options = {}) {\n super(options);\n\n this[slot].options = options;\n\n const props = {\n latitude: null,\n longitude: null,\n altitude: null,\n accuracy: null,\n altitudeAccuracy: null,\n heading: null,\n speed: null\n }\n\n const propertyBag = this[slot];\n for (const propName in props) {\n propertyBag[propName] = props[propName];\n Object.defineProperty(this, propName, {\n get: () => propertyBag[propName]\n });\n }\n\n this[slot].handleEvent = (timestamp, coords) => {\n if (!this[slot].activated) {\n this[slot].notifyActivatedState();\n }\n\n this[slot].timestamp = timestamp;\n\n this[slot].accuracy = coords.accuracy;\n this[slot].altitude = coords.altitude;\n this[slot].altitudeAccuracy = coords.altitudeAccuracy;\n this[slot].heading = coords.heading;\n this[slot].latitude = coords.latitude;\n this[slot].longitude = coords.longitude;\n this[slot].speed = coords.speed;\n\n this[slot].hasReading = true;\n this.dispatchEvent(new Event(\"reading\"));\n }\n\n this[slot].handleError = (message, type) => {\n this[slot].notifyError(message, type);\n }\n\n this[slot].activateCallback = () => {\n (new GeolocationSensorSingleton()).register(this);\n }\n\n this[slot].deactivateCallback = () => {\n (new GeolocationSensorSingleton()).deregister(this);\n }\n }\n}","// .. Copyright (C) 2012-2020 Bryan A. Jones.\n//\n// This file is part of the CellBotics system.\n//\n// The CellBotics system is free software: you can redistribute it and/or\n// modify it under the terms of the GNU General Public License as\n// published by the Free Software Foundation, either version 3 of the\n// License, or (at your option) any later version.\n//\n// The CellBotics system is distributed in the hope that it will be\n// useful, but WITHOUT ANY WARRANTY; without even the implied warranty\n// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with the CellBotics system. If not, see\n// .\n//\n// **********************************\n// |docname| - Interface with sensors\n// **********************************\n// This provides code to access `sensor APIs `_.\n\"use strict\";\n\nimport \"./permissions_polyfill.js\";\nimport \"./sensor_polyfill/geolocation-sensor.js\";\nimport \"./sensor_polyfill/motion-sensors.js\";\nimport { auto_bind } from \"./auto-bind.js\";\n\n// SimpleSensor\n// ============\n// This class wraps a `Sensor `_ with simple ``start``, ``ready``, and ``stop`` functions.\nclass SimpleSensor {\n constructor() {\n auto_bind(this);\n\n this.sensor = null;\n }\n\n // This was initially based on the MDN Sensor API docs.\n async start(\n // The class to use for the sensor to start. It must be based on the Sensor interface.\n sensor_class,\n // An array of strings, giving the name of the API to ask permissions of for this sensor. See https://developer.mozilla.org/en-US/docs/Web/API/Permissions/query.\n sensor_permission,\n // Options to pass to this sensor's constructor.\n sensor_options\n ) {\n if (this.sensor) {\n throw \"In use. Stop the sensor before starting another.\";\n }\n if (typeof sensor_class !== \"function\") {\n throw \"Not available.\";\n }\n\n // Get permission to use these sensors, if the API is supported.\n if (navigator.permissions) {\n let result = await Promise.all(sensor_permission.map(x => navigator.permissions.query({ name: x })));\n if (!result.every(val => val.state === \"granted\")) {\n throw `Permission to use the ${sensor_permission} sensor was denied.`;\n }\n }\n\n // To access a sensor:\n //\n // #. Create it, then start it, synchronously checking for errors in this process.\n // #. Await for a response from the sensor: an acceptance indicating the sensor works, or a rejection indicating a failure.\n //\n // Since the event handlers to accept or reject the promise must be set up in the synchronous phase, wrap everything in a promise. All the operations above therefore start when the promise is awaited.\n this.sensor = null;\n let on_error;\n let on_reading;\n let p = new Promise((resolve, reject) => {\n try {\n this.sensor = new sensor_class(sensor_options);\n\n // Handle callback errors by rejecting the promise.\n let that = this;\n on_error = event => {\n that.sensor.removeEventListener(\"error\", on_error);\n // Handle runtime errors.\n if (event.error.name === 'NotAllowedError') {\n reject(\"Access to this sensor is not allowed.\");\n } else if (event.error.name === 'NotReadableError' ) {\n reject('Cannot connect to the sensor.');\n }\n reject(`Unknown error: ${event.error.name}`);\n\n }\n this.sensor.addEventListener('error', on_error);\n\n // Wait for the first sensor reading to accept the promise.\n on_reading = event => {\n\n that.sensor.removeEventListener(\"reading\", on_reading);\n resolve();\n }\n this.sensor.addEventListener(\"reading\", on_reading);\n\n this.sensor.start();\n } catch (error) {\n // Handle construction errors.\n if (error.name === 'SecurityError') {\n // See the note above about feature policy.\n reject(\"Sensor construction was blocked by a feature policy.\");\n } else if (error.name === 'ReferenceError') {\n reject(\"Sensor is not supported by the User Agent.\");\n } else {\n reject(error);\n }\n }\n });\n\n // Start the sensor, waiting until it produces a reading or an error.\n try {\n console.log(`Await ${new Date()}`);\n await p;\n } catch (err) {\n this.stop();\n throw err;\n } finally {\n console.log(`Done ${new Date()}`);\n this.sensor.removeEventListener(\"error\", on_error);\n this.sensor.removeEventListener(\"reading\", on_reading);\n }\n }\n\n // True if the sensor is activated and has a reading.\n get ready() {\n return this.sensor && this.sensor.activated && this.sensor.hasReading;\n }\n\n // To save device power, be sure to stop the sensor as soon as the readings are no longer needed.\n stop() {\n this.sensor && this.sensor.stop();\n this.sensor = null;\n }\n}\n\n\n// Abstract helper classes\n// =======================\n// Several sensors return x, y, and z values. Collect the common code here.\nclass SimpleXYZSensor extends SimpleSensor {\n get x() {\n return this.sensor.x;\n }\n\n get y() {\n return this.sensor.y;\n }\n\n get z() {\n return this.sensor.z;\n }\n}\n\n\n// Two sensors return a quaternion or rotation matrix.\nclass SimpleOrientationSensor extends SimpleSensor {\n get quaternion() {\n return this.sensor.quaternion;\n }\n\n populateMatrix(targetMatrix) {\n return this.sensor.populateMatrix(targetMatrix);\n }\n}\n\n\n// Concrete classes\n// ================\n// Note the use of ``window.SensorName`` instead of ``SensorName`` for non-polyfills. This avoids exceptions if the particular sensor isn't defined, producing an ``undefined`` instead. For polyfills, we must use ``SensorName`` instead of ``window.SensorName``.\nexport class SimpleAmbientLightSensor extends SimpleSensor {\n async start(als_options) {\n return super.start(window.AmbientLightSensor, [\"ambient-light-sensor\"], als_options);\n }\n\n get illuminance() {\n return this.sensor.illuminance;\n }\n}\n\n\n// See the `W3C draft spec `_.\nexport class SimpleGeolocationSensor extends SimpleSensor {\n async start(geo_options) {\n return super.start(GeolocationSensor, [\"geolocation\"], geo_options);\n }\n\n get latitude() {\n return this.sensor.latitude;\n }\n\n get longitude() {\n return this.sensor.longitude;\n }\n\n get altitude() {\n return this.sensor.altitude;\n }\n\n get accuracy() {\n return this.sensor.accuracy;\n }\n\n get altitudeAccuracy() {\n return this.sensor.altitudeAccuracy;\n }\n\n get heading() {\n return this.sensor.heading;\n }\n\n get speed() {\n return this.sensor.speed;\n }\n}\n\n\nexport class SimpleAccelerometer extends SimpleXYZSensor {\n async start(accelerometer_options) {\n return super.start(Accelerometer, [\"accelerometer\"], accelerometer_options);\n }\n}\n\n\nexport class SimpleGyroscope extends SimpleXYZSensor {\n async start(gyro_options) {\n return super.start(Gyroscope, [\"gyroscope\"], gyro_options);\n }\n}\n\n\nexport class SimpleLinearAccelerationSensor extends SimpleXYZSensor {\n async start(accel_options) {\n return super.start(LinearAccelerationSensor, [\"accelerometer\"], accel_options);\n }\n}\n\n\nexport class SimpleGravitySensor extends SimpleXYZSensor {\n async start(grav_options) {\n return super.start(GravitySensor, [\"accelerometer\"], grav_options);\n }\n}\n\n\nexport class SimpleMagnetometer extends SimpleXYZSensor {\n async start(mag_options) {\n return super.start(window.Magnetometer, [\"magnetometer\"], mag_options);\n }\n}\n\n\nexport class SimpleAbsoluteOrientationSensor extends SimpleOrientationSensor {\n async start(orient_options) {\n return super.start(AbsoluteOrientationSensor, [\"accelerometer\", \"gyroscope\", \"magnetometer\"], orient_options);\n }\n}\n\n\nexport class SimpleRelativeOrientationSensor extends SimpleOrientationSensor {\n async start(orient_options) {\n return super.start(RelativeOrientationSensor, [\"accelerometer\", \"gyroscope\"], orient_options);\n }\n}\n","// .. Copyright (C) 2012-2020 Bryan A. Jones.\n//\n// This file is part of the CellBotics system.\n//\n// The CellBotics system is free software: you can redistribute it and/or\n// modify it under the terms of the GNU General Public License as\n// published by the Free Software Foundation, either version 3 of the\n// License, or (at your option) any later version.\n//\n// The CellBotics system is distributed in the hope that it will be\n// useful, but WITHOUT ANY WARRANTY; without even the implied warranty\n// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with the CellBotics system. If not, see\n// .\n//\n// ********************************************\n// |docname| - Polyfill for the Permissions API\n// ********************************************\n// This is primarily for iOS devices that don't provide Permissions, but use another method to allow access to various sensors.\n\n\"use strict\";\n\n// Only supply this if there's not Permissions and we have tne iOS flavor available. See sample code in https://dev.to/li/how-to-requestpermission-for-devicemotion-and-deviceorientation-events-in-ios-13-46g2 or the `W3C working draft `_.\nif (\n !navigator.permissions &&\n (typeof DeviceMotionEvent.requestPermission === \"function\") &&\n (typeof DeviceOrientationEvent.requestPermission === \"function\")\n) {\n navigator.permissions = {\n query: options => {\n // Ignore everything but the name, since our use case is only for SimpleSensor.\n switch (options.name) {\n case \"accelerometer\":\n case \"gyroscope\":\n // The requested permissions doesn't allow us to determine which of the following two permissions we need, so ask for both.\n return new Promise((resolve, reject) => {\n Promise.all([\n // The polyfill for the accelerometer, gyro, and related classes needs just this.\n DeviceMotionEvent.requestPermission(),\n // The polyfill for the orientation sensors needs just this.\n DeviceOrientationEvent.requestPermission()\n ]).then(\n // We now have an array of strings, the result of the requestPermission calls. If all are \"granted\", then return {state: \"granted\"}, else return {state: \"denied\"}.\n vals => resolve({state:\n (vals.every(x => x === \"granted\") ? \"granted\" : \"denied\")\n })\n )\n });\n\n // There's nothing else that needs permission to work.\n default:\n return Promise.resolve({state: \"granted\"});\n }\n }\n };\n}\n","// .. Copyright (C) 2012-2020 Bryan A. Jones.\n//\n// This file is part of the CellBotics system.\n//\n// The CellBotics system is free software: you can redistribute it and/or\n// modify it under the terms of the GNU General Public License as\n// published by the Free Software Foundation, either version 3 of the\n// License, or (at your option) any later version.\n//\n// The CellBotics system is distributed in the hope that it will be\n// useful, but WITHOUT ANY WARRANTY; without even the implied warranty\n// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with the CellBotics system. If not, see\n// .\n//\n// *********************************************************\n// |docname| - Automatically bind methods to their instances\n// *********************************************************\n\n\"use strict\";\n\n\n// The following two functions were taken from https://github.com/sindresorhus/auto-bind/blob/master/index.js and lightly modified. They provide an easy way to bind all callable methods to their instance. See `Binding Methods to Class Instance Objects `_ for more discussion on this crazy JavaScript necessity.\n//\n// Gets all non-builtin properties up the prototype chain\nconst getAllProperties = object => {\n\tconst properties = new Set();\n\n\tdo {\n\t\tfor (const key of Reflect.ownKeys(object)) {\n\t\t\tproperties.add([object, key]);\n\t\t}\n\t} while ((object = Reflect.getPrototypeOf(object)) && object !== Object.prototype);\n\n\treturn properties;\n};\n\n\n// Invoke this in the constructor of an object.\nexport function auto_bind(self) {\n for (const [object, key] of getAllProperties(self.constructor.prototype)) {\n if (key === 'constructor') {\n continue;\n }\n\n const descriptor = Reflect.getOwnPropertyDescriptor(object, key);\n if (descriptor && typeof descriptor.value === 'function') {\n self[key] = self[key].bind(self);\n }\n }\n}\n"],"names":["Symbol","Event","orientation","window","GeolocationSensor","Sensor","screen","msOrientation","Object","defineProperty","get","DeviceOrientationMixin","superclass","eventNames","constructor","args","super","eventName","this","slot","activateCallback","addEventListener","handleEvent","capture","deactivateCallback","removeEventListener","RelativeOrientationSensor","AbsoluteOrientationSensor","Gyroscope","Accelerometer","LinearAccelerationSensor","GravitySensor","SimpleSensor","auto_bind","sensor","start","sensor_class","sensor_permission","sensor_options","navigator","permissions","Promise","all","map","x","query","name","every","val","state","on_error","on_reading","p","resolve","reject","that","event","error","console","log","Date","err","stop","ready","activated","hasReading","SimpleXYZSensor","y","z","SimpleOrientationSensor","quaternion","populateMatrix","targetMatrix","SimpleAmbientLightSensor","als_options","AmbientLightSensor","illuminance","SimpleGeolocationSensor","geo_options","latitude","longitude","altitude","accuracy","altitudeAccuracy","heading","speed","SimpleAccelerometer","accelerometer_options","SimpleGyroscope","gyro_options","SimpleLinearAccelerationSensor","accel_options","SimpleGravitySensor","grav_options","SimpleMagnetometer","mag_options","Magnetometer","SimpleAbsoluteOrientationSensor","orient_options","SimpleRelativeOrientationSensor","DeviceMotionEvent","requestPermission","DeviceOrientationEvent","options","then","vals","getAllProperties","object","properties","Set","key","Reflect","ownKeys","add","getPrototypeOf","prototype","self","descriptor","getOwnPropertyDescriptor","value","bind"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/126.a976f62852f30b51.js.map.gz b/_static/126.a976f62852f30b51.js.map.gz new file mode 100644 index 0000000..63d81aa Binary files /dev/null and b/_static/126.a976f62852f30b51.js.map.gz differ diff --git a/_static/128.5bed857c54ac4e8b.js b/_static/128.5bed857c54ac4e8b.js new file mode 100644 index 0000000..1630594 --- /dev/null +++ b/_static/128.5bed857c54ac4e8b.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[128],{34128:(i,e,t)=>{t.r(e),t.d(e,{default:()=>s});var n=t(78673);class s extends n.A{constructor(i){super(i);var e=i.orig;this.origElem=e,this.divid=e.id,this.resultsViewer=$(e).data("results"),this.getIFrameAndQuizname(),this.renderQuizly(),this.caption="Quizly",this.addCaption("runestone")}getIFrameAndQuizname(){var i=$(this.origElem).html(),e=i.search("");this.iframe=i.slice(e,t+8),e=i.search("quizname="),t=i.search("hints"),this.quizname=i.slice(e+9,t-5)}renderQuizly(){this.containerDiv=document.createElement("div"),this.containerDiv.id=this.divid,$(this.containerDiv).addClass(this.origElem.getAttribute("class")),$(this.containerDiv).html(this.iframe),$(this.origElem).replaceWith(this.containerDiv)}submitQuizly(i){var e=i.xml,t=1==i.result?"T":"F",n={event:"quizly",act:"answer:"+("T"==t?"correct":"no"),answer:e,correct:t,div_id:this.divid};this.logBookEvent(n),localStorage.setItem(this.divid,"true")}}$(document).on("runestone:login-complete",(function(){$("[data-component=quizly").each((function(i){try{var e=new s({orig:this});window.componentMap[this.id]=e,function(i,e){void 0===window.component_factory&&(window.component_factory={});var t="quizly_"+e;window.component_factory[t]=function(e){i.submitQuizly(e)}}(e,e.quizname)}catch(i){console.log(`Error rendering Quizly Exercise ${this.id}\n Details: ${i}`),console.log(i.stack)}}))}))}}]); +//# sourceMappingURL=128.5bed857c54ac4e8b.js.map \ No newline at end of file diff --git a/_static/128.5bed857c54ac4e8b.js.gz b/_static/128.5bed857c54ac4e8b.js.gz new file mode 100644 index 0000000..241f7ad Binary files /dev/null and b/_static/128.5bed857c54ac4e8b.js.gz differ diff --git a/_static/128.5bed857c54ac4e8b.js.map b/_static/128.5bed857c54ac4e8b.js.map new file mode 100644 index 0000000..87adaef --- /dev/null +++ b/_static/128.5bed857c54ac4e8b.js.map @@ -0,0 +1 @@ +{"version":3,"file":"128.5bed857c54ac4e8b.js","mappings":"2JAsBe,MAAMA,UAAe,IAChC,WAAAC,CAAYC,GACRC,MAAMD,GACN,IAAIE,EAAOF,EAAKE,KAKhBC,KAAKC,SAAWF,EAChBC,KAAKE,MAAQH,EAAKI,GAGlBH,KAAKI,cAAgBC,EAAEN,GAAMO,KAAK,WAClCN,KAAKO,uBACLP,KAAKQ,eAGLR,KAAKS,QAAU,SACfT,KAAKU,WAAW,YACpB,CAGA,oBAAAH,GACI,IAAII,EAAON,EAAEL,KAAKC,UAAUU,OACxBC,EAAKD,EAAKE,OAAO,WACjBC,EAAKH,EAAKE,OAAO,aACrBb,KAAKe,OAASJ,EAAKK,MAAMJ,EAAIE,EAAK,GAGlCF,EAAKD,EAAKE,OAAO,aACjBC,EAAKH,EAAKE,OAAO,SACjBb,KAAKiB,SAAWN,EAAKK,MAAMJ,EAAK,EAAGE,EAAK,EAE5C,CAGA,YAAAN,GAGIR,KAAKkB,aAAeC,SAASC,cAAc,OAE3CpB,KAAKkB,aAAaf,GAAKH,KAAKE,MAC5BG,EAAEL,KAAKkB,cAAcG,SAASrB,KAAKC,SAASqB,aAAa,UACzDjB,EAAEL,KAAKkB,cAAcP,KAAKX,KAAKe,QAC/BV,EAAEL,KAAKC,UAAUsB,YAAYvB,KAAKkB,aAKtC,CAIA,YAAAM,CAAaC,GAKT,IAAIC,EAASD,EAAY,IACrBE,EAA8B,GAApBF,EAAe,OAAY,IAAM,IAE3CG,EAAY,CACZC,MAAO,SACPC,IAHY,WAAwB,KAAXH,EAAiB,UAAY,MAItDD,OAAQA,EACRC,QAASA,EACTI,OAAQ/B,KAAKE,OAGjBF,KAAKgC,aAAaJ,GAOlBK,aAAaC,QAAQlC,KAAKE,MAAO,OACrC,EAOJG,EAAEc,UAAUgB,GAAG,4BAA4B,WACvC9B,EAAE,0BAA0B+B,MAAK,SAAUC,GACvC,IACI,IAAIC,EAAS,IAAI3C,EAAO,CAAEI,KAAMC,OAChCuC,OAAOC,aAAaxC,KAAKG,IAAMmC,EAe3C,SAAuBA,EAAQrB,QACa,IAA7BsB,OAAOE,oBACdF,OAAOE,kBAAoB,CAAC,GAEhC,IAAIC,EAAU,UAAYzB,EAC1BsB,OAAOE,kBAAkBC,GAAW,SAAUjB,GAC1Ca,EAAOd,aAAaC,EACxB,CACJ,CApBYkB,CAAcL,EAAQA,EAAOrB,SACjC,CAAE,MAAO2B,GACLC,QAAQC,IAAI,mCAAmC9C,KAAKG,0CAC3ByC,KACzBC,QAAQC,IAAIF,EAAIG,MACpB,CACJ,GACJ,G","sources":["webpack://WebComponents/./runestone/quizly/js/quizly.js"],"sourcesContent":["/*\n__author__ = Ralph Morelli\n__date__ = 4/9/2021 */\n\n/* **********\n This script renders the quizly HTML code and sets up functions\n to process the quiz when the user clicks on the quizly 'Check me'\n button. \n\n It gets the data it needs from the Quizly node created by quizly.py\n during the runestone build step.\n\n NOTE: An entry for quizly.js script must be added to the webpack.config.js.\n ************** */\n\n\"use strict\";\n\nimport RunestoneBase from \"../../common/js/runestonebase.js\";\n//import \"../css/poll.css\";\n\nvar DEBUG = false;\n\nexport default class Quizly extends RunestoneBase {\n constructor(opts) {\n super(opts);\n var orig = opts.orig; // Looks something like: {\"orig\":{\"jQuery351095558298548049562\":{\"question_label\":\"1.1.2\"}}}\n if (DEBUG)\n console.log(\n \"DEBUG: Quizly constructor, opts=\" + JSON.stringify(opts)\n );\n this.origElem = orig;\n this.divid = orig.id;\n if (DEBUG)\n console.log(\"DEBUG: Quizly constructor, divid= \" + this.divid);\n this.resultsViewer = $(orig).data(\"results\");\n this.getIFrameAndQuizname();\n this.renderQuizly(); //generates HTML\n // Checks localStorage to see if this quizly has already been completed by this user.\n // this.checkQuizlyStorage();\n this.caption = \"Quizly\";\n this.addCaption(\"runestone\");\n }\n\n // The main content of the quizly node is the iframe.\n getIFrameAndQuizname() {\n var html = $(this.origElem).html();\n var p1 = html.search(\"\");\n this.iframe = html.slice(p1, p2 + 8);\n if (DEBUG) console.log(\"DEBUG: getIFrame() html = \" + html);\n if (DEBUG) console.log(\"DEBUG: getIFrame() iframe = \" + this.iframe);\n p1 = html.search(\"quizname=\");\n p2 = html.search(\"hints\");\n this.quizname = html.slice(p1 + 9, p2 - 5); // Grab the quizname from iframe\n if (DEBUG) console.log(\"DEBUG quizname= \", this.quizname);\n }\n\n // Generates the HTML that the user interacts with\n renderQuizly() {\n var _this = this;\n if (DEBUG) console.log(\"DEBUG: renderQuizly()\");\n this.containerDiv = document.createElement(\"div\");\n // this.quizlyFrame = document.createElement(\"iframe\");\n this.containerDiv.id = this.divid;\n $(this.containerDiv).addClass(this.origElem.getAttribute(\"class\"));\n $(this.containerDiv).html(this.iframe);\n $(this.origElem).replaceWith(this.containerDiv);\n if (DEBUG)\n console.log(\n \"DEBUG: renderQuizly(), this = \" + JSON.stringify(this)\n );\n }\n\n // Called from the exercise when user clicks submit button\n // Checks for the result, sets localstorage and submits to the server\n submitQuizly(result) {\n if (DEBUG)\n console.log(\n \"DEBUG: submitQuizly result = \" + JSON.stringify(result)\n );\n var answer = result[\"xml\"];\n var correct = result[\"result\"] == true ? \"T\" : \"F\";\n var loganswer = \"answer:\" + (correct == \"T\" ? \"correct\" : \"no\"); // backward compatible\n var eventInfo = {\n event: \"quizly\",\n act: loganswer,\n answer: answer,\n correct: correct,\n div_id: this.divid,\n };\n // Log the response to the database\n this.logBookEvent(eventInfo); // in bookfuncs.js\n if (DEBUG)\n console.log(\n \"DEBUG: submitquizly logbookevent = \" +\n JSON.stringify(eventInfo)\n );\n // Log the fact that the user has attempted this quizly exercise to local storage\n localStorage.setItem(this.divid, \"true\");\n }\n}\n\n/*=================================\n== Find the custom HTML tags and ==\n== execute our code on them ==\n=================================*/\n$(document).on(\"runestone:login-complete\", function () {\n $(\"[data-component=quizly\").each(function (index) {\n try {\n var quizly = new Quizly({ orig: this });\n window.componentMap[this.id] = quizly;\n if (DEBUG)\n console.log(\"DEBUG: Quizly rendering, this.id = \" + this.id);\n setupCallback(quizly, quizly.quizname);\n } catch (err) {\n console.log(`Error rendering Quizly Exercise ${this.id}\n Details: ${err}`);\n console.log(err.stack);\n }\n });\n});\n\n// Sets up a unique callback function on the window containing the quizly component\n// The quizly param is a reference to this quizly object so that it can be use during callback.\n// The quizname param is used to construct a unique callback function name\nfunction setupCallback(quizly, quizname) {\n if (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n }\n var fn_name = \"quizly_\" + quizname; // Unique function name\n window.component_factory[fn_name] = function (result) {\n quizly.submitQuizly(result);\n };\n}\n"],"names":["Quizly","constructor","opts","super","orig","this","origElem","divid","id","resultsViewer","$","data","getIFrameAndQuizname","renderQuizly","caption","addCaption","html","p1","search","p2","iframe","slice","quizname","containerDiv","document","createElement","addClass","getAttribute","replaceWith","submitQuizly","result","answer","correct","eventInfo","event","act","div_id","logBookEvent","localStorage","setItem","on","each","index","quizly","window","componentMap","component_factory","fn_name","setupCallback","err","console","log","stack"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/128.5bed857c54ac4e8b.js.map.gz b/_static/128.5bed857c54ac4e8b.js.map.gz new file mode 100644 index 0000000..ffefdff Binary files /dev/null and b/_static/128.5bed857c54ac4e8b.js.map.gz differ diff --git a/_static/131.ee437eeefadd750d.js b/_static/131.ee437eeefadd750d.js new file mode 100644 index 0000000..684d2a8 --- /dev/null +++ b/_static/131.ee437eeefadd750d.js @@ -0,0 +1,2 @@ +(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[131],{8610:function(module){var factory;factory=function(){"use strict";var jSuites=function(e){var t={init:function(){var e=document.querySelector(".japp");t.el=e||document.body;for(var o=document.querySelectorAll("[data-autoload]"),r=0;r0){for(var o=[],r=0;r0&&(e.url.indexOf("?")<0&&(e.url+="?"),e.url+=o.join("&"))}var u=new XMLHttpRequest;return u.open(e.method,e.url,!0),u.setRequestHeader("X-Requested-With","XMLHttpRequest"),"POST"==e.method?(u.setRequestHeader("Accept","application/json"),u.setRequestHeader("Content-Type","application/x-www-form-urlencoded")):"json"==e.dataType&&u.setRequestHeader("Content-Type","text/json"),1!=e.cache&&(u.setRequestHeader("pragma","no-cache"),u.setRequestHeader("cache-control","no-cache")),1==e.withCredentials&&(u.withCredentials=!0),"function"==typeof e.beforeSend&&e.beforeSend(u),u.onload=function(){if(200===u.status)if("json"==e.dataType)try{var o=JSON.parse(u.responseText);e.success&&"function"==typeof e.success&&e.success(o)}catch(t){e.error&&"function"==typeof e.error&&e.error(o)}else o=u.responseText,e.success&&"function"==typeof e.success&&e.success(o);else e.error&&"function"==typeof e.error&&e.error(u.responseText);if(t.ajax.requests&&t.ajax.requests.length){var r=t.ajax.requests.indexOf(u);t.ajax.requests.splice(r,1),t.ajax.requests.length||e.complete&&"function"==typeof e.complete&&e.complete(o)}},o?u.send(o.join("&")):u.send(),t.ajax.requests.push(u),u}};t.ajax.requests=[],t.slideLeft=function(e,t,o){1==t?(e.classList.add("slide-left-in"),setTimeout((function(){e.classList.remove("slide-left-in"),"function"==typeof o&&o()}),400)):(e.classList.add("slide-left-out"),setTimeout((function(){e.classList.remove("slide-left-out"),"function"==typeof o&&o()}),400))},t.slideRight=function(e,t,o){1==t?(e.classList.add("slide-right-in"),setTimeout((function(){e.classList.remove("slide-right-in"),"function"==typeof o&&o()}),400)):(e.classList.add("slide-right-out"),setTimeout((function(){e.classList.remove("slide-right-out"),"function"==typeof o&&o()}),400))},t.slideTop=function(e,t,o){1==t?(e.classList.add("slide-top-in"),setTimeout((function(){e.classList.remove("slide-top-in"),"function"==typeof o&&o()}),400)):(e.classList.add("slide-top-out"),setTimeout((function(){e.classList.remove("slide-top-out"),"function"==typeof o&&o()}),400))},t.slideBottom=function(e,t,o){1==t?(e.classList.add("slide-bottom-in"),setTimeout((function(){e.classList.remove("slide-bottom-in"),"function"==typeof o&&o()}),400)):(e.classList.add("slide-bottom-out"),setTimeout((function(){e.classList.remove("slide-bottom-out"),"function"==typeof o&&o()}),100))},t.fadeIn=function(e,t){e.classList.add("fade-in"),setTimeout((function(){e.classList.remove("fade-in"),"function"==typeof t&&t()}),2e3)},t.fadeOut=function(e,t){e.classList.add("fade-out"),setTimeout((function(){e.classList.remove("fade-out"),"function"==typeof t&&t()}),1e3)},t.keyDownControls=function(e){if(27==e.which){var t=document.querySelectorAll(".jslider");if(t.length>0)for(var o=0;o11?(o.date[0]=parseInt(o.date[0])+1,o.date[1]=1):o.date[1]=parseInt(o.date[1])+1,o.getDays())},o.setValue=function(t){t||(t=""+t);var r=t,n=o.options.value;o.setLabel(r,o.options.format),(s=r.split(" "))[1]||(s[1]="00:00:00");var i=s[1].split(":"),s=s[0].split("-"),l=parseInt(s[0]),a=parseInt(s[1]),u=parseInt(s[2]),c=parseInt(i[0]),d=parseInt(i[1]);o.date=[l,a,u,c,d,0],t=o.setLabel(r,o.options.format),n!=r&&("INPUT"==e.tagName&&(e.value=t),o.options.value=r,"function"==typeof o.options.onchange&&o.options.onchange(e,r,n)),o.getDays()},o.getValue=function(){return o.date?o.options.time?p(o.date[0])+"-"+p(o.date[1])+"-"+p(o.date[2])+" "+p(o.date[3])+":"+p(o.date[4])+":"+p(0):p(o.date[0])+"-"+p(o.date[1])+"-"+p(o.date[2])+" "+p(0)+":"+p(0)+":"+p(0):""},o.update=function(e){if(e.classList.contains("jcalendar-disabled"));else{o.date[2]=e.innerText,o.options.time?(o.date[3]=S.value,o.date[4]=T.value):o.close();var t=v.querySelector(".jcalendar-selected");t&&t.classList.remove("jcalendar-selected"),e.classList.add("jcalendar-selected")}B()},o.reset=function(){o.close(!1,"")},o.getDays=function(){o.options.mode="days";var e=new Date,t=o.date&&o.date[0]?o.date[0]:parseInt(e.getFullYear()),r=o.date&&o.date[1]?o.date[1]:parseInt(e.getMonth())+1,n=o.date&&o.date[2]?o.date[2]:parseInt(e.getDay()),i=o.date&&o.date[3]?o.date[3]:parseInt(e.getHours()),s=o.date&&o.date[4]?o.date[4]:parseInt(e.getMinutes());o.date=[t,r,n,i,s,0],C.innerHTML=t,x.innerHTML=o.options.months[r-1];var l=e.getMonth()==r-1&&e.getFullYear()==t,a=e.getDate(),u=(e=new Date(t,r,0,0,0)).getDate(),c=(e=new Date(t,r-1,0,0,0)).getDay()+1;c-=p=o.options.startingDay||0,L.innerHTML="",(m=document.createElement("tr")).setAttribute("align","center"),L.appendChild(m);for(var d=0;d<7;d++)(h=document.createElement("td")).classList.add("jcalendar-weekday"),h.innerHTML=o.options.weekdays_short[p],m.appendChild(h),++p>6&&(p=0);for(var p=0,b=0,f=0;f<5;f++){var m;(m=document.createElement("tr")).setAttribute("align","center");var j=!0;for(d=0;d<7;d++){var h;if((h=document.createElement("td")).classList.add("jcalendar-set-day"),p>=c&&p=o.options.validRange[0])var v=!0;else v=!1;if(!o.options.validRange[1]||g<=o.options.validRange[1])var y=!0;else y=!1;v&&y||h.classList.add("jcalendar-disabled")}j=!1}m.appendChild(h),p++}0==j&&L.appendChild(m)}o.options.time?O.style.display="":O.style.display="none",B()},o.getMonths=function(){o.options.mode="months";var e=o.options.months;C.innerHTML=o.date[0],x.innerHTML="";var t='';for(d=0;d<12;d++)d>0&&!(d%4)&&(t+=''),t+='";t+="
'+e[d]+"
",L.innerHTML=t},o.getYears=function(){o.options.mode="years";var e=[];for(d=0;d<25;d++)e[d]=parseInt(o.date[0])+(d-12);var t='';for(d=0;d<25;d++)d>0&&!(d%5)&&(t+=''),t+='";t+="
'+e[d]+"
",L.innerHTML=t},o.setLabel=function(e,t){return jSuites.calendar.getDateString(e,t)},o.fromFormatted=function(e,t){return jSuites.calendar.extractDateFromString(e,t)};var P=function(e){var t=e.target.className;"jcalendar-prev"==t?(o.prev(),e.stopPropagation(),e.preventDefault()):"jcalendar-next"==t?(o.next(),e.stopPropagation(),e.preventDefault()):"jcalendar-month"==t?(o.getMonths(),e.stopPropagation(),e.preventDefault()):"jcalendar-year"==t?(o.getYears(),e.stopPropagation(),e.preventDefault()):"jcalendar-set-year"==t?(o.date[0]=e.target.innerText,o.getDays(),e.stopPropagation(),e.preventDefault()):"jcalendar-set-month"==t?(o.date[1]=parseInt(e.target.getAttribute("data-value")),o.getDays(),e.stopPropagation(),e.preventDefault()):"jcalendar-confirm"==t||"jcalendar-update"==t||"jcalendar-close"==t?(o.close(),e.stopPropagation(),e.preventDefault()):"jcalendar-backdrop"==t?(o.close(!1,!1),e.stopPropagation(),e.preventDefault()):"jcalendar-reset"==t?(o.reset(),e.stopPropagation(),e.preventDefault()):e.target.classList.contains("jcalendar-set-day")&&e.target.innerText&&(o.update(e.target),e.stopPropagation(),e.preventDefault())};return e.addEventListener("keyup",(function(e){if(e.target.value&&e.target.value.length>3){var t=jSuites.calendar.extractDateFromString(e.target.value,o.options.format);t&&"true"==e.target.getAttribute("data-completed")&&o.setValue(t)}})),v.addEventListener("swipeleft",(function(e){jSuites.slideLeft(M,0,(function(){o.next(),jSuites.slideRight(M,1)})),e.preventDefault(),e.stopPropagation()})),v.addEventListener("swiperight",(function(e){jSuites.slideRight(M,0,(function(){o.prev(),jSuites.slideLeft(M,1)})),e.preventDefault(),e.stopPropagation()})),"ontouchend"in document.documentElement==1?(v.addEventListener("touchend",P),e.addEventListener("touchend",(function(e){o.open()}))):(v.addEventListener("mouseup",P),e.addEventListener("mouseup",(function(e){o.open()}))),"INPUT"==e.tagName&&(e.parentNode.insertBefore(v,e.nextSibling),e.setAttribute("autocomplete","off"),e.setAttribute("data-mask",o.options.format.toLowerCase()),o.options.readonly&&e.setAttribute("readonly","readonly"),o.options.placeholder&&e.setAttribute("placeholder",o.options.placeholder),e.classList.add("jcalendar-input"),e.value=o.setLabel(o.getValue(),o.options.format)),e.calendar=o,1==o.options.opened&&o.open(),o},jSuites.calendar.prettify=function(e,t){t||(t={justNow:"Just now",xMinutesAgo:"{0}m ago",xHoursAgo:"{0}h ago",xDaysAgo:"{0}d ago",xWeeksAgo:"{0}w ago",xMonthsAgo:"{0} mon ago",xYearsAgo:"{0}y ago"});var o=new Date,r=new Date(e),n=parseInt((o-r)/1e3/60);if(String.prototype.format=function(e){return this.replace("{0}",e)},0==n)var i=t.justNow;else i=n<90?t.xMinutesAgo.format(n):n<1440?t.xHoursAgo.format(Math.round(n/60)):n<20160?t.xDaysAgo.format(Math.round(n/1440)):n<43200?t.xWeeksAgo.format(Math.round(n/10080)):n<1036800?t.xMonthsAgo.format(Math.round(n/43200)):t.xYearsAgo.format(Math.round(n/525600));return i},jSuites.calendar.prettifyAll=function(){for(var e=document.querySelectorAll(".prettydate"),t=0;t12)&&(n=0);var l=r.search("DD");l=o.substr(l,2),(parseInt(l)!=l||l>31)&&(n=0);var a=r.search("HH");a>=0?(a=o.substr(a,2),(!parseInt(a)||a>23)&&(a="00")):a="00";var u=r.search("MI");u>=0?(u=o.substr(u,2),(!parseInt(u)||u>59)&&(u="00")):u="00";var c=r.search("SS");return c>=0?(c=o.substr(c,2),(!parseInt(c)||c>59)&&(c="00")):c="00",1==n&&e.length==r.length?i+"-"+s+"-"+l+" "+a+":"+u+":"+c:""},jSuites.calendar.getDateString=function(e,t){if(t||(t="DD/MM/YYYY"),e){var o=""+e,r="",n="",i="";if((o=o.split(" "))[1]?(n=(r=o[1].split(":"))[1]?r[1]:"00",i=r[2]?r[2]:"00",r=r[0]?r[0]:"00"):(r="00",n="00",i="00"),(o=o[0].split("-"))[0]&&o[1]&&o[2]&&o[0]>0&&o[1]>0&&o[1]<13&&o[2]>0&&o[2]<32){var s=new Date(o[0],o[1]-1,o[2]),l=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"),a=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");o[1]=(o[1].length<2?"0":"")+o[1],o[2]=(o[2].length<2?"0":"")+o[2],r=(r.length<2?"0":"")+r,n=(n.length<2?"0":"")+n,i=(i.length<2?"0":"")+i,e=(e=(e=(e=(e=(e=(e=t).replace("WD",l[s.getDay()])).replace("DD",o[2])).replace("MM",o[1])).replace("YYYY",o[0])).replace("YY",o[0].substring(2,4))).replace("MON",a[parseInt(o[1])-1].toUpperCase()),r&&(e=e.replace("HH24",r)),e=(e=(e=(e=r>12?(e=e.replace("HH12",r-12)).replace("HH",r):(e=e.replace("HH12",r)).replace("HH",r)).replace("MI",n)).replace("MM",n)).replace("SS",i)}else e=""}return e},jSuites.calendar.isOpen=function(e){jSuites.calendar.current&&(e.target.className&&-1!=e.target.className.indexOf("jcalendar")||jSuites.calendar.current.close(!1,!1))},"ontouchstart"in document.documentElement==1?document.addEventListener("touchstart",jSuites.calendar.isOpen):document.addEventListener("mousedown",jSuites.calendar.isOpen),jSuites.color=function(e,t){var o={options:{},values:[]};jSuites.color.current||(jSuites.color.current=null);var r={placeholder:"",value:null,onclose:null,onchange:null,closeOnChange:!0};for(var n in r)t&&t.hasOwnProperty(n)?o.options[n]=t[n]:o.options[n]=r[n];for(var i={red:{50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c"},pink:{50:"#fce4ec",100:"#f8bbd0",200:"#f48fb1",300:"#f06292",400:"#ec407a",500:"#e91e63",600:"#d81b60",700:"#c2185b",800:"#ad1457",900:"#880e4f"},purple:{50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c"},indigo:{50:"#e8eaf6",100:"#c5cae9",200:"#9fa8da",300:"#7986cb",400:"#5c6bc0",500:"#3f51b5",600:"#3949ab",700:"#303f9f",800:"#283593",900:"#1a237e"},blue:{50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1"},cyan:{50:"#e0f7fa",100:"#b2ebf2",200:"#80deea",300:"#4dd0e1",400:"#26c6da",500:"#00bcd4",600:"#00acc1",700:"#0097a7",800:"#00838f",900:"#006064"},teal:{50:"#e0f2f1",100:"#b2dfdb",200:"#80cbc4",300:"#4db6ac",400:"#26a69a",500:"#009688",600:"#00897b",700:"#00796b",800:"#00695c",900:"#004d40"},green:{50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20"},lightgreen:{50:"#f1f8e9",100:"#dcedc8",200:"#c5e1a5",300:"#aed581",400:"#9ccc65",500:"#8bc34a",600:"#7cb342",700:"#689f38",800:"#558b2f",900:"#33691e"},lime:{50:"#f9fbe7",100:"#f0f4c3",200:"#e6ee9c",300:"#dce775",400:"#d4e157",500:"#cddc39",600:"#c0ca33",700:"#afb42b",800:"#9e9d24",900:"#827717"},yellow:{50:"#fffde7",100:"#fff9c4",200:"#fff59d",300:"#fff176",400:"#ffee58",500:"#ffeb3b",600:"#fdd835",700:"#fbc02d",800:"#f9a825",900:"#f57f17"},amber:{50:"#fff8e1",100:"#ffecb3",200:"#ffe082",300:"#ffd54f",400:"#ffca28",500:"#ffc107",600:"#ffb300",700:"#ffa000",800:"#ff8f00",900:"#ff6f00"},orange:{50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100"},deeporange:{50:"#fbe9e7",100:"#ffccbc",200:"#ffab91",300:"#ff8a65",400:"#ff7043",500:"#ff5722",600:"#f4511e",700:"#e64a19",800:"#d84315",900:"#bf360c"},brown:{50:"#efebe9",100:"#d7ccc8",200:"#bcaaa4",300:"#a1887f",400:"#8d6e63",500:"#795548",600:"#6d4c41",700:"#5d4037",800:"#4e342e",900:"#3e2723"},grey:{50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121"},bluegrey:{50:"#eceff1",100:"#cfd8dc",200:"#b0bec5",300:"#90a4ae",400:"#78909c",500:"#607d8b",600:"#546e7a",700:"#455a64",800:"#37474f",900:"#263238"}},s=[],l=Object.keys(i),a=Object.keys(i[l[0]]),u=0;u0?e.style.left=n-s.width+"px":e.style.left="10px":e.style.left=n+"px"},o.close=function(){e.classList.contains("jcontextmenu-focus")&&e.classList.remove("jcontextmenu-focus")},o.create=function(t){e.innerHTML="";for(var o=0;o65&&o.open()}))}else l.setAttribute("readonly","readonly");return!o.options.placeholder&&e.getAttribute("placeholder")&&(o.options.placeholder=e.getAttribute("placeholder")),o.options.placeholder&&l.setAttribute("placeholder",o.options.placeholder),s.appendChild(l),"searchbar"==o.options.type?s.appendChild(c):a.appendChild(c),a.appendChild(u),e.appendChild(s),e.appendChild(a),e.appendChild(d),o.init=function(){o.options.url?jSuites.ajax({url:o.options.url,method:"GET",dataType:"json",success:function(t){t&&(o.setData(t),null!=o.options.value&&o.setValue(o.options.value),"function"==typeof o.options.onload&&o.options.onload(e,o,t))}}):(o.setData(),null!=o.options.value&&o.setValue(o.options.value),"function"==typeof o.options.onload&&o.options.onload(e,o,data)),1==o.options.opened&&o.open()},o.getUrl=function(){return o.options.url},o.setUrl=function(e){o.options.url=e,jSuites.ajax({url:o.options.url,method:"GET",dataType:"json",success:function(e){o.setData(e)}})},o.createItem=function(e){var t={};if(t.element=document.createElement("div"),t.element.className="jdropdown-item",t.value=e.id,t.text=e.name,t.textLowerCase=""+e.name.toLowerCase(),e.image){var o=document.createElement("img");o.className="jdropdown-image",o.src=e.image,e.title||o.classList.add("jdropdown-image-small"),t.element.appendChild(o)}var r=document.createElement("div");if(r.className="jdropdown-description",r.innerHTML=e.name,e.title){var n=document.createElement("div");n.className="jdropdown-title",n.innerHTML=e.title,r.appendChild(n)}return t.element.appendChild(r),t},o.setData=function(e){e&&(o.options.data=e),e=o.options.data,a.removeChild(u),u.innerHTML="",o.reset(),o.items=[];var t=[],r=[];if(e.length){for(var n=0;n0)for(n=0;n=0;t--)"none"!=o.items[t].element.style.display&&(e=t);if(null==e)return!1;o.updateCursor(e)},o.last=function(){for(var e=null,t=o.currentIndex+1;t=0;t--)if("none"!=o.items[t].element.style.display){e=t;break}if(null==e)return!1;o.updateCursor(e)},jSuites.dropdown.hasEvents||("ontouchsend"in document.documentElement==1?document.addEventListener("touchsend",jSuites.dropdown.mouseup):document.addEventListener("mouseup",jSuites.dropdown.mouseup),document.addEventListener("keydown",jSuites.dropdown.onkeydown),jSuites.dropdown.hasEvents=!0),o.init(),e.dropdown=o,o},jSuites.dropdown.hasEvents=!1,jSuites.dropdown.mouseup=function(e){var t=jSuites.getElement(e.target,"jdropdown");if(t){var o=t.dropdown;if(e.target.classList.contains("jdropdown-header"))t.classList.contains("jdropdown-focus")&&t.classList.contains("jdropdown-default")?o.close():o.open();else if(e.target.classList.contains("jdropdown-group-name")){var r=e.target.nextSibling.children;if("none"!=e.target.nextSibling.style.display)for(var n=0;n0&&t.prev():40==e.which?null==o?t.firstVisible():o+1");var d=function(e){var t=document.createElement("div");t.innerHTML=e;var r=t.querySelectorAll("img");if(r.length)for(var n=0;n150&&(o.description=o.description.substr(0,150)+"...")),t.items[0].snippet.thumbnails.medium.url&&(o.image=t.items[0].snippet.thumbnails.medium.url),b(o)}}}):console.error("The youtubeKey is not defined")},o.getWebsite=function(e){o.options.remoteParser?jSuites.ajax({url:o.options.remoteParser+encodeURI(e.trim()),method:"GET",dataType:"json",success:function(t){var o={title:"",description:"",image:"",host:e,url:e};t.title&&(o.title=t.title),t.description&&(o.description=t.description),t.image?o.image=t.image:t["og:image"]&&(o.image=t["og:image"]),t.host&&(o.host=t.host),t.url&&(o.url=t.url),b(o)}}):console.log("The remoteParser is not defined")},o.setData=function(e){u.innerHTML=e,cursor()},o.getData=function(e){if(e){s={content:""};var t=u.querySelectorAll(".post-tag");if(t.length){s.users=[];for(var o=0;o/g,"\n")).replace(/<\/div>/g,"\n")).replace(/<(?:.|\n)*?>/gm,""),s.content=i.trim(),s=JSON.stringify(s)}else var s=u.innerHTML;return s},o.reset=function(){u.innerHTML=""},o.addPdf=function(e){if("data"!=e.result.substr(0,4))console.error("Invalid source");else{var t=document.createElement("canvas");t.width=60,t.height=60;var o=new Image;t.getContext("2d").drawImage(o,0,0,t.width,t.height),t.toBlob((function(t){var o=document.createElement("img");o.src=window.URL.createObjectURL(t),o.setAttribute("data-extension","pdf"),e.name&&o.setAttribute("data-name",e.name),e.size&&o.setAttribute("data-size",e.size),e.date&&o.setAttribute("data-date",e.date),o.className="jfile pdf",p(o),jSuites.files[o.src]=e.result.substr(e.result.indexOf(",")+1)}))}},o.addImage=function(e,t,r,n){if("data"==e.substr(0,4)||o.options.remoteParser){if("data"==e.substr(0,4))i=(i=(i=e.split(";"))[0].split("/"))[1];else{var i=e.substr(e.lastIndexOf(".")+1);e=o.options.remoteParser+e}var s=new Image;s.onload=function(){var e=document.createElement("canvas");e.width=s.width,e.height=s.height,e.getContext("2d").drawImage(s,0,0,e.width,e.height),e.toBlob((function(o){var s=document.createElement("img");s.src=window.URL.createObjectURL(o),s.setAttribute("tabindex","900"),s.setAttribute("data-extension",i),t&&s.setAttribute("data-name",t),r&&s.setAttribute("data-size",r),n&&s.setAttribute("data-date",n),s.className="jfile";var l=e.toDataURL();p(s),jSuites.files[s.src]=l.substr(l.indexOf(",")+1)}))},s.src=e}else console.error("remoteParser not defined in your initialization")},o.addFile=function(e){for(var t=[],r=0;ro.options.maxFileSize)alert("The file is too big");else{var n=e[r].type.split("/");(n="image"==n[0]?1:"pdf"==n[1]?2:0)?(t[r]=new FileReader,t[r].index=r,t[r].type=n,t[r].name=e[r].name,t[r].date=e[r].lastModified,t[r].size=e[r].size,t[r].addEventListener("load",(function(e){2==e.target.type?1==o.options.acceptFiles&&o.addPdf(e.target):o.addImage(e.target.result,e.target.name,e.total,e.target.lastModified)}),!1),t[r].readAsDataURL(e[r])):alert("The extension is not allowed")}},o.destroy=function(){u.removeEventListener("mouseup",m),u.removeEventListener("mousedown",j),u.removeEventListener("mousemove",h),u.removeEventListener("keyup",g),u.removeEventListener("keydown",v),u.removeEventListener("dragstart",C),u.removeEventListener("dragenter",x),u.removeEventListener("dragover",w),u.removeEventListener("drop",E),u.removeEventListener("paste",y),"function"==typeof o.options.onblur&&u.removeEventListener("blur",A),"function"==typeof o.options.onfocus&&u.removeEventListener("focus",N),e.editor=null,e.classList.remove("jeditor-container"),a.remove(),l.remove(),u.remove()};var m=function(e){s=!1},j=function(e){var t=function(t){var o=t.getBoundingClientRect();o.width-(e.clientX-o.left)<40&&e.clientY-o.top<40&&(t.innerHTML="",t.remove())};if("IMG"==e.target.tagName)if(e.target.style.cursor){var o=e.target.getBoundingClientRect();s={e:e.target,x:e.clientX,y:e.clientY,w:o.width,h:o.height,d:e.target.style.cursor},e.target.style.width||(e.target.style.width=o.width+"px"),e.target.style.height||(e.target.style.height=o.height+"px");var r=window.getSelection();if(r.rangeCount)for(var n=0;n
"),"function"==typeof o.options.onkeyup&&o.options.onkeyup(t,e)},v=function(t){if(1==o.options.parseURL&&f(),"function"==typeof o.options.onenter&&13==t.which){var r=o.getData();o.options.onenter(o,e,r,t)}"function"==typeof o.options.onkeydown&&o.options.onkeydown(t,e)},y=function(e){if(e.clipboardData||e.originalEvent.clipboardData)var t=(e.originalEvent||e).clipboardData.getData("text/html"),r=(e.originalEvent||e).clipboardData.getData("text/plain"),n=(e.originalEvent||e).clipboardData.files;else window.clipboardData&&(t=window.clipboardData.getData("Html"),r=window.clipboardData.getData("Text"),n=window.clipboardData.files);if(n.length)o.addFile(n);else{r=r.split("\r\n");var i="";if("DIV"!=e.target.nodeName||e.target.classList.contains("jeditor"))for(s=0;s"+r[s]+"":i+="


";else for(var s=0;s\r\n");document.execCommand("insertHtml",!1,i),1==o.options.acceptImages&&d(t)}e.preventDefault()},C=function(e){s&&s.e&&e.preventDefault()},x=function(t){s||0==o.options.dropZone||e.classList.add("jeditor-dragging")},w=function(t){s||0==o.options.dropZone||(i&&clearTimeout(i),i=setTimeout((function(){e.classList.remove("jeditor-dragging")}),100))},E=function(t){if(s||0==o.options.dropZone);else{var r=null;document.caretRangeFromPoint?r=document.caretRangeFromPoint(t.clientX,t.clientY):t.rangeParent&&(r=document.createRange()).setStart(t.rangeParent,t.rangeOffset);var n=window.getSelection();n.removeAllRanges(),n.addRange(r),n.anchorNode.parentNode.focus();var i=(t.originalEvent||t).dataTransfer.getData("text/html"),l=(t.originalEvent||t).dataTransfer.getData("text/plain"),a=(t.originalEvent||t).dataTransfer.files;a.length?o.addFile(a):l&&d(i),e.classList.remove("jeditor-dragging"),t.preventDefault()}},A=function(){o.options.onblur(o,e,o.getData())},N=function(){o.options.onfocus(o,e,o.getData())};if(u.addEventListener("mouseup",m),u.addEventListener("mousedown",j),u.addEventListener("mousemove",h),u.addEventListener("keyup",g),u.addEventListener("keydown",v),u.addEventListener("dragstart",C),u.addEventListener("dragenter",x),u.addEventListener("dragover",w),u.addEventListener("drop",E),u.addEventListener("paste",y),"function"==typeof o.options.onblur&&u.addEventListener("blur",A),"function"==typeof o.options.onfocus&&u.addEventListener("focus",N),"function"==typeof o.options.onload&&o.options.onload(e,u),u.innerHTML=c,e.appendChild(u),o.options.snippet&&b(o.options.snippet),null==o.options.toolbar&&(o.options.toolbar=jSuites.editor.getDefaultToolbar()),o.options.toolbar){for(var L=0;L 800px"}};for(var n in r)t&&t.hasOwnProperty(n)?o.options[n]=t[n]:o.options[n]=r[n];e.classList.add("jupload"),o.addImage=function(e){e.date||(e.date="");var t=document.createElement("img");return t.setAttribute("data-date",e.lastmodified?e.lastmodified:e.date),t.setAttribute("data-name",e.name),t.setAttribute("data-size",e.size),t.setAttribute("data-small",e.small?e.small:""),t.setAttribute("data-cover",e.cover?1:0),t.setAttribute("data-extension",e.extension),t.setAttribute("src",e.file),t.className="jfile",t.style.width="100%",t},o.addImages=function(t){1==o.options.singleFile&&(e.innerHTML="");for(var r=0;r=0)var e=!0;l.innerHTML="",l.appendChild(a),l.appendChild(j),l.appendChild(A),e&&l.appendChild(_),l.appendChild(H),l.appendChild(B),F.value="Request a new password",m.value=1,s="requestNewPassword"},o.codeConfirmation=function(){l.innerHTML="",l.appendChild(a),l.appendChild(f),l.appendChild(p),l.appendChild(H),l.appendChild(B),F.value="Confirm code",m.value=2,s="codeConfirmation"},o.changeMyPassword=function(e){l.innerHTML="",l.appendChild(a),l.appendChild(f),l.appendChild(I),l.appendChild(T),l.appendChild(H),l.appendChild(B),F.value="Change my password",b.value=e,s="changeMyPassword"},o.requestAccess=function(){l.innerHTML="",l.appendChild(a),l.appendChild(A),l.appendChild(I),l.appendChild(H),1==o.options.facebookAuthentication&&l.appendChild(z),l.appendChild(q),l.appendChild(O),l.appendChild(q),1==o.options.newProfile&&l.appendChild(G),F.value="Login",L.value="",window.localStorage.getItem("username")?(E.value=window.localStorage.getItem("username"),L.focus()):E.focus(),s="requestAccess"},o.requestLoginViaFacebook=function(){"undefined"==typeof deviceNotificationToken?FB.getLoginStatus((function(e){e.status&&"connected"==e.status?o.execute({f:e.authResponse.accessToken}):FB.login((function(e){e.authResponse?o.execute({f:e.authResponse.accessToken}):o.showMessage("Not authorized by facebook")}),{scope:"public_profile,email"})}),!0):(jDestroy=function(){fbLogin.removeEventListener("loadstart",jStart),fbLogin.removeEventListener("loaderror",jError),fbLogin.removeEventListener("exit",jExit),fbLogin.close(),fbLogin=null},jStart=function(e){var t=e.url;t.indexOf("access_token")>=0&&setTimeout((function(){var e=t.match(/=(.*?)&/);e[1].length>32&&o.execute({f:e[1]}),jDestroy()}),500),t.indexOf("error=access_denied")>=0&&(setTimeout(jDestroy,500),o.showMessage("Not authorized by facebook"))},jError=function(e){jDestroy()},jExit=function(e){jDestroy()},fbLogin=window.open(o.options.facebookUrl,"_blank","location=no,closebuttoncaption=Exit,disallowoverscroll=yes,toolbar=no"),fbLogin.addEventListener("loadstart",jStart),fbLogin.addEventListener("loaderror",jError),fbLogin.addEventListener("exit",jExit)),s="requestLoginViaFacebook"},o.execute=function(t){if("newProfile"==s){var r=new RegExp(/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/);if(!E.value||!r.test(E.value))var n="Invalid e-mail address";if(r=new RegExp(/^[a-zA-Z0-9\_\-\.\s+]+$/),g.value&&r.test(g.value)||(n="Invalid username, please use only characters and numbers"),n)return o.showMessage(n),!1}else if("changeMyPassword"==s){if(L.value.length<3)n="Password is too short";else if(L.value!=S.value)n="Password should match";else if("function"==typeof o.options.newPasswordValidation){var i=o.options.newPasswordValidation(o,L.value,L.value);null!=i&&(n=i)}if(n)return o.showMessage(n),!1}if(""!=E.value&&window.localStorage.setItem("username",E.value),Array.prototype.indexOf.call(l.children,_)>=0&&""==V.value)return o.showMessage("Please enter the captch code below"),!1;var a=o.options.url;o.options.deviceToken&&(a+="?token="+o.options.deviceToken),t||((t=jSuites.getFormElements(e)).password&&(t.password=jSuites.login.sha512(t.password)),Array.prototype.indexOf.call(l.children,p)>=0&&d.value&&(t.h=jSuites.login.sha512(d.value))),e.classList.add("jlogin-loading"),a="newProfile"==s&&o.options.newProfileUrl?o.options.newProfileUrl:o.options.url,jSuites.ajax({url:a,method:"POST",dataType:"json",data:t,success:function(t){e.classList.remove("jlogin-loading"),function(e){e&&(1==e.success&&("requestNewPassword"==s?o.codeConfirmation():"codeConfirmation"==s?o.requestAccess():"newProfile"==s&&(o.requestAccess(),e.newProfile=!0),e.token&&(o.options.accessToken=e.token,window.localStorage.setItem("Access-Token",e.token))),e.message&&o.showMessage(e.message),e.data?(l.insertBefore(_,H),U.setAttribute("src","data:image/png;base64,"+e.data)):Array.prototype.indexOf.call(l.children,_)>=0&&_.remove(),e.hash?o.changeMyPassword(e.hash):e.url&&(1==e.success?"function"==typeof o.options.onsuccess?o.options.onsuccess(e):e.message?setTimeout((function(){window.location.href=e.url}),2e3):window.location.href=e.url:"function"==typeof o.options.onerror&&o.options.onerror(e)))}(t)},error:function(t){e.classList.remove("jlogin-loading"),"function"==typeof o.options.onerror&&o.options.onerror(t)}})};var K=window.location.href.split("?");return K[1]&&130==K[1].length&&"h="==K[1].substr(0,2)?o.changeMyPassword(K[1].substr(2)):o.requestAccess(),o},jSuites.login.sha512=function(e){function t(e,t){this.highOrder=e,this.lowOrder=t}var o,r,n,i,s,l,a,u,c,d,p=[new t(1779033703,4089235720),new t(3144134277,2227873595),new t(1013904242,4271175723),new t(2773480762,1595750129),new t(1359893119,2917565137),new t(2600822924,725511199),new t(528734635,4215389547),new t(1541459225,327033209)],b=[new t(1116352408,3609767458),new t(1899447441,602891725),new t(3049323471,3964484399),new t(3921009573,2173295548),new t(961987163,4081628472),new t(1508970993,3053834265),new t(2453635748,2937671579),new t(2870763221,3664609560),new t(3624381080,2734883394),new t(310598401,1164996542),new t(607225278,1323610764),new t(1426881987,3590304994),new t(1925078388,4068182383),new t(2162078206,991336113),new t(2614888103,633803317),new t(3248222580,3479774868),new t(3835390401,2666613458),new t(4022224774,944711139),new t(264347078,2341262773),new t(604807628,2007800933),new t(770255983,1495990901),new t(1249150122,1856431235),new t(1555081692,3175218132),new t(1996064986,2198950837),new t(2554220882,3999719339),new t(2821834349,766784016),new t(2952996808,2566594879),new t(3210313671,3203337956),new t(3336571891,1034457026),new t(3584528711,2466948901),new t(113926993,3758326383),new t(338241895,168717936),new t(666307205,1188179964),new t(773529912,1546045734),new t(1294757372,1522805485),new t(1396182291,2643833823),new t(1695183700,2343527390),new t(1986661051,1014477480),new t(2177026350,1206759142),new t(2456956037,344077627),new t(2730485921,1290863460),new t(2820302411,3158454273),new t(3259730800,3505952657),new t(3345764771,106217008),new t(3516065817,3606008344),new t(3600352804,1432725776),new t(4094571909,1467031594),new t(275423344,851169720),new t(430227734,3100823752),new t(506948616,1363258195),new t(659060556,3750685593),new t(883997877,3785050280),new t(958139571,3318307427),new t(1322822218,3812723403),new t(1537002063,2003034995),new t(1747873779,3602036899),new t(1955562222,1575990012),new t(2024104815,1125592928),new t(2227730452,2716904306),new t(2361852424,442776044),new t(2428436474,593698344),new t(2756734187,3733110249),new t(3204031479,2999351573),new t(3329325298,3815920427),new t(3391569614,3928383900),new t(3515267271,566280711),new t(3940187606,3454069534),new t(4118630271,4000239992),new t(116418474,1914138554),new t(174292421,2731055270),new t(289380356,3203993006),new t(460393269,320620315),new t(685471733,587496836),new t(852142971,1086792851),new t(1017036298,365543100),new t(1126000580,2618297676),new t(1288033470,3409855158),new t(1501505948,4234509866),new t(1607167915,987167468),new t(1816402316,1246189591)],f=new Array(64);function m(e,o){var r,n,i;return r=(65535&e.lowOrder)+(65535&o.lowOrder),i=(65535&(n=(e.lowOrder>>>16)+(o.lowOrder>>>16)+(r>>>16)))<<16|65535&r,r=(65535&e.highOrder)+(65535&o.highOrder)+(n>>>16),new t((65535&(n=(e.highOrder>>>16)+(o.highOrder>>>16)+(r>>>16)))<<16|65535&r,i)}function j(e,o,r,n){var i,s,l;return i=(65535&e.lowOrder)+(65535&o.lowOrder)+(65535&r.lowOrder)+(65535&n.lowOrder),l=(65535&(s=(e.lowOrder>>>16)+(o.lowOrder>>>16)+(r.lowOrder>>>16)+(n.lowOrder>>>16)+(i>>>16)))<<16|65535&i,i=(65535&e.highOrder)+(65535&o.highOrder)+(65535&r.highOrder)+(65535&n.highOrder)+(s>>>16),new t((65535&(s=(e.highOrder>>>16)+(o.highOrder>>>16)+(r.highOrder>>>16)+(n.highOrder>>>16)+(i>>>16)))<<16|65535&i,l)}function h(e,o,r,n,i){var s,l,a;return s=(65535&e.lowOrder)+(65535&o.lowOrder)+(65535&r.lowOrder)+(65535&n.lowOrder)+(65535&i.lowOrder),a=(65535&(l=(e.lowOrder>>>16)+(o.lowOrder>>>16)+(r.lowOrder>>>16)+(n.lowOrder>>>16)+(i.lowOrder>>>16)+(s>>>16)))<<16|65535&s,s=(65535&e.highOrder)+(65535&o.highOrder)+(65535&r.highOrder)+(65535&n.highOrder)+(65535&i.highOrder)+(l>>>16),new t((65535&(l=(e.highOrder>>>16)+(o.highOrder>>>16)+(r.highOrder>>>16)+(n.highOrder>>>16)+(i.highOrder>>>16)+(s>>>16)))<<16|65535&s,a)}function g(e,o,r){return new t(e.highOrder&o.highOrder^e.highOrder&r.highOrder^o.highOrder&r.highOrder,e.lowOrder&o.lowOrder^e.lowOrder&r.lowOrder^o.lowOrder&r.lowOrder)}function v(e,o,r){return new t(e.highOrder&o.highOrder^~e.highOrder&r.highOrder,e.lowOrder&o.lowOrder^~e.lowOrder&r.lowOrder)}function y(e,o){return o<=32?new t(e.highOrder>>>o|e.lowOrder<<32-o,e.lowOrder>>>o|e.highOrder<<32-o):new t(e.lowOrder>>>o|e.highOrder<<32-o,e.highOrder>>>o|e.lowOrder<<32-o)}function C(e){var o=y(e,28),r=y(e,34),n=y(e,39);return new t(o.highOrder^r.highOrder^n.highOrder,o.lowOrder^r.lowOrder^n.lowOrder)}function x(e){var o=y(e,14),r=y(e,18),n=y(e,41);return new t(o.highOrder^r.highOrder^n.highOrder,o.lowOrder^r.lowOrder^n.lowOrder)}function w(e){var o=y(e,1),r=y(e,8),n=E(e,7);return new t(o.highOrder^r.highOrder^n.highOrder,o.lowOrder^r.lowOrder^n.lowOrder)}function E(e,o){return o<=32?new t(e.highOrder>>>o,e.lowOrder>>>o|e.highOrder<<32-o):new t(0,e.highOrder<<32-o)}var A,N,L,I,M=8*(e=function(e){return unescape(encodeURIComponent(e))}(e)).length;e=function(e){for(var t=[],o=8*e.length,r=0;r>5]|=(255&e.charCodeAt(r/8))<<24-r%32;return t}(e),e[M>>5]|=128<<24-M%32,e[31+(M+128>>10<<5)]=M;for(var S=0;S>2]>>8*(3-i%4),r+=o.charAt(t>>4&15)+o.charAt(15&t);return r}(D)},jSuites.mask=function(){var e={},t=0,o=[],r=[];return e.run=function(r,n,i){if(r&&n){if(i||(i="."),r==Number(r))var s=(""+r).split("."),l=(r=s[0],s[1]);else r=""+r;var a;if(t=0,o=[],e.prepare(n),a=r)for(var u=0;u46){if(t=0,o=[],e.prepare(i),n.target.selectionStart1&&parseInt(e)<10?(o[t]="0"+e,t++,!0):parseInt(e)<10&&(o[t]=e,!0):(1==o[t]&&o[t]<2&&parseInt(e)<3||0==o[t]&&o[t]<10)&&(o[t]+=e,t++,!0);if("dd"==r[t])return null==o[t]||""==o[t]?parseInt(e)>3&&parseInt(e)<10?(o[t]="0"+e,t++,!0):parseInt(e)<10&&(o[t]=e,!0):(3==o[t]&&parseInt(e)<2||o[t]<3&&parseInt(e)<10)&&(o[t]+=e,t++,!0);if("hh24"==r[t])return null==o[t]||""==o[t]?parseInt(e)>2&&parseInt(e)<10?(o[t]="0"+e,t++,!0):parseInt(e)<10&&(o[t]=e,!0):(2==o[t]&&parseInt(e)<4||o[t]<2&&parseInt(e)<10)&&(o[t]+=e,t++,!0);if("hh"==r[t])return null==o[t]||""==o[t]?parseInt(e)>1&&parseInt(e)<10?(o[t]="0"+e,t++,!0):parseInt(e)<10&&(o[t]=e,!0):(1==o[t]&&parseInt(e)<3||o[t]<1&&parseInt(e)<10)&&(o[t]+=e,t++,!0);if("mi"==r[t]||"ss"==r[t])return null==o[t]||""==o[t]?parseInt(e)>5&&parseInt(e)<10?(o[t]="0"+e,t++,!0):parseInt(e)<10&&(o[t]=e,!0):parseInt(e)<10&&(o[t]+=e,t++,!0);if("yy"==r[t]||"yyyy"==r[t])return parseInt(e)<10&&(null==o[t]||""==o[t]?o[t]=e:o[t]+=e,o[t].length==r[t].length&&t++,!0);if("#"==r[t]||"#.##"==r[t]||"#,##"==r[t]||"# ##"==r[t]){if(e.match(/[0-9]/g)){if("#.##"==r[t])var n=".";else n="#,##"==r[t]?",":"# ##"==r[t]?" ":"";if(null==o[t]||""==o[t])o[t]=e;else if(o[t]+=e,n){o[t]=o[t].match(/[0-9]/g).join("");for(var i=[],s=0,l=o[t].length-1;l>=0;l--)i.push(o[t][l]),++s%3||i.push(n);i=i.reverse(),o[t]=i.join(""),o[t].substr(0,1)==n&&(o[t]=o[t].substr(1))}return!0}if("#.##"==r[t]&&"."==e);else if("#,##"==r[t]&&","==e);else if("# ##"==r[t]&&" "==e);else if(o[t]&&(t++,r[t])){if(r[t]==e)return o[t]=e,!0;if("0"==r[t]&&r[t+1]==e)return t++,o[t]=e,!0}return!1}if("0"==r[t])return!!e.match(/[0-9]/g)&&(o[t]=e,t++,!0);if("a"==r[t])return!!e.match(/[a-zA-Z]/g)&&(o[t]=e,t++,!0);if(null!=r[t]){if("\\a"==r[t])var a="a";else a="\\0"==r[t]?"0":"[-]"==r[t]?"-"==e||"+"==e?e:" ":r[t];if(o[t]=a,e==a)return t++,!0}t++}while(r[t])},e.prepare=function(e){r=[];for(var t=0;t",47:"?"},r=e.which;return t.hasOwnProperty(r)&&(r=t[r]),!e.shiftKey&&r>=65&&r<=90?String.fromCharCode(r+32):e.shiftKey&&o.hasOwnProperty(r)?o[r]:96<=r&&r<=105?String.fromCharCode(r-48):String.fromCharCode(r)},e}(),jSuites.mobile=(jSuites.el&&jSuites.el.addEventListener("mousedown",(function(e){e.target.classList.contains("option-title")&&(e.target.classList.contains("selected")?e.target.classList.remove("selected"):e.target.classList.add("selected"))})),{options:{}}),jSuites.pages=function(){var container=null,current=null,createPage=function(options,callback){var page=document.createElement("div");return page.classList.add("page"),page.style.display="none",page.options=options||{},current?container.insertBefore(page,current.nextSibling):container.appendChild(page),jSuites.ajax({url:page.options.url,method:"GET",success:function(result){jSuites.refresh(page,page.options.onpush),page.innerHTML=result;for(var script=page.getElementsByTagName("script"),i=0;i800?jSuites.fadeIn(n):jSuites.slideTop(n,1)},t.hide=function(){jSuites.getWindowWidth()>800?jSuites.fadeOut(n,(function(){n.parentNode.removeChild(n)})):jSuites.slideTop(n,0,(function(){n.parentNode.removeChild(n)}))},t.show(),1==t.options.autoHide&&setTimeout((function(){t.hide()}),t.options.timeout),jSuites.getWindowWidth()<800&&n.addEventListener("swipeup",(function(e){t.hide(),e.preventDefault(),e.stopPropagation()})),t},jSuites.rating=function(e,t){var o={options:{}},r={number:5,value:0,tooltip:["Very bad","Bad","Average","Good","Very good"],onchange:null};for(var n in r)t&&t.hasOwnProperty(n)?o.options[n]=t[n]:o.options[n]=r[n];e.classList.add("jrating");for(var i=0;i0)for(var n=0;n0)for(n=0;ne.offsetY?(e.path[0].style.borderTop="1px dotted #ccc",e.path[0].style.borderBottom=""):(e.path[0].style.borderTop="",e.path[0].style.borderBottom="1px dotted #ccc")})),e.addEventListener("dragleave",(function(e){e.path[0].style.borderTop="",e.path[0].style.borderBottom=""})),e.addEventListener("dragend",(function(e){e.path[1].querySelector(".dragging").classList.remove("dragging")})),e.addEventListener("drop",(function(e){var t=e.path[1].querySelector(".dragging");e.target.clientHeight/2>e.offsetY?e.path[1].insertBefore(t,e.path[0]):e.path[1].insertBefore(t,e.path[0].nextSibling),e.path[0].style.borderTop="",e.path[0].style.borderBottom=""}));for(var o=0;o=0&&o.open(t)},o.create=function(t,r){"function"==typeof o.options.create?o.options.create():(o.appendElement(t,r),"function"==typeof o.options.oncreate&&o.options.oncreate(e,r))},o.appendElement=function(e,t){if(e||(1==o.options.autoName?(e=o.options.prefixName,e+=" "+(parseInt(a.children.length)+1)):e=prompt("Title?","")),e){var r=document.createElement("div");r.innerHTML=e,o.options.allowCreate?l.insertBefore(r,l.lastChild):l.appendChild(r),t||(t=document.createElement("div")),a.appendChild(t),o.selectIndex(r)}},o.options.data){e.innerHTML="";var l=document.createElement("div"),a=document.createElement("div");l.classList.add("jtabs-headers"),a.classList.add("jtabs-content"),e.appendChild(l),e.appendChild(a);for(var u=0;u0&&e.children.length>=o.options.limit)alert(o.options.limitMessage+" "+o.options.limit);else{var s=d();if(t&&"string"!=typeof t){s&&s.parentNode.classList.contains("jtags")&&(s.innerText.replace("\n","")||e.removeChild(s));for(var l=0;l<=t.length;l++)(!o.options.limit||e.children.length",e.appendChild(a))}else{var a;(a=document.createElement("div")).innerHTML=t||"
",s&&s.parentNode.classList.contains("jtags")?e.insertBefore(a,s.nextSibling):e.appendChild(a)}r&&setTimeout((function(){c(a)}),0),u(),"function"==typeof o.options.onchange&&o.options.onchange(e,o,t||"")}},o.getData=function(){for(var t=[],r=0;r
"},o.isValid=function(){for(var t=0,o=0;o",e.appendChild(r)}9==t.which||186==t.which||188==t.which?(window.getSelection().anchorOffset>1&&(!o.options.limit||e.children.length1&&(!o.options.limit||e.children.length0&&l--,i.children[l].classList.add("selected"),t.preventDefault()):40==t.which&&i&&""!=i.style.display&&(i.children[l].classList.remove("selected"),l<9&&l++,i.children[l].classList.add("selected"),t.preventDefault())},m=function(e){if(39==e.which){var t=window.getSelection().anchorOffset;t>1&&t==b&&o.add()}else 13==e.which||38==e.which||40==e.which?e.preventDefault():(a&&clearTimeout(a),a=setTimeout((function(){var e=window.getSelection();o.options.search&&o.search(e),a=null}),300));u()},j=function(e){if(e.clipboardData||e.originalEvent.clipboardData){(e.originalEvent||e).clipboardData.getData("text/html");var t=(e.originalEvent||e).clipboardData.getData("text/plain")}else window.clipboardData&&(window.clipboardData.getData("Html"),t=window.clipboardData.getData("Text"));o.setValue(t),e.preventDefault()},h=function(t){if(t.target.parentNode&&t.target.parentNode.classList.contains("jtags")&&(t.target.classList.contains("jtags_label")||t.target.classList.contains("jtags_error"))){const o=t.target.getBoundingClientRect();o.width-(t.clientX-o.left)<16&&(e.removeChild(t.target),e.focus())}i&&(i.style.display="")},g=function(t){if((!e.children.length||o.getValue(e.children.length-1))&&(!o.options.limit||e.children.length",e.appendChild(r)}"function"==typeof o.options.onfocus&&o.options.onfocus(e,o,o.getValue())},v=function(t){i&&setTimeout((function(){i.style.display=""}),200);for(var r=0;r
","function"==typeof o.options.onload&&o.options.onload(e,o),e.tags=o,o},jSuites.tracker=function(e,t){var o={options:{}},r={url:null,message:"Are you sure? There are unsaved information in your form",ignore:!1,currentHash:null,submitButton:null,onload:null,onbeforesave:null,onsave:null};for(var n in r)t&&t.hasOwnProperty(n)?o.options[n]=t[n]:o.options[n]=r[n];return o.setUrl=function(e){o.options.url=e},o.load=function(){jSuites.ajax({url:o.options.url,method:"GET",dataType:"json",success:function(t){for(var r=e.querySelectorAll("input, select, textarea"),n=0;n\r\n"),t+=o.validateElement(r[n]));return t},o.getError=function(){return!!o.validation()},o.setHash=function(){return o.getHash(o.getElements())},o.getHash=function(e){var t,o=0;if(0===e.length)return o;for(t=0;t\nWebsite: https://bossanova.uk/jexcel/v3"};for(var property in defaults)if(options&&options.hasOwnProperty(property))if("text"===property)for(var textKey in obj.options[property]=defaults[property],options[property])options[property].hasOwnProperty(textKey)&&(obj.options[property][textKey]=options[property][textKey]);else obj.options[property]=options[property];else obj.options[property]=defaults[property];obj.el=el,obj.corner=null,obj.contextMenu=null,obj.textarea=null,obj.ads=null,obj.content=null,obj.table=null,obj.thead=null,obj.tbody=null,obj.rows=[],obj.results=null,obj.searchInput=null,obj.toolbar=null,obj.pagination=null,obj.pageNumber=null,obj.headerContainer=null,obj.colgroupContainer=null,obj.headers=[],obj.records=[],obj.history=[],obj.formula=[],obj.colgroup=[],obj.selection=[],obj.highlighted=[],obj.selectedCell=null,obj.selectedContainer=null,obj.style=[],obj.data=null,obj.cursor=null,obj.historyIndex=-1,obj.ignoreEvents=!1,obj.ignoreHistory=!1,obj.edition=null,obj.hashString=null,obj.resizing=null,obj.dragging=null,1==obj.options.lazyLoading&&0==obj.options.tableOverflow&&0==obj.options.fullscreen&&(console.error("JEXCEL: The lazyloading only works when tableOverflow = yes or fullscreen = yes"),obj.options.lazyLoading=!1),obj.fullscreen=function(e){null==e&&(e=!obj.options.fullscreen),obj.options.fullscreen!=e&&(obj.options.fullscreen=e,1==e?el.classList.add("fullscreen"):el.classList.remove("fullscreen"))},obj.prepareTable=function(){var e=obj.options.columns.length;if(obj.options.data&&void 0!==obj.options.data[0]){var t=Object.keys(obj.options.data[0]);t.length>e&&(e=t.length)}obj.options.minDimensions[0]>e&&(e=obj.options.minDimensions[0]);for(var o=[],r=0;r0&&obj.options.paginationOptions&&obj.options.paginationOptions.length>0){obj.paginationDropdown=document.createElement("select"),obj.paginationDropdown.classList.add("jexcel_pagination_dropdown"),obj.paginationDropdown.onchange=function(){obj.options.pagination=parseInt(this.value),obj.page(0)};for(var n=0;n0)if(obj.options.nestedHeaders[0]&&obj.options.nestedHeaders[0][0])for(var s=0;sn?s:n,u=l>i?l:i;for(t=0;t=c&&t0&&n++}return o},obj.getJson=function(e){for(var t=[],o=obj.options.columns.length,r=obj.options.data.length,n=0;n200)&&(r.style.whiteSpace="pre-wrap"),e>0&&(o||r.innerHTML?obj.records[t][e-1].style.overflow="hidden":e==obj.options.columns.length-1&&(r.style.overflow="hidden")),r},obj.createCellHeader=function(e){var t=obj.options.columns[e].width?obj.options.columns[e].width:obj.options.defaultColWidth,o=obj.options.columns[e].align?obj.options.columns[e].align:obj.options.defaultColAlign;obj.headers[e]=document.createElement("td"),obj.headers[e].innerHTML=obj.options.columns[e].title?obj.options.columns[e].title:jexcel.getColumnName(e),obj.headers[e].setAttribute("data-x",e),obj.headers[e].style.textAlign=o,obj.options.columns[e].title&&obj.headers[e].setAttribute("title",obj.options.columns[e].title),obj.colgroup[e]=document.createElement("col"),obj.colgroup[e].setAttribute("width",t),"hidden"==obj.options.columns[e].type&&(obj.headers[e].style.display="none",obj.colgroup[e].style.display="none")},obj.createNestedHeader=function(e){var t=document.createElement("tr");t.classList.add("jexcel_nested");var o=document.createElement("td");t.appendChild(o);for(var r=0,n=0;n1?obj.records[u[1]][u[0]].setAttribute("colspan",t):t=1,o>1?obj.records[u[1]][u[0]].setAttribute("rowspan",o):o=1,obj.options.mergeCells[e]=[t,o,[]],obj.records[u[1]][u[0]].setAttribute("data-merged","true"),obj.records[u[1]][u[0]].style.overflow="hidden";for(var p=[],b=u[1];b0||l>0)&&(obj.records[r[1]+s][r[0]+l]=n[2][i],obj.records[r[1]+s][r[0]+l].style.display="",t&&t[i]&&obj.updateCell(r[0]+l,r[1]+s,t[i]),i++);obj.updateSelection(obj.records[r[1]][r[0]],obj.records[r[1]+s-1][r[0]+l-1]),o||delete obj.options.mergeCells[e]}},obj.destroyMerged=function(e){if(obj.options.mergeCells){obj.options.mergeCells;for(var t=Object.keys(obj.options.mergeCells),o=0;o1?s-1:0);null==t?l<=e&&a>=e&&o.push(r[n]):t?l=e&&o.push(r[n]):l<=e&&a>e&&o.push(r[n])}return o},obj.isRowMerged=function(e,t){var o=[];if(obj.options.mergeCells)for(var r=Object.keys(obj.options.mergeCells),n=0;n1?s-1:0);null==t?l<=e&&a>=e&&o.push(r[n]):t?l=e&&o.push(r[n]):l<=e&&a>e&&o.push(r[n])}return o},obj.openEditor=function(e,t,o){var r=e.getAttribute("data-y"),n=e.getAttribute("data-x");obj.ignoreEvents||"function"==typeof obj.options.oneditionstart&&obj.options.oneditionstart(el,e,n,r),n>0&&(obj.records[r][n-1].style.overflow="hidden");var i=function(t){var o=e.getBoundingClientRect(),r=document.createElement(t);return r.style.width=o.width+"px",r.style.height=o.height-2+"px",r.style.minHeight=o.height-2+"px",e.classList.add("editor"),e.innerHTML="",e.appendChild(r),r};if(1==e.classList.contains("readonly"));else if(obj.edition=[obj.records[r][n],obj.records[r][n].innerHTML,n,r],obj.options.columns[n].editor)obj.options.columns[n].editor.openEditor(e,el,t,o);else if("hidden"==obj.options.columns[n].type);else if("checkbox"==obj.options.columns[n].type||"radio"==obj.options.columns[n].type){var s=!e.children[0].checked;obj.setValue(e,s),obj.edition=null}else if("dropdown"==obj.options.columns[n].type||"autocomplete"==obj.options.columns[n].type){if(s=obj.options.data[r][n],"function"==typeof obj.options.columns[n].filter)var l=obj.options.columns[n].filter(el,e,n,r,obj.options.columns[n].source);else l=obj.options.columns[n].source;var a=i("div"),u={data:l,multiple:!!obj.options.columns[n].multiple,autocomplete:!(!obj.options.columns[n].autocomplete&&"autocomplete"!=obj.options.columns[n].type),opened:!0,value:obj.options.columns[n].multiple?s.split(";"):s,width:"100%",height:a.style.minHeight,position:1==obj.options.tableOverflow||1==obj.options.fullscreen,onclose:function(){obj.closeEditor(e,!0)}};obj.options.columns[n].options&&obj.options.columns[n].options.type&&(u.type=obj.options.columns[n].options.type),jSuites.dropdown(a,u)}else if("calendar"==obj.options.columns[n].type||"color"==obj.options.columns[n].type)s=obj.options.data[r][n],(a=i("input")).value=s,1!=obj.options.tableOverflow&&1!=obj.options.fullscreen||(obj.options.columns[n].options.position=!0),obj.options.columns[n].options.value=obj.options.data[r][n],obj.options.columns[n].options.opened=!0,obj.options.columns[n].options.onclose=function(t,o){obj.closeEditor(e,!0)},"color"==obj.options.columns[n].type?jSuites.color(a,obj.options.columns[n].options):jSuites.calendar(a,obj.options.columns[n].options).setValue(s),a.focus();else if("image"==obj.options.columns[n].type){var c=e.children[0];(a=i("div")).style.position="relative";var d=document.createElement("div");d.classList.add("jclose"),c&&c.src&&d.appendChild(c),a.appendChild(d),jSuites.image(d,obj.options.imageOptions);const t=e.getBoundingClientRect(),o=d.getBoundingClientRect();window.innerHeight0)for(var l=0;l200)?obj.records[t][e].style.whiteSpace="pre-wrap":obj.records[t][e].style.whiteSpace=""}e>0&&(obj.records[t][e-1].style.overflow=o?"hidden":""),obj.ignoreEvents||"function"==typeof obj.options.onchange&&obj.options.onchange(el,obj.records[t]&&obj.records[t][e]?obj.records[t][e]:null,e,t,o,c.oldValue)}else var c={x:e,y:t,col:e,row:t};return c},obj.copyData=function(e,t){var o=obj.getData(!0,!0),r=obj.selectedContainer,n=parseInt(e.getAttribute("data-x")),i=parseInt(e.getAttribute("data-y")),s=parseInt(t.getAttribute("data-x")),l=parseInt(t.getAttribute("data-y")),a=[],u=!1;if(r[0]==n){if(i=obj.selectedCell[1]&&t<=obj.selectedCell[3]||o>=obj.selectedCell[1]&&o<=obj.selectedCell[3]))return void obj.resetSelection()}else if(obj.selectedCell&&(t>=obj.selectedCell[0]&&t<=obj.selectedCell[2]||o>=obj.selectedCell[0]&&o<=obj.selectedCell[2]))return void obj.resetSelection()},obj.resetSelection=function(e){if(obj.highlighted.length){u=1;for(var t=0;t0?o+(n-1):o,l=i>0?r+(i-1):r;else s=o,l=r;for(var a=o;a<=s;a++)obj.headers[a]&&obj.headers[a].classList.remove("selected");for(a=r;a<=l;a++)obj.rows[a]&&obj.rows[a].classList.remove("selected")}}else var u=0;return obj.highlighted=[],obj.selectedCell=null,obj.corner.style.top="-2000px",obj.corner.style.left="-2000px",1!=obj.ignoreEvents&&1==e&&obj.options.onblur&&"function"==typeof obj.options.onblur&&1==u&&obj.options.onblur(el),u},obj.updateSelection=function(e,t,o){var r=e.getAttribute("data-x"),n=e.getAttribute("data-y");if(t)var i=t.getAttribute("data-x"),s=t.getAttribute("data-y");else i=r,s=n;obj.updateSelectionFromCoords(r,n,i,s,o)},obj.updateSelectionFromCoords=function(e,t,o,r,n){var i=obj.resetSelection();if(null==o&&(o=e),null==r&&(r=t),e>=obj.headers.length&&(e=obj.headers.length-1),t>=obj.rows.length&&(t=obj.rows.length-1),o>=obj.headers.length&&(o=obj.headers.length-1),r>=obj.rows.length&&(r=obj.rows.length-1),obj.selectedCell=[e,t,o,r],null!=e){if(obj.records[t][e]&&obj.records[t][e].classList.add("highlight-selected"),parseInt(e)1&&(pl&&(l=p+f-1)),m&&(bu&&(u=b+m-1))}var j=null,h=null,g=null,v=null;for(d=a;d<=u;d++)"none"!=obj.rows[d].style.display&&(null==g&&(g=d),v=d);for(c=s;c<=l;c++){for(d=a;d<=u;d++)"none"!=obj.rows[d].style.display&&"none"!=obj.records[d][c].style.display&&(obj.records[d][c].classList.add("highlight"),obj.highlighted.push(obj.records[d][c]));"hidden"!=obj.options.columns[c].type&&(null==j&&(j=c),h=c)}for(j||(j=0),h||(h=0),c=j;c<=h;c++)"hidden"!=obj.options.columns[c].type&&(obj.records[g][c]&&obj.records[g][c].classList.add("highlight-top"),obj.records[v][c]&&obj.records[v][c].classList.add("highlight-bottom"),obj.headers[c].classList.add("selected"));for(d=g;d<=v;d++)"none"!=obj.rows[d].style.display&&(obj.records[d][j].classList.add("highlight-left"),obj.records[d][h].classList.add("highlight-right"),obj.rows[d].classList.add("selected"));obj.selectedContainer=[j,g,h,v]}1!=obj.ignoreEvents&&(obj.options.onfocus&&"function"==typeof obj.options.onfocus&&0==i&&obj.options.onfocus(el),"function"==typeof obj.options.onselection&&obj.options.onselection(el,j,g,h,v,n)),obj.updateCornerPosition()},obj.removeCopySelection=function(){for(var e=0;e0)var s=parseInt(n)+1,l=parseInt(e);else s=parseInt(e),l=parseInt(o)-1;if(t-i>0)var a=parseInt(i)+1,u=parseInt(t);else a=parseInt(t),u=parseInt(r)-1;l-sobj.content.scrollTop+30&&pobj.content.scrollLeft&&d0&&("object"==typeof e&&(e=e.getAttribute("data-x")),o||(o=obj.colgroup[e].getAttribute("width")),obj.colgroup[e].setAttribute("width",t),obj.options.columns[e].width=t,obj.setHistory({action:"setWidth",column:e,oldValue:o,newValue:t}),1!=obj.ignoreEvents&&"function"==typeof obj.options.onresizecolumn&&obj.options.onresizecolumn(el,e,t,o),obj.updateCornerPosition())},obj.setHeight=function(e,t,o){t>0&&("object"==typeof e&&(e=e.getAttribute("data-y")),o||(o=obj.rows[e].getAttribute("height"))||(o=obj.rows[e].getBoundingClientRect().height),t=parseInt(t),obj.rows[e].style.height=t+"px",obj.options.rows[e]||(obj.options.rows[e]={}),obj.options.rows[e].height=t,obj.setHistory({action:"setHeight",row:e,oldValue:o,newValue:t}),1!=obj.ignoreEvents&&"function"==typeof obj.options.onresizerow&&obj.options.onresizerow(el,e,t,o),obj.updateCornerPosition())},obj.getHeight=function(e){if(e)"object"==typeof e&&(e=$(e).getAttribute("data-y")),t=obj.rows[e].style.height;else for(var t=[],o=0;o=0){if(Object.keys(obj.options.mergeCells).length>0){if(!confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure))return!1;obj.destroyMerged()}t=null==t?obj.headers[e].classList.contains("arrow-down")?1:0:t?1:0,Array.prototype.orderBy=function(e,t){return this.slice(0).sort((function(o,r){var n=""==o[e]?"":Number(o[e])==o[e]?Number(o[e]):o[e].toLowerCase(),i=""==r[e]?"":Number(r[e])==r[e]?Number(r[e]):r[e].toLowerCase();return t?""==n&&""!=i?1:""!=n&&""==i||n>i?-1:ni?1:n0)obj.page(0);else if(1==obj.options.lazyLoading)obj.loadPage(0);else for(o=0;o0){if(e>t)var r=1;else r=0;if(obj.isRowMerged(e).length||obj.isRowMerged(t,r).length){if(!confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure))return!1;obj.destroyMerged()}}if(1==obj.options.search){if(obj.results&&obj.results.length!=obj.rows.length){if(!confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure))return!1;obj.resetSearch()}obj.results=null}o||(Array.prototype.indexOf.call(obj.tbody.children,obj.rows[t])>=0?e>t?obj.tbody.insertBefore(obj.rows[e],obj.rows[t]):obj.tbody.insertBefore(obj.rows[e],obj.rows[t].nextSibling):obj.tbody.removeChild(obj.rows[e])),obj.rows.splice(t,0,obj.rows.splice(e,1)[0]),obj.records.splice(t,0,obj.records.splice(e,1)[0]),obj.options.data.splice(t,0,obj.options.data.splice(e,1)[0]),obj.options.pagination>0&&obj.tbody.children.length!=obj.options.pagination&&obj.page(obj.pageNumber),obj.setHistory({action:"moveRow",oldValue:e,newValue:t}),obj.updateTableReferences(),1!=obj.ignoreEvents&&"function"==typeof obj.options.onmoverow&&obj.options.onmoverow(el,e,t)},obj.insertRow=function(e,t,o){if(1==obj.options.allowInsertRow){var r=[];if(e>0)var n=e;else n=1,e&&(r=e);o=!!o;var i=obj.options.data.length-1;if((null==t||t>=parseInt(i)||t<0)&&(t=i),"function"==typeof obj.options.onbeforeinsertrow&&!obj.options.onbeforeinsertrow(el,t,n,o))return console.log("onbeforeinsertrow returned false"),!1;if(Object.keys(obj.options.mergeCells).length>0&&obj.isRowMerged(t,o).length){if(!confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure))return!1;obj.destroyMerged()}if(1==obj.options.search){if(obj.results&&obj.results.length!=obj.rows.length){if(!confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure))return!1;obj.resetSearch()}obj.results=null}for(var s=o?t:t+1,l=obj.records.splice(s),a=obj.options.data.splice(s),u=obj.rows.splice(s),c=[],d=[],p=[],b=s;b=0&&obj.tbody.insertBefore(m,u[0]):Array.prototype.indexOf.call(obj.tbody.children,obj.rows[t])>=0&&obj.tbody.appendChild(m),c.push(obj.records[b]),d.push(obj.options.data[b]),p.push(m)}Array.prototype.push.apply(obj.records,l),Array.prototype.push.apply(obj.options.data,a),Array.prototype.push.apply(obj.rows,u),obj.options.pagination>0&&obj.page(obj.pageNumber),obj.setHistory({action:"insertRow",rowNumber:t,numOfRows:n,insertBefore:o,rowRecords:c,rowData:d,rowNode:p}),obj.updateTableReferences(),1!=obj.ignoreEvents&&"function"==typeof obj.options.oninsertrow&&obj.options.oninsertrow(el,t,n,c,o)}},obj.deleteRow=function(e,t){if(1==obj.options.allowDeleteRow)if(1==obj.options.allowDeletingAllRows||obj.options.data.length>1){if(null==e){var o=obj.getSelectedRows();o[0]?(e=parseInt(o[0].getAttribute("data-y")),t=o.length):(e=obj.options.data.length-1,t=1)}var r=obj.options.data.length-1;if((null==e||e>r||e<0)&&(e=r),t||(t=1),e+t>=obj.options.data.length&&(t=obj.options.data.length-e),"function"==typeof obj.options.onbeforedeleterow&&!obj.options.onbeforedeleterow(el,e,t))return console.log("onbeforedeleterow returned false"),!1;if(parseInt(e)>-1){var n=!1;if(Object.keys(obj.options.mergeCells).length>0)for(var i=e;i=0&&(obj.rows[i].className="",obj.rows[i].parentNode.removeChild(obj.rows[i]));var s=obj.records.splice(e,t),l=obj.options.data.splice(e,t),a=obj.rows.splice(e,t);obj.options.pagination>0&&obj.tbody.children.length!=obj.options.pagination&&obj.page(obj.pageNumber),obj.conditionalSelectionUpdate(1,e,e+t-1),obj.setHistory({action:"deleteRow",rowNumber:e,numOfRows:t,insertBefore:1,rowRecords:s,rowData:l,rowNode:a}),obj.updateTableReferences(),1!=obj.ignoreEvents&&"function"==typeof obj.options.ondeleterow&&obj.options.ondeleterow(el,e,t,s)}}else console.error("JEXCEL. It is not possible to delete the last row")},obj.moveColumn=function(e,t){if(Object.keys(obj.options.mergeCells).length>0){if(e>t)var o=1;else o=0;if(obj.isColMerged(e).length||obj.isColMerged(t,o).length){if(!confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure))return!1;obj.destroyMerged()}}if((e=parseInt(e))>(t=parseInt(t))){obj.headerContainer.insertBefore(obj.headers[e],obj.headers[t]),obj.colgroupContainer.insertBefore(obj.colgroup[e],obj.colgroup[t]);for(var r=0;r0)var i=e;else i=1,e&&(n=e);o=!!o;var s=obj.options.columns.length-1;if((null==t||t>=parseInt(s)||t<0)&&(t=s),"function"==typeof obj.options.onbeforeinsertcolumn&&!obj.options.onbeforeinsertcolumn(el,t,i,o))return console.log("onbeforeinsertcolumn returned false"),!1;if(Object.keys(obj.options.mergeCells).length>0&&obj.isColMerged(t,o).length){if(!confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure))return!1;obj.destroyMerged()}r||(r=[]);for(var l=0;l0)if(obj.options.nestedHeaders[0]&&obj.options.nestedHeaders[0][0])for(var C=0;C1){if(null==e){var o=obj.getSelectedColumns(!0);o.length?(e=parseInt(o[0]),t=parseInt(o.length)):(e=obj.headers.length-1,t=1)}var r=obj.options.data[0].length-1;if((null==e||e>r||e<0)&&(e=r),t||(t=1),t>obj.options.data[0].length-e&&(t=obj.options.data[0].length-e),"function"==typeof obj.options.onbeforedeletecolumn&&!obj.options.onbeforedeletecolumn(el,e,t))return console.log("onbeforedeletecolumn returned false"),!1;if(parseInt(e)>-1){var n=!1;if(Object.keys(obj.options.mergeCells).length>0)for(var i=e;i0)if(obj.options.nestedHeaders[0]&&obj.options.nestedHeaders[0][0])for(var p=0;p0){for(var e=0,t=obj.rows.length-1;t>=0;t--){for(var o=!1,r=0;r0&&obj.insertRow(obj.options.minSpareRows-e)}if(obj.options.minSpareCols>0){var n=0;for(r=obj.headers.length-1;r>=0;r--){for(o=!1,t=0;t0&&obj.insertColumn(obj.options.minSpareCols-n)}if("function"==typeof obj.options.updateTable){for(obj.options.detachForUpdates&&el.removeChild(obj.content),t=0;t0)if(chainLoopProtection[r])obj.records[t][e].innerHTML="#ERROR",obj.formula[r]="";else{chainLoopProtection[r]=!0;for(var n=0;n-1)return console.error("Self Reference detected"),"#ERROR";if(tokens)for(var i=0;i=0)if(r[1])e=Number(r[0]+"."+r[1]);else e=Number(r[0]+".00");else e=null;return e},obj.row=function(e){},obj.col=function(e){},obj.up=function(e,t){if(e?obj.selectedCell[3]>0&&obj.up.visible(1,t?0:1):(obj.selectedCell[1]>0&&obj.up.visible(0,t?0:1),obj.selectedCell[2]=obj.selectedCell[0],obj.selectedCell[3]=obj.selectedCell[1]),obj.updateSelectionFromCoords(obj.selectedCell[0],obj.selectedCell[1],obj.selectedCell[2],obj.selectedCell[3]),1==obj.options.lazyLoading)if(0==obj.selectedCell[1]||0==obj.selectedCell[3])obj.loadPage(0),obj.updateSelectionFromCoords(obj.selectedCell[0],obj.selectedCell[1],obj.selectedCell[2],obj.selectedCell[3]);else if(obj.loadValidation())obj.updateSelectionFromCoords(obj.selectedCell[0],obj.selectedCell[1],obj.selectedCell[2],obj.selectedCell[3]);else{var o=parseInt(obj.tbody.firstChild.getAttribute("data-y"));obj.selectedCell[1]-o<30&&(obj.loadUp(),obj.updateSelectionFromCoords(obj.selectedCell[0],obj.selectedCell[1],obj.selectedCell[2],obj.selectedCell[3]))}else if(obj.options.pagination>0){var r=obj.whichPage(obj.selectedCell[3]);r!=obj.pageNumber&&obj.page(r)}obj.updateScroll(1)},obj.up.visible=function(e,t){if(0==e)var o=parseInt(obj.selectedCell[0]),r=parseInt(obj.selectedCell[1]);else o=parseInt(obj.selectedCell[2]),r=parseInt(obj.selectedCell[3]);if(0==t){for(var n=0;n=0;o--)if("none"!=obj.records[o][e].style.display&&"none"!=obj.rows[o].style.display){if(obj.records[o][e].getAttribute("data-merged")&&obj.records[o][e]==obj.records[t][e])continue;t=o;break}return t},obj.down=function(e,t){if(e?obj.selectedCell[3]0){var o=obj.whichPage(obj.selectedCell[3]);o!=obj.pageNumber&&obj.page(o)}obj.updateScroll(3)},obj.down.visible=function(e,t){if(0==e)var o=parseInt(obj.selectedCell[0]),r=parseInt(obj.selectedCell[1]);else o=parseInt(obj.selectedCell[2]),r=parseInt(obj.selectedCell[3]);if(0==t){for(var n=obj.rows.length-1;n>r;n--)if("none"!=obj.records[n][o].style.display&&"none"!=obj.rows[n].style.display){r=n;break}}else r=obj.down.get(o,r);0==e?(obj.selectedCell[0]=o,obj.selectedCell[1]=r):(obj.selectedCell[2]=o,obj.selectedCell[3]=r)},obj.down.get=function(e,t){e=parseInt(e);for(var o=(t=parseInt(t))+1;oo;n--)if("none"!=obj.records[r][n].style.display){o=n;break}}else o=obj.right.get(o,r);0==e?(obj.selectedCell[0]=o,obj.selectedCell[1]=r):(obj.selectedCell[2]=o,obj.selectedCell[3]=r)},obj.right.get=function(e,t){e=parseInt(e),t=parseInt(t);for(var o=e+1;o0&&obj.left.visible(1,t?0:1):(obj.selectedCell[0]>0&&obj.left.visible(0,t?0:1),obj.selectedCell[2]=obj.selectedCell[0],obj.selectedCell[3]=obj.selectedCell[1]),obj.updateSelectionFromCoords(obj.selectedCell[0],obj.selectedCell[1],obj.selectedCell[2],obj.selectedCell[3]),obj.updateScroll(0)},obj.left.visible=function(e,t){if(0==e)var o=parseInt(obj.selectedCell[0]),r=parseInt(obj.selectedCell[1]);else o=parseInt(obj.selectedCell[2]),r=parseInt(obj.selectedCell[3]);if(0==t){for(var n=0;n=0;o--)if("none"!=obj.records[t][o].style.display){if(obj.records[t][o].getAttribute("data-merged")&&obj.records[t][o]==obj.records[t][e])continue;e=o;break}return e},obj.first=function(e,t){if(e?t?obj.selectedCell[3]=0:obj.left.visible(1,0):(t?obj.selectedCell[1]=0:obj.left.visible(0,0),obj.selectedCell[2]=obj.selectedCell[0],obj.selectedCell[3]=obj.selectedCell[1]),1!=obj.options.lazyLoading||0!=obj.selectedCell[1]&&0!=obj.selectedCell[3]){if(obj.options.pagination>0){var o=obj.whichPage(obj.selectedCell[3]);o!=obj.pageNumber&&obj.page(o)}}else obj.loadPage(0);obj.updateSelectionFromCoords(obj.selectedCell[0],obj.selectedCell[1],obj.selectedCell[2],obj.selectedCell[3]),obj.updateScroll(1)},obj.last=function(e,t){if(e?t?obj.selectedCell[3]=obj.records.length-1:obj.right.visible(1,0):(t?obj.selectedCell[1]=obj.records.length-1:obj.right.visible(0,0),obj.selectedCell[2]=obj.selectedCell[0],obj.selectedCell[3]=obj.selectedCell[1]),1!=obj.options.lazyLoading||obj.selectedCell[1]!=obj.records.length-1&&obj.selectedCell[3]!=obj.records.length-1){if(obj.options.pagination>0){var o=obj.whichPage(obj.selectedCell[3]);o!=obj.pageNumber&&obj.page(o)}}else obj.loadPage(-1);obj.updateSelectionFromCoords(obj.selectedCell[0],obj.selectedCell[1],obj.selectedCell[2],obj.selectedCell[3]),obj.updateScroll(3)},obj.selectAll=function(){obj.selectedCell||(obj.selectedCell=[]),obj.selectedCell[0]=0,obj.selectedCell[1]=0,obj.selectedCell[2]=obj.headers.length-1,obj.selectedCell[3]=obj.records.length-1,obj.updateSelectionFromCoords(obj.selectedCell[0],obj.selectedCell[1],obj.selectedCell[2],obj.selectedCell[3])},obj.loadPage=function(e){if(1==obj.options.search&&obj.results)var t=obj.results;else t=obj.rows;var o=100;null!=e&&-1!=e||(e=Math.ceil(t.length/o));var r=e*o,n=e*o+o;n>t.length&&(n=t.length),(r=n-100)<0&&(r=0);for(var i=r;io&&obj.tbody.removeChild(obj.tbody.firstChild)},obj.loadUp=function(){if(1==obj.options.search&&obj.results)var e=obj.results;else e=obj.rows;var t=0;if(e.length>100){var o=parseInt(obj.tbody.firstChild.getAttribute("data-y"));if(1==obj.options.search&&obj.results&&(o=e.indexOf(o)),o>0)for(var r=0;r<30;r++)(o-=1)>-1&&(1==obj.options.search&&obj.results?obj.tbody.insertBefore(obj.rows[e[o]],obj.tbody.firstChild):obj.tbody.insertBefore(obj.rows[o],obj.tbody.firstChild),obj.tbody.children.length>100&&(obj.tbody.removeChild(obj.tbody.lastChild),t=1))}return t},obj.loadDown=function(){if(1==obj.options.search&&obj.results)var e=obj.results;else e=obj.rows;var t=0;if(e.length>100){var o=parseInt(obj.tbody.lastChild.getAttribute("data-y"));if(1==obj.options.search&&obj.results&&(o=e.indexOf(o)),o100&&(obj.tbody.removeChild(obj.tbody.firstChild),t=1)),o+=1}return t},obj.loadValidation=function(){if(obj.selectedCell){var e=parseInt(obj.tbody.firstChild.getAttribute("data-y"))/100,t=parseInt(obj.selectedCell[3]/100),o=parseInt(obj.rows.length/100);if(e!=t&&t<=o&&!Array.prototype.indexOf.call(obj.tbody.children,obj.rows[obj.selectedCell[3]]))return obj.loadPage(t),!0}return!1},obj.resetSearch=function(){obj.searchInput.value="",obj.search(""),obj.results=null},obj.search=function(e){if(e&&(e=e.toLowerCase()),obj.resetSelection(),obj.pageNumber=0,obj.results=[],e){var t=function(e){-1==obj.results.indexOf(e)&&obj.results.push(e)};obj.options.data.filter((function(o,r){if(function(e,t,o){for(var r=0;r=0||(""+obj.records[o][r].innerHTML).toLowerCase().search(t)>=0)return!0;return!1}(o,e,r)){var n=obj.isRowMerged(r);if(n.length)for(var i=0;i0?obj.options.pagination:obj.results?obj.results.length:obj.rows.length;obj.tbody.firstChild;)obj.tbody.removeChild(obj.tbody.firstChild);for(var n=0;n-1?(r0&&obj.updatePagination(),o},obj.whichPage=function(e){return 1==obj.options.search&&obj.results&&(e=obj.results.indexOf(e)),Math.ceil((parseInt(e)+1)/parseInt(obj.options.pagination))-1},obj.page=function(e){var t=obj.pageNumber;if(1==obj.options.search&&obj.results)var o=obj.results;else o=obj.rows;var r=parseInt(obj.options.pagination);null!=e&&-1!=e||(e=Math.ceil(o.length/r)),obj.pageNumber=e;var n=e*r,i=e*r+r;for(i>o.length&&(i=o.length),n<0&&(n=0);obj.tbody.firstChild;)obj.tbody.removeChild(obj.tbody.firstChild);for(var s=n;s0&&obj.updatePagination(),obj.updateCornerPosition(),"function"==typeof obj.options.onchangepage&&obj.options.onchangepage(el,e,t)},obj.updatePagination=function(){if(obj.pagination.children[0].innerHTML="",obj.pagination.children[1].innerHTML="",obj.options.pagination){if(1==obj.options.search&&obj.results)var e=obj.results.length;else e=obj.rows.length;if(e){var t=Math.ceil(e/obj.options.pagination);if(obj.pageNumber<6)var o=1,r=t<10?t:10;else t-obj.pageNumber<5?(r=t,(o=t-9)<1&&(o=1)):(o=obj.pageNumber-4,r=obj.pageNumber+5);o>1&&((i=document.createElement("div")).className="jexcel_page",i.innerHTML="<",i.title=1,obj.pagination.children[1].appendChild(i));for(var n=o;n<=r;n++){var i;(i=document.createElement("div")).className="jexcel_page",i.innerHTML=n,obj.pagination.children[1].appendChild(i),obj.pageNumber==n-1&&i.classList.add("jexcel_page_selected")}r",i.title=t,obj.pagination.children[1].appendChild(i)),obj.pagination.children[0].innerHTML=function(e){var t=Array.prototype.slice.call(arguments,1);return e.replace(/{(\d+)}/g,(function(e,o){return void 0!==t[o]?t[o]:e}))}(obj.options.text.showingPage,obj.pageNumber+1,t)}else obj.pagination.children[0].innerHTML=obj.options.text.noRecordsFound}},obj.download=function(e){if(0==obj.options.allowExport)console.error("Export not allowed");else{var t="";1!=e&&1!=obj.options.includeHeadersOnDownload||(t+=obj.getHeaders(),t+="\r\n"),t+=obj.copy(!1,obj.options.csvDelimiter,!0);var o=new Blob(["\ufeff"+t],{type:"text/csv;charset=utf-8;"});if(window.navigator&&window.navigator.msSaveOrOpenBlob)window.navigator.msSaveOrOpenBlob(o,options.csvFileName+".csv");else{var r=document.createElement("a"),n=URL.createObjectURL(o);r.href=n,r.setAttribute("download",obj.options.csvFileName+".csv"),document.body.appendChild(r),r.click(),r.parentNode.removeChild(r)}}},obj.setHistory=function(e){if(1!=obj.ignoreHistory){var t=++obj.historyIndex;obj.history=obj.history=obj.history.slice(0,t+1),obj.history[t]=e}},obj.copy=function(e,t,o){t||(t="\t");var r=[],n=[],i=[],s=[],l=obj.options.data[0].length,a=obj.options.data.length,u="";obj.style=[];for(var c=0;c=obj.headers.length-1&&obj.insertColumn(),d=obj.right.get(d,p))}o[++s]&&(p>=obj.rows.length-1&&obj.insertRow(),p=obj.down.get(e,p))}obj.updateSelectionFromCoords(e,t,d,p),obj.setHistory({action:"setValue",records:l,selection:obj.selectedCell,newStyle:a,oldStyle:u}),obj.updateTable(),"function"==typeof obj.options.onpaste&&obj.options.onpaste(el,l),obj.onafterchanges(el,l)}},obj.historyProcessRow=function(e,t){var o=t.insertBefore?t.rowNumber:t.rowNumber+1;if(1==obj.options.search&&obj.results&&obj.results.length!=obj.rows.length&&obj.resetSearch(),1==e){for(var r=t.numOfRows,n=o;n0&&obj.page(obj.pageNumber),obj.updateTableReferences()},obj.historyProcessColumn=function(e,t){var o=t.insertBefore?t.columnNumber:t.columnNumber+1;if(1==e){var r=t.numOfColumns;obj.options.columns.splice(o,r);for(var n=o;n0)if(obj.options.nestedHeaders[0]&&obj.options.nestedHeaders[0][0])for(i=0;i=0){var r=obj.history[obj.historyIndex--];if("insertRow"==r.action)obj.historyProcessRow(1,r);else if("deleteRow"==r.action)obj.historyProcessRow(0,r);else if("insertColumn"==r.action)obj.historyProcessColumn(1,r);else if("deleteColumn"==r.action)obj.historyProcessColumn(0,r);else if("moveRow"==r.action)obj.moveRow(r.newValue,r.oldValue);else if("moveColumn"==r.action)obj.moveColumn(r.newValue,r.oldValue);else if("setMerge"==r.action)obj.removeMerge(r.column,r.data);else if("setStyle"==r.action)obj.setStyle(r.oldValue,null,null,1);else if("setWidth"==r.action)obj.setWidth(r.column,r.oldValue);else if("setHeight"==r.action)obj.setHeight(r.row,r.oldValue);else if("setHeader"==r.action)obj.setHeader(r.column,r.oldValue);else if("setComments"==r.action)obj.setComments(r.column,r.oldValue[0],r.oldValue[1]);else if("orderBy"==r.action){for(var n=[],i=0;i0?o.join("; "):""},obj.parseCSV=function(e,t){9==(e=e.replace(/\r?\n$|\r$|\n$/g,"")).charCodeAt(e.length-1)&&(e+="\0"),t=t||",";for(var o=[],r=!1,n=0,i=0,s=0;s0)for(var o=t.shift(),r=0;r=obj.content.scrollHeight?obj.loadDown()&&(obj.content.scrollTop+obj.content.clientHeight>obj.content.scrollHeight-10&&(obj.content.scrollTop=obj.content.scrollTop-obj.content.clientHeight),obj.updateCornerPosition()):obj.content.scrollTop<=obj.content.clientHeight&&obj.loadUp()&&(obj.content.scrollTop<10&&(obj.content.scrollTop=obj.content.scrollTop+obj.content.clientHeight),obj.updateCornerPosition()),jexcel.timeControlLoading=null}),100)),1!=obj.options.lazyLoading&&1!=obj.options.tableOverflow||obj.edition&&"jdropdown"!=e.target.className.substr(0,9)&&obj.closeEditor(obj.edition[0],!0)},el.addEventListener("DOMMouseScroll",obj.scrollControls),el.addEventListener("mousewheel",obj.scrollControls),el.jexcel=obj,obj.init(),obj};jexcel.current=null,jexcel.timeControl=null,jexcel.timeControlLoading=null,jexcel.destroy=function(e,t){e.jexcel&&(e.removeEventListener("DOMMouseScroll",e.jexcel.scrollControls),e.removeEventListener("mousewheel",e.jexcel.scrollControls),e.jexcel=null,e.innerHTML="",t&&(document.removeEventListener("keydown",jexcel.keyDownControls),document.removeEventListener("mouseup",jexcel.mouseUpControls),document.removeEventListener("mousedown",jexcel.mouseDownControls),document.removeEventListener("mousemove",jexcel.mouseMoveControls),document.removeEventListener("mouseover",jexcel.mouseOverControls),document.removeEventListener("dblclick",jexcel.doubleClickControls),document.removeEventListener("paste",jexcel.pasteControls),document.removeEventListener("contextmenu",jexcel.contextMenuControls),document.removeEventListener("touchstart",jexcel.touchStartControls),document.removeEventListener("touchend",jexcel.touchEndControls),document.removeEventListener("touchcancel",jexcel.touchEndControls),jexcel=null))},jexcel.build=function(){document.addEventListener("keydown",jexcel.keyDownControls),document.addEventListener("mouseup",jexcel.mouseUpControls),document.addEventListener("mousedown",jexcel.mouseDownControls),document.addEventListener("mousemove",jexcel.mouseMoveControls),document.addEventListener("mouseover",jexcel.mouseOverControls),document.addEventListener("dblclick",jexcel.doubleClickControls),document.addEventListener("paste",jexcel.pasteControls),document.addEventListener("contextmenu",jexcel.contextMenuControls),document.addEventListener("touchstart",jexcel.touchStartControls),document.addEventListener("touchend",jexcel.touchEndControls),document.addEventListener("touchcancel",jexcel.touchEndControls),document.addEventListener("touchmove",jexcel.touchEndControls)},jexcel.keyDownControls=function(e){if(jexcel.current){if(jexcel.current.edition)if(27==e.which)jexcel.current.edition&&jexcel.current.closeEditor(jexcel.current.edition[0],!1),e.preventDefault();else if(13==e.which)if("calendar"==jexcel.current.options.columns[jexcel.current.edition[2]].type)jexcel.current.editor[0].children[0].calendar.close(1);else if("dropdown"==jexcel.current.options.columns[jexcel.current.edition[2]].type||"autocomplete"==jexcel.current.options.columns[jexcel.current.edition[2]].type);else if((1==jexcel.current.options.wordWrap||1==jexcel.current.options.columns[jexcel.current.edition[2]].wordWrap||jexcel.current.options.data[jexcel.current.edition[3]][jexcel.current.edition[2]].length>200)&&e.altKey){var t=jexcel.current.edition[0].children[0],o=jexcel.current.edition[0].children[0].value,r=t.selectionStart;o=o.slice(0,r)+"\n"+o.slice(r),t.value=o,t.focus(),t.selectionStart=r+1,t.selectionEnd=r+1}else jexcel.current.edition[0].children[0].blur();else 9==e.which&&("calendar"==jexcel.current.options.columns[jexcel.current.edition[2]].type?jexcel.current.edition[0].children[0].calendar.close(1):jexcel.current.edition[0].children[0].blur());if(!jexcel.current.edition&&jexcel.current.selectedCell)if(37==e.which)jexcel.current.left(e.shiftKey,e.ctrlKey),e.preventDefault();else if(39==e.which)jexcel.current.right(e.shiftKey,e.ctrlKey),e.preventDefault();else if(38==e.which)jexcel.current.up(e.shiftKey,e.ctrlKey),e.preventDefault();else if(40==e.which)jexcel.current.down(e.shiftKey,e.ctrlKey),e.preventDefault();else if(36==e.which)jexcel.current.first(e.shiftKey,e.ctrlKey),e.preventDefault();else if(35==e.which)jexcel.current.last(e.shiftKey,e.ctrlKey),e.preventDefault();else if(32==e.which)1==jexcel.current.options.editable&&jexcel.current.setCheckRadioValue(),e.preventDefault();else if(46==e.which)1==jexcel.current.options.editable&&(jexcel.current.selectedRow?1==jexcel.current.options.allowDeleteRow&&confirm(jexcel.current.options.text.areYouSureToDeleteTheSelectedRows)&&jexcel.current.deleteRow():jexcel.current.selectedHeader?1==jexcel.current.options.allowDeleteColumn&&confirm(jexcel.current.options.text.areYouSureToDeleteTheSelectedColumns)&&jexcel.current.deleteColumn():jexcel.current.setValue(jexcel.current.highlighted,""));else if(13==e.which)e.shiftKey?jexcel.current.up():(1==jexcel.current.options.allowInsertRow&&1==jexcel.current.options.allowManualInsertRow&&jexcel.current.selectedCell[1]==jexcel.current.options.data.length-1&&jexcel.current.insertRow(),jexcel.current.down()),e.preventDefault();else if(9==e.which)e.shiftKey?jexcel.current.left():(1==jexcel.current.options.allowInsertColumn&&1==jexcel.current.options.allowManualInsertColumn&&jexcel.current.selectedCell[0]==jexcel.current.options.data[0].length-1&&jexcel.current.insertColumn(),jexcel.current.right()),e.preventDefault();else if(!e.ctrlKey&&!e.metaKey||e.shiftKey){if(jexcel.current.selectedCell&&1==jexcel.current.options.editable){var n=jexcel.current.selectedCell[1],i=jexcel.current.selectedCell[0];"readonly"!=jexcel.current.options.columns[i].type&&(32==e.keyCode?"checkbox"==jexcel.current.options.columns[i].type||"radio"==jexcel.current.options.columns[i].type?e.preventDefault():jexcel.current.openEditor(jexcel.current.records[n][i],!0):113==e.keyCode?jexcel.current.openEditor(jexcel.current.records[n][i],!1):(8==e.keyCode||e.keyCode>=48&&e.keyCode<=57||e.keyCode>=96&&e.keyCode<=111||187==e.keyCode||189==e.keyCode||(String.fromCharCode(e.keyCode)==e.key||String.fromCharCode(e.keyCode).toLowerCase()==e.key.toLowerCase())&&jexcel.validLetter(String.fromCharCode(e.keyCode)))&&(jexcel.current.openEditor(jexcel.current.records[n][i],!0),"calendar"==jexcel.current.options.columns[i].type&&e.preventDefault()))}}else 65==e.which?(jexcel.current.selectAll(),e.preventDefault()):83==e.which?(jexcel.current.download(),e.preventDefault()):89==e.which?(jexcel.current.redo(),e.preventDefault()):90==e.which?(jexcel.current.undo(),e.preventDefault()):67==e.which||67==e.which?(jexcel.current.copy(!0),e.preventDefault()):88==e.which?(1==jexcel.current.options.editable?jexcel.cutControls():jexcel.copyControls(),e.preventDefault()):86==e.which&&jexcel.pasteControls();else e.target.classList.contains("jexcel_search")&&(jexcel.timeControl&&clearTimeout(jexcel.timeControl),jexcel.timeControl=setTimeout((function(){jexcel.current.search(e.target.value)}),200))}},jexcel.isMouseAction=!1,jexcel.mouseDownControls=function(e){if((e=e||window.event).buttons)var t=e.buttons;else t=e.button?e.button:e.which;var o=jexcel.getElement(e.target);if(o[0]?jexcel.current!=o[0].jexcel&&(jexcel.current&&jexcel.current.resetSelection(),jexcel.current=o[0].jexcel):jexcel.current&&(jexcel.current.resetSelection(!0),jexcel.current=null),jexcel.current&&1==t){if(e.target.classList.contains("jexcel_selectall"))jexcel.current&&jexcel.current.selectAll();else if(e.target.classList.contains("jexcel_corner"))1==jexcel.current.options.editable&&(jexcel.current.selectedCorner=!0);else{if(1==o[1]){if(b=e.target.getAttribute("data-x")){var r=e.target.getBoundingClientRect();if(1==jexcel.current.options.columnResize&&r.width-e.offsetX<6){jexcel.current.resizing={mousePosition:e.pageX,column:b,width:r.width},jexcel.current.headers[b].classList.add("resizing");for(var n=0;n"==e.target.innerText?jexcel.current.page(e.target.getAttribute("title")-1):jexcel.current.page(e.target.innerText-1))}jexcel.current.edition?jexcel.isMouseAction=!1:jexcel.isMouseAction=!0}else jexcel.isMouseAction=!1},jexcel.mouseUpControls=function(e){if(jexcel.current)if(jexcel.current.resizing){if(jexcel.current.resizing.column){jexcel.current.headers[jexcel.current.resizing.column].classList.remove("resizing");var t=jexcel.current.colgroup[jexcel.current.resizing.column].getAttribute("width");jexcel.current.setWidth(jexcel.current.resizing.column,t,jexcel.current.resizing.width),jexcel.current.headers[jexcel.current.resizing.column].classList.remove("resizing");for(var o=0;o0&&(jexcel.current.copyData(jexcel.current.selection[0],jexcel.current.selection[jexcel.current.selection.length-1]),jexcel.current.removeCopySelection()));jexcel.timeControl&&(clearTimeout(jexcel.timeControl),jexcel.timeControl=null),jexcel.isMouseAction=!1},jexcel.mouseMoveControls=function(e){if((e=e||window.event).buttons)var t=e.buttons;else t=e.button?e.button:e.which;if(t||(jexcel.isMouseAction=!1),jexcel.current)if(1==jexcel.isMouseAction){if(jexcel.current.resizing)if(jexcel.current.resizing.column){var o=e.pageX-jexcel.current.resizing.mousePosition;if(jexcel.current.resizing.width+o>0){var r=jexcel.current.resizing.width+o;jexcel.current.colgroup[jexcel.current.resizing.column].setAttribute("width",r),jexcel.current.updateCornerPosition()}}else{var n=e.pageY-jexcel.current.resizing.mousePosition;if(jexcel.current.resizing.height+n>0){var i=jexcel.current.resizing.height+n;jexcel.current.rows[jexcel.current.resizing.row].setAttribute("height",i),jexcel.current.updateCornerPosition()}}}else{var s=e.target.getAttribute("data-x"),l=e.target.getAttribute("data-y"),a=e.target.getBoundingClientRect();jexcel.current.cursor&&(jexcel.current.cursor.style.cursor="",jexcel.current.cursor=null),e.target.parentNode.parentNode&&e.target.parentNode.parentNode.className&&(e.target.parentNode.parentNode.classList.contains("resizable")&&(e.target&&s&&!l&&a.width-(e.clientX-a.left)<6?(jexcel.current.cursor=e.target,jexcel.current.cursor.style.cursor="col-resize"):e.target&&!s&&l&&a.height-(e.clientY-a.top)<6&&(jexcel.current.cursor=e.target,jexcel.current.cursor.style.cursor="row-resize")),e.target.parentNode.parentNode.classList.contains("draggable")&&(e.target&&!s&&l&&a.width-(e.clientX-a.left)<6||e.target&&s&&!l&&a.height-(e.clientY-a.top)<6)&&(jexcel.current.cursor=e.target,jexcel.current.cursor.style.cursor="move"))}},jexcel.mouseOverControls=function(e){if((e=e||window.event).buttons)var t=e.buttons;else t=e.button?e.button:e.which;if(t||(jexcel.isMouseAction=!1),jexcel.current&&1==jexcel.isMouseAction){var o=jexcel.getElement(e.target);if(o[0]){if(jexcel.current!=o[0].jexcel&&jexcel.current)return!1;var r=e.target.getAttribute("data-x"),n=e.target.getAttribute("data-y");if(jexcel.current.dragging){if(jexcel.current.dragging.column){if(r)if(jexcel.current.isColMerged(r).length)console.error("JEXCEL: This column is part of a merged cell.");else{for(var i=0;ie.offsetX?(jexcel.current.dragging.columne.offsetY?e.target.parentNode.nextSibling:e.target.parentNode;e.target.parentNode.parentNode.insertBefore(jexcel.current.dragging.element,s)}}else if(jexcel.current.resizing);else{if(1==o[1]&&jexcel.current.selectedHeader){r=e.target.getAttribute("data-x");var l=jexcel.current.selectedHeader,a=r;jexcel.current.updateSelectionFromCoords(l,0,a,jexcel.current.options.data.length-1)}2==o[1]&&(e.target.classList.contains("jexcel_row")?jexcel.current.selectedRow&&(l=jexcel.current.selectedRow,a=n,jexcel.current.updateSelectionFromCoords(0,l,jexcel.current.options.data[0].length-1,a)):jexcel.current.edition||r&&n&&(jexcel.current.selectedCorner?jexcel.current.updateCopySelection(r,n):jexcel.current.selectedCell&&jexcel.current.updateSelectionFromCoords(jexcel.current.selectedCell[0],jexcel.current.selectedCell[1],r,n)))}}}jexcel.timeControl&&(clearTimeout(jexcel.timeControl),jexcel.timeControl=null)},jexcel.doubleClickControls=function(e){if(jexcel.current)if(e.target.classList.contains("jexcel_corner")){if(jexcel.current.highlighted.length>0){var t=jexcel.current.highlighted[0].getAttribute("data-x"),o=parseInt(jexcel.current.highlighted[jexcel.current.highlighted.length-1].getAttribute("data-y"))+1,r=jexcel.current.highlighted[jexcel.current.highlighted.length-1].getAttribute("data-x"),n=jexcel.current.records.length-1;jexcel.current.copyData(jexcel.current.records[o][t],jexcel.current.records[n][r])}}else{var i=jexcel.getElement(e.target);if(1==i[1]&&1==jexcel.current.options.columnSorting){var s=e.target.getAttribute("data-x");s&&jexcel.current.orderBy(s)}if(2==i[1]&&1==jexcel.current.options.editable&&!jexcel.current.edition){var l=function(e){if(e.parentNode){var t=e.getAttribute("data-x"),o=e.getAttribute("data-y");return t&&o?e:l(e.parentNode)}},a=l(e.target);a&&a.classList.contains("highlight")&&jexcel.current.openEditor(a)}}},jexcel.copyControls=function(e){jexcel.current&&jexcel.copyControls.enabled&&(jexcel.current.edition||jexcel.current.copy(!0))},jexcel.cutControls=function(e){jexcel.current&&(jexcel.current.edition||(jexcel.current.copy(!0),1==jexcel.current.options.editable&&jexcel.current.setValue(jexcel.current.highlighted,"")))},jexcel.pasteControls=function(e){jexcel.current&&jexcel.current.selectedCell&&(jexcel.current.edition||1==jexcel.current.options.editable&&(e&&e.clipboardData?(jexcel.current.paste(jexcel.current.selectedCell[0],jexcel.current.selectedCell[1],e.clipboardData.getData("text")),e.preventDefault()):window.clipboardData&&jexcel.current.paste(jexcel.current.selectedCell[0],jexcel.current.selectedCell[1],window.clipboardData.getData("text"))))},jexcel.contextMenuControls=function(e){if("buttons"in(e=e||window.event)?e.buttons:e.which||e.button,jexcel.current)if(jexcel.current.edition)e.preventDefault();else if(jexcel.current.options.contextMenu&&(jexcel.current.contextMenu.contextmenu.close(),jexcel.current)){var t=e.target.getAttribute("data-x"),o=e.target.getAttribute("data-y");if(t||o){var r=jexcel.current.options.contextMenu(jexcel.current,t,o,e);jexcel.current.contextMenu.contextmenu.open(e,r),e.preventDefault()}}},jexcel.touchStartControls=function(e){var t=jexcel.getElement(e.target);if(t[0]?jexcel.current!=t[0].jexcel&&(jexcel.current&&jexcel.current.resetSelection(),jexcel.current=t[0].jexcel):jexcel.current&&(jexcel.current.resetSelection(),jexcel.current=null),jexcel.current&&!jexcel.current.edition){var o=e.target.getAttribute("data-x"),r=e.target.getAttribute("data-y");o&&r&&(jexcel.current.updateSelectionFromCoords(o,r),jexcel.timeControl=setTimeout((function(){"color"==jexcel.current.options.columns[o].type?jexcel.tmpElement=null:jexcel.tmpElement=e.target,jexcel.current.openEditor(e.target,!1,e)}),500))}},jexcel.touchEndControls=function(e){jexcel.timeControl&&(clearTimeout(jexcel.timeControl),jexcel.timeControl=null,jexcel.tmpElement&&"INPUT"==jexcel.tmpElement.children[0].tagName&&jexcel.tmpElement.children[0].focus(),jexcel.tmpElement=null)},jexcel.createTabs=function(e,t){e.innerHTML="",e.classList.add("jexcel_tabs");for(var o=[],r=[],n=0;n0)for(r.mergeCells=[],n=0;n0&&(r.style[p[n]]=b.style),b.s&&b.s.fgColor&&(r.style[p[n]]&&(r.style[p[n]]+=";"),r.style[p[n]]+="background-color:#"+b.s.fgColor.rgb)}for(var m=r.columns,j=0;j<=d;j++)for(n=0;n<=c;n++)r.data[j]||(r.data[j]=[]),r.data[j][n]||m701?(t+=String.fromCharCode(64+parseInt(e/676)),t+=String.fromCharCode(64+parseInt(e%676/26))):e>25&&(t+=String.fromCharCode(64+parseInt(e/26))),t+String.fromCharCode(65+e%26)},jexcel.getIdFromColumnName=function(e,t){var o=/^[a-zA-Z]+/.exec(e);if(o){for(var r=0,n=0;n0&&i--,e=1==t?[r,i]:r+"-"+i}return e},jexcel.getColumnNameFromId=function(e){return Array.isArray(e)||(e=e.split("-")),jexcel.getColumnName(parseInt(e[0]))+(parseInt(e[1])+1)},jexcel.getElement=function(e){var t=0,o=0;return function e(r){r.className&&r.classList.contains("jexcel_container")&&(o=r),"THEAD"==r.tagName?t=1:"TBODY"==r.tagName&&(t=2),r.parentNode&&e(r.parentNode)}(e),[o,t]},jexcel.doubleDigitFormat=function(e){return 1==(e=""+e).length&&(e="0"+e),e},"undefined"!=typeof jQuery&&function(e){e.fn.jexcel=function(t){var o=e(this).get(0);return o.jexcel?o.jexcel[t].apply(this,Array.prototype.slice.call(arguments,1)):jexcel(e(this).get(0),arguments[0])}}(jQuery);var error=(exports={},exports.nil=new Error("#NULL!"),exports.div0=new Error("#DIV/0!"),exports.value=new Error("#VALUE!"),exports.ref=new Error("#REF!"),exports.name=new Error("#NAME?"),exports.num=new Error("#NUM!"),exports.na=new Error("#N/A"),exports.error=new Error("#ERROR!"),exports.data=new Error("#GETTING_DATA"),exports),exports,utils=function(){var e={flattenShallow:function(e){return e&&e.reduce?e.reduce((function(e,t){var o=Array.isArray(e),r=Array.isArray(t);return o&&r?e.concat(t):o?(e.push(t),e):r?[e].concat(t):[e,t]})):e},isFlat:function(e){if(!e)return!1;for(var t=0;t-22038912e5?2:1)}return e.DATE=function(e,t,o){return e=utils.parseNumber(e),t=utils.parseNumber(t),o=utils.parseNumber(o),utils.anyIsError(e,t,o)?error.value:e<0||t<0||o<0?error.num:new Date(e,t-1,o)},e.DATEVALUE=function(e){if("string"!=typeof e)return error.value;var o=Date.parse(e);return isNaN(o)?error.value:o<=-22038912e5?(o-t)/864e5+1:(o-t)/864e5+2},e.DAY=function(e){var t=utils.parseDate(e);return t instanceof Error?t:t.getDate()},e.DAYS=function(e,t){return e=utils.parseDate(e),t=utils.parseDate(t),e instanceof Error?e:t instanceof Error?t:r(e)-r(t)},e.DAYS360=function(e,t,o){},e.EDATE=function(e,t){return(e=utils.parseDate(e))instanceof Error?e:isNaN(t)?error.value:(t=parseInt(t,10),e.setMonth(e.getMonth()+t),r(e))},e.EOMONTH=function(e,t){return(e=utils.parseDate(e))instanceof Error?e:isNaN(t)?error.value:(t=parseInt(t,10),r(new Date(e.getFullYear(),e.getMonth()+t+1,0)))},e.HOUR=function(e){return(e=utils.parseDate(e))instanceof Error?e:e.getHours()},e.INTERVAL=function(e){if("number"!=typeof e&&"string"!=typeof e)return error.value;e=parseInt(e,10);var t=Math.floor(e/94608e4);e%=94608e4;var o=Math.floor(e/2592e3);e%=2592e3;var r=Math.floor(e/86400);e%=86400;var n=Math.floor(e/3600);e%=3600;var i=Math.floor(e/60),s=e%=60;return"P"+(t=t>0?t+"Y":"")+(o=o>0?o+"M":"")+(r=r>0?r+"D":"")+"T"+(n=n>0?n+"H":"")+(i=i>0?i+"M":"")+(s>0?s+"S":"")},e.ISOWEEKNUM=function(e){if((e=utils.parseDate(e))instanceof Error)return e;e.setHours(0,0,0),e.setDate(e.getDate()+4-(e.getDay()||7));var t=new Date(e.getFullYear(),0,1);return Math.ceil(((e-t)/864e5+1)/7)},e.MINUTE=function(e){return(e=utils.parseDate(e))instanceof Error?e:e.getMinutes()},e.MONTH=function(e){return(e=utils.parseDate(e))instanceof Error?e:e.getMonth()+1},e.NETWORKDAYS=function(e,t,o){},e.NETWORKDAYS.INTL=function(e,t,o,r){},e.NOW=function(){return new Date},e.SECOND=function(e){return(e=utils.parseDate(e))instanceof Error?e:e.getSeconds()},e.TIME=function(e,t,o){return e=utils.parseNumber(e),t=utils.parseNumber(t),o=utils.parseNumber(o),utils.anyIsError(e,t,o)?error.value:e<0||t<0||o<0?error.num:(3600*e+60*t+o)/86400},e.TIMEVALUE=function(e){return(e=utils.parseDate(e))instanceof Error?e:(3600*e.getHours()+60*e.getMinutes()+e.getSeconds())/86400},e.TODAY=function(){return new Date},e.WEEKDAY=function(e,t){if((e=utils.parseDate(e))instanceof Error)return e;void 0===t&&(t=1);var r=e.getDay();return o[t][r]},e.WEEKNUM=function(e,t){},e.WORKDAY=function(e,t,o){},e.WORKDAY.INTL=function(e,t,o,r){},e.YEAR=function(e){return(e=utils.parseDate(e))instanceof Error?e:e.getFullYear()},e.YEARFRAC=function(e,t,o){},e}(),jexcel.methods.database=function(){var exports={};function compact(e){if(!e)return e;for(var t=[],o=0;omaxCriteriaLength&&(maxCriteriaLength=criterias[i].length);for(var k=1;k1?error.num:n[r[0]]},exports.DMAX=function(e,t,o){if(isNaN(t)&&"string"!=typeof t)return error.value;var r=findResultIndex(e,o),n=[];if("string"==typeof t){var i=exports.FINDFIELD(e,t);n=utils.rest(e[i])}else n=utils.rest(e[t]);for(var s=n[r[0]],l=1;ln[r[l]]&&(s=n[r[l]]);return s},exports.DPRODUCT=function(e,t,o){if(isNaN(t)&&"string"!=typeof t)return error.value;var r=findResultIndex(e,o),n=[];if("string"==typeof t){var i=exports.FINDFIELD(e,t);n=utils.rest(e[i])}else n=utils.rest(e[t]);for(var s=[],l=0;ln&&(r=i+1,n=t[i]):(r=i+1,n=t[i]))}else if(0===o){if("string"==typeof e){if(e=e.replace(/\?/g,"."),t[i].toLowerCase().match(e.toLowerCase()))return i+1}else if(t[i]===e)return i+1}else if(-1===o){if(t[i]===e)return i+1;t[i]>e&&(n?t[i]=n.length?REPT("0",o-n.length)+n:error.num},e.BIN2OCT=function(e,o){if(!t(e))return error.num;var r=e.toString();if(10===r.length&&"1"===r.substring(0,1))return(1073741312+parseInt(r.substring(1),2)).toString(8);var n=parseInt(e,2).toString(8);return void 0===o?n:isNaN(o)?error.value:o<0?error.num:(o=Math.floor(o))>=n.length?REPT("0",o-n.length)+n:error.num},e.BITAND=function(e,t){return e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t)?error.value:e<0||t<0||Math.floor(e)!==e||Math.floor(t)!==t||e>0xffffffffffff||t>0xffffffffffff?error.num:e&t},e.BITLSHIFT=function(e,t){return e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t)?error.value:e<0||Math.floor(e)!==e||e>0xffffffffffff||Math.abs(t)>53?error.num:t>=0?e<>-t},e.BITOR=function(e,t){return e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t)?error.value:e<0||t<0||Math.floor(e)!==e||Math.floor(t)!==t||e>0xffffffffffff||t>0xffffffffffff?error.num:e|t},e.BITRSHIFT=function(e,t){return e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t)?error.value:e<0||Math.floor(e)!==e||e>0xffffffffffff||Math.abs(t)>53?error.num:t>=0?e>>t:e<<-t},e.BITXOR=function(e,t){return e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t)?error.value:e<0||t<0||Math.floor(e)!==e||Math.floor(t)!==t||e>0xffffffffffff||t>0xffffffffffff?error.num:e^t},e.COMPLEX=function(e,t,o){if(e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t))return e;if("i"!==(o=void 0===o?"i":o)&&"j"!==o)return error.value;if(0===e&&0===t)return 0;if(0===e)return 1===t?o:t.toString()+o;if(0===t)return e.toString();var r=t>0?"+":"";return e.toString()+r+(1===t?o:t.toString()+o)},e.CONVERT=function(e,t,o){if((e=utils.parseNumber(e))instanceof Error)return e;for(var r,n=[["a.u. of action","?",null,"action",!1,!1,105457168181818e-48],["a.u. of charge","e",null,"electric_charge",!1,!1,160217653141414e-33],["a.u. of energy","Eh",null,"energy",!1,!1,435974417757576e-32],["a.u. of length","a?",null,"length",!1,!1,529177210818182e-25],["a.u. of mass","m?",null,"mass",!1,!1,910938261616162e-45],["a.u. of time","?/Eh",null,"time",!1,!1,241888432650516e-31],["admiralty knot","admkn",null,"speed",!1,!0,.514773333],["ampere","A",null,"electric_current",!0,!1,1],["ampere per meter","A/m",null,"magnetic_field_intensity",!0,!1,1],["ångström","Å",["ang"],"length",!1,!0,1e-10],["are","ar",null,"area",!1,!0,100],["astronomical unit","ua",null,"length",!1,!1,149597870691667e-25],["bar","bar",null,"pressure",!1,!1,1e5],["barn","b",null,"area",!1,!1,1e-28],["becquerel","Bq",null,"radioactivity",!0,!1,1],["bit","bit",["b"],"information",!1,!0,1],["btu","BTU",["btu"],"energy",!1,!0,1055.05585262],["byte","byte",null,"information",!1,!0,8],["candela","cd",null,"luminous_intensity",!0,!1,1],["candela per square metre","cd/m?",null,"luminance",!0,!1,1],["coulomb","C",null,"electric_charge",!0,!1,1],["cubic ångström","ang3",["ang^3"],"volume",!1,!0,1e-30],["cubic foot","ft3",["ft^3"],"volume",!1,!0,.028316846592],["cubic inch","in3",["in^3"],"volume",!1,!0,16387064e-12],["cubic light-year","ly3",["ly^3"],"volume",!1,!0,846786664623715e-61],["cubic metre","m?",null,"volume",!0,!0,1],["cubic mile","mi3",["mi^3"],"volume",!1,!0,4168181825.44058],["cubic nautical mile","Nmi3",["Nmi^3"],"volume",!1,!0,6352182208],["cubic Pica","Pica3",["Picapt3","Pica^3","Picapt^3"],"volume",!1,!0,7.58660370370369e-8],["cubic yard","yd3",["yd^3"],"volume",!1,!0,.764554857984],["cup","cup",null,"volume",!1,!0,.0002365882365],["dalton","Da",["u"],"mass",!1,!1,166053886282828e-41],["day","d",["day"],"time",!1,!0,86400],["degree","°",null,"angle",!1,!1,.0174532925199433],["degrees Rankine","Rank",null,"temperature",!1,!0,.555555555555556],["dyne","dyn",["dy"],"force",!1,!0,1e-5],["electronvolt","eV",["ev"],"energy",!1,!0,1.60217656514141],["ell","ell",null,"length",!1,!0,1.143],["erg","erg",["e"],"energy",!1,!0,1e-7],["farad","F",null,"electric_capacitance",!0,!1,1],["fluid ounce","oz",null,"volume",!1,!0,295735295625e-16],["foot","ft",null,"length",!1,!0,.3048],["foot-pound","flb",null,"energy",!1,!0,1.3558179483314],["gal","Gal",null,"acceleration",!1,!1,.01],["gallon","gal",null,"volume",!1,!0,.003785411784],["gauss","G",["ga"],"magnetic_flux_density",!1,!0,1],["grain","grain",null,"mass",!1,!0,647989e-10],["gram","g",null,"mass",!1,!0,.001],["gray","Gy",null,"absorbed_dose",!0,!1,1],["gross registered ton","GRT",["regton"],"volume",!1,!0,2.8316846592],["hectare","ha",null,"area",!1,!0,1e4],["henry","H",null,"inductance",!0,!1,1],["hertz","Hz",null,"frequency",!0,!1,1],["horsepower","HP",["h"],"power",!1,!0,745.69987158227],["horsepower-hour","HPh",["hh","hph"],"energy",!1,!0,2684519.538],["hour","h",["hr"],"time",!1,!0,3600],["imperial gallon (U.K.)","uk_gal",null,"volume",!1,!0,.00454609],["imperial hundredweight","lcwt",["uk_cwt","hweight"],"mass",!1,!0,50.802345],["imperial quart (U.K)","uk_qt",null,"volume",!1,!0,.0011365225],["imperial ton","brton",["uk_ton","LTON"],"mass",!1,!0,1016.046909],["inch","in",null,"length",!1,!0,.0254],["international acre","uk_acre",null,"area",!1,!0,4046.8564224],["IT calorie","cal",null,"energy",!1,!0,4.1868],["joule","J",null,"energy",!0,!0,1],["katal","kat",null,"catalytic_activity",!0,!1,1],["kelvin","K",["kel"],"temperature",!0,!0,1],["kilogram","kg",null,"mass",!0,!0,1],["knot","kn",null,"speed",!1,!0,.514444444444444],["light-year","ly",null,"length",!1,!0,9460730472580800],["litre","L",["l","lt"],"volume",!1,!0,.001],["lumen","lm",null,"luminous_flux",!0,!1,1],["lux","lx",null,"illuminance",!0,!1,1],["maxwell","Mx",null,"magnetic_flux",!1,!1,1e-18],["measurement ton","MTON",null,"volume",!1,!0,1.13267386368],["meter per hour","m/h",["m/hr"],"speed",!1,!0,.00027777777777778],["meter per second","m/s",["m/sec"],"speed",!0,!0,1],["meter per second squared","m?s??",null,"acceleration",!0,!1,1],["parsec","pc",["parsec"],"length",!1,!0,0x6da012f958ee1c],["meter squared per second","m?/s",null,"kinematic_viscosity",!0,!1,1],["metre","m",null,"length",!0,!0,1],["miles per hour","mph",null,"speed",!1,!0,.44704],["millimetre of mercury","mmHg",null,"pressure",!1,!1,133.322],["minute","?",null,"angle",!1,!1,.000290888208665722],["minute","min",["mn"],"time",!1,!0,60],["modern teaspoon","tspm",null,"volume",!1,!0,5e-6],["mole","mol",null,"amount_of_substance",!0,!1,1],["morgen","Morgen",null,"area",!1,!0,2500],["n.u. of action","?",null,"action",!1,!1,105457168181818e-48],["n.u. of mass","m?",null,"mass",!1,!1,910938261616162e-45],["n.u. of speed","c?",null,"speed",!1,!1,299792458],["n.u. of time","?/(me?c??)",null,"time",!1,!1,128808866778687e-35],["nautical mile","M",["Nmi"],"length",!1,!0,1852],["newton","N",null,"force",!0,!0,1],["œrsted","Oe ",null,"magnetic_field_intensity",!1,!1,79.5774715459477],["ohm","Ω",null,"electric_resistance",!0,!1,1],["ounce mass","ozm",null,"mass",!1,!0,.028349523125],["pascal","Pa",null,"pressure",!0,!1,1],["pascal second","Pa?s",null,"dynamic_viscosity",!0,!1,1],["pferdestärke","PS",null,"power",!1,!0,735.49875],["phot","ph",null,"illuminance",!1,!1,1e-4],["pica (1/6 inch)","pica",null,"length",!1,!0,.00035277777777778],["pica (1/72 inch)","Pica",["Picapt"],"length",!1,!0,.00423333333333333],["poise","P",null,"dynamic_viscosity",!1,!1,.1],["pond","pond",null,"force",!1,!0,.00980665],["pound force","lbf",null,"force",!1,!0,4.4482216152605],["pound mass","lbm",null,"mass",!1,!0,.45359237],["quart","qt",null,"volume",!1,!0,.000946352946],["radian","rad",null,"angle",!0,!1,1],["second","?",null,"angle",!1,!1,484813681109536e-20],["second","s",["sec"],"time",!0,!0,1],["short hundredweight","cwt",["shweight"],"mass",!1,!0,45.359237],["siemens","S",null,"electrical_conductance",!0,!1,1],["sievert","Sv",null,"equivalent_dose",!0,!1,1],["slug","sg",null,"mass",!1,!0,14.59390294],["square ångström","ang2",["ang^2"],"area",!1,!0,1e-20],["square foot","ft2",["ft^2"],"area",!1,!0,.09290304],["square inch","in2",["in^2"],"area",!1,!0,64516e-8],["square light-year","ly2",["ly^2"],"area",!1,!0,895054210748189e17],["square meter","m?",null,"area",!0,!0,1],["square mile","mi2",["mi^2"],"area",!1,!0,2589988.110336],["square nautical mile","Nmi2",["Nmi^2"],"area",!1,!0,3429904],["square Pica","Pica2",["Picapt2","Pica^2","Picapt^2"],"area",!1,!0,1792111111111e-17],["square yard","yd2",["yd^2"],"area",!1,!0,.83612736],["statute mile","mi",null,"length",!1,!0,1609.344],["steradian","sr",null,"solid_angle",!0,!1,1],["stilb","sb",null,"luminance",!1,!1,1e-4],["stokes","St",null,"kinematic_viscosity",!1,!1,1e-4],["stone","stone",null,"mass",!1,!0,6.35029318],["tablespoon","tbs",null,"volume",!1,!0,147868e-10],["teaspoon","tsp",null,"volume",!1,!0,492892e-11],["tesla","T",null,"magnetic_flux_density",!0,!0,1],["thermodynamic calorie","c",null,"energy",!1,!0,4.184],["ton","ton",null,"mass",!1,!0,907.18474],["tonne","t",null,"mass",!1,!1,1e3],["U.K. pint","uk_pt",null,"volume",!1,!0,.00056826125],["U.S. bushel","bushel",null,"volume",!1,!0,.03523907],["U.S. oil barrel","barrel",null,"volume",!1,!0,.158987295],["U.S. pint","pt",["us_pt"],"volume",!1,!0,.000473176473],["U.S. survey mile","survey_mi",null,"length",!1,!0,1609.347219],["U.S. survey/statute acre","us_acre",null,"area",!1,!0,4046.87261],["volt","V",null,"voltage",!0,!1,1],["watt","W",null,"power",!0,!0,1],["watt-hour","Wh",["wh"],"energy",!1,!0,3600],["weber","Wb",null,"magnetic_flux",!0,!1,1],["yard","yd",null,"length",!1,!0,.9144],["year","yr",null,"time",!1,!0,31557600]],i={Yi:["yobi",80,12089258196146292e8,"Yi","yotta"],Zi:["zebi",70,11805916207174113e5,"Zi","zetta"],Ei:["exbi",60,0x1000000000000000,"Ei","exa"],Pi:["pebi",50,0x4000000000000,"Pi","peta"],Ti:["tebi",40,1099511627776,"Ti","tera"],Gi:["gibi",30,1073741824,"Gi","giga"],Mi:["mebi",20,1048576,"Mi","mega"],ki:["kibi",10,1024,"ki","kilo"]},s={Y:["yotta",1e24,"Y"],Z:["zetta",1e21,"Z"],E:["exa",1e18,"E"],P:["peta",1e15,"P"],T:["tera",1e12,"T"],G:["giga",1e9,"G"],M:["mega",1e6,"M"],k:["kilo",1e3,"k"],h:["hecto",100,"h"],e:["dekao",10,"e"],d:["deci",.1,"d"],c:["centi",.01,"c"],m:["milli",.001,"m"],u:["micro",1e-6,"u"],n:["nano",1e-9,"n"],p:["pico",1e-12,"p"],f:["femto",1e-15,"f"],a:["atto",1e-18,"a"],z:["zepto",1e-21,"z"],y:["yocto",1e-24,"y"]},l=null,a=null,u=t,c=o,d=1,p=1,b=0;b=0)&&(l=n[b]),(n[b][1]===c||r.indexOf(c)>=0)&&(a=n[b]);if(null===l){var f=i[t.substring(0,2)],m=s[t.substring(0,1)];"da"===t.substring(0,2)&&(m=["dekao",10,"da"]),f?(d=f[2],u=t.substring(2)):m&&(d=m[1],u=t.substring(m[2].length));for(var j=0;j=0)&&(l=n[j])}if(null===a){var h=i[o.substring(0,2)],g=s[o.substring(0,1)];"da"===o.substring(0,2)&&(g=["dekao",10,"da"]),h?(p=h[2],c=o.substring(2)):g&&(p=g[1],c=o.substring(g[2].length));for(var v=0;v=0)&&(a=n[v])}return null===l||null===a||l[3]!==a[3]?error.na:e*l[6]*d/(a[6]*p)},e.DEC2BIN=function(e,t){if((e=utils.parseNumber(e))instanceof Error)return e;if(!/^-?[0-9]{1,3}$/.test(e)||e<-512||e>511)return error.num;if(e<0)return"1"+REPT("0",9-(512+e).toString(2).length)+(512+e).toString(2);var o=parseInt(e,10).toString(2);return void 0===t?o:isNaN(t)?error.value:t<0?error.num:(t=Math.floor(t))>=o.length?REPT("0",t-o.length)+o:error.num},e.DEC2HEX=function(e,t){if((e=utils.parseNumber(e))instanceof Error)return e;if(!/^-?[0-9]{1,12}$/.test(e)||e<-549755813888||e>549755813887)return error.num;if(e<0)return(1099511627776+e).toString(16);var o=parseInt(e,10).toString(16);return void 0===t?o:isNaN(t)?error.value:t<0?error.num:(t=Math.floor(t))>=o.length?REPT("0",t-o.length)+o:error.num},e.DEC2OCT=function(e,t){if((e=utils.parseNumber(e))instanceof Error)return e;if(!/^-?[0-9]{1,9}$/.test(e)||e<-536870912||e>536870911)return error.num;if(e<0)return(1073741824+e).toString(8);var o=parseInt(e,10).toString(8);return void 0===t?o:isNaN(t)?error.value:t<0?error.num:(t=Math.floor(t))>=o.length?REPT("0",t-o.length)+o:error.num},e.DELTA=function(e,t){return t=void 0===t?0:t,e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t)?error.value:e===t?1:0},e.ERF=function(e,t){},e.ERF.PRECISE=function(){},e.ERFC=function(e){},e.ERFC.PRECISE=function(){},e.GESTEP=function(e,t){return t=t||0,e=utils.parseNumber(e),utils.anyIsError(t,e)?e:e>=t?1:0},e.HEX2BIN=function(e,t){if(!/^[0-9A-Fa-f]{1,10}$/.test(e))return error.num;var o=10===e.length&&"f"===e.substring(0,1).toLowerCase(),r=o?parseInt(e,16)-1099511627776:parseInt(e,16);if(r<-512||r>511)return error.num;if(o)return"1"+REPT("0",9-(512+r).toString(2).length)+(512+r).toString(2);var n=r.toString(2);return void 0===t?n:isNaN(t)?error.value:t<0?error.num:(t=Math.floor(t))>=n.length?REPT("0",t-n.length)+n:error.num},e.HEX2DEC=function(e){if(!/^[0-9A-Fa-f]{1,10}$/.test(e))return error.num;var t=parseInt(e,16);return t>=549755813888?t-1099511627776:t},e.HEX2OCT=function(e,t){if(!/^[0-9A-Fa-f]{1,10}$/.test(e))return error.num;var o=parseInt(e,16);if(o>536870911&&o<0xffe0000000)return error.num;if(o>=0xffe0000000)return(o-0xffc0000000).toString(8);var r=o.toString(8);return void 0===t?r:isNaN(t)?error.value:t<0?error.num:(t=Math.floor(t))>=r.length?REPT("0",t-r.length)+r:error.num},e.IMABS=function(t){var o=e.IMREAL(t),r=e.IMAGINARY(t);return utils.anyIsError(o,r)?error.value:Math.sqrt(Math.pow(o,2)+Math.pow(r,2))},e.IMAGINARY=function(e){if(void 0===e||!0===e||!1===e)return error.value;if(0===e||"0"===e)return 0;if(["i","j"].indexOf(e)>=0)return 1;var t=(e=e.replace("+i","+1i").replace("-i","-1i").replace("+j","+1j").replace("-j","-1j")).indexOf("+"),o=e.indexOf("-");0===t&&(t=e.indexOf("+",1)),0===o&&(o=e.indexOf("-",1));var r=e.substring(e.length-1,e.length),n="i"===r||"j"===r;return t>=0||o>=0?n?t>=0?isNaN(e.substring(0,t))||isNaN(e.substring(t+1,e.length-1))?error.num:Number(e.substring(t+1,e.length-1)):isNaN(e.substring(0,o))||isNaN(e.substring(o+1,e.length-1))?error.num:-Number(e.substring(o+1,e.length-1)):error.num:n?isNaN(e.substring(0,e.length-1))?error.num:e.substring(0,e.length-1):isNaN(e)?error.num:0},e.IMARGUMENT=function(t){var o=e.IMREAL(t),r=e.IMAGINARY(t);return utils.anyIsError(o,r)?error.value:0===o&&0===r?error.div0:0===o&&r>0?Math.PI/2:0===o&&r<0?-Math.PI/2:0===r&&o>0?0:0===r&&o<0?-Math.PI:o>0?Math.atan(r/o):o<0&&r>=0?Math.atan(r/o)+Math.PI:Math.atan(r/o)-Math.PI},e.IMCONJUGATE=function(t){var o=e.IMREAL(t),r=e.IMAGINARY(t);if(utils.anyIsError(o,r))return error.value;var n=t.substring(t.length-1);return n="i"===n||"j"===n?n:"i",0!==r?e.COMPLEX(o,-r,n):t},e.IMCOS=function(t){var o=e.IMREAL(t),r=e.IMAGINARY(t);if(utils.anyIsError(o,r))return error.value;var n=t.substring(t.length-1);return n="i"===n||"j"===n?n:"i",e.COMPLEX(Math.cos(o)*(Math.exp(r)+Math.exp(-r))/2,-Math.sin(o)*(Math.exp(r)-Math.exp(-r))/2,n)},e.IMCOSH=function(t){var o=e.IMREAL(t),r=e.IMAGINARY(t);if(utils.anyIsError(o,r))return error.value;var n=t.substring(t.length-1);return n="i"===n||"j"===n?n:"i",e.COMPLEX(Math.cos(r)*(Math.exp(o)+Math.exp(-o))/2,Math.sin(r)*(Math.exp(o)-Math.exp(-o))/2,n)},e.IMCOT=function(t){var o=e.IMREAL(t),r=e.IMAGINARY(t);return utils.anyIsError(o,r)?error.value:e.IMDIV(e.IMCOS(t),e.IMSIN(t))},e.IMDIV=function(t,o){var r=e.IMREAL(t),n=e.IMAGINARY(t),i=e.IMREAL(o),s=e.IMAGINARY(o);if(utils.anyIsError(r,n,i,s))return error.value;var l=t.substring(t.length-1),a=o.substring(o.length-1),u="i";if(("j"===l||"j"===a)&&(u="j"),0===i&&0===s)return error.num;var c=i*i+s*s;return e.COMPLEX((r*i+n*s)/c,(n*i-r*s)/c,u)},e.IMEXP=function(t){var o=e.IMREAL(t),r=e.IMAGINARY(t);if(utils.anyIsError(o,r))return error.value;var n=t.substring(t.length-1);n="i"===n||"j"===n?n:"i";var i=Math.exp(o);return e.COMPLEX(i*Math.cos(r),i*Math.sin(r),n)},e.IMLN=function(t){var o=e.IMREAL(t),r=e.IMAGINARY(t);if(utils.anyIsError(o,r))return error.value;var n=t.substring(t.length-1);return n="i"===n||"j"===n?n:"i",e.COMPLEX(Math.log(Math.sqrt(o*o+r*r)),Math.atan(r/o),n)},e.IMLOG10=function(t){var o=e.IMREAL(t),r=e.IMAGINARY(t);if(utils.anyIsError(o,r))return error.value;var n=t.substring(t.length-1);return n="i"===n||"j"===n?n:"i",e.COMPLEX(Math.log(Math.sqrt(o*o+r*r))/Math.log(10),Math.atan(r/o)/Math.log(10),n)},e.IMLOG2=function(t){var o=e.IMREAL(t),r=e.IMAGINARY(t);if(utils.anyIsError(o,r))return error.value;var n=t.substring(t.length-1);return n="i"===n||"j"===n?n:"i",e.COMPLEX(Math.log(Math.sqrt(o*o+r*r))/Math.log(2),Math.atan(r/o)/Math.log(2),n)},e.IMPOWER=function(t,o){o=utils.parseNumber(o);var r=e.IMREAL(t),n=e.IMAGINARY(t);if(utils.anyIsError(o,r,n))return error.value;var i=t.substring(t.length-1);i="i"===i||"j"===i?i:"i";var s=Math.pow(e.IMABS(t),o),l=e.IMARGUMENT(t);return e.COMPLEX(s*Math.cos(o*l),s*Math.sin(o*l),i)},e.IMPRODUCT=function(){for(var t=arguments[0],o=1;o=0)return 0;var t=e.indexOf("+"),o=e.indexOf("-");0===t&&(t=e.indexOf("+",1)),0===o&&(o=e.indexOf("-",1));var r=e.substring(e.length-1,e.length),n="i"===r||"j"===r;return t>=0||o>=0?n?t>=0?isNaN(e.substring(0,t))||isNaN(e.substring(t+1,e.length-1))?error.num:Number(e.substring(0,t)):isNaN(e.substring(0,o))||isNaN(e.substring(o+1,e.length-1))?error.num:Number(e.substring(0,o)):error.num:n?isNaN(e.substring(0,e.length-1))?error.num:0:isNaN(e)?error.num:e},e.IMSEC=function(t){if(!0===t||!1===t)return error.value;var o=e.IMREAL(t),r=e.IMAGINARY(t);return utils.anyIsError(o,r)?error.value:e.IMDIV("1",e.IMCOS(t))},e.IMSECH=function(t){var o=e.IMREAL(t),r=e.IMAGINARY(t);return utils.anyIsError(o,r)?error.value:e.IMDIV("1",e.IMCOSH(t))},e.IMSIN=function(t){var o=e.IMREAL(t),r=e.IMAGINARY(t);if(utils.anyIsError(o,r))return error.value;var n=t.substring(t.length-1);return n="i"===n||"j"===n?n:"i",e.COMPLEX(Math.sin(o)*(Math.exp(r)+Math.exp(-r))/2,Math.cos(o)*(Math.exp(r)-Math.exp(-r))/2,n)},e.IMSINH=function(t){var o=e.IMREAL(t),r=e.IMAGINARY(t);if(utils.anyIsError(o,r))return error.value;var n=t.substring(t.length-1);return n="i"===n||"j"===n?n:"i",e.COMPLEX(Math.cos(r)*(Math.exp(o)-Math.exp(-o))/2,Math.sin(r)*(Math.exp(o)+Math.exp(-o))/2,n)},e.IMSQRT=function(t){var o=e.IMREAL(t),r=e.IMAGINARY(t);if(utils.anyIsError(o,r))return error.value;var n=t.substring(t.length-1);n="i"===n||"j"===n?n:"i";var i=Math.sqrt(e.IMABS(t)),s=e.IMARGUMENT(t);return e.COMPLEX(i*Math.cos(s/2),i*Math.sin(s/2),n)},e.IMCSC=function(t){if(!0===t||!1===t)return error.value;var o=e.IMREAL(t),r=e.IMAGINARY(t);return utils.anyIsError(o,r)?error.num:e.IMDIV("1",e.IMSIN(t))},e.IMCSCH=function(t){if(!0===t||!1===t)return error.value;var o=e.IMREAL(t),r=e.IMAGINARY(t);return utils.anyIsError(o,r)?error.num:e.IMDIV("1",e.IMSINH(t))},e.IMSUB=function(e,t){var o=this.IMREAL(e),r=this.IMAGINARY(e),n=this.IMREAL(t),i=this.IMAGINARY(t);if(utils.anyIsError(o,r,n,i))return error.value;var s=e.substring(e.length-1),l=t.substring(t.length-1),a="i";return("j"===s||"j"===l)&&(a="j"),this.COMPLEX(o-n,r-i,a)},e.IMSUM=function(){for(var e=utils.flatten(arguments),t=e[0],o=1;o511)return error.num;if(o)return"1"+REPT("0",9-(512+r).toString(2).length)+(512+r).toString(2);var n=r.toString(2);return void 0===t?n:isNaN(t)?error.value:t<0?error.num:(t=Math.floor(t))>=n.length?REPT("0",t-n.length)+n:error.num},e.OCT2DEC=function(e){if(!/^[0-7]{1,10}$/.test(e))return error.num;var t=parseInt(e,8);return t>=536870912?t-1073741824:t},e.OCT2HEX=function(e,t){if(!/^[0-7]{1,10}$/.test(e))return error.num;var o=parseInt(e,8);if(o>=536870912)return"ff"+(o+3221225472).toString(16);var r=o.toString(16);return void 0===t?r:isNaN(t)?error.value:t<0?error.num:(t=Math.floor(t))>=r.length?REPT("0",t-r.length)+r:error.num},e}(),jexcel.methods.financial=function(){var e={};function t(e){return e&&e.getTime&&!isNaN(e.getTime())}function o(e){return e instanceof Date?e:new Date(e)}return e.ACCRINT=function(e,r,n,i,s,l,a){return e=o(e),r=o(r),n=o(n),t(e)&&t(r)&&t(n)?i<=0||s<=0||-1===[1,2,4].indexOf(l)||-1===[0,1,2,3,4].indexOf(a)||n<=e?"#NUM!":(a=a||0,(s=s||0)*i*YEARFRAC(e,n,a)):"#VALUE!"},e.ACCRINTM=null,e.AMORDEGRC=null,e.AMORLINC=null,e.COUPDAYBS=null,e.COUPDAYS=null,e.COUPDAYSNC=null,e.COUPNCD=null,e.COUPNUM=null,e.COUPPCD=null,e.CUMIPMT=function(t,o,r,n,i,s){if(t=utils.parseNumber(t),o=utils.parseNumber(o),r=utils.parseNumber(r),utils.anyIsError(t,o,r))return error.value;if(t<=0||o<=0||r<=0)return error.num;if(n<1||i<1||n>i)return error.num;if(0!==s&&1!==s)return error.num;var l=e.PMT(t,o,r,0,s),a=0;1===n&&0===s&&(a=-r,n++);for(var u=n;u<=i;u++)a+=1===s?e.FV(t,u-2,l,r,1)-l:e.FV(t,u-1,l,r,0);return a*t},e.CUMPRINC=function(t,o,r,n,i,s){if(t=utils.parseNumber(t),o=utils.parseNumber(o),r=utils.parseNumber(r),utils.anyIsError(t,o,r))return error.value;if(t<=0||o<=0||r<=0)return error.num;if(n<1||i<1||n>i)return error.num;if(0!==s&&1!==s)return error.num;var l=e.PMT(t,o,r,0,s),a=0;1===n&&(a=0===s?l+r*t:l,n++);for(var u=n;u<=i;u++)a+=s>0?l-(e.FV(t,u-2,l,r,1)-l)*t:l-e.FV(t,u-1,l,r,0)*t;return a},e.DB=function(e,t,o,r,n){if(n=void 0===n?12:n,e=utils.parseNumber(e),t=utils.parseNumber(t),o=utils.parseNumber(o),r=utils.parseNumber(r),n=utils.parseNumber(n),utils.anyIsError(e,t,o,r,n))return error.value;if(e<0||t<0||o<0||r<0)return error.num;if(-1===[1,2,3,4,5,6,7,8,9,10,11,12].indexOf(n))return error.num;if(r>o)return error.num;if(t>=e)return 0;for(var i=(1-Math.pow(t/e,1/o)).toFixed(3),s=e*i*n/12,l=s,a=0,u=r===o?o-1:r,c=2;c<=u;c++)l+=a=(e-l)*i;return 1===r?s:r===o?(e-l)*i:a},e.DDB=function(e,t,o,r,n){if(n=void 0===n?2:n,e=utils.parseNumber(e),t=utils.parseNumber(t),o=utils.parseNumber(o),r=utils.parseNumber(r),n=utils.parseNumber(n),utils.anyIsError(e,t,o,r,n))return error.value;if(e<0||t<0||o<0||r<0||n<=0)return error.num;if(r>o)return error.num;if(t>=e)return 0;for(var i=0,s=0,l=1;l<=r;l++)i+=s=Math.min(n/o*(e-i),e-t-i);return s},e.DISC=null,e.DOLLARDE=function(e,t){if(e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t))return error.value;if(t<0)return error.num;if(t>=0&&t<1)return error.div0;t=parseInt(t,10);var o=parseInt(e,10);o+=e%1*Math.pow(10,Math.ceil(Math.log(t)/Math.LN10))/t;var r=Math.pow(10,Math.ceil(Math.log(t)/Math.LN2)+1);return Math.round(o*r)/r},e.DOLLARFR=function(e,t){return e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t)?error.value:t<0?error.num:t>=0&&t<1?error.div0:(t=parseInt(t,10),parseInt(e,10)+e%1*Math.pow(10,-Math.ceil(Math.log(t)/Math.LN10))*t)},e.DURATION=null,e.EFFECT=function(e,t){return e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t)?error.value:e<=0||t<1?error.num:(t=parseInt(t,10),Math.pow(1+e/t,t)-1)},e.FV=function(e,t,o,r,n){if(r=r||0,n=n||0,e=utils.parseNumber(e),t=utils.parseNumber(t),o=utils.parseNumber(o),r=utils.parseNumber(r),n=utils.parseNumber(n),utils.anyIsError(e,t,o,r,n))return error.value;var i;if(0===e)i=r+o*t;else{var s=Math.pow(1+e,t);i=1===n?r*s+o*(1+e)*(s-1)/e:r*s+o*(s-1)/e}return-i},e.FVSCHEDULE=function(e,t){if(e=utils.parseNumber(e),t=utils.parseNumberArray(utils.flatten(t)),utils.anyIsError(e,t))return error.value;for(var o=t.length,r=e,n=0;n0&&(i=!0),e[l]<0&&(s=!0);if(!i||!s)return error.num;var a,u,c,d=t=void 0===t?.1:t,p=!0;do{a=d-(c=o(e,n,d))/r(e,n,d),u=Math.abs(a-d),d=a,p=u>1e-10&&Math.abs(c)>1e-10}while(p);return d},e.ISPMT=function(e,t,o,r){return e=utils.parseNumber(e),t=utils.parseNumber(t),o=utils.parseNumber(o),r=utils.parseNumber(r),utils.anyIsError(e,t,o,r)?error.value:r*e*(t/o-1)},e.MDURATION=null,e.MIRR=function(t,o,r){if(t=utils.parseNumberArray(utils.flatten(t)),o=utils.parseNumber(o),r=utils.parseNumber(r),utils.anyIsError(t,o,r))return error.value;for(var n=t.length,i=[],s=[],l=0;lo?error.num:(e-t)*(o-(r=parseInt(r,10))+1)*2/(o*(o+1))},e.TBILLEQ=function(e,t,o){return e=utils.parseDate(e),t=utils.parseDate(t),o=utils.parseNumber(o),utils.anyIsError(e,t,o)?error.value:o<=0||e>t||t-e>31536e6?error.num:365*o/(360-o*DAYS360(e,t,!1))},e.TBILLPRICE=function(e,t,o){return e=utils.parseDate(e),t=utils.parseDate(t),o=utils.parseNumber(o),utils.anyIsError(e,t,o)?error.value:o<=0||e>t||t-e>31536e6?error.num:100*(1-o*DAYS360(e,t,!1)/360)},e.TBILLYIELD=function(e,t,o){return e=utils.parseDate(e),t=utils.parseDate(t),o=utils.parseNumber(o),utils.anyIsError(e,t,o)?error.value:o<=0||e>t||t-e>31536e6?error.num:360*(100-o)/(o*DAYS360(e,t,!1))},e.VDB=null,e.XIRR=function(e,t,o){if(e=utils.parseNumberArray(utils.flatten(e)),t=utils.parseDateArray(utils.flatten(t)),o=utils.parseNumber(o),utils.anyIsError(e,t,o))return error.value;for(var r=function(e,t,o){for(var r=o+1,n=e[0],i=1;i0&&(i=!0),e[l]<0&&(s=!0);if(!i||!s)return error.num;var a,u,c,d=o=o||.1,p=!0;do{a=d-(c=r(e,t,d))/n(e,t,d),u=Math.abs(a-d),d=a,p=u>1e-10&&Math.abs(c)>1e-10}while(p);return d},e.XNPV=function(e,t,o){if(e=utils.parseNumber(e),t=utils.parseNumberArray(utils.flatten(t)),o=utils.parseDateArray(utils.flatten(o)),utils.anyIsError(e,t,o))return error.value;for(var r=0,n=0;n=0||"number"==typeof e&&(isNaN(e)||!isFinite(e))},e.ISERROR=function(t){return e.ISERR(t)||t===error.na},e.ISEVEN=function(e){return!(1&Math.floor(Math.abs(e)))},e.ISFORMULA=null,e.ISLOGICAL=function(e){return!0===e||!1===e},e.ISNA=function(e){return e===error.na},e.ISNONTEXT=function(e){return"string"!=typeof e},e.ISNUMBER=function(e){return"number"==typeof e&&!isNaN(e)&&isFinite(e)},e.ISODD=function(e){return!!(1&Math.floor(Math.abs(e)))},e.ISREF=null,e.ISTEXT=function(e){return"string"==typeof e},e.N=function(e){return this.ISNUMBER(e)?e:e instanceof Date?e.getTime():!0===e?1:!1===e?0:this.ISERROR(e)?e:0},e.NA=function(){return error.na},e.SHEET=null,e.SHEETS=null,e.TYPE=function(e){return this.ISNUMBER(e)?1:this.ISTEXT(e)?2:this.ISLOGICAL(e)?4:this.ISERROR(e)?16:Array.isArray(e)?64:void 0},e}(),jexcel.methods.logical=function(){var e={AND:function(){for(var e=utils.flatten(arguments),t=!0,o=0;o254||arguments.length0){var t=arguments[0],o=arguments.length-1,r=Math.floor(o/2),n=!1,i=o%2==0?null:arguments[arguments.length-1];if(r)for(var s=0;s=0?Math.ceil(e/t)*t:0===o?-1*Math.floor(Math.abs(e)/t)*t:-1*Math.ceil(Math.abs(e)/t)*t)}};exports.CEILING.MATH=exports.CEILING,exports.CEILING.PRECISE=exports.CEILING,exports.COMBIN=function(e,t){return e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t)?error.value:exports.FACT(e)/(exports.FACT(t)*exports.FACT(e-t))},exports.COMBINA=function(e,t){return e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t)?error.value:0===e&&0===t?1:exports.COMBIN(e+t-1,e-1)},exports.COS=function(e){return(e=utils.parseNumber(e))instanceof Error?e:Math.cos(e)},exports.COSH=function(e){return(e=utils.parseNumber(e))instanceof Error?e:(Math.exp(e)+Math.exp(-e))/2},exports.COT=function(e){return(e=utils.parseNumber(e))instanceof Error?e:1/Math.tan(e)},exports.COTH=function(e){if((e=utils.parseNumber(e))instanceof Error)return e;var t=Math.exp(2*e);return(t+1)/(t-1)},exports.CSC=function(e){return(e=utils.parseNumber(e))instanceof Error?e:1/Math.sin(e)},exports.CSCH=function(e){return(e=utils.parseNumber(e))instanceof Error?e:2/(Math.exp(e)-Math.exp(-e))},exports.DECIMAL=function(e,t){return arguments.length<1?error.value:parseInt(e,t)},exports.DEGREES=function(e){return(e=utils.parseNumber(e))instanceof Error?e:180*e/Math.PI},exports.EVEN=function(e){return(e=utils.parseNumber(e))instanceof Error?e:exports.CEILING(e,-2,-1)},exports.EXP=Math.exp;var MEMOIZED_FACT=[];return exports.FACT=function(e){if((e=utils.parseNumber(e))instanceof Error)return e;var t=Math.floor(e);return 0===t||1===t?1:(MEMOIZED_FACT[t]>0||(MEMOIZED_FACT[t]=exports.FACT(t-1)*t),MEMOIZED_FACT[t])},exports.FACTDOUBLE=function(e){if((e=utils.parseNumber(e))instanceof Error)return e;var t=Math.floor(e);return t<=0?1:t*exports.FACTDOUBLE(t-2)},exports.FLOOR=function(e,t,o){return t=void 0===t?1:t,o=void 0===o?0:o,e=utils.parseNumber(e),t=utils.parseNumber(t),o=utils.parseNumber(o),utils.anyIsError(e,t,o)?error.value:0===t?0:(t=Math.abs(t),e>=0?Math.floor(e/t)*t:0===o?-1*Math.ceil(Math.abs(e)/t)*t:-1*Math.floor(Math.abs(e)/t)*t)},exports.FLOOR.MATH=exports.FLOOR,exports.GCD=null,exports.INT=function(e){return(e=utils.parseNumber(e))instanceof Error?e:Math.floor(e)},exports.LCM=function(){var e=utils.parseNumberArray(utils.flatten(arguments));if(e instanceof Error)return e;for(var t,o,r,n,i=1;void 0!==(r=e.pop());)for(;r>1;){if(r%2){for(t=3,o=Math.floor(Math.sqrt(r));t<=o&&r%t;t+=2);n=t<=o?t:r}else n=2;for(r/=n,i*=n,t=e.length;t;e[--t]%n==0&&1==(e[t]/=n)&&e.splice(t,1));}return i},exports.LN=function(e){return(e=utils.parseNumber(e))instanceof Error?e:Math.log(e)},exports.LOG=function(e,t){return e=utils.parseNumber(e),t=void 0===t?10:utils.parseNumber(t),utils.anyIsError(e,t)?error.value:Math.log(e)/Math.log(t)},exports.LOG10=function(e){return(e=utils.parseNumber(e))instanceof Error?e:Math.log(e)/Math.log(10)},exports.MDETERM=null,exports.MINVERSE=null,exports.MMULT=null,exports.MOD=function(e,t){if(e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t))return error.value;if(0===t)return error.div0;var o=Math.abs(e%t);return t>0?o:-o},exports.MROUND=function(e,t){return e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t)?error.value:e*t<0?error.num:Math.round(e/t)*t},exports.MULTINOMIAL=function(){var e=utils.parseNumberArray(utils.flatten(arguments));if(e instanceof Error)return e;for(var t=0,o=1,r=0;r0?t:-t},exports.PI=function(){return Math.PI},exports.POWER=function(e,t){if(e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t))return error.value;var o=Math.pow(e,t);return isNaN(o)?error.num:o},exports.PRODUCT=function(){var e=utils.parseNumberArray(utils.flatten(arguments));if(e instanceof Error)return e;for(var t=1,o=0;o0?1:-1)*Math.floor(Math.abs(e)*Math.pow(10,t))/Math.pow(10,t)},exports.ROUNDUP=function(e,t){return e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t)?error.value:(e>0?1:-1)*Math.ceil(Math.abs(e)*Math.pow(10,t))/Math.pow(10,t)},exports.SEC=function(e){return(e=utils.parseNumber(e))instanceof Error?e:1/Math.cos(e)},exports.SECH=function(e){return(e=utils.parseNumber(e))instanceof Error?e:2/(Math.exp(e)+Math.exp(-e))},exports.SERIESSUM=function(e,t,o,r){if(e=utils.parseNumber(e),t=utils.parseNumber(t),o=utils.parseNumber(o),r=utils.parseNumberArray(r),utils.anyIsError(e,t,o,r))return error.value;for(var n=r[0]*Math.pow(e,t),i=1;i=t)},exports.LT=function(e,t){return 2!==arguments.length?error.na:(e=utils.parseNumber(e),t=utils.parseNumber(t),utils.anyIsError(e,t)?error.error:e0?1:-1)*Math.floor(Math.abs(e)*Math.pow(10,t))/Math.pow(10,t)},exports}(),jexcel.methods.misc=function(){var e={UNIQUE:function(){for(var e=[],t=0;t-1;)e[t]="TRUE";for(var o=0;(o=e.indexOf(!1))>-1;)e[o]="FALSE";return e.join("")},DBCS:null,DOLLAR:null,EXACT:function(e,t){return e===t},FIND:function(e,t,o){return o=void 0===o?0:o,t?t.indexOf(e,o-1)+1:null},FIXED:null,HTML2TEXT:function(e){var t="";return e&&(e instanceof Array?e.forEach((function(e){""!==t&&(t+="\n"),t+=e.replace(/<(?:.|\n)*?>/gm,"")})):t=e.replace(/<(?:.|\n)*?>/gm,"")),t},LEFT:function(e,t){return t=void 0===t?1:t,(t=utils.parseNumber(t))instanceof Error||"string"!=typeof e?error.value:e?e.substring(0,t):null},LEN:function(e){return 0===arguments.length?error.error:"string"==typeof e?e?e.length:0:e.length?e.length:error.value},LOWER:function(e){return"string"!=typeof e?error.value:e?e.toLowerCase():e},MID:function(e,t,o){if(t=utils.parseNumber(t),o=utils.parseNumber(o),utils.anyIsError(t,o)||"string"!=typeof e)return o;var r=t-1,n=r+o;return e.substring(r,n)},NUMBERVALUE:null,PRONETIC:null,PROPER:function(e){return void 0===e||0===e.length?error.value:(!0===e&&(e="TRUE"),!1===e&&(e="FALSE"),isNaN(e)&&"number"==typeof e?error.value:("number"==typeof e&&(e=""+e),e.replace(/\w\S*/g,(function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()}))))},REGEXEXTRACT:function(e,t){var o=e.match(new RegExp(t));return o?o[o.length>1?o.length-1:0]:null},REGEXMATCH:function(e,t,o){var r=e.match(new RegExp(t));return o?r:!!r},REGEXREPLACE:function(e,t,o){return e.replace(new RegExp(t),o)},REPLACE:function(e,t,o,r){return t=utils.parseNumber(t),o=utils.parseNumber(o),utils.anyIsError(t,o)||"string"!=typeof e||"string"!=typeof r?error.value:e.substr(0,t-1)+r+e.substr(t-1+o)},REPT:function(e,t){return(t=utils.parseNumber(t))instanceof Error?t:new Array(t+1).join(e)},RIGHT:function(e,t){return t=void 0===t?1:t,(t=utils.parseNumber(t))instanceof Error?t:e?e.substring(e.length-t):null},SEARCH:function(e,t,o){var r;return"string"!=typeof e||"string"!=typeof t?error.value:(o=void 0===o?0:o,0===(r=t.toLowerCase().indexOf(e.toLowerCase(),o-1)+1)?error.value:r)},SPLIT:function(e,t){return e.split(t)},SUBSTITUTE:function(e,t,o,r){if(!(e&&t&&o))return e;if(void 0===r)return e.replace(new RegExp(t,"g"),o);for(var n=0,i=0;e.indexOf(t,n)>0;)if(n=e.indexOf(t,n+1),++i===r)return e.substring(0,n)+o+e.substring(n+t.length)},T:function(e){return"string"==typeof e?e:""},TEXT:null,TRIM:function(e){return"string"!=typeof e?error.value:e.replace(/ +/g," ").trim()}};return e.UNICHAR=e.CHAR,e.UNICODE=e.CODE,e.UPPER=function(e){return"string"!=typeof e?error.value:e.toUpperCase()},e.VALUE=null,e}(),jexcel.methods.stats=function(){var exports={},SQRT2PI=2.5066282746310002;return exports.AVEDEV=null,exports.AVERAGE=function(){for(var e=utils.numbers(utils.flatten(arguments)),t=e.length,o=0,r=0,n=0;n=!]/.test(criteria)||(criteria='=="'+criteria+'"');for(var matches=0,i=0;i=!]/.test(criteria)||(criteria='=="'+criteria+'"');for(var j=0;jt[i-1]&&e[s]<=t[i]&&(n[i]+=1):i===r&&e[s]>t[r-1]&&(n[r]+=1)}return n},exports.LARGE=function(e,t){return e=utils.parseNumberArray(utils.flatten(e)),t=utils.parseNumber(t),utils.anyIsError(e,t)?e:e.sort((function(e,t){return t-e}))[t-1]},exports.MAX=function(){var e=utils.numbers(utils.flatten(arguments));return 0===e.length?0:Math.max.apply(Math,e)},exports.MAXA=function(){var e=utils.arrayValuesToNumbers(utils.flatten(arguments));return 0===e.length?0:Math.max.apply(Math,e)},exports.MIN=function(){var e=utils.numbers(utils.flatten(arguments));return 0===e.length?0:Math.min.apply(Math,e)},exports.MINA=function(){var e=utils.arrayValuesToNumbers(utils.flatten(arguments));return 0===e.length?0:Math.min.apply(Math,e)},exports.MODE={},exports.MODE.MULT=function(){var e=utils.parseNumberArray(utils.flatten(arguments));if(e instanceof Error)return e;for(var t,o=e.length,r={},n=[],i=0,s=0;si&&(i=r[t],n=[]),r[t]===i&&(n[n.length]=t);return n},exports.MODE.SNGL=function(){var e=utils.parseNumberArray(utils.flatten(arguments));return e instanceof Error?e:exports.MODE.MULT(e).sort((function(e,t){return e-t}))[0]},exports.PERCENTILE={},exports.PERCENTILE.EXC=function(e,t){if(e=utils.parseNumberArray(utils.flatten(e)),t=utils.parseNumber(t),utils.anyIsError(e,t))return error.value;var o=(e=e.sort((function(e,t){return e-t}))).length;if(t<1/(o+1)||t>1-1/(o+1))return error.num;var r=t*(o+1)-1,n=Math.floor(r);return utils.cleanFloat(r===n?e[r]:e[n]+(r-n)*(e[n+1]-e[n]))},exports.PERCENTILE.INC=function(e,t){if(e=utils.parseNumberArray(utils.flatten(e)),t=utils.parseNumber(t),utils.anyIsError(e,t))return error.value;var o=t*((e=e.sort((function(e,t){return e-t}))).length-1),r=Math.floor(o);return utils.cleanFloat(o===r?e[o]:e[r]+(o-r)*(e[r+1]-e[r]))},exports.PERCENTRANK={},exports.PERCENTRANK.EXC=function(e,t,o){if(o=void 0===o?3:o,e=utils.parseNumberArray(utils.flatten(e)),t=utils.parseNumber(t),o=utils.parseNumber(o),utils.anyIsError(e,t,o))return error.value;e=e.sort((function(e,t){return e-t}));for(var r=UNIQUE.apply(null,e),n=e.length,i=r.length,s=Math.pow(10,o),l=0,a=!1,u=0;!a&&u=r[u]&&(t=r[u]&&(t=0?t[e.indexOf(o)]:0;for(var n=e.sort((function(e,t){return e-t})),i=n.length,s=0,l=0;l=o&&n[l]<=r&&(s+=t[e.indexOf(n[l])]);return s},exports.QUARTILE={},exports.QUARTILE.EXC=function(e,t){if(e=utils.parseNumberArray(utils.flatten(e)),t=utils.parseNumber(t),utils.anyIsError(e,t))return error.value;switch(t){case 1:return exports.PERCENTILE.EXC(e,.25);case 2:return exports.PERCENTILE.EXC(e,.5);case 3:return exports.PERCENTILE.EXC(e,.75);default:return error.num}},exports.QUARTILE.INC=function(e,t){if(e=utils.parseNumberArray(utils.flatten(e)),t=utils.parseNumber(t),utils.anyIsError(e,t))return error.value;switch(t){case 1:return exports.PERCENTILE.INC(e,.25);case 2:return exports.PERCENTILE.INC(e,.5);case 3:return exports.PERCENTILE.INC(e,.75);default:return error.num}},exports.RANK={},exports.RANK.AVG=function(e,t,o){if(e=utils.parseNumber(e),t=utils.parseNumberArray(utils.flatten(t)),utils.anyIsError(e,t))return error.value;for(var r=(o=o||!1)?function(e,t){return e-t}:function(e,t){return t-e},n=(t=(t=utils.flatten(t)).sort(r)).length,i=0,s=0;s1?(2*t.indexOf(e)+i+1)/2:t.indexOf(e)+1},exports.RANK.EQ=function(e,t,o){if(e=utils.parseNumber(e),t=utils.parseNumberArray(utils.flatten(t)),utils.anyIsError(e,t))return error.value;var r=(o=o||!1)?function(e,t){return e-t}:function(e,t){return t-e};return(t=t.sort(r)).indexOf(e)+1},exports.RSQ=function(e,t){return e=utils.parseNumberArray(utils.flatten(e)),t=utils.parseNumberArray(utils.flatten(t)),utils.anyIsError(e,t)?error.value:Math.pow(exports.PEARSON(e,t),2)},exports.SMALL=function(e,t){return e=utils.parseNumberArray(utils.flatten(e)),t=utils.parseNumber(t),utils.anyIsError(e,t)?e:e.sort((function(e,t){return e-t}))[t-1]},exports.STANDARDIZE=function(e,t,o){return e=utils.parseNumber(e),t=utils.parseNumber(t),o=utils.parseNumber(o),utils.anyIsError(e,t,o)?error.value:(e-t)/o},exports.STDEV={},exports.STDEV.P=function(){var e=exports.VAR.P.apply(this,arguments);return Math.sqrt(e)},exports.STDEV.S=function(){var e=exports.VAR.S.apply(this,arguments);return Math.sqrt(e)},exports.STDEVA=function(){var e=exports.VARA.apply(this,arguments);return Math.sqrt(e)},exports.STDEVPA=function(){var e=exports.VARPA.apply(this,arguments);return Math.sqrt(e)},exports.VAR={},exports.VAR.P=function(){for(var e=utils.numbers(utils.flatten(arguments)),t=e.length,o=0,r=exports.AVERAGE(e),n=0;n{"use strict";o.r(t)}}]); +//# sourceMappingURL=131.ee437eeefadd750d.js.map \ No newline at end of file diff --git a/_static/131.ee437eeefadd750d.js.gz b/_static/131.ee437eeefadd750d.js.gz new file mode 100644 index 0000000..07a2915 Binary files /dev/null and b/_static/131.ee437eeefadd750d.js.gz differ diff --git a/_static/131.ee437eeefadd750d.js.map b/_static/131.ee437eeefadd750d.js.map new file mode 100644 index 0000000..9961d4b --- /dev/null +++ b/_static/131.ee437eeefadd750d.js.map @@ -0,0 +1 @@ +{"version":3,"file":"131.ee437eeefadd750d.js","mappings":"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zD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,WACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,YACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,YACzD,IAAIA,EAAM,UAAY,YAAa,IAAIA,EAAM,UAAY,WACzD,IAAIA,EAAM,UAAY,YAAa,IAAIA,EAAM,UAAY,YACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,YACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,YACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,WACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,YACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,WACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,YACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,UAAY,WACzD,IAAIA,EAAM,UAAY,YAAa,IAAIA,EAAM,UAAY,YACzD,IAAIA,EAAM,UAAY,YAAa,IAAIA,EAAM,UAAY,YACzD,IAAIA,EAAM,UAAY,YAAa,IAAIA,EAAM,WAAY,YACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,YACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,YACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,WACzD,IAAIA,EAAM,WAAY,WAAa,IAAIA,EAAM,WAAY,YACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,YACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,WACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,YACzD,IAAIA,EAAM,UAAY,YAAa,IAAIA,EAAM,UAAY,YACzD,IAAIA,EAAM,UAAY,YAAa,IAAIA,EAAM,UAAY,WACzD,IAAIA,EAAM,UAAY,WAAa,IAAIA,EAAM,UAAY,YACzD,IAAIA,EAAM,WAAY,WAAa,IAAIA,EAAM,WAAY,YACzD,IAAIA,EAAM,WAAY,YAAa,IAAIA,EAAM,WAAY,YACzD,IAAIA,EAAM,WAAY,WAAa,IAAIA,EAAM,WAAY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","sources":["webpack://WebComponents/./node_modules/jsuites/dist/jsuites.js","webpack://WebComponents/./node_modules/jexcel/dist/jexcel.js"],"sourcesContent":["\r\n/**\r\n * (c) jSuites Javascript Web Components (v2.8)\r\n *\r\n * Author: Paul Hodel \r\n * Website: https://bossanova.uk/jsuites/\r\n * Description: Create amazing web based applications.\r\n *\r\n * MIT License\r\n *\r\n */\r\n;(function (global, factory) {\r\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n typeof define === 'function' && define.amd ? define(factory) :\r\n global.jSuites = factory();\r\n}(this, (function () {\r\n\r\n 'use strict';\r\n\r\nvar jSuites = function(options) {\n var obj = {}\n\n obj.init = function() {\n // Find root element\n var app = document.querySelector('.japp');\n\n // Root element\n if (app) {\n obj.el = app;\n } else {\n obj.el = document.body;\n }\n\n // Loading modules\n var modules = document.querySelectorAll('[data-autoload]');\n for (var i = 0; i < modules.length; i++) {\n var m = modules[i].getAttribute('data-autoload');\n if (typeof(window[m]) == 'function') {\n window[m](modules[i]);\n }\n }\n }\n\n obj.guid = function() {\n var guid = '';\n for (var i = 0; i < 32; i++) {\n guid += Math.floor(Math.random()*0xF).toString(0xF);\n }\n return guid;\n }\n\n obj.getWindowWidth = function() {\n var w = window,\n d = document,\n e = d.documentElement,\n g = d.getElementsByTagName('body')[0],\n x = w.innerWidth || e.clientWidth || g.clientWidth;\n return x;\n }\n\n obj.getWindowHeight = function() {\n var w = window,\n d = document,\n e = d.documentElement,\n g = d.getElementsByTagName('body')[0],\n y = w.innerHeight|| e.clientHeight|| g.clientHeight;\n return y;\n }\n\n obj.getPosition = function(e) {\n if (e.changedTouches && e.changedTouches[0]) {\n var x = e.changedTouches[0].pageX;\n var y = e.changedTouches[0].pageY;\n } else {\n var x = (window.Event) ? e.pageX : e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);\n var y = (window.Event) ? e.pageY : e.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);\n }\n\n return [ x, y ];\n }\n\n obj.click = function(el) {\n if (el.click) {\n el.click();\n } else {\n var evt = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: window\n });\n el.dispatchEvent(evt);\n }\n }\n\n obj.getElement = function(element, className) {\n var foundElement = false;\n\n function path (element) {\n if (element.className) {\n if (element.classList.contains(className)) {\n foundElement = element;\n }\n }\n\n if (element.parentNode) {\n path(element.parentNode);\n }\n }\n\n path(element);\n\n return foundElement;\n }\n\n obj.getLinkElement = function(element) {\n var targetElement = false;\n\n function path (element) {\n if ((element.tagName == 'A' || element.tagName == 'DIV') && element.getAttribute('data-href')) {\n targetElement = element;\n }\n\n if (element.parentNode) {\n path(element.parentNode);\n }\n }\n\n path(element);\n\n return targetElement;\n }\n\n obj.getFormElements = function(formObject) {\n var ret = {};\n\n if (formObject) {\n var elements = formObject.querySelectorAll(\"input, select, textarea\");\n } else {\n var elements = document.querySelectorAll(\"input, select, textarea\");\n }\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n var name = element.name;\n var value = element.value;\n\n if (name) {\n ret[name] = value;\n }\n }\n\n return ret;\n }\n\n obj.exists = function(url, __callback) {\n var http = new XMLHttpRequest();\n http.open('HEAD', url, false);\n http.send();\n if (http.status) {\n __callback(http.status);\n }\n }\n\n obj.getFiles = function(element) {\n if (! element) {\n console.error('No element defined in the arguments of your method');\n }\n\n // Get attachments\n var files = element.querySelectorAll('.jfile');\n\n if (files.length > 0) {\n var data = [];\n for (var i = 0; i < files.length; i++) {\n var file = {};\n\n var src = files[i].getAttribute('src');\n\n if (files[i].classList.contains('jremove')) {\n file.remove = 1;\n } else {\n if (src.substr(0,4) == 'data') {\n file.content = src.substr(src.indexOf(',') + 1);\n file.extension = files[i].getAttribute('data-extension');\n } else {\n file.file = src;\n file.extension = files[i].getAttribute('data-extension');\n if (! file.extension) {\n file.extension = src.substr(src.lastIndexOf('.') + 1);\n }\n if (jSuites.files[file.file]) {\n file.content = jSuites.files[file.file];\n }\n }\n\n // Optional file information\n if (files[i].getAttribute('data-name')) {\n file.name = files[i].getAttribute('data-name');\n }\n\n if (files[i].getAttribute('data-file')) {\n file.file = files[i].getAttribute('data-file');\n }\n\n if (files[i].getAttribute('data-size')) {\n file.size = files[i].getAttribute('data-size');\n }\n\n if (files[i].getAttribute('data-date')) {\n file.date = files[i].getAttribute('data-date');\n }\n\n if (files[i].getAttribute('data-cover')) {\n file.cover = files[i].getAttribute('data-cover');\n }\n }\n\n // TODO SMALL thumbs?\n\n data[i] = file;\n }\n\n return data;\n }\n }\n\n obj.ajax = function(options) {\n if (! options.data) {\n options.data = {};\n }\n\n if (options.type) {\n options.method = options.type;\n }\n\n if (options.data) {\n var data = [];\n var keys = Object.keys(options.data);\n\n if (keys.length) {\n for (var i = 0; i < keys.length; i++) {\n if (typeof(options.data[keys[i]]) == 'object') {\n var o = options.data[keys[i]];\n for (var j = 0; j < o.length; j++) {\n if (typeof(o[j]) == 'string') {\n data.push(keys[i] + '[' + j + ']=' + encodeURIComponent(o[j]));\n } else {\n var prop = Object.keys(o[j]);\n for (var z = 0; z < prop.length; z++) {\n data.push(keys[i] + '[' + j + '][' + prop[z] + ']=' + encodeURIComponent(o[j][prop[z]]));\n }\n }\n }\n } else {\n data.push(keys[i] + '=' + encodeURIComponent(options.data[keys[i]]));\n }\n }\n }\n\n if (options.method == 'GET' && data.length > 0) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?';\n }\n options.url += data.join('&');\n }\n }\n\n var httpRequest = new XMLHttpRequest();\n httpRequest.open(options.method, options.url, true);\n httpRequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n\n if (options.method == 'POST') {\n httpRequest.setRequestHeader('Accept', 'application/json');\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n } else {\n if (options.dataType == 'json') {\n httpRequest.setRequestHeader('Content-Type', 'text/json');\n }\n }\n\n // No cache\n if (options.cache != true) {\n httpRequest.setRequestHeader('pragma', 'no-cache');\n httpRequest.setRequestHeader('cache-control', 'no-cache');\n }\n\n // Authentication\n if (options.withCredentials == true) {\n httpRequest.withCredentials = true\n }\n\n // Before send\n if (typeof(options.beforeSend) == 'function') {\n options.beforeSend(httpRequest);\n }\n\n httpRequest.onload = function() {\n if (httpRequest.status === 200) {\n if (options.dataType == 'json') {\n try {\n var result = JSON.parse(httpRequest.responseText);\n\n if (options.success && typeof(options.success) == 'function') {\n options.success(result);\n }\n } catch(err) {\n if (options.error && typeof(options.error) == 'function') {\n options.error(result);\n }\n }\n } else {\n var result = httpRequest.responseText;\n\n if (options.success && typeof(options.success) == 'function') {\n options.success(result);\n }\n }\n } else {\n if (options.error && typeof(options.error) == 'function') {\n options.error(httpRequest.responseText);\n }\n }\n\n // Global complete method\n if (obj.ajax.requests && obj.ajax.requests.length) {\n // Get index of this request in the container\n var index = obj.ajax.requests.indexOf(httpRequest)\n // Remove from the ajax requests container\n obj.ajax.requests.splice(index, 1);\n // Last one?\n if (! obj.ajax.requests.length) {\n if (options.complete && typeof(options.complete) == 'function') {\n options.complete(result);\n }\n }\n }\n }\n\n if (data) {\n httpRequest.send(data.join('&'));\n } else {\n httpRequest.send();\n }\n\n obj.ajax.requests.push(httpRequest);\n\n return httpRequest;\n }\n\n obj.ajax.requests = [];\n\n obj.slideLeft = function(element, direction, done) {\n if (direction == true) {\n element.classList.add('slide-left-in');\n setTimeout(function() {\n element.classList.remove('slide-left-in');\n if (typeof(done) == 'function') {\n done();\n }\n }, 400);\n } else {\n element.classList.add('slide-left-out');\n setTimeout(function() {\n element.classList.remove('slide-left-out');\n if (typeof(done) == 'function') {\n done();\n }\n }, 400);\n }\n }\n\n obj.slideRight = function(element, direction, done) {\n if (direction == true) {\n element.classList.add('slide-right-in');\n setTimeout(function() {\n element.classList.remove('slide-right-in');\n if (typeof(done) == 'function') {\n done();\n }\n }, 400);\n } else {\n element.classList.add('slide-right-out');\n setTimeout(function() {\n element.classList.remove('slide-right-out');\n if (typeof(done) == 'function') {\n done();\n }\n }, 400);\n }\n }\n\n obj.slideTop = function(element, direction, done) {\n if (direction == true) {\n element.classList.add('slide-top-in');\n setTimeout(function() {\n element.classList.remove('slide-top-in');\n if (typeof(done) == 'function') {\n done();\n }\n }, 400);\n } else {\n element.classList.add('slide-top-out');\n setTimeout(function() {\n element.classList.remove('slide-top-out');\n if (typeof(done) == 'function') {\n done();\n }\n }, 400);\n }\n }\n\n obj.slideBottom = function(element, direction, done) {\n if (direction == true) {\n element.classList.add('slide-bottom-in');\n setTimeout(function() {\n element.classList.remove('slide-bottom-in');\n if (typeof(done) == 'function') {\n done();\n }\n }, 400);\n } else {\n element.classList.add('slide-bottom-out');\n setTimeout(function() {\n element.classList.remove('slide-bottom-out');\n if (typeof(done) == 'function') {\n done();\n }\n }, 100);\n }\n }\n\n obj.fadeIn = function(element, done) {\n element.classList.add('fade-in');\n setTimeout(function() {\n element.classList.remove('fade-in');\n if (typeof(done) == 'function') {\n done();\n }\n }, 2000);\n }\n\n obj.fadeOut = function(element, done) {\n element.classList.add('fade-out');\n setTimeout(function() {\n element.classList.remove('fade-out');\n if (typeof(done) == 'function') {\n done();\n }\n }, 1000);\n }\n\n obj.keyDownControls = function(e) {\n if (e.which == 27) {\n var nodes = document.querySelectorAll('.jslider');\n if (nodes.length > 0) {\n for (var i = 0; i < nodes.length; i++) {\n nodes[i].slider.close();\n }\n }\n\n if (document.querySelector('.jdialog')) {\n jSuites.dialog.close();\n }\n } else if (e.which == 13) {\n if (document.querySelector('.jdialog')) {\n if (typeof(jSuites.dialog.options.onconfirm) == 'function') {\n jSuites.dialog.options.onconfirm();\n }\n jSuites.dialog.close();\n }\n }\n\n // Verify mask\n if (jSuites.mask) {\n jSuites.mask.apply(e);\n }\n }\n\n var actionUpControl = function(e) {\n var element = null;\n if (element = jSuites.getLinkElement(e.target)) {\n var link = element.getAttribute('data-href');\n if (link == '#back') {\n window.history.back();\n } else if (link == '#panel') {\n jSuites.panel();\n } else {\n jSuites.pages(link);\n }\n }\n }\n\n var controlSwipeLeft = function(e) {\n var element = jSuites.getElement(e.target, 'option');\n\n if (element && element.querySelector('.option-actions')) {\n element.scrollTo({\n left: 100,\n behavior: 'smooth'\n });\n } else {\n var element = jSuites.getElement(e.target, 'jcalendar');\n if (element && jSuites.calendar.current) {\n jSuites.calendar.current.prev();\n } else {\n if (jSuites.panel) {\n var element = jSuites.panel.get();\n if (element) {\n if (element.style.display != 'none') {\n jSuites.panel.close();\n }\n }\n }\n }\n }\n }\n\n var controlSwipeRight = function(e) {\n var element = jSuites.getElement(e.target, 'option');\n if (element && element.querySelector('.option-actions')) {\n element.scrollTo({\n left: 0,\n behavior: 'smooth'\n });\n } else {\n var element = jSuites.getElement(e.target, 'jcalendar');\n if (element && jSuites.calendar.current) {\n jSuites.calendar.current.next();\n } else {\n if (jSuites.panel) {\n var element = jSuites.panel.get();\n if (element) {\n if (element.style.display == 'none') {\n jSuites.panel();\n }\n }\n }\n }\n }\n }\n\n var actionOverControl = function(e) {\n // Tooltip\n if (jSuites.tooltip) {\n jSuites.tooltip(e);\n }\n }\n\n var actionOutControl = function(e) {\n // Tooltip\n if (jSuites.tooltip) {\n jSuites.tooltip.hide();\n }\n }\n\n // Create page container\n document.addEventListener('swipeleft', controlSwipeLeft);\n document.addEventListener('swiperight', controlSwipeRight);\n document.addEventListener('keydown', obj.keyDownControls);\n\n if ('ontouchend' in document.documentElement === true) {\n document.addEventListener('touchend', actionUpControl);\n } else {\n document.addEventListener('mouseup', actionUpControl);\n }\n\n // Onmouseover\n document.addEventListener('mouseover', actionOverControl);\n document.addEventListener('mouseout', actionOutControl);\n document.addEventListener('DOMContentLoaded', function() {\n obj.init();\n });\n\n // Pop state control\n window.onpopstate = function(e) {\n if (e.state && e.state.route) {\n if (jSuites.pages.get(e.state.route)) {\n jSuites.pages(e.state.route, { ignoreHistory:true });\n }\n }\n }\n\n return obj;\n}();\n\njSuites.files = [];\r\n\r\njSuites.calendar = (function(el, options) {\n var obj = {};\n obj.options = {};\n\n // Global container\n if (! jSuites.calendar.current) {\n jSuites.calendar.current = null;\n }\n\n // Default configuration\n var defaults = {\n // Data\n data: null,\n // Inline or not\n type: null,\n // Restrictions\n validRange: null,\n // Starting weekday - 0 for sunday, 6 for saturday\n startingDay: null, \n // Date format\n format: 'DD/MM/YYYY',\n // Allow keyboard date entry\n readonly: true,\n // Today is default\n today: false,\n // Show timepicker\n time: false,\n // Show the reset button\n resetButton: true,\n // Placeholder\n placeholder: '',\n // Translations can be done here\n months: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n weekdays: ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n weekdays_short: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n // Value\n value: null,\n // Events\n onclose: null,\n onchange: null,\n // Fullscreen (this is automatic set for screensize < 800)\n fullscreen: false,\n // Internal mode controller\n mode: null,\n position: null,\n // Create the calendar closed as default\n opened: false,\n };\n\n // Loop through our object\n for (var property in defaults) {\n if (options && options.hasOwnProperty(property)) {\n obj.options[property] = options[property];\n } else {\n obj.options[property] = defaults[property];\n }\n }\n\n // Value\n if (! obj.options.value) {\n if (el.tagName == 'INPUT' && el.value) {\n obj.options.value = el.value;\n }\n }\n\n // Make sure use upper case in the format\n obj.options.format = obj.options.format.toUpperCase();\n\n if (obj.options.value) {\n var date = obj.options.value.split(' ');\n var time = date[1];\n var date = date[0].split('-');\n var y = parseInt(date[0]);\n var m = parseInt(date[1]);\n var d = parseInt(date[2]);\n\n if (time) {\n var time = time.split(':');\n var h = parseInt(time[0]);\n var i = parseInt(time[1]);\n } else {\n var h = 0;\n var i = 0;\n }\n } else {\n var date = new Date();\n var y = date.getFullYear();\n var m = date.getMonth() + 1;\n var d = date.getDate();\n var h = date.getHours();\n var i = date.getMinutes();\n }\n\n // Current value\n obj.date = [ y, m, d, h, i, 0 ];\n\n // Two digits\n var two = function(value) {\n value = '' + value;\n if (value.length == 1) {\n value = '0' + value;\n }\n return value;\n }\n\n // Calendar elements\n var calendarReset = document.createElement('div');\n calendarReset.className = 'jcalendar-reset';\n calendarReset.innerHTML = 'Reset';\n\n var calendarConfirm = document.createElement('div');\n calendarConfirm.className = 'jcalendar-confirm';\n calendarConfirm.innerHTML = 'Done';\n\n var calendarControls = document.createElement('div');\n calendarControls.className = 'jcalendar-controls'\n if (obj.options.resetButton) {\n calendarControls.appendChild(calendarReset);\n }\n calendarControls.appendChild(calendarConfirm);\n\n var calendarContainer = document.createElement('div');\n calendarContainer.className = 'jcalendar-container';\n\n var calendarContent = document.createElement('div');\n calendarContent.className = 'jcalendar-content';\n calendarContent.appendChild(calendarControls);\n calendarContainer.appendChild(calendarContent);\n\n // Table container\n var calendarTableContainer = document.createElement('div');\n calendarTableContainer.className = 'jcalendar-table';\n calendarContent.appendChild(calendarTableContainer);\n\n // Main element\n if (el.tagName == 'INPUT') {\n var calendar = document.createElement('div');\n } else {\n var calendar = el;\n }\n calendar.className = 'jcalendar';\n calendar.appendChild(calendarContainer);\n\n // Previous button\n var calendarHeaderPrev = document.createElement('td');\n calendarHeaderPrev.setAttribute('colspan', '2');\n calendarHeaderPrev.className = 'jcalendar-prev';\n\n // Header with year and month\n var calendarLabelYear = document.createElement('span');\n calendarLabelYear.className = 'jcalendar-year';\n\n var calendarLabelMonth = document.createElement('span');\n calendarLabelMonth.className = 'jcalendar-month';\n\n var calendarHeaderTitle = document.createElement('td');\n calendarHeaderTitle.className = 'jcalendar-header';\n calendarHeaderTitle.setAttribute('colspan', '3');\n calendarHeaderTitle.appendChild(calendarLabelMonth);\n calendarHeaderTitle.appendChild(calendarLabelYear);\n\n var calendarHeaderNext = document.createElement('td');\n calendarHeaderNext.setAttribute('colspan', '2');\n calendarHeaderNext.className = 'jcalendar-next';\n\n var calendarHeaderRow = document.createElement('tr');\n calendarHeaderRow.appendChild(calendarHeaderPrev);\n calendarHeaderRow.appendChild(calendarHeaderTitle);\n calendarHeaderRow.appendChild(calendarHeaderNext);\n\n var calendarHeader = document.createElement('thead');\n calendarHeader.appendChild(calendarHeaderRow);\n\n var calendarBody = document.createElement('tbody');\n var calendarFooter = document.createElement('tfoot');\n\n // Calendar table\n var calendarTable = document.createElement('table');\n calendarTable.setAttribute('cellpadding', '0');\n calendarTable.setAttribute('cellspacing', '0');\n calendarTable.appendChild(calendarHeader);\n calendarTable.appendChild(calendarBody);\n calendarTable.appendChild(calendarFooter);\n calendarTableContainer.appendChild(calendarTable);\n\n var calendarSelectHour = document.createElement('select');\n calendarSelectHour.className = 'jcalendar-select';\n calendarSelectHour.onchange = function() {\n obj.date[3] = this.value; \n }\n\n for (var i = 0; i < 24; i++) {\n var element = document.createElement('option');\n element.value = i;\n element.innerHTML = two(i);\n calendarSelectHour.appendChild(element);\n }\n\n var calendarSelectMin = document.createElement('select');\n calendarSelectMin.className = 'jcalendar-select';\n calendarSelectMin.onchange = function() {\n obj.date[4] = this.value; \n }\n\n for (var i = 0; i < 60; i++) {\n var element = document.createElement('option');\n element.value = i;\n element.innerHTML = two(i);\n calendarSelectMin.appendChild(element);\n }\n\n // Footer controls\n var calendarControlsFooter = document.createElement('div');\n calendarControlsFooter.className = 'jcalendar-controls';\n\n var calendarControlsTime = document.createElement('div');\n calendarControlsTime.className = 'jcalendar-time';\n calendarControlsTime.style.maxWidth = '140px';\n calendarControlsTime.appendChild(calendarSelectHour);\n calendarControlsTime.appendChild(calendarSelectMin);\n\n var calendarControlsUpdateButton = document.createElement('input');\n calendarControlsUpdateButton.setAttribute('type', 'button');\n calendarControlsUpdateButton.className = 'jcalendar-update';\n calendarControlsUpdateButton.value = 'Update';\n\n var calendarControlsUpdate = document.createElement('div');\n calendarControlsUpdate.style.flexGrow = '10';\n calendarControlsUpdate.appendChild(calendarControlsUpdateButton);\n calendarControlsFooter.appendChild(calendarControlsTime);\n calendarControlsFooter.appendChild(calendarControlsUpdate);\n calendarContent.appendChild(calendarControlsFooter);\n\n var calendarBackdrop = document.createElement('div');\n calendarBackdrop.className = 'jcalendar-backdrop';\n calendar.appendChild(calendarBackdrop);\n\n // Update actions button\n var updateActions = function() {\n var currentDay = calendar.querySelector('.jcalendar-selected');\n\n if (currentDay && currentDay.classList.contains('jcalendar-disabled')) {\n calendarControlsUpdateButton.setAttribute('disabled', 'disabled');\n calendarSelectHour.setAttribute('disabled', 'disabled');\n calendarSelectMin.setAttribute('disabled', 'disabled');\n } else {\n calendarControlsUpdateButton.removeAttribute('disabled');\n calendarSelectHour.removeAttribute('disabled');\n calendarSelectMin.removeAttribute('disabled');\n }\n }\n\n // Methods\n obj.open = function (value) {\n if (! calendar.classList.contains('jcalendar-focus')) {\n if (jSuites.calendar.current) {\n jSuites.calendar.current.close();\n }\n // Current\n jSuites.calendar.current = obj;\n // Show calendar\n calendar.classList.add('jcalendar-focus');\n // Get days\n obj.getDays();\n // Hour\n if (obj.options.time) {\n calendarSelectHour.value = obj.date[3];\n calendarSelectMin.value = obj.date[4];\n }\n\n // Get the position of the corner helper\n if (jSuites.getWindowWidth() < 800 || obj.options.fullscreen) {\n // Full\n calendar.classList.add('jcalendar-fullsize');\n // Animation\n jSuites.slideBottom(calendarContent, 1);\n } else {\n const rect = el.getBoundingClientRect();\n const rectContent = calendarContent.getBoundingClientRect();\n\n if (obj.options.position) {\n calendarContainer.style.position = 'fixed';\n if (window.innerHeight < rect.bottom + rectContent.height) {\n calendarContainer.style.top = (rect.top - (rectContent.height + 2)) + 'px';\n } else {\n calendarContainer.style.top = (rect.top + rect.height + 2) + 'px';\n }\n calendarContainer.style.left = rect.left + 'px';\n } else {\n if (window.innerHeight < rect.bottom + rectContent.height) {\n calendarContainer.style.bottom = (1 * rect.height + rectContent.height + 2) + 'px';\n } else {\n calendarContainer.style.top = 2 + 'px'; \n }\n }\n }\n }\n }\n\n obj.close = function (ignoreEvents, update) {\n if (jSuites.calendar.current) {\n // Current\n jSuites.calendar.current = null;\n\n if (update !== false) {\n var element = calendar.querySelector('.jcalendar-selected');\n\n if (typeof(update) == 'string') {\n var value = update;\n } else if (element && element.classList.contains('jcalendar-disabled')) {\n var value = obj.options.value\n } else {\n var value = obj.getValue();\n }\n\n obj.setValue(value);\n }\n\n // Events\n if (! ignoreEvents && typeof(obj.options.onclose) == 'function') {\n obj.options.onclose(el);\n }\n\n // Hide\n calendar.classList.remove('jcalendar-focus');\n }\n\n return obj.options.value;\n }\n\n obj.prev = function() {\n // Check if the visualization is the days picker or years picker\n if (obj.options.mode == 'years') {\n obj.date[0] = obj.date[0] - 12;\n\n // Update picker table of days\n obj.getYears();\n } else {\n // Go to the previous month\n if (obj.date[1] < 2) {\n obj.date[0] = obj.date[0] - 1;\n obj.date[1] = 12;\n } else {\n obj.date[1] = obj.date[1] - 1;\n }\n\n // Update picker table of days\n obj.getDays();\n }\n }\n\n obj.next = function() {\n // Check if the visualization is the days picker or years picker\n if (obj.options.mode == 'years') {\n obj.date[0] = parseInt(obj.date[0]) + 12;\n\n // Update picker table of days\n obj.getYears();\n } else {\n // Go to the previous month\n if (obj.date[1] > 11) {\n obj.date[0] = parseInt(obj.date[0]) + 1;\n obj.date[1] = 1;\n } else {\n obj.date[1] = parseInt(obj.date[1]) + 1;\n }\n\n // Update picker table of days\n obj.getDays();\n }\n }\n\n obj.setValue = function(val) {\n if (! val) {\n val = '' + val;\n }\n // Values\n var newValue = val;\n var oldValue = obj.options.value;\n // Set label\n var value = obj.setLabel(newValue, obj.options.format);\n var date = newValue.split(' ');\n if (! date[1]) {\n date[1] = '00:00:00';\n }\n var time = date[1].split(':')\n var date = date[0].split('-');\n var y = parseInt(date[0]);\n var m = parseInt(date[1]);\n var d = parseInt(date[2]);\n var h = parseInt(time[0]);\n var i = parseInt(time[1]);\n obj.date = [ y, m, d, h, i, 0 ];\n var val = obj.setLabel(newValue, obj.options.format);\n\n if (oldValue != newValue) {\n // Input value\n if (el.tagName == 'INPUT') {\n el.value = val;\n }\n // New value\n obj.options.value = newValue;\n // On change\n if (typeof(obj.options.onchange) == 'function') {\n obj.options.onchange(el, newValue, oldValue);\n }\n }\n\n obj.getDays();\n }\n\n obj.getValue = function() {\n if (obj.date) {\n if (obj.options.time) {\n return two(obj.date[0]) + '-' + two(obj.date[1]) + '-' + two(obj.date[2]) + ' ' + two(obj.date[3]) + ':' + two(obj.date[4]) + ':' + two(0);\n } else {\n return two(obj.date[0]) + '-' + two(obj.date[1]) + '-' + two(obj.date[2]) + ' ' + two(0) + ':' + two(0) + ':' + two(0);\n }\n } else {\n return \"\";\n }\n }\n\n /**\n * Calendar\n */\n obj.update = function(element) {\n if (element.classList.contains('jcalendar-disabled')) {\n // Do nothing\n } else {\n obj.date[2] = element.innerText;\n\n if (! obj.options.time) {\n obj.close();\n } else {\n obj.date[3] = calendarSelectHour.value;\n obj.date[4] = calendarSelectMin.value;\n }\n\n var elements = calendar.querySelector('.jcalendar-selected');\n if (elements) {\n elements.classList.remove('jcalendar-selected');\n }\n element.classList.add('jcalendar-selected');\n }\n\n // Update\n updateActions();\n }\n\n /**\n * Set to blank\n */\n obj.reset = function() {\n // Close calendar\n obj.close(false, '');\n }\n\n /**\n * Get calendar days\n */\n obj.getDays = function() {\n // Mode\n obj.options.mode = 'days';\n\n // Setting current values in case of NULLs\n var date = new Date();\n\n // Current selection\n var year = obj.date && obj.date[0] ? obj.date[0] : parseInt(date.getFullYear());\n var month = obj.date && obj.date[1] ? obj.date[1] : parseInt(date.getMonth()) + 1;\n var day = obj.date && obj.date[2] ? obj.date[2] : parseInt(date.getDay());\n var hour = obj.date && obj.date[3] ? obj.date[3] : parseInt(date.getHours());\n var min = obj.date && obj.date[4] ? obj.date[4] : parseInt(date.getMinutes());\n\n // Selection container\n obj.date = [year, month, day, hour, min, 0 ];\n\n // Update title\n calendarLabelYear.innerHTML = year;\n calendarLabelMonth.innerHTML = obj.options.months[month - 1];\n\n // Current month and Year\n var isCurrentMonthAndYear = (date.getMonth() == month - 1) && (date.getFullYear() == year) ? true : false;\n var currentDay = date.getDate();\n\n // Number of days in the month\n var date = new Date(year, month, 0, 0, 0);\n var numberOfDays = date.getDate();\n\n // First day\n var date = new Date(year, month-1, 0, 0, 0);\n var firstDay = date.getDay() + 1;\n\n // Index value\n var index = obj.options.startingDay || 0;\n\n // First of day relative to the starting calendar weekday\n firstDay = firstDay - index;\n\n // Reset table\n calendarBody.innerHTML = '';\n\n // Weekdays Row\n var row = document.createElement('tr');\n row.setAttribute('align', 'center');\n calendarBody.appendChild(row);\n\n // Create weekdays row\n for (var i = 0; i < 7; i++) {\n var cell = document.createElement('td');\n cell.classList.add('jcalendar-weekday')\n cell.innerHTML = obj.options.weekdays_short[index];\n row.appendChild(cell);\n // Next week day\n index++;\n // Restart index\n if (index > 6) {\n index = 0;\n }\n }\n\n // Index of days\n var index = 0;\n var d = 0;\n \n // Calendar table\n for (var j = 0; j < 5; j++) {\n // Reset cells container\n var row = document.createElement('tr');\n row.setAttribute('align', 'center');\n // Data control\n var emptyRow = true;\n // Create cells\n for (var i = 0; i < 7; i++) {\n // Create cell\n var cell = document.createElement('td');\n cell.classList.add('jcalendar-set-day');\n\n if (index >= firstDay && index < (firstDay + numberOfDays)) {\n // Day cell\n d++;\n cell.innerHTML = d;\n\n // Selected\n if (d == day) {\n cell.classList.add('jcalendar-selected');\n }\n\n // Current selection day is today\n if (isCurrentMonthAndYear && currentDay == d) {\n cell.style.fontWeight = 'bold';\n }\n\n // Current selection day\n var current = jSuites.calendar.now(new Date(year, month-1, d), true);\n\n // Available ranges\n if (obj.options.validRange) {\n if (! obj.options.validRange[0] || current >= obj.options.validRange[0]) {\n var test1 = true;\n } else {\n var test1 = false;\n }\n\n if (! obj.options.validRange[1] || current <= obj.options.validRange[1]) {\n var test2 = true;\n } else {\n var test2 = false;\n }\n\n if (! (test1 && test2)) {\n cell.classList.add('jcalendar-disabled');\n }\n }\n\n // Control\n emptyRow = false;\n }\n // Day cell\n row.appendChild(cell);\n // Index\n index++;\n }\n\n // Add cell to the calendar body\n if (emptyRow == false) {\n calendarBody.appendChild(row);\n }\n }\n\n // Show time controls\n if (obj.options.time) {\n calendarControlsTime.style.display = '';\n } else {\n calendarControlsTime.style.display = 'none';\n }\n\n // Update\n updateActions();\n }\n\n obj.getMonths = function() {\n // Mode\n obj.options.mode = 'months';\n\n // Loading month labels\n var months = obj.options.months;\n\n // Update title\n calendarLabelYear.innerHTML = obj.date[0];\n calendarLabelMonth.innerHTML = '';\n\n // Create months table\n var html = '';\n\n for (i = 0; i < 12; i++) {\n if ((i > 0) && (!(i % 4))) {\n html += '';\n }\n\n var month = parseInt(i) + 1;\n html += '';\n }\n\n html += '
' + months[i] +'
';\n\n calendarBody.innerHTML = html;\n }\n\n obj.getYears = function() { \n // Mode\n obj.options.mode = 'years';\n\n // Array of years\n var y = [];\n for (i = 0; i < 25; i++) {\n y[i] = parseInt(obj.date[0]) + (i - 12);\n }\n\n // Assembling the year tables\n var html = '';\n\n for (i = 0; i < 25; i++) {\n if ((i > 0) && (!(i % 5))) {\n html += '';\n }\n html += '';\n }\n\n html += '
'+ y[i] +'
';\n\n calendarBody.innerHTML = html;\n }\n\n obj.setLabel = function(value, format) {\n return jSuites.calendar.getDateString(value, format);\n }\n\n obj.fromFormatted = function (value, format) {\n return jSuites.calendar.extractDateFromString(value, format);\n }\n\n var mouseUpControls = function(e) {\n var action = e.target.className;\n\n // Object id\n if (action == 'jcalendar-prev') {\n obj.prev();\n e.stopPropagation();\n e.preventDefault();\n } else if (action == 'jcalendar-next') {\n obj.next();\n e.stopPropagation();\n e.preventDefault();\n } else if (action == 'jcalendar-month') {\n obj.getMonths();\n e.stopPropagation();\n e.preventDefault();\n } else if (action == 'jcalendar-year') {\n obj.getYears();\n e.stopPropagation();\n e.preventDefault();\n } else if (action == 'jcalendar-set-year') {\n obj.date[0] = e.target.innerText;\n obj.getDays();\n e.stopPropagation();\n e.preventDefault();\n } else if (action == 'jcalendar-set-month') {\n obj.date[1] = parseInt(e.target.getAttribute('data-value'));\n obj.getDays();\n e.stopPropagation();\n e.preventDefault();\n } else if (action == 'jcalendar-confirm' || action == 'jcalendar-update') {\n obj.close();\n e.stopPropagation();\n e.preventDefault();\n } else if (action == 'jcalendar-close') {\n obj.close();\n e.stopPropagation();\n e.preventDefault();\n } else if (action == 'jcalendar-backdrop') {\n obj.close(false, false);\n e.stopPropagation();\n e.preventDefault();\n } else if (action == 'jcalendar-reset') {\n obj.reset();\n e.stopPropagation();\n e.preventDefault();\n } else if (e.target.classList.contains('jcalendar-set-day')) {\n if (e.target.innerText) {\n obj.update(e.target);\n e.stopPropagation();\n e.preventDefault();\n }\n }\n }\n\n var keyUpControls = function(e) {\n if (e.target.value && e.target.value.length > 3) {\n var test = jSuites.calendar.extractDateFromString(e.target.value, obj.options.format);\n if (test) {\n if (e.target.getAttribute('data-completed') == 'true') {\n obj.setValue(test);\n }\n }\n }\n }\n\n // Handle events\n el.addEventListener(\"keyup\", keyUpControls);\n\n // Add global events\n calendar.addEventListener(\"swipeleft\", function(e) {\n jSuites.slideLeft(calendarTable, 0, function() {\n obj.next();\n jSuites.slideRight(calendarTable, 1);\n });\n e.preventDefault();\n e.stopPropagation();\n });\n\n calendar.addEventListener(\"swiperight\", function(e) {\n jSuites.slideRight(calendarTable, 0, function() {\n obj.prev();\n jSuites.slideLeft(calendarTable, 1);\n });\n e.preventDefault();\n e.stopPropagation();\n });\n\n if ('ontouchend' in document.documentElement === true) {\n calendar.addEventListener(\"touchend\", mouseUpControls);\n\n el.addEventListener(\"touchend\", function(e) {\n obj.open();\n });\n } else {\n calendar.addEventListener(\"mouseup\", mouseUpControls);\n\n el.addEventListener(\"mouseup\", function(e) {\n obj.open();\n });\n }\n\n // Append element to the DOM\n if (el.tagName == 'INPUT') {\n el.parentNode.insertBefore(calendar, el.nextSibling);\n // Add properties\n el.setAttribute('autocomplete', 'off');\n el.setAttribute('data-mask', obj.options.format.toLowerCase());\n\n if (obj.options.readonly) {\n el.setAttribute('readonly', 'readonly');\n }\n if (obj.options.placeholder) {\n el.setAttribute('placeholder', obj.options.placeholder);\n }\n // Element\n el.classList.add('jcalendar-input');\n // Value\n el.value = obj.setLabel(obj.getValue(), obj.options.format);\n }\n\n // Keep object available from the node\n el.calendar = obj;\n\n if (obj.options.opened == true) {\n obj.open();\n }\n\n return obj;\n});\n\njSuites.calendar.prettify = function(d, texts) {\n if (! texts) {\n var texts = {\n justNow: 'Just now',\n xMinutesAgo: '{0}m ago',\n xHoursAgo: '{0}h ago',\n xDaysAgo: '{0}d ago',\n xWeeksAgo: '{0}w ago',\n xMonthsAgo: '{0} mon ago',\n xYearsAgo: '{0}y ago',\n }\n }\n\n var d1 = new Date();\n var d2 = new Date(d);\n var total = parseInt((d1 - d2) / 1000 / 60);\n\n String.prototype.format = function(o) {\n return this.replace('{0}', o);\n }\n\n if (total == 0) {\n var text = texts.justNow;\n } else if (total < 90) {\n var text = texts.xMinutesAgo.format(total);\n } else if (total < 1440) { // One day\n var text = texts.xHoursAgo.format(Math.round(total/60));\n } else if (total < 20160) { // 14 days\n var text = texts.xDaysAgo.format(Math.round(total / 1440));\n } else if (total < 43200) { // 30 days\n var text = texts.xWeeksAgo.format(Math.round(total / 10080));\n } else if (total < 1036800) { // 24 months\n var text = texts.xMonthsAgo.format(Math.round(total / 43200));\n } else { // 24 months+\n var text = texts.xYearsAgo.format(Math.round(total / 525600));\n }\n\n return text;\n}\n\njSuites.calendar.prettifyAll = function() {\n var elements = document.querySelectorAll('.prettydate');\n for (var i = 0; i < elements.length; i++) {\n if (elements[i].getAttribute('data-date')) {\n elements[i].innerHTML = jSuites.calendar.prettify(elements[i].getAttribute('data-date'));\n } else {\n elements[i].setAttribute('data-date', elements[i].innerHTML);\n elements[i].innerHTML = jSuites.calendar.prettify(elements[i].innerHTML);\n }\n }\n}\n\njSuites.calendar.now = function(date, dateOnly) {\n if (! date) {\n var date = new Date();\n }\n var y = date.getFullYear();\n var m = date.getMonth() + 1;\n var d = date.getDate();\n var h = date.getHours();\n var i = date.getMinutes();\n var s = date.getSeconds();\n\n // Two digits\n var two = function(value) {\n value = '' + value;\n if (value.length == 1) {\n value = '0' + value;\n }\n return value;\n }\n\n if (dateOnly == true) {\n return two(y) + '-' + two(m) + '-' + two(d);\n } else {\n return two(y) + '-' + two(m) + '-' + two(d) + ' ' + two(h) + ':' + two(i) + ':' + two(s);\n }\n}\n\n// Helper to extract date from a string\njSuites.calendar.extractDateFromString = function(date, format) {\n var v1 = '' + date;\n var v2 = format.replace(/[0-9]/g,'');\n\n var test = 1;\n\n // Get year\n var y = v2.search(\"YYYY\");\n y = v1.substr(y,4);\n if (parseInt(y) != y) {\n test = 0;\n }\n\n // Get month\n var m = v2.search(\"MM\");\n m = v1.substr(m,2);\n if (parseInt(m) != m || d > 12) {\n test = 0;\n }\n\n // Get day\n var d = v2.search(\"DD\");\n d = v1.substr(d,2);\n if (parseInt(d) != d || d > 31) {\n test = 0;\n }\n\n // Get hour\n var h = v2.search(\"HH\");\n if (h >= 0) {\n h = v1.substr(h,2);\n if (! parseInt(h) || h > 23) {\n h = '00';\n }\n } else {\n h = '00';\n }\n \n // Get minutes\n var i = v2.search(\"MI\");\n if (i >= 0) {\n i = v1.substr(i,2);\n if (! parseInt(i) || i > 59) {\n i = '00';\n }\n } else {\n i = '00';\n }\n\n // Get seconds\n var s = v2.search(\"SS\");\n if (s >= 0) {\n s = v1.substr(s,2);\n if (! parseInt(s) || s > 59) {\n s = '00';\n }\n } else {\n s = '00';\n }\n\n if (test == 1 && date.length == v2.length) {\n // Update source\n var data = y + '-' + m + '-' + d + ' ' + h + ':' + i + ':' + s;\n\n return data;\n }\n\n return '';\n}\n\n// Helper to convert date into string\njSuites.calendar.getDateString = function(value, format) {\n // Default calendar\n if (! format) {\n var format = 'DD/MM/YYYY';\n }\n\n if (value) {\n var d = ''+value;\n d = d.split(' ');\n\n var h = '';\n var m = '';\n var s = '';\n\n if (d[1]) {\n h = d[1].split(':');\n m = h[1] ? h[1] : '00';\n s = h[2] ? h[2] : '00';\n h = h[0] ? h[0] : '00';\n } else {\n h = '00';\n m = '00';\n s = '00';\n }\n\n d = d[0].split('-');\n\n if (d[0] && d[1] && d[2] && d[0] > 0 && d[1] > 0 && d[1] < 13 && d[2] > 0 && d[2] < 32) {\n var calendar = new Date(d[0], d[1]-1, d[2]);\n var weekday = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');\n var months = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');\n\n d[1] = (d[1].length < 2 ? '0' : '') + d[1];\n d[2] = (d[2].length < 2 ? '0' : '') + d[2];\n h = (h.length < 2 ? '0' : '') + h;\n m = (m.length < 2 ? '0' : '') + m;\n s = (s.length < 2 ? '0' : '') + s;\n\n value = format;\n value = value.replace('WD', weekday[calendar.getDay()]);\n value = value.replace('DD', d[2]);\n value = value.replace('MM', d[1]);\n value = value.replace('YYYY', d[0]);\n value = value.replace('YY', d[0].substring(2,4));\n value = value.replace('MON', months[parseInt(d[1])-1].toUpperCase());\n\n if (h) {\n value = value.replace('HH24', h);\n }\n\n if (h > 12) {\n value = value.replace('HH12', h - 12);\n value = value.replace('HH', h);\n } else {\n value = value.replace('HH12', h);\n value = value.replace('HH', h);\n }\n\n value = value.replace('MI', m);\n value = value.replace('MM', m);\n value = value.replace('SS', s);\n } else {\n value = '';\n }\n }\n\n return value;\n}\n\njSuites.calendar.isOpen = function(e) {\n if (jSuites.calendar.current) {\n if (! e.target.className || e.target.className.indexOf('jcalendar') == -1) {\n jSuites.calendar.current.close(false, false);\n }\n }\n}\n\nif ('ontouchstart' in document.documentElement === true) {\n document.addEventListener(\"touchstart\", jSuites.calendar.isOpen);\n} else {\n document.addEventListener(\"mousedown\", jSuites.calendar.isOpen);\n}\r\n\r\njSuites.color = (function(el, options) {\n var obj = {};\n obj.options = {};\n obj.values = [];\n\n // Global container\n if (! jSuites.color.current) {\n jSuites.color.current = null;\n }\n\n /**\n * @typedef {Object} defaults\n * @property {(string|Array)} value - Initial value of the compontent\n * @property {string} placeholder - The default instruction text on the element\n * @property {requestCallback} onchange - Method to be execute after any changes on the element\n * @property {requestCallback} onclose - Method to be execute when the element is closed\n */\n var defaults = {\n placeholder: '',\n value: null,\n onclose: null,\n onchange: null,\n closeOnChange: true,\n };\n\n // Loop through our object\n for (var property in defaults) {\n if (options && options.hasOwnProperty(property)) {\n obj.options[property] = options[property];\n } else {\n obj.options[property] = defaults[property];\n }\n }\n\n var palette = {\n \"red\": {\n \"50\": \"#ffebee\",\n \"100\": \"#ffcdd2\",\n \"200\": \"#ef9a9a\",\n \"300\": \"#e57373\",\n \"400\": \"#ef5350\",\n \"500\": \"#f44336\",\n \"600\": \"#e53935\",\n \"700\": \"#d32f2f\",\n \"800\": \"#c62828\",\n \"900\": \"#b71c1c\",\n },\n \"pink\": {\n \"50\": \"#fce4ec\",\n \"100\": \"#f8bbd0\",\n \"200\": \"#f48fb1\",\n \"300\": \"#f06292\",\n \"400\": \"#ec407a\",\n \"500\": \"#e91e63\",\n \"600\": \"#d81b60\",\n \"700\": \"#c2185b\",\n \"800\": \"#ad1457\",\n \"900\": \"#880e4f\",\n },\n \"purple\": {\n \"50\": \"#f3e5f5\",\n \"100\": \"#e1bee7\",\n \"200\": \"#ce93d8\",\n \"300\": \"#ba68c8\",\n \"400\": \"#ab47bc\",\n \"500\": \"#9c27b0\",\n \"600\": \"#8e24aa\",\n \"700\": \"#7b1fa2\",\n \"800\": \"#6a1b9a\",\n \"900\": \"#4a148c\",\n },\n \"indigo\": {\n \"50\": \"#e8eaf6\",\n \"100\": \"#c5cae9\",\n \"200\": \"#9fa8da\",\n \"300\": \"#7986cb\",\n \"400\": \"#5c6bc0\",\n \"500\": \"#3f51b5\",\n \"600\": \"#3949ab\",\n \"700\": \"#303f9f\",\n \"800\": \"#283593\",\n \"900\": \"#1a237e\",\n },\n \"blue\": {\n \"50\": \"#e3f2fd\",\n \"100\": \"#bbdefb\",\n \"200\": \"#90caf9\",\n \"300\": \"#64b5f6\",\n \"400\": \"#42a5f5\",\n \"500\": \"#2196f3\",\n \"600\": \"#1e88e5\",\n \"700\": \"#1976d2\",\n \"800\": \"#1565c0\",\n \"900\": \"#0d47a1\",\n },\n \"cyan\": {\n \"50\": \"#e0f7fa\",\n \"100\": \"#b2ebf2\",\n \"200\": \"#80deea\",\n \"300\": \"#4dd0e1\",\n \"400\": \"#26c6da\",\n \"500\": \"#00bcd4\",\n \"600\": \"#00acc1\",\n \"700\": \"#0097a7\",\n \"800\": \"#00838f\",\n \"900\": \"#006064\",\n },\n \"teal\": {\n \"50\": \"#e0f2f1\",\n \"100\": \"#b2dfdb\",\n \"200\": \"#80cbc4\",\n \"300\": \"#4db6ac\",\n \"400\": \"#26a69a\",\n \"500\": \"#009688\",\n \"600\": \"#00897b\",\n \"700\": \"#00796b\",\n \"800\": \"#00695c\",\n \"900\": \"#004d40\",\n },\n \"green\": {\n \"50\": \"#e8f5e9\",\n \"100\": \"#c8e6c9\",\n \"200\": \"#a5d6a7\",\n \"300\": \"#81c784\",\n \"400\": \"#66bb6a\",\n \"500\": \"#4caf50\",\n \"600\": \"#43a047\",\n \"700\": \"#388e3c\",\n \"800\": \"#2e7d32\",\n \"900\": \"#1b5e20\",\n },\n \"lightgreen\": {\n \"50\": \"#f1f8e9\",\n \"100\": \"#dcedc8\",\n \"200\": \"#c5e1a5\",\n \"300\": \"#aed581\",\n \"400\": \"#9ccc65\",\n \"500\": \"#8bc34a\",\n \"600\": \"#7cb342\",\n \"700\": \"#689f38\",\n \"800\": \"#558b2f\",\n \"900\": \"#33691e\",\n },\n \"lime\": {\n \"50\": \"#f9fbe7\",\n \"100\": \"#f0f4c3\",\n \"200\": \"#e6ee9c\",\n \"300\": \"#dce775\",\n \"400\": \"#d4e157\",\n \"500\": \"#cddc39\",\n \"600\": \"#c0ca33\",\n \"700\": \"#afb42b\",\n \"800\": \"#9e9d24\",\n \"900\": \"#827717\",\n },\n \"yellow\": {\n \"50\": \"#fffde7\",\n \"100\": \"#fff9c4\",\n \"200\": \"#fff59d\",\n \"300\": \"#fff176\",\n \"400\": \"#ffee58\",\n \"500\": \"#ffeb3b\",\n \"600\": \"#fdd835\",\n \"700\": \"#fbc02d\",\n \"800\": \"#f9a825\",\n \"900\": \"#f57f17\",\n },\n \"amber\": {\n \"50\": \"#fff8e1\",\n \"100\": \"#ffecb3\",\n \"200\": \"#ffe082\",\n \"300\": \"#ffd54f\",\n \"400\": \"#ffca28\",\n \"500\": \"#ffc107\",\n \"600\": \"#ffb300\",\n \"700\": \"#ffa000\",\n \"800\": \"#ff8f00\",\n \"900\": \"#ff6f00\",\n },\n \"orange\": {\n \"50\": \"#fff3e0\",\n \"100\": \"#ffe0b2\",\n \"200\": \"#ffcc80\",\n \"300\": \"#ffb74d\",\n \"400\": \"#ffa726\",\n \"500\": \"#ff9800\",\n \"600\": \"#fb8c00\",\n \"700\": \"#f57c00\",\n \"800\": \"#ef6c00\",\n \"900\": \"#e65100\",\n },\n \"deeporange\": {\n \"50\": \"#fbe9e7\",\n \"100\": \"#ffccbc\",\n \"200\": \"#ffab91\",\n \"300\": \"#ff8a65\",\n \"400\": \"#ff7043\",\n \"500\": \"#ff5722\",\n \"600\": \"#f4511e\",\n \"700\": \"#e64a19\",\n \"800\": \"#d84315\",\n \"900\": \"#bf360c\",\n },\n \"brown\": {\n \"50\": \"#efebe9\",\n \"100\": \"#d7ccc8\",\n \"200\": \"#bcaaa4\",\n \"300\": \"#a1887f\",\n \"400\": \"#8d6e63\",\n \"500\": \"#795548\",\n \"600\": \"#6d4c41\",\n \"700\": \"#5d4037\",\n \"800\": \"#4e342e\",\n \"900\": \"#3e2723\"\n },\n \"grey\": {\n \"50\": \"#fafafa\",\n \"100\": \"#f5f5f5\",\n \"200\": \"#eeeeee\",\n \"300\": \"#e0e0e0\",\n \"400\": \"#bdbdbd\",\n \"500\": \"#9e9e9e\",\n \"600\": \"#757575\",\n \"700\": \"#616161\",\n \"800\": \"#424242\",\n \"900\": \"#212121\"\n },\n \"bluegrey\": {\n \"50\": \"#eceff1\",\n \"100\": \"#cfd8dc\",\n \"200\": \"#b0bec5\",\n \"300\": \"#90a4ae\",\n \"400\": \"#78909c\",\n \"500\": \"#607d8b\",\n \"600\": \"#546e7a\",\n \"700\": \"#455a64\",\n \"800\": \"#37474f\",\n \"900\": \"#263238\"\n }\n };\n\n var x = 0;\n var y = 0;\n var colors = [];\n\n var col = Object.keys(palette);\n var shade = Object.keys(palette[col[0]]);\n\n for (var i = 0; i < col.length; i++) {\n for (var j = 0; j < shade.length; j++) {\n if (! colors[j]) {\n colors[j] = [];\n }\n colors[j][i] = palette[col[i]][shade[j]];\n }\n };\n\n // Value\n if (obj.options.value) {\n el.value = obj.options.value;\n }\n\n // Table container\n var container = document.createElement('div');\n container.className = 'jcolor';\n\n // Table container\n var backdrop = document.createElement('div');\n backdrop.className = 'jcolor-backdrop';\n container.appendChild(backdrop);\n\n // Content\n var content = document.createElement('div');\n content.className = 'jcolor-content';\n\n // Close button\n var closeButton = document.createElement('div');\n closeButton.className = 'jcolor-close';\n closeButton.innerHTML = 'Done';\n closeButton.onclick = function() {\n obj.close();\n }\n content.appendChild(closeButton);\n\n // Table pallete\n var table = document.createElement('table');\n table.setAttribute('cellpadding', '7');\n table.setAttribute('cellspacing', '0');\n\n for (var i = 0; i < colors.length; i++) {\n var tr = document.createElement('tr');\n for (var j = 0; j < colors[i].length; j++) {\n var td = document.createElement('td');\n td.style.backgroundColor = colors[i][j];\n td.setAttribute('data-value', colors[i][j]);\n td.innerHTML = '';\n tr.appendChild(td);\n\n // Selected color\n if (obj.options.value == colors[i][j]) {\n td.classList.add('jcolor-selected');\n }\n\n // Possible values\n obj.values[colors[i][j]] = td;\n }\n table.appendChild(tr);\n }\n\n /**\n * Open color pallete\n */\n obj.open = function() {\n if (jSuites.color.current) {\n if (jSuites.color.current != obj) {\n jSuites.color.current.close();\n }\n }\n\n if (! jSuites.color.current) {\n // Persist element\n jSuites.color.current = obj;\n // Show colorpicker\n container.classList.add('jcolor-focus');\n\n const rectContent = content.getBoundingClientRect();\n\n if (jSuites.getWindowWidth() < 800) {\n content.style.top = '';\n content.classList.add('jcolor-fullscreen');\n jSuites.slideBottom(content, 1);\n backdrop.style.display = 'block';\n } else {\n if (content.classList.contains('jcolor-fullscreen')) {\n content.classList.remove('jcolor-fullscreen');\n backdrop.style.display = '';\n }\n\n const rect = el.getBoundingClientRect();\n\n if (window.innerHeight < rect.bottom + rectContent.height) {\n content.style.top = -1 * (rectContent.height + rect.height + 2) + 'px';\n } else {\n content.style.top = '2px';\n }\n }\n\n container.focus();\n }\n }\n\n /**\n * Close color pallete\n */\n obj.close = function(ignoreEvents) {\n if (jSuites.color.current) {\n jSuites.color.current = null;\n if (! ignoreEvents && typeof(obj.options.onclose) == 'function') {\n obj.options.onclose(el);\n }\n container.classList.remove('jcolor-focus');\n }\n\n // Make sure backdrop is hidden\n backdrop.style.display = '';\n\n return obj.options.value;\n }\n\n /**\n * Set value\n */\n obj.setValue = function(color) {\n if (color) {\n el.value = color;\n obj.options.value = color;\n }\n\n // Remove current selecded mark\n var selected = container.querySelector('.jcolor-selected');\n if (selected) {\n selected.classList.remove('jcolor-selected');\n }\n\n // Mark cell as selected\n obj.values[color].classList.add('jcolor-selected');\n\n // Onchange\n if (typeof(obj.options.onchange) == 'function') {\n obj.options.onchange(el, color);\n }\n\r\n if (obj.options.closeOnChange == true) {\r\n obj.close();\r\n }\n }\n\n /**\n * Get value\n */\n obj.getValue = function() {\n return obj.options.value;\n }\n\n /**\n * If element is focus open the picker\n */\n el.addEventListener(\"focus\", function(e) {\n obj.open();\n });\n\n el.addEventListener(\"mousedown\", function(e) {\n if (! jSuites.color.current) {\r\n setTimeout(function() {\r\n obj.open();\n e.preventDefault();\r\n }, 200);\r\n }\n });\n\n // Select color\n container.addEventListener(\"mouseup\", function(e) {\n if (e.target.tagName == 'TD') {\n jSuites.color.current.setValue(e.target.getAttribute('data-value'));\n\r\n if (jSuites.color.current) {\n jSuites.color.current.close();\n }\n }\n });\n\n // Close controller\n document.addEventListener(\"mousedown\", function(e) {\n if (jSuites.color.current) {\n var element = jSuites.getElement(e.target, 'jcolor');\n if (! element) {\n jSuites.color.current.close();\n }\n }\n });\n\n // Possible to focus the container\n container.setAttribute('tabindex', '900');\n\n // Placeholder\n if (obj.options.placeholder) {\n el.setAttribute('placeholder', obj.options.placeholder);\n }\n\n // Append to the table\n content.appendChild(table);\n container.appendChild(content);\n\n // Insert picker after the element\n if (el.tagName == 'INPUT') {\n el.parentNode.insertBefore(container, el.nextSibling);\n } else {\n el.appendChild(container);\n }\n\n // Keep object available from the node\n el.color = obj;\n\n return obj;\n});\n\r\n\r\njSuites.contextmenu = (function(el, options) {\n var obj = {};\n obj.options = {};\n\n // Default configuration\n var defaults = {\n items: null,\n onclick: null,\n };\n\n // Loop through our object\n for (var property in defaults) {\n if (options && options.hasOwnProperty(property)) {\n obj.options[property] = options[property];\n } else {\n obj.options[property] = defaults[property];\n }\n }\n\n // Class definition\n el.classList.add('jcontextmenu');\n // Focusable\n el.setAttribute('tabindex', '900');\n\n /**\n * Open contextmenu\n */\n obj.open = function(e, items) {\n if (items) {\n // Update content\n obj.options.items = items;\n // Create items\n obj.create(items);\n }\n // Coordinates\n if (e.target) {\n var x = e.clientX;\n var y = e.clientY;\n } else {\n var x = e.x;\n var y = e.y;\n }\n\n el.classList.add('jcontextmenu-focus');\n el.focus();\n\n const rect = el.getBoundingClientRect();\n\n if (window.innerHeight < y + rect.height) {\n el.style.top = (y - rect.height) + 'px';\n } else {\n el.style.top = y + 'px';\n }\n\n if (window.innerWidth < x + rect.width) {\n if (x - rect.width > 0) {\n el.style.left = (x - rect.width) + 'px';\n } else {\n el.style.left = '10px';\n }\n } else {\n el.style.left = x + 'px';\n }\n }\n\n /**\n * Close menu\n */\n obj.close = function() {\n if (el.classList.contains('jcontextmenu-focus')) {\n el.classList.remove('jcontextmenu-focus');\n }\n }\n\n /**\n * Create items based on the declared objectd\n * @param {object} items - List of object\n */\n obj.create = function(items) {\n // Update content\n el.innerHTML = '';\n\n // Append items\n for (var i = 0; i < items.length; i++) {\n if (items[i].type && items[i].type == 'line') {\n var itemContainer = document.createElement('hr');\n } else {\n var itemContainer = document.createElement('div');\n var itemText = document.createElement('a');\n itemText.innerHTML = items[i].title;\n\n if (items[i].disabled) {\n itemContainer.className = 'jcontextmenu-disabled';\n } else if (items[i].onclick) {\n itemContainer.method = items[i].onclick;\n itemContainer.addEventListener(\"mouseup\", function() {\n // Execute method\n this.method(this);\n });\n }\n itemContainer.appendChild(itemText);\n\n if (items[i].shortcut) {\n var itemShortCut = document.createElement('span');\n itemShortCut.innerHTML = items[i].shortcut;\n itemContainer.appendChild(itemShortCut);\n }\n }\n\n el.appendChild(itemContainer);\n }\n }\n\n if (typeof(obj.options.onclick) == 'function') {\n el.addEventListener('click', function(e) {\n obj.options.onclick(obj);\n });\n }\n\n el.addEventListener('blur', function(e) {\n setTimeout(function() {\n obj.close();\n }, 120);\n });\n\n window.addEventListener(\"mousewheel\", function() {\n obj.close();\n });\n\n // Create items\n if (obj.options.items) {\n obj.create(obj.options.items);\n }\n\n el.contextmenu = obj;\n\n return obj;\n});\n\njSuites.contextmenu.getElement = function(element) {\n var foundId = 0;\n\n function path (element) {\n if (element.parentNode && element.getAttribute('aria-contextmenu-id')) {\n foundId = element.getAttribute('aria-contextmenu-id')\n } else {\n if (element.parentNode) {\n path(element.parentNode);\n }\n }\n }\n\n path(element);\n\n return foundId;\n}\n\ndocument.addEventListener(\"contextmenu\", function(e) {\n var id = jSuites.contextmenu.getElement(e.target);\n if (id) {\n var element = document.querySelector('#' + id);\n if (! element) {\n console.error('JSUITES: Contextmenu id not found');\n } else {\n element.contextmenu.open(e);\n e.preventDefault();\n }\n }\n});\r\n\r\n/**\n * Dialog v1.0.1\n * Author: paul.hodel@gmail.com\n * https://github.com/paulhodel/jtools\n */\n \njSuites.dialog = (function() {\n var obj = {};\n obj.options = {};\n\n var dialog = document.createElement('div');\n dialog.setAttribute('tabindex', '901');\n dialog.className = 'jdialog';\n dialog.id = 'dialog';\n\n var dialogHeader = document.createElement('div');\n dialogHeader.className = 'jdialog-header';\n\n var dialogTitle = document.createElement('div');\n dialogTitle.className = 'jdialog-title';\n dialogHeader.appendChild(dialogTitle);\n\n var dialogMessage = document.createElement('div');\n dialogMessage.className = 'jdialog-message';\n dialogHeader.appendChild(dialogMessage);\n\n var dialogFooter = document.createElement('div');\n dialogFooter.className = 'jdialog-footer';\n\n var dialogContainer = document.createElement('div');\n dialogContainer.className = 'jdialog-container';\n dialogContainer.appendChild(dialogHeader);\n dialogContainer.appendChild(dialogFooter);\n\n // Confirm\n var dialogConfirm = document.createElement('div');\n var dialogConfirmButton = document.createElement('input');\n dialogConfirmButton.value = obj.options.confirmLabel;\n dialogConfirmButton.type = 'button';\n dialogConfirmButton.onclick = function() {\n if (typeof(obj.options.onconfirm) == 'function') {\n obj.options.onconfirm();\n }\n obj.close();\n };\n dialogConfirm.appendChild(dialogConfirmButton);\n dialogFooter.appendChild(dialogConfirm);\n\n // Cancel\n var dialogCancel = document.createElement('div');\n var dialogCancelButton = document.createElement('input');\n dialogCancelButton.value = obj.options.cancelLabel;\n dialogCancelButton.type = 'button';\n dialogCancelButton.onclick = function() {\n if (typeof(obj.options.oncancel) == 'function') {\n obj.options.oncancel();\n }\n obj.close();\n }\n dialogCancel.appendChild(dialogCancelButton);\n dialogFooter.appendChild(dialogCancel);\n\n // Dialog\n dialog.appendChild(dialogContainer);\n\n obj.open = function(options) {\n obj.options = options;\n\n if (obj.options.title) {\n dialogTitle.innerHTML = obj.options.title;\n }\n\n if (obj.options.message) {\n dialogMessage.innerHTML = obj.options.message;\n }\n\n if (! obj.options.confirmLabel) {\n obj.options.confirmLabel = 'OK';\n }\n dialogConfirmButton.value = obj.options.confirmLabel;\n\n if (! obj.options.cancelLabel) {\n obj.options.cancelLabel = 'Cancel';\n }\n dialogCancelButton.value = obj.options.cancelLabel;\n\n if (obj.options.type == 'confirm') {\n dialogCancelButton.parentNode.style.display = '';\n } else {\n dialogCancelButton.parentNode.style.display = 'none';\n }\n\n // Append element to the app\n dialog.style.opacity = 100;\n\n // Append to the page\n if (jSuites.el) {\n jSuites.el.appendChild(dialog);\n } else {\n document.body.appendChild(dialog);\n }\n\n // Focus\n dialog.focus();\n\n // Show\n setTimeout(function() {\n dialogContainer.style.opacity = 100;\n }, 0);\n };\n\n obj.close = function() {\n dialog.style.opacity = 0;\n dialogContainer.style.opacity = 0;\n setTimeout(function() {\n dialog.remove();\n }, 100);\n };\n\n return obj;\n})();\n\njSuites.confirm = (function(message, onconfirm) {\n if (jSuites.getWindowWidth() < 800) {\n jSuites.dialog.open({\n type: 'confirm',\n message: message,\n title: 'Confirmation',\n onconfirm: onconfirm,\n });\n } else {\n if (confirm(message)) {\n onconfirm();\n }\n }\n});\n\njSuites.alert = function(message) {\n if (jSuites.getWindowWidth() < 800) {\n jSuites.dialog.open({\n title:'Alert',\n message:message,\n });\n } else {\n alert(message);\n }\n}\n\r\n\r\njSuites.dropdown = (function(el, options) {\n var obj = {};\n obj.options = {};\n\n // If the element is a SELECT tag, create a configuration object\n if (el.tagName == 'SELECT') {\n var ret = jSuites.dropdown.extractFromDom(el, options);\n el = ret.el;\n options = ret.options;\n }\n\n // Default configuration\n var defaults = {\n url: null,\n data: [],\n multiple: false,\n autocomplete: false,\n type: null,\n width: null,\n opened: false,\n value: null,\n placeholder: '',\n position: false,\n onchange: null,\n onload: null,\n onopen: null,\n onclose: null,\n onblur: null,\n };\n\n // Loop through our object\n for (var property in defaults) {\n if (options && options.hasOwnProperty(property)) {\n obj.options[property] = options[property];\n } else {\n obj.options[property] = defaults[property];\n }\n }\n\n // Global container\n if (! jSuites.dropdown.current) {\n jSuites.dropdown.current = null;\n }\n\n // Containers\n obj.items = [];\n obj.groups = [];\n obj.selected = [];\n\n // Create dropdown\n el.classList.add('jdropdown');\n \n if (obj.options.type == 'searchbar') {\n el.classList.add('jdropdown-searchbar');\n } else if (obj.options.type == 'list') {\n el.classList.add('jdropdown-list');\n } else if (obj.options.type == 'picker') {\n el.classList.add('jdropdown-picker');\n } else {\n if (jSuites.getWindowWidth() < 800) {\n el.classList.add('jdropdown-picker');\n obj.options.type = 'picker';\n } else {\n if (obj.options.width) {\n el.style.width = obj.options.width;\n el.style.minWidth = obj.options.width;\n }\n el.classList.add('jdropdown-default');\n obj.options.type = 'default';\n }\n }\n\n // Header container\n var containerHeader = document.createElement('div');\n containerHeader.className = 'jdropdown-container-header';\n\n // Header\n var header = document.createElement('input');\n header.className = 'jdropdown-header';\n if (typeof(obj.options.onblur) == 'function') {\n header.onblur = function() {\n obj.options.onblur(el);\n }\n }\n\n // Container\n var container = document.createElement('div');\n container.className = 'jdropdown-container';\n\n // Dropdown content\n var content = document.createElement('div');\n content.className = 'jdropdown-content';\n\n // Close button\n var closeButton = document.createElement('div');\n closeButton.className = 'jdropdown-close';\n closeButton.innerHTML = 'Done';\n\n // Create backdrop\n var backdrop = document.createElement('div');\n backdrop.className = 'jdropdown-backdrop';\n\n // Autocomplete\n if (obj.options.autocomplete == true) {\n el.setAttribute('data-autocomplete', true);\n\n // Handler\n var keyTimer = null;\n header.addEventListener('keyup', function(e) {\n if (keyTimer) {\n clearTimeout(keyTimer);\n }\n keyTimer = setTimeout(function() {\n obj.find(header.value);\n keyTimer = null;\n }, 500);\n\n if (! el.classList.contains('jdropdown-focus')) {\n if (e.which > 65) {\n obj.open();\n }\n }\n });\n } else {\n header.setAttribute('readonly', 'readonly');\n }\n\n // Place holder\n if (! obj.options.placeholder && el.getAttribute('placeholder')) {\n obj.options.placeholder = el.getAttribute('placeholder');\n }\n\n if (obj.options.placeholder) {\n header.setAttribute('placeholder', obj.options.placeholder);\n }\n\n // Append elements\n containerHeader.appendChild(header);\n if (obj.options.type == 'searchbar') {\n containerHeader.appendChild(closeButton);\n } else {\n container.appendChild(closeButton);\n }\n container.appendChild(content);\n el.appendChild(containerHeader);\n el.appendChild(container);\n el.appendChild(backdrop);\n\n /**\n * Init dropdown\n */\n obj.init = function() {\n if (obj.options.url) {\n jSuites.ajax({\n url: obj.options.url,\n method: 'GET',\n dataType: 'json',\n success: function(data) {\n if (data) {\n // Set data\n obj.setData(data);\n // Set value\n if (obj.options.value != null) {\n obj.setValue(obj.options.value);\n }\n // Onload method\n if (typeof(obj.options.onload) == 'function') {\n obj.options.onload(el, obj, data);\n }\n }\n }\n });\n } else {\n // Set data\n obj.setData();\n // Set value\n if (obj.options.value != null) {\n obj.setValue(obj.options.value);\n }\n // Onload\n if (typeof(obj.options.onload) == 'function') {\n obj.options.onload(el, obj, data);\n }\n }\n\n // Open dropdown\n if (obj.options.opened == true) {\n obj.open();\n }\n }\n\n obj.getUrl = function() {\n return obj.options.url;\n }\n\n obj.setUrl = function(url) {\n obj.options.url = url;\n\n jSuites.ajax({\n url: obj.options.url,\n method: 'GET',\n dataType: 'json',\n success: function(data) {\n obj.setData(data);\n }\n });\n }\n\n /**\n * Create a new item\n */\n obj.createItem = function(data) {\n // Create item\n var item = {};\n item.element = document.createElement('div');\n item.element.className = 'jdropdown-item';\n item.value = data.id;\n item.text = data.name;\n item.textLowerCase = '' + data.name.toLowerCase();\n\n // Image\n if (data.image) {\n var image = document.createElement('img');\n image.className = 'jdropdown-image';\n image.src = data.image;\n if (! data.title) {\n image.classList.add('jdropdown-image-small');\n }\n item.element.appendChild(image);\n }\n\n // Set content\n var node = document.createElement('div');\n node.className = 'jdropdown-description';\n node.innerHTML = data.name;\n\n // Title\n if (data.title) {\n var title = document.createElement('div');\n title.className = 'jdropdown-title';\n title.innerHTML = data.title;\n node.appendChild(title);\n }\n\n // Add node to item\n item.element.appendChild(node);\n\n return item;\n }\n\n obj.setData = function(data) {\n // Update data\n if (data) {\n obj.options.data = data;\n }\n\n // Data\n var data = obj.options.data;\n\n // Remove content from the DOM\n container.removeChild(content);\n\n // Make sure the content container is blank\n content.innerHTML = '';\n\n // Reset\n obj.reset();\n\n // Reset items\n obj.items = [];\n\n // Helpers\n var items = [];\n var groups = [];\n\n // Create elements\n if (data.length) {\n // Prepare data\n for (var i = 0; i < data.length; i++) {\n // Compatibility\n if (typeof(data[i]) != 'object') {\n // Correct format\n obj.options.data[i] = data[i] = { id: data[i], name: data[i] };\n }\n\n // Process groups\n if (data[i].group) {\n if (! groups[data[i].group]) {\n groups[data[i].group] = [];\n }\n groups[data[i].group].push(i);\n } else {\n items.push(i);\n }\n }\n\n // Groups\n var groupNames = Object.keys(groups);\n\n // Append groups in case exists\n if (groupNames.length > 0) {\n for (var i = 0; i < groupNames.length; i++) {\n // Group container\n var group = document.createElement('div');\n group.className = 'jdropdown-group';\n // Group name\n var groupName = document.createElement('div');\n groupName.className = 'jdropdown-group-name';\n groupName.innerHTML = groupNames[i];\n // Group arrow\n var groupArrow = document.createElement('i');\n groupArrow.className = 'jdropdown-group-arrow jdropdown-group-arrow-down';\n groupName.appendChild(groupArrow);\n // Group items\n var groupContent = document.createElement('div');\n groupContent.className = 'jdropdown-group-items';\n for (var j = 0; j < groups[groupNames[i]].length; j++) {\n var item = obj.createItem(data[groups[groupNames[i]][j]]);\n groupContent.appendChild(item.element);\n // Items\n obj.items.push(item);\n }\n // Group itens\n group.appendChild(groupName);\n group.appendChild(groupArrow);\n group.appendChild(groupContent);\n content.appendChild(group);\n }\n }\n\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n var item = obj.createItem(data[items[i]]);\n obj.items.push(item);\n content.appendChild(item.element);\n }\n }\n\n // Create the Indexes\n for (var i = 0; i < obj.items.length; i++) {\n obj.items[i].element.setAttribute('data-index', i);\n }\n }\n\n // Re-insert the content to the container\n container.appendChild(content);\n }\n\n obj.getText = function(asArray) {\n // Result\n var result = [];\n // Append options\n for (var i = 0; i < obj.selected.length; i++) {\n if (obj.items[obj.selected[i]]) {\n result.push(obj.items[obj.selected[i]].text);\n }\n }\n\n if (asArray) {\n return result;\n } else {\n return result.join('; ');\n }\n }\n\n obj.getValue = function(asArray) {\n // Result\n var result = [];\n // Append options\n for (var i = 0; i < obj.selected.length; i++) {\n if (obj.items[obj.selected[i]]) {\n result.push(obj.items[obj.selected[i]].value);\n }\n }\n\n if (asArray) {\n return result;\n } else {\n return result.join(';');\n }\n }\n\n obj.setValue = function(value) {\n // Remove values\n for (var i = 0; i < obj.selected.length; i++) {\n obj.items[obj.selected[i]].element.classList.remove('jdropdown-selected')\n } \n\n // Reset selected\n obj.selected = [];\n\n // Set values\n if (value != null) {\n if (Array.isArray(value)) {\n for (var i = 0; i < obj.items.length; i++) {\n for (var j = 0; j < value.length; j++) {\n if (obj.items[i].value == value[j]) {\n // Keep index of the selected item\n obj.selected.push(i);\n // Visual selection\n obj.items[i].element.classList.add('jdropdown-selected');\n }\n }\n }\n } else {\n for (var i = 0; i < obj.items.length; i++) {\n if (obj.items[i].value == value) {\n // Keep index of the selected item\n obj.selected.push(i);\n // Visual selection\n obj.items[i].element.classList.add('jdropdown-selected');\n }\n }\n }\n }\n\n // Update labels\n obj.updateLabel();\n }\n\n obj.selectIndex = function(index) {\n // Only select those existing elements\n if (obj.items && obj.items[index]) {\n var index = index = parseInt(index);\n // Current selection\n var oldValue = obj.getValue();\n var oldLabel = obj.getText();\n\n // Remove cursor style\n if (obj.currentIndex != null) {\n obj.items[obj.currentIndex].element.classList.remove('jdropdown-cursor');\n }\n // Set cursor style\n obj.items[index].element.classList.add('jdropdown-cursor');\n\n // Update cursor position\n obj.currentIndex = index;\n\n // Focus behaviour\n if (! obj.options.multiple) {\n // Unselect option\n if (obj.items[index].element.classList.contains('jdropdown-selected')) {\n // Reset selected\n obj.resetSelected();\n } else {\n // Reset selected\n obj.resetSelected();\n // Update selected item\n obj.items[index].element.classList.add('jdropdown-selected');\n // Add to the selected list\n obj.selected.push(index);\n // Close\n obj.close();\n }\n } else {\n // Toggle option\n if (obj.items[index].element.classList.contains('jdropdown-selected')) {\n obj.items[index].element.classList.remove('jdropdown-selected');\n // Remove from selected list\n var indexToRemove = obj.selected.indexOf(index);\n // Remove select\n obj.selected.splice(indexToRemove, 1);\n } else {\n // Select element\n obj.items[index].element.classList.add('jdropdown-selected');\n // Add to the selected list\n obj.selected.push(index);\n }\n\n // Update labels for multiple dropdown\n if (! obj.options.autocomplete) {\n obj.updateLabel();\n }\n }\n\n // Current selection\n var newValue = obj.getValue();\n var newLabel = obj.getText();\n\n // Events\n if (typeof(obj.options.onchange) == 'function') {\n obj.options.onchange(el, index, oldValue, newValue, oldLabel, newLabel);\n }\n }\n }\n\n obj.selectItem = function(item) {\n if (jSuites.dropdown.current) {\n var index = item.getAttribute('data-index');\n if (index != null) {\n obj.selectIndex(index);\n }\n }\n }\n\n obj.find = function(str) {\n // Force lowercase\n var str = str ? str.toLowerCase() : null;\n\n // Append options\n for (var i = 0; i < obj.items.length; i++) {\n if (str == null || obj.items[i].textLowerCase.indexOf(str) != -1) {\n obj.items[i].element.style.display = '';\n } else {\n if (obj.selected.indexOf(i) == -1) {\n obj.items[i].element.style.display = 'none';\n } else {\n obj.items[i].element.style.display = '';\n }\n }\n }\n\n var numVisibleItems = function(items) {\n var visible = 0;\n for (var j = 0; j < items.length; j++) {\n if (items[j].style.display != 'none') {\n visible++;\n }\n }\n return visible;\n }\n\n // Hide groups\n /*for (var i = 0; i < obj.groups.length; i++) {\n if (numVisibleItems(obj.groups[i].querySelectorAll('.jdropdown-item'))) {\n obj.groups[i].children[0].style.display = '';\n } else {\n obj.groups[i].children[0].style.display = 'none';\n }\n }*/\n }\n\n obj.updateLabel = function() {\n // Update label\n header.value = obj.getText();\n }\n\n obj.open = function() {\n if (jSuites.dropdown.current != el) {\n if (jSuites.dropdown.current) {\n jSuites.dropdown.current.dropdown.close();\n }\n jSuites.dropdown.current = el;\n }\n\n // Focus\n if (! el.classList.contains('jdropdown-focus')) {\n // Add focus\n el.classList.add('jdropdown-focus');\n\n // Animation\n if (jSuites.getWindowWidth() < 800) {\n if (obj.options.type == null || obj.options.type == 'picker') {\n jSuites.slideBottom(container, 1);\n }\n }\n\n // Filter\n if (obj.options.autocomplete == true) {\n // Redo search\n obj.find();\n // Clear search field\n header.value = '';\n header.focus();\n }\n\n // Set cursor for the first or first selected element\n var cursor = (obj.selected && obj.selected[0]) ? obj.selected[0] : 0;\n obj.updateCursor(cursor);\n\n // Container Size\n if (! obj.options.type || obj.options.type == 'default') {\n const rect = el.getBoundingClientRect();\n const rectContainer = container.getBoundingClientRect();\n\n if (obj.options.position) {\n container.style.position = 'fixed';\n if (window.innerHeight < rect.bottom + rectContainer.height) {\n container.style.top = '';\n container.style.bottom = (window.innerHeight - rect.top ) + 1 + 'px';\n } else {\n container.style.top = rect.bottom + 'px';\n container.style.bottom = '';\n }\n container.style.left = rect.left + 'px';\n } else {\n if (window.innerHeight < rect.bottom + rectContainer.height) {\n container.style.top = '';\n container.style.bottom = rect.height + 1 + 'px';\n } else {\n container.style.top = '';\n container.style.bottom = '';\n }\n }\n\n container.style.minWidth = rect.width + 'px';\n }\n }\n\n // Events\n if (typeof(obj.options.onopen) == 'function') {\n obj.options.onopen(el);\n }\n }\n\n obj.close = function(ignoreEvents) {\n if (jSuites.dropdown.current) {\n // Remove controller\n jSuites.dropdown.current = null\n // Remove cursor\n obj.resetCursor();\n // Update labels\n obj.updateLabel();\n // Events\n if (! ignoreEvents && typeof(obj.options.onclose) == 'function') {\n obj.options.onclose(el);\n }\n // Blur\n if (header.blur) {\n header.blur();\n }\n // Remove focus\n el.classList.remove('jdropdown-focus');\n }\n\n return obj.getValue();\n }\n\n /**\n * Update position cursor\n */\n obj.updateCursor = function(index) {\n // Set new cursor\n if (obj.items && obj.items[index] && obj.items[index].element) {\n // Reset cursor\n obj.resetCursor();\n\n // Set new cursor\n obj.items[index].element.classList.add('jdropdown-cursor');\n\n // Update position\n obj.currentIndex = parseInt(index);\n \n // Update scroll to the cursor element\n var container = content.scrollTop;\n var element = obj.items[obj.currentIndex].element;\n content.scrollTop = element.offsetTop - element.scrollTop + element.clientTop - 95;\n }\n }\n\n /**\n * Reset cursor\n */\n obj.resetCursor = function() {\n // Remove current cursor\n if (obj.currentIndex != null) {\n // Remove visual cursor\n if (obj.items && obj.items[obj.currentIndex]) {\n obj.items[obj.currentIndex].element.classList.remove('jdropdown-cursor');\n }\n // Reset cursor\n obj.currentIndex = null;\n }\n }\n\n /**\n * Reset cursor\n */\n obj.resetSelected = function() {\n // Unselected all\n if (obj.selected) {\n // Remove visual selection\n for (var i = 0; i < obj.selected.length; i++) {\n if (obj.items[obj.selected[i]]) {\n obj.items[obj.selected[i]].element.classList.remove('jdropdown-selected');\n }\n }\n // Reset current selected items\n obj.selected = [];\n }\n }\n\n /**\n * Reset cursor and selected items\n */\n obj.reset = function() {\n // Reset cursor\n obj.resetCursor();\n\n // Reset selected\n obj.resetSelected();\n\n // Update labels\n obj.updateLabel();\n }\n\n /**\n * First visible item\n */\n obj.firstVisible = function() {\n var newIndex = null;\n for (var i = 0; i < obj.items.length; i++) {\n if (obj.items[i].element.style.display != 'none') {\n newIndex = i;\n break;\n }\n }\n\n if (newIndex == null) {\n return false;\n }\n\n obj.updateCursor(newIndex);\n }\n\n /**\n * Navigation\n */\n obj.first = function() {\n var newIndex = null;\n for (var i = obj.currentIndex - 1; i >= 0; i--) {\n if (obj.items[i].element.style.display != 'none') {\n newIndex = i;\n }\n }\n\n if (newIndex == null) {\n return false;\n }\n\n obj.updateCursor(newIndex);\n }\n\n obj.last = function() {\n var newIndex = null;\n for (var i = obj.currentIndex + 1; i < obj.items.length; i++) {\n if (obj.items[i].element.style.display != 'none') {\n newIndex = i;\n }\n }\n\n if (newIndex == null) {\n return false;\n }\n\n obj.updateCursor(newIndex);\n }\n\n obj.next = function() {\n var newIndex = null;\n for (var i = obj.currentIndex + 1; i < obj.items.length; i++) {\n if (obj.items[i].element.style.display != 'none') {\n newIndex = i;\n break;\n }\n }\n\n if (newIndex == null) {\n return false;\n }\n\n obj.updateCursor(newIndex);\n }\n\n obj.prev = function() {\n var newIndex = null;\n for (var i = obj.currentIndex - 1; i >= 0; i--) {\n if (obj.items[i].element.style.display != 'none') {\n newIndex = i;\n break;\n }\n }\n\n if (newIndex == null) {\n return false;\n }\n\n obj.updateCursor(newIndex);\n }\n\n if (! jSuites.dropdown.hasEvents) {\n if ('ontouchsend' in document.documentElement === true) {\n document.addEventListener('touchsend', jSuites.dropdown.mouseup);\n } else {\n document.addEventListener('mouseup', jSuites.dropdown.mouseup);\n }\n document.addEventListener('keydown', jSuites.dropdown.onkeydown);\n\n jSuites.dropdown.hasEvents = true;\n }\n\n // Start dropdown\n obj.init();\n\n // Keep object available from the node\n el.dropdown = obj;\n\n return obj;\n});\n\njSuites.dropdown.hasEvents = false;\n\njSuites.dropdown.mouseup = function(e) {\n var element = jSuites.getElement(e.target, 'jdropdown');\n if (element) {\n var dropdown = element.dropdown;\n if (e.target.classList.contains('jdropdown-header')) {\n if (element.classList.contains('jdropdown-focus') && element.classList.contains('jdropdown-default')) {\n dropdown.close();\n } else {\n dropdown.open();\n }\n } else if (e.target.classList.contains('jdropdown-group-name')) {\n var items = e.target.nextSibling.children;\n if (e.target.nextSibling.style.display != 'none') {\n for (var i = 0; i < items.length; i++) {\n if (items[i].style.display != 'none') {\n dropdown.selectItem(items[i]);\n }\n }\n }\n } else if (e.target.classList.contains('jdropdown-group-arrow')) {\n if (e.target.classList.contains('jdropdown-group-arrow-down')) {\n e.target.classList.remove('jdropdown-group-arrow-down');\n e.target.classList.add('jdropdown-group-arrow-up');\n e.target.parentNode.nextSibling.style.display = 'none';\n } else {\n e.target.classList.remove('jdropdown-group-arrow-up');\n e.target.classList.add('jdropdown-group-arrow-down');\n e.target.parentNode.nextSibling.style.display = '';\n }\n } else if (e.target.classList.contains('jdropdown-item')) {\n dropdown.selectItem(e.target);\n } else if (e.target.classList.contains('jdropdown-image')) {\n dropdown.selectIndex(e.target.parentNode.getAttribute('data-index'));\n } else if (e.target.classList.contains('jdropdown-description')) {\n dropdown.selectIndex(e.target.parentNode.getAttribute('data-index'));\n } else if (e.target.classList.contains('jdropdown-title')) {\n dropdown.selectIndex(e.target.parentNode.parentNode.getAttribute('data-index'));\n } else if (e.target.classList.contains('jdropdown-close') || e.target.classList.contains('jdropdown-backdrop')) {\n // Close\n dropdown.close();\n }\n\n e.stopPropagation();\n e.preventDefault();\n } else {\n if (jSuites.dropdown.current) {\n jSuites.dropdown.current.dropdown.close();\n }\n }\n}\n\n\n// Keydown controls\njSuites.dropdown.onkeydown = function(e) {\n if (jSuites.dropdown.current) {\n // Element\n var element = jSuites.dropdown.current.dropdown;\n // Index\n var index = element.currentIndex;\n\n if (e.shiftKey) {\n\n } else {\n if (e.which == 13 || e.which == 27 || e.which == 35 || e.which == 36 || e.which == 38 || e.which == 40) {\n // Move cursor\n if (e.which == 13) {\n element.selectIndex(index)\n } else if (e.which == 38) {\n if (index == null) {\n element.firstVisible();\n } else if (index > 0) {\n element.prev();\n }\n } else if (e.which == 40) {\n if (index == null) {\n element.firstVisible();\n } else if (index + 1 < element.options.data.length) {\n element.next();\n }\n } else if (e.which == 36) {\n element.first();\n } else if (e.which == 35) {\n element.last();\n } else if (e.which == 27) {\n element.close();\n }\n\n e.stopPropagation();\n e.preventDefault();\n }\n }\n }\n}\n\njSuites.dropdown.extractFromDom = function(el, options) {\n // Keep reference\n var select = el;\n if (! options) {\n options = {};\n }\n // Prepare configuration\n if (el.getAttribute('multiple') && (! options || options.multiple == undefined)) {\n options.multiple = true;\n }\n if (el.getAttribute('placeholder') && (! options || options.placeholder == undefined)) {\n options.placeholder = el.getAttribute('placeholder');\n }\n if (el.getAttribute('data-autocomplete') && (! options || options.autocomplete == undefined)) {\n options.autocomplete = true;\n }\n if (! options || options.width == undefined) {\n options.width = el.offsetWidth;\n }\n if (el.value && (! options || options.value == undefined)) {\n options.value = el.value;\n }\n if (! options || options.data == undefined) {\n options.data = [];\n for (var j = 0; j < el.children.length; j++) {\n if (el.children[j].tagName == 'OPTGROUP') {\n for (var i = 0; i < el.children[j].children.length; i++) {\n options.data.push({\n id: el.children[j].children[i].value,\n name: el.children[j].children[i].innerHTML,\n group: el.children[j].getAttribute('label'),\n });\n }\n } else {\n options.data.push({\n id: el.children[j].value,\n name: el.children[j].innerHTML,\n });\n }\n }\n }\n if (! options || options.onchange == undefined) {\n options.onchange = function(a,b,c,d) {\n if (options.multiple == true) {\n if (obj.items[b].classList.contains('jdropdown-selected')) {\n select.options[b].setAttribute('selected', 'selected');\n } else {\n select.options[b].removeAttribute('selected');\n }\n } else {\n select.value = d;\n }\n }\n }\n // Create DIV\n var div = document.createElement('div');\n el.parentNode.insertBefore(div, el);\n el.style.display = 'none';\n el = div;\n\n return { el:el, options:options };\n}\r\n\r\n/**\n * (c) jTools Text Editor\n * https://github.com/paulhodel/jtools\n *\n * @author: Paul Hodel \n * @description: Inline richtext editor\n */\n\njSuites.editor = (function(el, options) {\n var obj = {};\n obj.options = {};\n\n // Default configuration\n var defaults = {\n // Initial HTML content\n value: null,\n // Initial snippet\n snippet: null,\n // Add toolbar\n toolbar: null,\n // Max height\n maxHeight: null,\n // Website parser is to read websites and images from cross domain\n remoteParser: null,\n // Key from youtube to read properties from URL\n youtubeKey: null,\n // User list\n userSearch: null,\n // Parse URL\n parseURL: false,\n // Accept drop files\n dropZone: true,\n dropAsAttachment: false,\n acceptImages: true,\n acceptFiles: false,\n maxFileSize: 5000000, \n // Border\n border: true,\n padding: true,\n focus: false,\n // Events\n onclick: null,\n onfocus: null,\n onblur: null,\n onload: null,\n onenter: null,\n onkeyup: null,\n onkeydown: null,\n };\n\n // Loop through our object\n for (var property in defaults) {\n if (options && options.hasOwnProperty(property)) {\n obj.options[property] = options[property];\n } else {\n obj.options[property] = defaults[property];\n }\n }\n\n // Private controllers\n var imageResize = 0;\n var editorTimer = null;\n var editorAction = null;\n\n // Make sure element is empty\n el.innerHTML = '';\n\n // Prepare container\n el.classList.add('jeditor-container');\n\n // Padding\n if (obj.options.padding == true) {\n el.classList.add('jeditor-padding');\n }\n\n // Border\n if (obj.options.border == false) {\n el.style.border = '0px';\n }\n\n // Snippet\n var snippet = document.createElement('div');\n snippet.className = 'snippet';\n snippet.setAttribute('contenteditable', false);\n\n // Toolbar\n var toolbar = document.createElement('div');\n toolbar.className = 'jeditor-toolbar';\n\n // Create editor\n var editor = document.createElement('div');\n editor.setAttribute('contenteditable', true);\n editor.setAttribute('spellcheck', false);\n editor.className = 'jeditor';\n\n // Max height\n if (obj.options.maxHeight) {\n editor.style.overflowY = 'auto';\n editor.style.maxHeight = obj.options.maxHeight;\n }\n\n // Set editor initial value\n if (obj.options.value) {\n var value = obj.options.value;\n } else {\n var value = el.innerHTML ? el.innerHTML : ''; \n }\n\n if (! value) {\n var value = '
';\n }\n\n /**\n * Extract images from a HTML string\n */\n var extractImageFromHtml = function(html) {\n // Create temp element\n var div = document.createElement('div');\n div.innerHTML = html;\n\n // Extract images\n var img = div.querySelectorAll('img');\n\n if (img.length) {\n for (var i = 0; i < img.length; i++) {\n obj.addImage(img[i].src);\n }\n }\n }\n\n /**\n * Insert node at caret\n */\n var insertNodeAtCaret = function(newNode) {\n var sel, range;\n\n if (window.getSelection) {\n sel = window.getSelection();\n if (sel.rangeCount) {\n range = sel.getRangeAt(0);\n var selectedText = range.toString();\n range.deleteContents();\n range.insertNode(newNode); \n // move the cursor after element\n range.setStartAfter(newNode);\n range.setEndAfter(newNode); \n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n }\n\n /**\n * Append snippet or thumbs in the editor\n * @Param object data\n */\n var appendElement = function(data) {\n // Reset snippet\n snippet.innerHTML = '';\n\n if (data.image) {\n var div = document.createElement('div');\n div.className = 'snippet-image';\n div.setAttribute('data-k', 'image');\n snippet.appendChild(div);\n\n var image = document.createElement('img');\n image.src = data.image;\n div.appendChild(image);\n }\n\n var div = document.createElement('div');\n div.className = 'snippet-title';\n div.setAttribute('data-k', 'title');\n div.innerHTML = data.title;\n snippet.appendChild(div);\n\n var div = document.createElement('div');\n div.className = 'snippet-description';\n div.setAttribute('data-k', 'description');\n div.innerHTML = data.description;\n snippet.appendChild(div);\n\n var div = document.createElement('div');\n div.className = 'snippet-host';\n div.setAttribute('data-k', 'host');\n div.innerHTML = data.host;\n snippet.appendChild(div);\n\n var div = document.createElement('div');\n div.className = 'snippet-url';\n div.setAttribute('data-k', 'url');\n div.innerHTML = data.url;\n snippet.appendChild(div);\n\n editor.appendChild(snippet);\n }\n\n var verifyEditor = function() {\n clearTimeout(editorTimer);\n editorTimer = setTimeout(function() {\n var snippet = editor.querySelector('.snippet');\n var thumbsContainer = el.querySelector('.jeditor-thumbs-container');\n\n if (! snippet && ! thumbsContainer) {\n var html = editor.innerHTML.replace(/\\n/g, ' ');\n var container = document.createElement('div');\n container.innerHTML = html;\n var thumbsContainer = container.querySelector('.jeditor-thumbs-container');\n if (thumbsContainer) {\n thumbsContainer.remove();\n }\n var text = container.innerText; \n var url = jSuites.editor.detectUrl(text);\n\n if (url) {\n if (url[0].substr(-3) == 'jpg' || url[0].substr(-3) == 'png' || url[0].substr(-3) == 'gif') {\n if (jSuites.editor.getDomain(url[0]) == window.location.hostname) {\n obj.importImage(url[0], '');\n } else {\n obj.importImage(obj.options.remoteParser + url[0], '');\n }\n } else {\n var id = jSuites.editor.youtubeParser(url[0]);\n\n if (id) {\n obj.getYoutube(id);\n } else {\n obj.getWebsite(url[0]);\n }\n }\n }\n }\n }, 1000);\n }\n\n obj.parseContent = function() {\n verifyEditor();\n }\n\n /**\n * Get metadata from a youtube video\n */\n obj.getYoutube = function(id) {\n if (! obj.options.youtubeKey) {\n console.error('The youtubeKey is not defined');\n } else {\n jSuites.ajax({\n url: 'https://www.googleapis.com/youtube/v3/videos?part=snippet,statistics&key=' + obj.options.youtubeKey + '&id=' + id,\n method: 'GET',\n dataType: 'json',\n success: function(result) {\n // Only valid elements to be appended\n if (result.items && result.items[0]) {\n var p = {\n title: '',\n description: '',\n image: '',\n host: 'www.youtube.com',\n url: 'https://www.youtube.com?watch=' + id,\n }\n if (result.items[0].snippet.title) {\n p.title = result.items[0].snippet.title;\n }\n if (result.items[0].snippet.description) {\n p.description = result.items[0].snippet.description;\n\n if (p.description.length > 150) {\n p.description = p.description.substr(0, 150) + '...';\n }\n }\n if (result.items[0].snippet.thumbnails.medium.url) {\n p.image = result.items[0].snippet.thumbnails.medium.url;\n }\n\n appendElement(p);\n }\n }\n });\n }\n }\n\n /**\n * Get meta information from a website\n */\n obj.getWebsite = function(url) {\n if (! obj.options.remoteParser) {\n console.log('The remoteParser is not defined');\n } else {\n jSuites.ajax({\n url: obj.options.remoteParser + encodeURI(url.trim()),\n method: 'GET',\n dataType: 'json',\n success: function(result) {\n var p = {\n title: '',\n description: '',\n image: '',\n host: url,\n url: url,\n }\n\n if (result.title) {\n p.title = result.title;\n }\n if (result.description) {\n p.description = result.description;\n }\n if (result.image) {\n p.image = result.image;\n } else if (result['og:image']) {\n p.image = result['og:image'];\n }\n if (result.host) {\n p.host = result.host;\n }\n if (result.url) {\n p.url = result.url;\n }\n\n appendElement(p);\n }\n });\n }\n }\n\n /**\n * Set editor value\n */\n obj.setData = function(html) {\n editor.innerHTML = html;\n cursor();\n }\n\n /**\n * Get editor data\n */\n obj.getData = function(json) {\n if (! json) {\n var data = editor.innerHTML;\n } else {\n var data = {\n content : '',\n }\n\n // Get tag users\n var tagged = editor.querySelectorAll('.post-tag');\n if (tagged.length) {\n data.users = [];\n for (var i = 0; i < tagged.length; i++) {\n var userId = tagged[i].getAttribute('data-user');\n if (userId) {\n data.users.push(userId);\n }\n }\n data.users = data.users.join(',');\n }\n\n if (snippet.innerHTML) {\n var index = 0;\n data.snippet = {};\n for (var i = 0; i < snippet.children.length; i++) {\n // Get key from element\n var key = snippet.children[i].getAttribute('data-k');\n if (key) {\n if (key == 'image') {\n data.snippet.image = snippet.children[i].children[0].getAttribute('src');\n } else {\n data.snippet[key] = snippet.children[i].innerHTML;\n }\n }\n }\n\n snippet.innerHTML = '';\n snippet.remove();\n }\n\n var text = editor.innerHTML;\n text = text.replace(/
/g, \"\\n\");\n text = text.replace(/<\\/div>/g, \"<\\/div>\\n\");\n text = text.replace(/<(?:.|\\n)*?>/gm, \"\");\n data.content = text.trim();\n data = JSON.stringify(data);\n }\n\n return data;\n }\n\n // Reset\n obj.reset = function() {\n editor.innerHTML = '';\n }\n\n obj.addPdf = function(data) {\n if (data.result.substr(0,4) != 'data') {\n console.error('Invalid source');\n } else {\n var canvas = document.createElement('canvas');\n canvas.width = 60;\n canvas.height = 60;\n\n var img = new Image();\n var ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n canvas.toBlob(function(blob) {\n var newImage = document.createElement('img');\n newImage.src = window.URL.createObjectURL(blob);\n newImage.setAttribute('data-extension', 'pdf');\n if (data.name) {\n newImage.setAttribute('data-name', data.name);\n }\n if (data.size) {\n newImage.setAttribute('data-size', data.size);\n }\n if (data.date) {\n newImage.setAttribute('data-date', data.date);\n }\n newImage.className = 'jfile pdf';\n\n insertNodeAtCaret(newImage);\n jSuites.files[newImage.src] = data.result.substr(data.result.indexOf(',') + 1);\n });\n }\n }\n\n obj.addImage = function(src, name, size, date) {\n if (src.substr(0,4) != 'data' && ! obj.options.remoteParser) {\n console.error('remoteParser not defined in your initialization');\n } else {\n // This is to process cross domain images\n if (src.substr(0,4) == 'data') {\n var extension = src.split(';')\n extension = extension[0].split('/');\n extension = extension[1];\n } else {\n var extension = src.substr(src.lastIndexOf('.') + 1);\n // Work for cross browsers\n src = obj.options.remoteParser + src;\n }\n\n var img = new Image();\n\n img.onload = function onload() {\n var canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n\n var ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n canvas.toBlob(function(blob) {\n var newImage = document.createElement('img');\n newImage.src = window.URL.createObjectURL(blob);\n newImage.setAttribute('tabindex', '900');\n newImage.setAttribute('data-extension', extension);\n if (name) {\n newImage.setAttribute('data-name', name);\n }\n if (size) {\n newImage.setAttribute('data-size', size);\n }\n if (date) {\n newImage.setAttribute('data-date', date);\n }\n newImage.className = 'jfile';\n var content = canvas.toDataURL();\n insertNodeAtCaret(newImage);\n\n jSuites.files[newImage.src] = content.substr(content.indexOf(',') + 1);\n });\n };\n\n img.src = src;\n }\n }\n\n obj.addFile = function(files) {\n var reader = [];\n\n for (var i = 0; i < files.length; i++) {\n if (files[i].size > obj.options.maxFileSize) {\n alert('The file is too big');\n } else {\n // Only PDF or Images\n var type = files[i].type.split('/');\n\n if (type[0] == 'image') {\n type = 1;\n } else if (type[1] == 'pdf') {\n type = 2;\n } else {\n type = 0;\n }\n\n if (type) {\n // Create file\n reader[i] = new FileReader();\n reader[i].index = i;\n reader[i].type = type;\n reader[i].name = files[i].name;\n reader[i].date = files[i].lastModified;\n reader[i].size = files[i].size;\n reader[i].addEventListener(\"load\", function (data) {\n // Get result\n if (data.target.type == 2) {\n if (obj.options.acceptFiles == true) {\n obj.addPdf(data.target);\n }\n } else {\n obj.addImage(data.target.result, data.target.name, data.total, data.target.lastModified);\n }\n }, false);\n\n reader[i].readAsDataURL(files[i])\n } else {\n alert('The extension is not allowed');\n }\n }\n }\n }\n\n // Destroy\n obj.destroy = function() {\n editor.removeEventListener('mouseup', editorMouseUp);\n editor.removeEventListener('mousedown', editorMouseDown);\n editor.removeEventListener('mousemove', editorMouseMove);\n editor.removeEventListener('keyup', editorKeyUp);\n editor.removeEventListener('keydown', editorKeyDown);\n editor.removeEventListener('dragstart', editorDragStart);\n editor.removeEventListener('dragenter', editorDragEnter);\n editor.removeEventListener('dragover', editorDragOver);\n editor.removeEventListener('drop', editorDrop);\n editor.removeEventListener('paste', editorPaste);\n\n if (typeof(obj.options.onblur) == 'function') {\n editor.removeEventListener('blur', editorBlur);\n }\n if (typeof(obj.options.onfocus) == 'function') {\n editor.removeEventListener('focus', editorFocus);\n }\n\n el.editor = null;\n el.classList.remove('jeditor-container');\n\n toolbar.remove();\n snippet.remove();\n editor.remove();\n }\n\n var isLetter = function (str) {\n var regex = /([\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\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\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\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-\\u0C33\\u0C35-\\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\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\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\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\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\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\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-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\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]+)/g;\n return str.match(regex) ? 1 : 0;\n }\n\n // Event handlers\n var editorMouseUp = function(e) {\n editorAction = false;\n }\n\n var editorMouseDown = function(e) {\n var close = function(snippet) {\n var rect = snippet.getBoundingClientRect();\n if (rect.width - (e.clientX - rect.left) < 40 && e.clientY - rect.top < 40) {\n snippet.innerHTML = '';\n snippet.remove();\n }\n }\n\n if (e.target.tagName == 'IMG') {\n if (e.target.style.cursor) {\n var rect = e.target.getBoundingClientRect();\n editorAction = {\n e: e.target,\n x: e.clientX,\n y: e.clientY,\n w: rect.width,\n h: rect.height,\n d: e.target.style.cursor,\n }\n\n if (! e.target.style.width) {\n e.target.style.width = rect.width + 'px';\n }\n\n if (! e.target.style.height) {\n e.target.style.height = rect.height + 'px';\n }\n\n var s = window.getSelection();\n if (s.rangeCount) {\n for (var i = 0; i < s.rangeCount; i++) {\n s.removeRange(s.getRangeAt(i));\n }\n }\n } else {\n editorAction = true;\n }\n } else { \n if (e.target.classList.contains('snippet')) {\n close(e.target);\n } else if (e.target.parentNode.classList.contains('snippet')) {\n close(e.target.parentNode);\n }\n\n editorAction = true;\n }\n }\n\n var editorMouseMove = function(e) {\n if (e.target.tagName == 'IMG') {\n if (e.target.getAttribute('tabindex')) {\n var rect = e.target.getBoundingClientRect();\n if (e.clientY - rect.top < 5) {\n if (rect.width - (e.clientX - rect.left) < 5) {\n e.target.style.cursor = 'ne-resize';\n } else if (e.clientX - rect.left < 5) {\n e.target.style.cursor = 'nw-resize';\n } else {\n e.target.style.cursor = 'n-resize';\n }\n } else if (rect.height - (e.clientY - rect.top) < 5) {\n if (rect.width - (e.clientX - rect.left) < 5) {\n e.target.style.cursor = 'se-resize';\n } else if (e.clientX - rect.left < 5) {\n e.target.style.cursor = 'sw-resize';\n } else {\n e.target.style.cursor = 's-resize';\n }\n } else if (rect.width - (e.clientX - rect.left) < 5) {\n e.target.style.cursor = 'e-resize';\n } else if (e.clientX - rect.left < 5) {\n e.target.style.cursor = 'w-resize';\n } else {\n e.target.style.cursor = '';\n }\n }\n }\n\n // Move\n if (e.which == 1 && editorAction && editorAction.d) {\n if (editorAction.d == 'e-resize' || editorAction.d == 'ne-resize' || editorAction.d == 'se-resize') {\n editorAction.e.style.width = (editorAction.w + (e.clientX - editorAction.x)) + 'px';\n\n if (e.shiftKey) {\n var newHeight = (e.clientX - editorAction.x) * (editorAction.h / editorAction.w);\n editorAction.e.style.height = editorAction.h + newHeight + 'px';\n } else {\n var newHeight = null;\n }\n }\n\n if (! newHeight) {\n if (editorAction.d == 's-resize' || editorAction.d == 'se-resize' || editorAction.d == 'sw-resize') {\n if (! e.shiftKey) {\n editorAction.e.style.height = editorAction.h + (e.clientY - editorAction.y);\n }\n }\n }\n }\n }\n\n var editorKeyUp = function(e) {\n if (! editor.innerHTML) {\n editor.innerHTML = '

';\n }\n\n if (typeof(obj.options.onkeyup) == 'function') { \n obj.options.onkeyup(e, el);\n }\n }\n\n\n var editorKeyDown = function(e) {\n // Check for URL\n if (obj.options.parseURL == true) {\n verifyEditor();\n }\n\n // Closable\n if (typeof(obj.options.onenter) == 'function' && e.which == 13) {\n var data = obj.getData();\n obj.options.onenter(obj, el, data, e);\n }\n\n if (typeof(obj.options.onkeydown) == 'function') { \n obj.options.onkeydown(e, el);\n }\n }\n\n var editorPaste = function(e) {\n if (e.clipboardData || e.originalEvent.clipboardData) {\n var html = (e.originalEvent || e).clipboardData.getData('text/html');\n var text = (e.originalEvent || e).clipboardData.getData('text/plain');\n var file = (e.originalEvent || e).clipboardData.files\n } else if (window.clipboardData) {\n var html = window.clipboardData.getData('Html');\n var text = window.clipboardData.getData('Text');\n var file = window.clipboardData.files\n }\n\n if (file.length) {\n // Paste a image from the clipboard\n obj.addFile(file);\n } else {\n // Paste text\n text = text.split('\\r\\n');\n var str = '';\n if (e.target.nodeName == 'DIV' && ! e.target.classList.contains('jeditor')) {\n for (var i = 0; i < text.length; i++) {\n if (text[i]) {\n str += text[i] + \"
\\r\\n\";\n }\n }\n } else {\n for (var i = 0; i < text.length; i++) {\n if (text[i]) {\n str += '
' + text[i] + '
';\n } else {\n str += '

';\n }\n }\n }\n // Insert text\n document.execCommand('insertHtml', false, str);\n\n // Extra images from the paste\n if (obj.options.acceptImages == true) {\n extractImageFromHtml(html);\n }\n }\n\n e.preventDefault();\n }\n\n var editorDragStart = function(e) {\n if (editorAction && editorAction.e) {\n e.preventDefault();\n }\n }\n\n var editorDragEnter = function(e) {\n if (editorAction || obj.options.dropZone == false) {\n // Do nothing\n } else {\n el.classList.add('jeditor-dragging');\n }\n }\n\n var editorDragOver = function(e) {\n if (editorAction || obj.options.dropZone == false) {\n // Do nothing\n } else {\n if (editorTimer) {\n clearTimeout(editorTimer);\n }\n\n editorTimer = setTimeout(function() {\n el.classList.remove('jeditor-dragging');\n }, 100);\n }\n }\n\n var editorDrop = function(e) {\n if (editorAction || obj.options.dropZone == false) {\n // Do nothing\n } else {\n // Position caret on the drop\n var range = null;\n if (document.caretRangeFromPoint) {\n range=document.caretRangeFromPoint(e.clientX, e.clientY);\n } else if (e.rangeParent) {\n range=document.createRange();\n range.setStart(e.rangeParent,e.rangeOffset);\n }\n var sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n sel.anchorNode.parentNode.focus();\n\n var html = (e.originalEvent || e).dataTransfer.getData('text/html');\n var text = (e.originalEvent || e).dataTransfer.getData('text/plain');\n var file = (e.originalEvent || e).dataTransfer.files;\n \n if (file.length) {\n obj.addFile(file);\n } else if (text) {\n extractImageFromHtml(html);\n }\n\n el.classList.remove('jeditor-dragging');\n e.preventDefault();\n }\n }\n\n var editorBlur = function() {\n obj.options.onblur(obj, el, obj.getData());\n }\n\n var editorFocus = function() {\n obj.options.onfocus(obj, el, obj.getData());\n }\n\n editor.addEventListener('mouseup', editorMouseUp);\n editor.addEventListener('mousedown', editorMouseDown);\n editor.addEventListener('mousemove', editorMouseMove);\n editor.addEventListener('keyup', editorKeyUp);\n editor.addEventListener('keydown', editorKeyDown);\n editor.addEventListener('dragstart', editorDragStart);\n editor.addEventListener('dragenter', editorDragEnter);\n editor.addEventListener('dragover', editorDragOver);\n editor.addEventListener('drop', editorDrop);\n editor.addEventListener('paste', editorPaste);\n\n // Blur\n if (typeof(obj.options.onblur) == 'function') {\n editor.addEventListener('blur', editorBlur);\n }\n\n // Focus\n if (typeof(obj.options.onfocus) == 'function') {\n editor.addEventListener('focus', editorFocus);\n }\n\n // Onload\n if (typeof(obj.options.onload) == 'function') {\n obj.options.onload(el, editor);\n }\n\n // Set value to the editor\n editor.innerHTML = value;\n\n // Append editor to the containre\n el.appendChild(editor);\n\n // Snippet\n if (obj.options.snippet) {\n appendElement(obj.options.snippet);\n }\n\n // Default toolbar\n if (obj.options.toolbar == null) {\n obj.options.toolbar = jSuites.editor.getDefaultToolbar();\n }\n\n // Add toolbar\n if (obj.options.toolbar) {\n for (var i = 0; i < obj.options.toolbar.length; i++) {\n if (obj.options.toolbar[i].icon) {\n var item = document.createElement('div');\n item.style.userSelect = 'none';\n var itemIcon = document.createElement('i');\n itemIcon.className = 'material-icons';\n itemIcon.innerHTML = obj.options.toolbar[i].icon;\n itemIcon.onclick = (function (a) {\n var b = a;\n return function () {\n obj.options.toolbar[b].onclick(el, obj, this)\n };\n })(i);\n item.appendChild(itemIcon);\n toolbar.appendChild(item);\n } else {\n if (obj.options.toolbar[i].type == 'divisor') {\n var item = document.createElement('div');\n item.className = 'jeditor-toolbar-divisor';\n toolbar.appendChild(item);\n } else if (obj.options.toolbar[i].type == 'button') {\n var item = document.createElement('div');\n item.classList.add('jeditor-toolbar-button');\n item.innerHTML = obj.options.toolbar[i].value;\n toolbar.appendChild(item);\n }\n }\n }\n\n el.appendChild(toolbar);\n }\n\n // Focus to the editor\n if (obj.options.focus) {\n jSuites.editor.setCursor(editor, obj.options.focus == 'initial' ? true : false);\n }\n\n el.editor = obj;\n\n return obj;\n});\n\njSuites.editor.setCursor = function(element, first) {\n element.focus();\n document.execCommand('selectAll');\n var sel = window.getSelection();\n var range = sel.getRangeAt(0);\n if (first == true) {\n var node = range.startContainer;\n var size = 0;\n } else {\n var node = range.endContainer;\n var size = node.length;\n }\n range.setStart(node, size);\n range.setEnd(node, size);\n sel.removeAllRanges();\n sel.addRange(range);\n}\n\njSuites.editor.getDomain = function(url) {\n return url.replace('http://','').replace('https://','').replace('www.','').split(/[/?#]/)[0].split(/:/g)[0];\n}\n\njSuites.editor.detectUrl = function(text) {\n var expression = /(((https?:\\/\\/)|(www\\.))[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|]+)/ig;\n var links = text.match(expression);\n\n if (links) {\n if (links[0].substr(0,3) == 'www') {\n links[0] = 'http://' + links[0];\n }\n }\n\n return links;\n}\n\njSuites.editor.youtubeParser = function(url) {\n var regExp = /^.*((youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*/;\n var match = url.match(regExp);\n\n return (match && match[7].length == 11) ? match[7] : false;\n}\n\njSuites.editor.getDefaultToolbar = function() { \n return [\n {\n icon:'undo',\n onclick: function() {\n document.execCommand('undo');\n }\n },\n {\n icon:'redo',\n onclick: function() {\n document.execCommand('redo');\n }\n },\n {\n type:'divisor'\n },\n {\n icon:'format_bold',\n onclick: function(a,b,c) {\n document.execCommand('bold');\n\n if (document.queryCommandState(\"bold\")) {\n c.classList.add('selected');\n } else {\n c.classList.remove('selected');\n }\n }\n },\n {\n icon:'format_italic',\n onclick: function(a,b,c) {\n document.execCommand('italic');\n\n if (document.queryCommandState(\"italic\")) {\n c.classList.add('selected');\n } else {\n c.classList.remove('selected');\n }\n }\n },\n {\n icon:'format_underline',\n onclick: function(a,b,c) {\n document.execCommand('underline');\n\n if (document.queryCommandState(\"underline\")) {\n c.classList.add('selected');\n } else {\n c.classList.remove('selected');\n }\n }\n },\n {\n type:'divisor'\n },\n {\n icon:'format_list_bulleted',\n onclick: function(a,b,c) {\n document.execCommand('insertUnorderedList');\n\n if (document.queryCommandState(\"insertUnorderedList\")) {\n c.classList.add('selected');\n } else {\n c.classList.remove('selected');\n }\n }\n },\n {\n icon:'format_list_numbered',\n onclick: function(a,b,c) {\n document.execCommand('insertOrderedList');\n\n if (document.queryCommandState(\"insertOrderedList\")) {\n c.classList.add('selected');\n } else {\n c.classList.remove('selected');\n }\n }\n },\n {\n icon:'format_indent_increase',\n onclick: function(a,b,c) {\n document.execCommand('indent', true, null);\n\n if (document.queryCommandState(\"indent\")) {\n c.classList.add('selected');\n } else {\n c.classList.remove('selected');\n }\n }\n },\n {\n icon:'format_indent_decrease',\n onclick: function(a,b,c) {\n document.execCommand('outdent');\n\n if (document.queryCommandState(\"outdent\")) {\n c.classList.add('selected');\n } else {\n c.classList.remove('selected');\n }\n }\n }\n /*{\n type:'select',\n items: ['Verdana','Arial','Courier New'],\n onchange: function() {\n }\n },\n {\n type:'select',\n items: ['10px','12px','14px','16px','18px','20px','22px'],\n onchange: function() {\n }\n },\n {\n icon:'format_align_left',\n onclick: function() {\n document.execCommand('JustifyLeft');\n\n if (document.queryCommandState(\"JustifyLeft\")) {\n this.classList.add('selected');\n } else {\n this.classList.remove('selected');\n }\n }\n },\n {\n icon:'format_align_center',\n onclick: function() {\n document.execCommand('justifyCenter');\n\n if (document.queryCommandState(\"justifyCenter\")) {\n this.classList.add('selected');\n } else {\n this.classList.remove('selected');\n }\n }\n },\n {\n icon:'format_align_right',\n onclick: function() {\n document.execCommand('justifyRight');\n\n if (document.queryCommandState(\"justifyRight\")) {\n this.classList.add('selected');\n } else {\n this.classList.remove('selected');\n }\n }\n },\n {\n icon:'format_align_justify',\n onclick: function() {\n document.execCommand('justifyFull');\n\n if (document.queryCommandState(\"justifyFull\")) {\n this.classList.add('selected');\n } else {\n this.classList.remove('selected');\n }\n }\n },\n {\n icon:'format_list_bulleted',\n onclick: function() {\n document.execCommand('insertUnorderedList');\n\n if (document.queryCommandState(\"insertUnorderedList\")) {\n this.classList.add('selected');\n } else {\n this.classList.remove('selected');\n }\n }\n }*/\n ];\n}\n\r\n\r\njSuites.image = (function(el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n minWidth: false,\r\n onchange: null,\r\n singleFile: true,\r\n remoteParser: null,\r\n text:{\r\n extensionNotAllowed:'The extension is not allowed',\r\n imageTooSmall:'The resolution is too low, try a image with a better resolution. width > 800px',\r\n }\r\n };\r\n\r\n // Loop through our object\r\n for (var property in defaults) {\r\n if (options && options.hasOwnProperty(property)) {\r\n obj.options[property] = options[property];\r\n } else {\r\n obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n // Upload icon\r\n el.classList.add('jupload');\r\n\r\n // Add image\r\n obj.addImage = function(file) {\r\n if (! file.date) {\r\n file.date = '';\r\n }\r\n var img = document.createElement('img');\r\n img.setAttribute('data-date', file.lastmodified ? file.lastmodified : file.date);\r\n img.setAttribute('data-name', file.name);\r\n img.setAttribute('data-size', file.size);\r\n img.setAttribute('data-small', file.small ? file.small : '');\r\n img.setAttribute('data-cover', file.cover ? 1 : 0);\r\n img.setAttribute('data-extension', file.extension);\r\n img.setAttribute('src', file.file);\r\n img.className = 'jfile';\r\n img.style.width = '100%';\r\n\r\n return img;\r\n }\r\n\r\n // Add image\r\n obj.addImages = function(files) {\r\n if (obj.options.singleFile == true) {\r\n el.innerHTML = '';\r\n }\r\n\r\n for (var i = 0; i < files.length; i++) {\r\n el.appendChild(obj.addImage(files[i]));\r\n }\r\n }\r\n\r\n obj.addFromFile = function(file) {\r\n var type = file.type.split('/');\r\n if (type[0] == 'image') {\r\n if (obj.options.singleFile == true) {\r\n el.innerHTML = '';\r\n }\r\n\r\n var imageFile = new FileReader();\r\n imageFile.addEventListener(\"load\", function (v) {\r\n\r\n var img = new Image();\r\n\r\n img.onload = function onload() {\r\n var canvas = document.createElement('canvas');\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n\r\n var ctx = canvas.getContext('2d');\r\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\r\n\r\n var data = {\r\n file: canvas.toDataURL(),\r\n extension: file.name.substr(file.name.lastIndexOf('.') + 1),\r\n name: file.name,\r\n size: file.size,\r\n lastmodified: file.lastModified,\r\n }\r\n var newImage = obj.addImage(data);\r\n el.appendChild(newImage);\r\n\r\n // Onchange\r\n if (typeof(obj.options.onchange) == 'function') {\r\n obj.options.onchange(newImage);\r\n }\r\n };\r\n\r\n img.src = v.srcElement.result;\r\n });\r\n\r\n imageFile.readAsDataURL(file);\r\n } else {\r\n alert(text.extentionNotAllowed);\r\n }\r\n }\r\n\r\n obj.addFromUrl = function(src) {\r\n if (src.substr(0,4) != 'data' && ! obj.options.remoteParser) {\r\n console.error('remoteParser not defined in your initialization');\r\n } else {\r\n // This is to process cross domain images\r\n if (src.substr(0,4) == 'data') {\r\n var extension = src.split(';')\r\n extension = extension[0].split('/');\r\n extension = extension[1];\r\n } else {\r\n var extension = src.substr(src.lastIndexOf('.') + 1);\r\n // Work for cross browsers\r\n src = obj.options.remoteParser + src;\r\n }\r\n\r\n var img = new Image();\r\n\r\n img.onload = function onload() {\r\n var canvas = document.createElement('canvas');\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n\r\n var ctx = canvas.getContext('2d');\r\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\r\n\r\n canvas.toBlob(function(blob) {\r\n var data = {\r\n file: window.URL.createObjectURL(blob),\r\n extension: extension\r\n }\r\n var newImage = obj.addImage(data);\r\n el.appendChild(newImage);\r\n\r\n // Keep base64 ready to go\r\n var content = canvas.toDataURL();\r\n jSuites.files[data.file] = content.substr(content.indexOf(',') + 1);\r\n\r\n // Onchange\r\n if (typeof(obj.options.onchange) == 'function') {\r\n obj.options.onchange(newImage);\r\n }\r\n });\r\n };\r\n\r\n img.src = src;\r\n }\r\n }\r\n\r\n var attachmentInput = document.createElement('input');\r\n attachmentInput.type = 'file';\r\n attachmentInput.setAttribute('accept', 'image/*');\r\n attachmentInput.onchange = function() {\r\n for (var i = 0; i < this.files.length; i++) {\r\n obj.addFromFile(this.files[i]);\r\n }\r\n }\r\n\r\n el.addEventListener(\"dblclick\", function(e) {\r\n jSuites.click(attachmentInput);\r\n });\r\n\r\n el.addEventListener('dragenter', function(e) {\r\n el.style.border = '1px dashed #000';\r\n });\r\n\r\n el.addEventListener('dragleave', function(e) {\r\n el.style.border = '1px solid #eee';\r\n });\r\n\r\n el.addEventListener('dragstop', function(e) {\r\n el.style.border = '1px solid #eee';\r\n });\r\n\r\n el.addEventListener('dragover', function(e) {\r\n e.preventDefault();\r\n });\r\n\r\n el.addEventListener('drop', function(e) {\r\n e.preventDefault(); \r\n e.stopPropagation();\r\n\r\n\r\n var html = (e.originalEvent || e).dataTransfer.getData('text/html');\r\n var file = (e.originalEvent || e).dataTransfer.files;\r\n\r\n if (file.length) {\r\n for (var i = 0; i < e.dataTransfer.files.length; i++) {\r\n obj.addFromFile(e.dataTransfer.files[i]);\r\n }\r\n } else if (html) {\r\n if (obj.options.singleFile == true) {\r\n el.innerHTML = '';\r\n }\r\n\r\n // Create temp element\r\n var div = document.createElement('div');\r\n div.innerHTML = html;\r\n\r\n // Extract images\r\n var img = div.querySelectorAll('img');\r\n\r\n if (img.length) {\r\n for (var i = 0; i < img.length; i++) {\r\n obj.addFromUrl(img[i].src);\r\n }\r\n }\r\n }\r\n\r\n el.style.border = '1px solid #eee';\r\n\r\n return false;\r\n });\r\n\r\n el.image = obj;\r\n\r\n return obj;\r\n});\r\n\r\n/**\n * (c) jLoading\n * https://github.com/paulhodel/jtools\n *\n * @author: Paul Hodel \n * @description: Page loading spin\n */\n\njSuites.loading = (function() {\n var obj = {};\n\n var loading = document.createElement('div');\n loading.className = 'jloading';\n\n obj.show = function() {\n document.body.appendChild(loading);\n };\n\n obj.hide = function() {\n document.body.removeChild(loading);\n };\n\n return obj;\n})();\r\n\r\n/**\n * (c) jLogin\n * https://github.com/paulhodel/jtools\n *\n * @author: Paul Hodel \n * @description: Login helper\n */\n\njSuites.login = (function(el, options) {\n var obj = {};\n obj.options = {};\n\n // Default configuration\n var defaults = {\n url: window.location.href,\n prepareRequest: null,\n accessToken: null,\n deviceToken: null,\n facebookUrl: null,\n facebookAuthentication: null,\n maxHeight: null,\n onload: null,\n onsuccess: null,\n onerror: null,\n message: null,\n logo: null,\n newProfile: false,\n newProfileUrl: false,\n newProfileLogin: false,\n fullscreen: false,\n newPasswordValidation: null,\n };\n\n // Loop through our object\n for (var property in defaults) {\n if (options && options.hasOwnProperty(property)) {\n obj.options[property] = options[property];\n } else {\n obj.options[property] = defaults[property];\n }\n }\n\n // Message console container\n if (! obj.options.message) {\n var messageElement = document.querySelector('.message');\n if (messageElement) {\n obj.options.message = messageElement;\n }\n }\n\n // Action\n var action = null;\n\n // Container\n var container = document.createElement('form');\n el.appendChild(container);\n\n // Logo\n var divLogo = document.createElement('div');\n divLogo.className = 'jlogin-logo'\n container.appendChild(divLogo);\n\n if (obj.options.logo) {\n var logo = document.createElement('img');\n logo.src = obj.options.logo;\n divLogo.appendChild(logo);\n }\n\n // Code\n var labelCode = document.createElement('label');\n labelCode.innerHTML = 'Please enter here the code received';\n var inputCode = document.createElement('input');\n inputCode.type = 'number';\n inputCode.id = 'code';\n inputCode.setAttribute('maxlength', 6);\n var divCode = document.createElement('div');\n divCode.appendChild(labelCode);\n divCode.appendChild(inputCode);\n\n // Hash\n var inputHash = document.createElement('input');\n inputHash.type = 'hidden';\n inputHash.name = 'h';\n var divHash = document.createElement('div');\n divHash.appendChild(inputHash);\n\n // Recovery\n var inputRecovery = document.createElement('input');\n inputRecovery.type = 'hidden';\n inputRecovery.name = 'recovery';\n inputRecovery.value = '1';\n var divRecovery = document.createElement('div');\n divRecovery.appendChild(inputRecovery);\n\n // Login\n var labelLogin = document.createElement('label');\n labelLogin.innerHTML = 'Login';\n var inputLogin = document.createElement('input');\n inputLogin.type = 'text';\n inputLogin.name = 'login';\n inputLogin.setAttribute('autocomplete', 'off');\n inputLogin.onkeyup = function() {\n this.value = this.value.toLowerCase().replace(/[^a-zA-Z0-9_+]+/gi, '');\n } \n var divLogin = document.createElement('div');\n divLogin.appendChild(labelLogin);\n divLogin.appendChild(inputLogin);\n\n // Name\n var labelName = document.createElement('label');\n labelName.innerHTML = 'Name';\n var inputName = document.createElement('input');\n inputName.type = 'text';\n inputName.name = 'name';\n var divName = document.createElement('div');\n divName.appendChild(labelName);\n divName.appendChild(inputName);\n\n // Email\n var labelUsername = document.createElement('label');\n labelUsername.innerHTML = 'E-mail';\n var inputUsername = document.createElement('input');\n inputUsername.type = 'text';\n inputUsername.name = 'username';\n inputUsername.setAttribute('autocomplete', 'new-username');\n var divUsername = document.createElement('div');\n divUsername.appendChild(labelUsername);\n divUsername.appendChild(inputUsername);\n\n // Password\n var labelPassword = document.createElement('label');\n labelPassword.innerHTML = 'New password';\n var inputPassword = document.createElement('input');\n inputPassword.type = 'password';\n inputPassword.name = 'password';\n inputPassword.setAttribute('autocomplete', 'new-password');\n var divPassword = document.createElement('div');\n divPassword.appendChild(labelPassword);\n divPassword.appendChild(inputPassword);\n divPassword.onkeydown = function(e) {\n if (e.keyCode == 13) {\n obj.execute();\n }\n }\n\n // Repeat password\n var labelRepeatPassword = document.createElement('label');\n labelRepeatPassword.innerHTML = 'Repeat the new password';\n var inputRepeatPassword = document.createElement('input');\n inputRepeatPassword.type = 'password';\n inputRepeatPassword.name = 'password';\n var divRepeatPassword = document.createElement('div');\n divRepeatPassword.appendChild(labelRepeatPassword);\n divRepeatPassword.appendChild(inputRepeatPassword);\n\n // Remember checkbox\n var labelRemember = document.createElement('label');\n labelRemember.innerHTML = 'Remember me on this device';\n var inputRemember = document.createElement('input');\n inputRemember.type = 'checkbox';\n inputRemember.name = 'remember';\n inputRemember.value = '1';\n labelRemember.appendChild(inputRemember);\n var divRememberButton = document.createElement('div');\n divRememberButton.className = 'rememberButton';\n divRememberButton.appendChild(labelRemember);\n\n // Login button\n var actionButton = document.createElement('input');\n actionButton.type = 'button';\n actionButton.value = 'Log In';\n actionButton.onclick = function() {\n obj.execute();\n }\n var divActionButton = document.createElement('div');\n divActionButton.appendChild(actionButton);\n\n // Cancel button\n var cancelButton = document.createElement('div');\n cancelButton.innerHTML = 'Cancel';\n cancelButton.className = 'cancelButton';\n cancelButton.onclick = function() {\n obj.requestAccess();\n }\n var divCancelButton = document.createElement('div');\n divCancelButton.appendChild(cancelButton);\n\n // Captcha\n var labelCaptcha = document.createElement('label');\n labelCaptcha.innerHTML = 'Please type here the code below';\n var inputCaptcha = document.createElement('input');\n inputCaptcha.type = 'text';\n inputCaptcha.name = 'captcha';\n var imageCaptcha = document.createElement('img');\n var divCaptcha = document.createElement('div');\n divCaptcha.className = 'jlogin-captcha';\n divCaptcha.appendChild(labelCaptcha);\n divCaptcha.appendChild(inputCaptcha);\n divCaptcha.appendChild(imageCaptcha);\n\n // Facebook\n var facebookButton = document.createElement('div');\n facebookButton.innerHTML = 'Login with Facebook';\n facebookButton.className = 'facebookButton';\n var divFacebookButton = document.createElement('div');\n divFacebookButton.appendChild(facebookButton);\n divFacebookButton.onclick = function() {\n obj.requestLoginViaFacebook();\n }\n // Forgot password\n var inputRequest = document.createElement('span');\n inputRequest.innerHTML = 'Request a new password';\n var divRequestButton = document.createElement('div');\n divRequestButton.className = 'requestButton';\n divRequestButton.appendChild(inputRequest);\n divRequestButton.onclick = function() {\n obj.requestNewPassword();\n }\n // Create a new Profile\n var inputNewProfile = document.createElement('span');\n inputNewProfile.innerHTML = 'Create a new profile';\n var divNewProfileButton = document.createElement('div');\n divNewProfileButton.className = 'newProfileButton';\n divNewProfileButton.appendChild(inputNewProfile);\n divNewProfileButton.onclick = function() {\n obj.newProfile();\n }\n\n el.className = 'jlogin';\n\n if (obj.options.fullscreen == true) {\n el.classList.add('jlogin-fullscreen');\n }\n\n /** \n * Show message\n */\n obj.showMessage = function(data) {\n var message = (typeof(data) == 'object') ? data.message : data;\n\n if (typeof(obj.options.showMessage) == 'function') {\n obj.options.showMessage(data);\n } else {\n jSuites.alert(data);\n }\n }\n\n /**\n * New profile\n */\n obj.newProfile = function() {\n container.innerHTML = '';\n container.appendChild(divLogo);\n if (obj.options.newProfileLogin) {\n container.appendChild(divLogin);\n }\n container.appendChild(divName);\n container.appendChild(divUsername);\n container.appendChild(divActionButton);\n if (obj.options.facebookAuthentication == true) {\n container.appendChild(divFacebookButton);\n }\n container.appendChild(divCancelButton);\n\n // Reset inputs\n inputLogin.value = '';\n inputUsername.value = '';\n inputPassword.value = '';\n\n // Button\n actionButton.value = 'Create new profile';\n\n // Action\n action = 'newProfile';\n }\n\n /**\n * Request the email with the recovery instructions\n */\n obj.requestNewPassword = function() {\n if (Array.prototype.indexOf.call(container.children, divCaptcha) >= 0) {\n var captcha = true;\n }\n\n container.innerHTML = '';\n container.appendChild(divLogo);\n container.appendChild(divRecovery);\n container.appendChild(divUsername);\n if (captcha) {\n container.appendChild(divCaptcha);\n }\n container.appendChild(divActionButton);\n container.appendChild(divCancelButton);\n actionButton.value = 'Request a new password';\n inputRecovery.value = 1;\n\n // Action\n action = 'requestNewPassword';\n }\n\n /**\n * Confirm recovery code\n */\n obj.codeConfirmation = function() {\n container.innerHTML = '';\n container.appendChild(divLogo);\n container.appendChild(divHash);\n container.appendChild(divCode);\n container.appendChild(divActionButton);\n container.appendChild(divCancelButton);\n actionButton.value = 'Confirm code';\n inputRecovery.value = 2;\n\n // Action\n action = 'codeConfirmation';\n }\n\n /**\n * Update my password\n */\n obj.changeMyPassword = function(hash) {\n container.innerHTML = '';\n container.appendChild(divLogo);\n container.appendChild(divHash);\n container.appendChild(divPassword);\n container.appendChild(divRepeatPassword);\n container.appendChild(divActionButton);\n container.appendChild(divCancelButton);\n actionButton.value = 'Change my password';\n inputHash.value = hash;\n\n // Action\n action = 'changeMyPassword';\n }\n\n /**\n * Request access default method\n */\n obj.requestAccess = function() {\n container.innerHTML = '';\n container.appendChild(divLogo);\n container.appendChild(divUsername);\n container.appendChild(divPassword);\n container.appendChild(divActionButton);\n if (obj.options.facebookAuthentication == true) {\n container.appendChild(divFacebookButton);\n }\n container.appendChild(divRequestButton);\n container.appendChild(divRememberButton);\n container.appendChild(divRequestButton);\n if (obj.options.newProfile == true) {\n container.appendChild(divNewProfileButton);\n }\n\n // Button\n actionButton.value = 'Login';\n\n // Password\n inputPassword.value = '';\n\n // Email persistence\n if (window.localStorage.getItem('username')) {\n inputUsername.value = window.localStorage.getItem('username');\n inputPassword.focus();\n } else {\n inputUsername.focus();\n }\n\n // Action\n action = 'requestAccess';\n }\n\n /**\n * Request login via facebook\n */\n obj.requestLoginViaFacebook = function() {\n if (typeof(deviceNotificationToken) == 'undefined') {\n FB.getLoginStatus(function(response) {\n if (! response.status || response.status != 'connected') {\n FB.login(function(response) {\n if (response.authResponse) {\n obj.execute({ f:response.authResponse.accessToken });\n } else {\n obj.showMessage('Not authorized by facebook');\n }\n }, {scope: 'public_profile,email'});\n } else {\n obj.execute({ f:response.authResponse.accessToken });\n }\n }, true);\n } else {\n jDestroy = function() {\n fbLogin.removeEventListener('loadstart', jStart);\n fbLogin.removeEventListener('loaderror', jError);\n fbLogin.removeEventListener('exit', jExit);\n fbLogin.close();\n fbLogin = null;\n }\n\n jStart = function(event) {\n var url = event.url;\n if (url.indexOf(\"access_token\") >= 0) {\n setTimeout(function(){\n var u = url.match(/=(.*?)&/);\n if (u[1].length > 32) {\n obj.execute({ f:u[1] });\n }\n jDestroy();\n },500);\n }\n\n if (url.indexOf(\"error=access_denied\") >= 0) {\n setTimeout(jDestroy ,500);\n // Not authorized by facebook\n obj.showMessage('Not authorized by facebook');\n }\n }\n\n jError = function(event) {\n jDestroy();\n }\n \n jExit = function(event) {\n jDestroy();\n }\n\n fbLogin = window.open(obj.options.facebookUrl, \"_blank\", \"location=no,closebuttoncaption=Exit,disallowoverscroll=yes,toolbar=no\");\n fbLogin.addEventListener('loadstart', jStart);\n fbLogin.addEventListener('loaderror', jError);\n fbLogin.addEventListener('exit', jExit);\n }\n\n // Action\n action = 'requestLoginViaFacebook';\n }\n\n // Perform request\n obj.execute = function(data) {\n // New profile\n if (action == 'newProfile') {\n var pattern = new RegExp(/^([\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4})?$/);\n if (! inputUsername.value || ! pattern.test(inputUsername.value)) {\n var message = 'Invalid e-mail address'; \n }\n\n var pattern = new RegExp(/^[a-zA-Z0-9\\_\\-\\.\\s+]+$/);\n if (! inputLogin.value || ! pattern.test(inputLogin.value)) {\n var message = 'Invalid username, please use only characters and numbers';\n }\n\n if (message) {\n obj.showMessage(message);\n return false;\n }\n } else if (action == 'changeMyPassword') {\r\n if (inputPassword.value.length < 3) {\r\n var message = 'Password is too short';\r\n } else if (inputPassword.value != inputRepeatPassword.value) {\r\n var message = 'Password should match';\r\n } else {\r\n if (typeof(obj.options.newPasswordValidation) == 'function') {\r\n var val = obj.options.newPasswordValidation(obj, inputPassword.value, inputPassword.value);\r\n if (val != undefined) {\r\n message = val;\r\n }\r\n }\r\n }\n\n if (message) {\r\n obj.showMessage(message);\r\n return false;\r\n }\r\n }\n\n // Keep email\n if (inputUsername.value != '') {\n window.localStorage.setItem('username', inputUsername.value);\n }\n\n // Captcha\n if (Array.prototype.indexOf.call(container.children, divCaptcha) >= 0) {\n if (inputCaptcha.value == '') {\n obj.showMessage('Please enter the captch code below');\n return false;\n }\n }\n\n // Url\n var url = obj.options.url;\n\n // Device token\n if (obj.options.deviceToken) {\n url += '?token=' + obj.options.deviceToken;\n }\n\n // Callback\n var onsuccess = function(result) {\n if (result) {\n // Successfully response\n if (result.success == 1) {\n // Recovery process\n if (action == 'requestNewPassword') {\n obj.codeConfirmation();\n } else if (action == 'codeConfirmation') {\n obj.requestAccess();\n } else if (action == 'newProfile') {\n obj.requestAccess();\n // New profile\n result.newProfile = true;\n }\n\n // Token\n if (result.token) {\n // Set token\n obj.options.accessToken = result.token;\n // Save token\n window.localStorage.setItem('Access-Token', result.token);\n }\n }\n\n // Show message\n if (result.message) {\n // Show message\n obj.showMessage(result.message)\n }\n\n // Request captcha code\n if (! result.data) {\n if (Array.prototype.indexOf.call(container.children, divCaptcha) >= 0) {\n divCaptcha.remove();\n }\n } else {\n container.insertBefore(divCaptcha, divActionButton);\n imageCaptcha.setAttribute('src', 'data:image/png;base64,' + result.data);\n }\n\n // Give time to user see the message\n if (result.hash) {\n // Change password\n obj.changeMyPassword(result.hash);\n } else if (result.url) {\n // App initialization\n if (result.success == 1) {\n if (typeof(obj.options.onsuccess) == 'function') {\n obj.options.onsuccess(result);\n } else {\n if (result.message) {\n setTimeout(function() { window.location.href = result.url; }, 2000);\n } else {\n window.location.href = result.url;\n }\n }\n } else {\n if (typeof(obj.options.onerror) == 'function') {\n obj.options.onerror(result);\n }\n }\n }\n }\n }\n\n // Password\n if (! data) {\n var data = jSuites.getFormElements(el);\n // Encode passworfd\n if (data.password) {\n data.password = jSuites.login.sha512(data.password);\n }\n // Recovery code\n if (Array.prototype.indexOf.call(container.children, divCode) >= 0 && inputCode.value) {\n data.h = jSuites.login.sha512(inputCode.value);\n }\n }\n\n // Loading\n el.classList.add('jlogin-loading');\n\n // Url\n var url = (action == 'newProfile' && obj.options.newProfileUrl) ? obj.options.newProfileUrl : obj.options.url;\n\n // Remote call\n jSuites.ajax({\n url: url,\n method: 'POST',\n dataType: 'json',\n data: data,\n success: function(result) {\n // Remove loading\n el.classList.remove('jlogin-loading');\n // Callback\n onsuccess(result);\n },\n error: function(result) {\n // Error\n el.classList.remove('jlogin-loading');\n\n if (typeof(obj.options.onerror) == 'function') {\n obj.options.onerror(result);\n }\n }\n });\n }\n\n var queryString = window.location.href.split('?');\r\n if (queryString[1] && queryString[1].length == 130 && queryString[1].substr(0,2) == 'h=') {\r\n obj.changeMyPassword(queryString[1].substr(2));\r\n } else {\n obj.requestAccess();\n }\n\n return obj;\n});\n\njSuites.login.sha512 = (function(str) {\n function int64(msint_32, lsint_32) {\n this.highOrder = msint_32;\n this.lowOrder = lsint_32;\n }\n\n var H = [new int64(0x6a09e667, 0xf3bcc908), new int64(0xbb67ae85, 0x84caa73b),\n new int64(0x3c6ef372, 0xfe94f82b), new int64(0xa54ff53a, 0x5f1d36f1),\n new int64(0x510e527f, 0xade682d1), new int64(0x9b05688c, 0x2b3e6c1f),\n new int64(0x1f83d9ab, 0xfb41bd6b), new int64(0x5be0cd19, 0x137e2179)];\n\n var K = [new int64(0x428a2f98, 0xd728ae22), new int64(0x71374491, 0x23ef65cd),\n new int64(0xb5c0fbcf, 0xec4d3b2f), new int64(0xe9b5dba5, 0x8189dbbc),\n new int64(0x3956c25b, 0xf348b538), new int64(0x59f111f1, 0xb605d019),\n new int64(0x923f82a4, 0xaf194f9b), new int64(0xab1c5ed5, 0xda6d8118),\n new int64(0xd807aa98, 0xa3030242), new int64(0x12835b01, 0x45706fbe),\n new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, 0xd5ffb4e2),\n new int64(0x72be5d74, 0xf27b896f), new int64(0x80deb1fe, 0x3b1696b1),\n new int64(0x9bdc06a7, 0x25c71235), new int64(0xc19bf174, 0xcf692694),\n new int64(0xe49b69c1, 0x9ef14ad2), new int64(0xefbe4786, 0x384f25e3),\n new int64(0x0fc19dc6, 0x8b8cd5b5), new int64(0x240ca1cc, 0x77ac9c65),\n new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),\n new int64(0x5cb0a9dc, 0xbd41fbd4), new int64(0x76f988da, 0x831153b5),\n new int64(0x983e5152, 0xee66dfab), new int64(0xa831c66d, 0x2db43210),\n new int64(0xb00327c8, 0x98fb213f), new int64(0xbf597fc7, 0xbeef0ee4),\n new int64(0xc6e00bf3, 0x3da88fc2), new int64(0xd5a79147, 0x930aa725),\n new int64(0x06ca6351, 0xe003826f), new int64(0x14292967, 0x0a0e6e70),\n new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),\n new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, 0x9d95b3df),\n new int64(0x650a7354, 0x8baf63de), new int64(0x766a0abb, 0x3c77b2a8),\n new int64(0x81c2c92e, 0x47edaee6), new int64(0x92722c85, 0x1482353b),\n new int64(0xa2bfe8a1, 0x4cf10364), new int64(0xa81a664b, 0xbc423001),\n new int64(0xc24b8b70, 0xd0f89791), new int64(0xc76c51a3, 0x0654be30),\n new int64(0xd192e819, 0xd6ef5218), new int64(0xd6990624, 0x5565a910),\n new int64(0xf40e3585, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),\n new int64(0x19a4c116, 0xb8d2d0c8), new int64(0x1e376c08, 0x5141ab53),\n new int64(0x2748774c, 0xdf8eeb99), new int64(0x34b0bcb5, 0xe19b48a8),\n new int64(0x391c0cb3, 0xc5c95a63), new int64(0x4ed8aa4a, 0xe3418acb),\n new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, 0xd6b2b8a3),\n new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),\n new int64(0x84c87814, 0xa1f0ab72), new int64(0x8cc70208, 0x1a6439ec),\n new int64(0x90befffa, 0x23631e28), new int64(0xa4506ceb, 0xde82bde9),\n new int64(0xbef9a3f7, 0xb2c67915), new int64(0xc67178f2, 0xe372532b),\n new int64(0xca273ece, 0xea26619c), new int64(0xd186b8c7, 0x21c0c207),\n new int64(0xeada7dd6, 0xcde0eb1e), new int64(0xf57d4f7f, 0xee6ed178),\n new int64(0x06f067aa, 0x72176fba), new int64(0x0a637dc5, 0xa2c898a6),\n new int64(0x113f9804, 0xbef90dae), new int64(0x1b710b35, 0x131c471b),\n new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),\n new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, 0x9c100d4c),\n new int64(0x4cc5d4be, 0xcb3e42b6), new int64(0x597f299c, 0xfc657e2a),\n new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)];\n\n var W = new Array(64);\n var a, b, c, d, e, f, g, h, i, j;\n var T1, T2;\n var charsize = 8;\n\n function utf8_encode(str) {\n return unescape(encodeURIComponent(str));\n }\n\n function str2binb(str) {\n var bin = [];\n var mask = (1 << charsize) - 1;\n var len = str.length * charsize;\n \n for (var i = 0; i < len; i += charsize) {\n bin[i >> 5] |= (str.charCodeAt(i / charsize) & mask) << (32 - charsize - (i % 32));\n }\n \n return bin;\n }\n\n function binb2hex(binarray) {\n var hex_tab = \"0123456789abcdef\";\n var str = \"\";\n var length = binarray.length * 4;\n var srcByte;\n\n for (var i = 0; i < length; i += 1) {\n srcByte = binarray[i >> 2] >> ((3 - (i % 4)) * 8);\n str += hex_tab.charAt((srcByte >> 4) & 0xF) + hex_tab.charAt(srcByte & 0xF);\n }\n\n return str;\n }\n\n function safe_add_2(x, y) {\n var lsw, msw, lowOrder, highOrder;\n\n lsw = (x.lowOrder & 0xFFFF) + (y.lowOrder & 0xFFFF);\n msw = (x.lowOrder >>> 16) + (y.lowOrder >>> 16) + (lsw >>> 16);\n lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);\n\n lsw = (x.highOrder & 0xFFFF) + (y.highOrder & 0xFFFF) + (msw >>> 16);\n msw = (x.highOrder >>> 16) + (y.highOrder >>> 16) + (lsw >>> 16);\n highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);\n\n return new int64(highOrder, lowOrder);\n }\n\n function safe_add_4(a, b, c, d) {\n var lsw, msw, lowOrder, highOrder;\n\n lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF);\n msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (lsw >>> 16);\n lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);\n\n lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (msw >>> 16);\n msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (lsw >>> 16);\n highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);\n\n return new int64(highOrder, lowOrder);\n }\n\n function safe_add_5(a, b, c, d, e) {\n var lsw, msw, lowOrder, highOrder;\n\n lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF) + (e.lowOrder & 0xFFFF);\n msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (e.lowOrder >>> 16) + (lsw >>> 16);\n lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);\n\n lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (e.highOrder & 0xFFFF) + (msw >>> 16);\n msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (e.highOrder >>> 16) + (lsw >>> 16);\n highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);\n\n return new int64(highOrder, lowOrder);\n }\n\n function maj(x, y, z) {\n return new int64(\n (x.highOrder & y.highOrder) ^ (x.highOrder & z.highOrder) ^ (y.highOrder & z.highOrder),\n (x.lowOrder & y.lowOrder) ^ (x.lowOrder & z.lowOrder) ^ (y.lowOrder & z.lowOrder)\n );\n }\n\n function ch(x, y, z) {\n return new int64(\n (x.highOrder & y.highOrder) ^ (~x.highOrder & z.highOrder),\n (x.lowOrder & y.lowOrder) ^ (~x.lowOrder & z.lowOrder)\n );\n }\n\n function rotr(x, n) {\n if (n <= 32) {\n return new int64(\n (x.highOrder >>> n) | (x.lowOrder << (32 - n)),\n (x.lowOrder >>> n) | (x.highOrder << (32 - n))\n );\n } else {\n return new int64(\n (x.lowOrder >>> n) | (x.highOrder << (32 - n)),\n (x.highOrder >>> n) | (x.lowOrder << (32 - n))\n );\n }\n }\n\n function sigma0(x) {\n var rotr28 = rotr(x, 28);\n var rotr34 = rotr(x, 34);\n var rotr39 = rotr(x, 39);\n\n return new int64(\n rotr28.highOrder ^ rotr34.highOrder ^ rotr39.highOrder,\n rotr28.lowOrder ^ rotr34.lowOrder ^ rotr39.lowOrder\n );\n }\n\n function sigma1(x) {\n var rotr14 = rotr(x, 14);\n var rotr18 = rotr(x, 18);\n var rotr41 = rotr(x, 41);\n\n return new int64(\n rotr14.highOrder ^ rotr18.highOrder ^ rotr41.highOrder,\n rotr14.lowOrder ^ rotr18.lowOrder ^ rotr41.lowOrder\n );\n }\n\n function gamma0(x) {\n var rotr1 = rotr(x, 1), rotr8 = rotr(x, 8), shr7 = shr(x, 7);\n\n return new int64(\n rotr1.highOrder ^ rotr8.highOrder ^ shr7.highOrder,\n rotr1.lowOrder ^ rotr8.lowOrder ^ shr7.lowOrder\n );\n }\n\n function gamma1(x) {\n var rotr19 = rotr(x, 19);\n var rotr61 = rotr(x, 61);\n var shr6 = shr(x, 6);\n\n return new int64(\n rotr19.highOrder ^ rotr61.highOrder ^ shr6.highOrder,\n rotr19.lowOrder ^ rotr61.lowOrder ^ shr6.lowOrder\n );\n }\n\n function shr(x, n) {\n if (n <= 32) {\n return new int64(\n x.highOrder >>> n,\n x.lowOrder >>> n | (x.highOrder << (32 - n))\n );\n } else {\n return new int64(\n 0,\n x.highOrder << (32 - n)\n );\n }\n }\n\n var str = utf8_encode(str);\n var strlen = str.length*charsize;\n str = str2binb(str);\n\n str[strlen >> 5] |= 0x80 << (24 - strlen % 32);\n str[(((strlen + 128) >> 10) << 5) + 31] = strlen;\n\n for (var i = 0; i < str.length; i += 32) {\n a = H[0];\n b = H[1];\n c = H[2];\n d = H[3];\n e = H[4];\n f = H[5];\n g = H[6];\n h = H[7];\n\n for (var j = 0; j < 80; j++) {\n if (j < 16) {\n W[j] = new int64(str[j*2 + i], str[j*2 + i + 1]);\n } else {\n W[j] = safe_add_4(gamma1(W[j - 2]), W[j - 7], gamma0(W[j - 15]), W[j - 16]);\n }\n\n T1 = safe_add_5(h, sigma1(e), ch(e, f, g), K[j], W[j]);\n T2 = safe_add_2(sigma0(a), maj(a, b, c));\n h = g;\n g = f;\n f = e;\n e = safe_add_2(d, T1);\n d = c;\n c = b;\n b = a;\n a = safe_add_2(T1, T2);\n }\n\n H[0] = safe_add_2(a, H[0]);\n H[1] = safe_add_2(b, H[1]);\n H[2] = safe_add_2(c, H[2]);\n H[3] = safe_add_2(d, H[3]);\n H[4] = safe_add_2(e, H[4]);\n H[5] = safe_add_2(f, H[5]);\n H[6] = safe_add_2(g, H[6]);\n H[7] = safe_add_2(h, H[7]);\n }\n\n var binarray = [];\n for (var i = 0; i < H.length; i++) {\n binarray.push(H[i].highOrder);\n binarray.push(H[i].lowOrder);\n }\n\n return binb2hex(binarray);\n});\r\n\r\n/**\r\n * (c) jTools Input Mask\r\n * https://github.com/paulhodel/jtools\r\n *\r\n * @author: Paul Hodel \r\n * @description: Input mask\r\n */\r\n\r\njSuites.mask = (function() {\r\n var obj = {};\r\n var index = 0;\r\n var values = []\r\n var pieces = [];\r\n\r\n obj.run = function(value, mask, decimal) {\r\n if (value && mask) {\r\n if (! decimal) {\r\n decimal = '.';\r\n }\r\n if (value == Number(value)) {\r\n var number = (''+value).split('.');\r\n var value = number[0];\r\n var valueDecimal = number[1];\r\n } else {\r\n value = '' + value;\r\n }\r\n index = 0;\r\n values = [];\r\n // Create mask token\r\n obj.prepare(mask);\r\n // Current value\r\n var currentValue = value;\r\n if (currentValue) {\r\n // Checking current value\r\n for (var i = 0; i < currentValue.length; i++) {\r\n if (currentValue[i] != null) {\r\n obj.process(currentValue[i]);\r\n }\r\n }\r\n }\r\n if (valueDecimal) {\r\n obj.process(decimal);\r\n var currentValue = valueDecimal;\r\n if (currentValue) {\r\n // Checking current value\r\n for (var i = 0; i < currentValue.length; i++) {\r\n if (currentValue[i] != null) {\r\n obj.process(currentValue[i]);\r\n }\r\n }\r\n }\r\n }\r\n // Formatted value\r\n return values.join('');\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n obj.apply = function(e) {\r\n if (e.target && ! e.target.getAttribute('readonly')) {\r\n var mask = e.target.getAttribute('data-mask');\r\n if (mask && e.keyCode > 46) {\r\n index = 0;\r\n values = [];\r\n // Create mask token\r\n obj.prepare(mask);\r\n // Current value\r\n if (e.target.selectionStart < e.target.selectionEnd) {\r\n var currentValue = e.target.value.substring(0, e.target.selectionStart); \r\n } else {\r\n var currentValue = e.target.value;\r\n }\r\n if (currentValue) {\r\n // Checking current value\r\n for (var i = 0; i < currentValue.length; i++) {\r\n if (currentValue[i] != null) {\r\n obj.process(currentValue[i]);\r\n }\r\n }\r\n }\r\n // New input\r\n obj.process(obj.fromKeyCode(e));\r\n // Update value to the element\r\n e.target.value = values.join('');\r\n if (pieces.length == values.length && pieces[pieces.length-1].length == values[values.length-1].length) {\r\n e.target.setAttribute('data-completed', 'true');\r\n } else {\r\n e.target.setAttribute('data-completed', 'false');\r\n }\r\n // Prevent default\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Process inputs and save to values\r\n */\r\n obj.process = function(input) {\r\n do {\r\n if (pieces[index] == 'mm') {\r\n if (values[index] == null || values[index] == '') {\r\n if (parseInt(input) > 1 && parseInt(input) < 10) {\r\n values[index] = '0' + input;\r\n index++;\r\n return true;\r\n } else if (parseInt(input) < 10) {\r\n values[index] = input;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n if (values[index] == 1 && values[index] < 2 && parseInt(input) < 3) {\r\n values[index] += input;\r\n index++;\r\n return true;\r\n } else if (values[index] == 0 && values[index] < 10) {\r\n values[index] += input;\r\n index++;\r\n return true;\r\n } else {\r\n return false\r\n }\r\n }\r\n } else if (pieces[index] == 'dd') {\r\n if (values[index] == null || values[index] == '') {\r\n if (parseInt(input) > 3 && parseInt(input) < 10) {\r\n values[index] = '0' + input;\r\n index++;\r\n return true;\r\n } else if (parseInt(input) < 10) {\r\n values[index] = input;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n if (values[index] == 3 && parseInt(input) < 2) {\r\n values[index] += input;\r\n index++;\r\n return true;\r\n } else if (values[index] < 3 && parseInt(input) < 10) {\r\n values[index] += input;\r\n index++;\r\n return true;\r\n } else {\r\n return false\r\n }\r\n }\r\n } else if (pieces[index] == 'hh24') {\r\n if (values[index] == null || values[index] == '') {\r\n if (parseInt(input) > 2 && parseInt(input) < 10) {\r\n values[index] = '0' + input;\r\n index++;\r\n return true;\r\n } else if (parseInt(input) < 10) {\r\n values[index] = input;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n if (values[index] == 2 && parseInt(input) < 4) {\r\n values[index] += input;\r\n index++;\r\n return true;\r\n } else if (values[index] < 2 && parseInt(input) < 10) {\r\n values[index] += input;\r\n index++;\r\n return true;\r\n } else {\r\n return false\r\n }\r\n }\r\n } else if (pieces[index] == 'hh') {\r\n if (values[index] == null || values[index] == '') {\r\n if (parseInt(input) > 1 && parseInt(input) < 10) {\r\n values[index] = '0' + input;\r\n index++;\r\n return true;\r\n } else if (parseInt(input) < 10) {\r\n values[index] = input;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n if (values[index] == 1 && parseInt(input) < 3) {\r\n values[index] += input;\r\n index++;\r\n return true;\r\n } else if (values[index] < 1 && parseInt(input) < 10) {\r\n values[index] += input;\r\n index++;\r\n return true;\r\n } else {\r\n return false\r\n }\r\n }\r\n } else if (pieces[index] == 'mi' || pieces[index] == 'ss') {\r\n if (values[index] == null || values[index] == '') {\r\n if (parseInt(input) > 5 && parseInt(input) < 10) {\r\n values[index] = '0' + input;\r\n index++;\r\n return true;\r\n } else if (parseInt(input) < 10) {\r\n values[index] = input;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n if (parseInt(input) < 10) {\r\n values[index] += input;\r\n index++;\r\n return true;\r\n } else {\r\n return false\r\n }\r\n }\r\n } else if (pieces[index] == 'yy' || pieces[index] == 'yyyy') {\r\n if (parseInt(input) < 10) {\r\n if (values[index] == null || values[index] == '') {\r\n values[index] = input;\r\n } else {\r\n values[index] += input;\r\n }\r\n \r\n if (values[index].length == pieces[index].length) {\r\n index++;\r\n }\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else if (pieces[index] == '#' || pieces[index] == '#.##' || pieces[index] == '#,##' || pieces[index] == '# ##') {\r\n if (input.match(/[0-9]/g)) {\r\n if (pieces[index] == '#.##') {\r\n var separator = '.';\r\n } else if (pieces[index] == '#,##') {\r\n var separator = ',';\r\n } else if (pieces[index] == '# ##') {\r\n var separator = ' ';\r\n } else {\r\n var separator = '';\r\n }\r\n if (values[index] == null || values[index] == '') {\r\n values[index] = input;\r\n } else {\r\n values[index] += input;\r\n if (separator) {\r\n values[index] = values[index].match(/[0-9]/g).join('');\r\n var t = [];\r\n var s = 0;\r\n for (var j = values[index].length - 1; j >= 0 ; j--) {\r\n t.push(values[index][j]);\r\n s++;\r\n if (! (s % 3)) {\r\n t.push(separator);\r\n }\r\n }\r\n t = t.reverse();\r\n values[index] = t.join('');\r\n if (values[index].substr(0,1) == separator) {\r\n values[index] = values[index].substr(1);\r\n } \r\n }\r\n }\r\n return true;\r\n } else {\r\n if (pieces[index] == '#.##' && input == '.') {\r\n // Do nothing\r\n } else if (pieces[index] == '#,##' && input == ',') {\r\n // Do nothing\r\n } else if (pieces[index] == '# ##' && input == ' ') {\r\n // Do nothing\r\n } else {\r\n if (values[index]) {\r\n index++;\r\n if (pieces[index]) {\r\n if (pieces[index] == input) {\r\n values[index] = input;\r\n return true;\r\n } else {\r\n if (pieces[index] == '0' && pieces[index+1] == input) {\r\n index++;\r\n values[index] = input;\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n } else if (pieces[index] == '0') {\r\n if (input.match(/[0-9]/g)) {\r\n values[index] = input;\r\n index++;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else if (pieces[index] == 'a') {\r\n if (input.match(/[a-zA-Z]/g)) {\r\n values[index] = input;\r\n index++;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n if (pieces[index] != null) {\r\n if (pieces[index] == '\\\\a') {\r\n var v = 'a';\r\n } else if (pieces[index] == '\\\\0') {\r\n var v = '0';\r\n } else if (pieces[index] == '[-]') {\r\n if (input == '-' || input == '+') {\r\n var v = input;\r\n } else {\r\n var v = ' ';\r\n }\r\n } else {\r\n var v = pieces[index];\r\n }\r\n values[index] = v;\r\n if (input == v) {\r\n index++;\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n index++;\r\n } while (pieces[index]);\r\n }\r\n\r\n /**\r\n * Create tokens for the mask\r\n */\r\n obj.prepare = function(mask) {\r\n pieces = [];\r\n for (var i = 0; i < mask.length; i++) {\r\n if (mask[i].match(/[0-9]|[a-z]|\\\\/g)) {\r\n if (mask[i] == 'y' && mask[i+1] == 'y' && mask[i+2] == 'y' && mask[i+3] == 'y') {\r\n pieces.push('yyyy');\r\n i += 3;\r\n } else if (mask[i] == 'y' && mask[i+1] == 'y') {\r\n pieces.push('yy');\r\n i++;\r\n } else if (mask[i] == 'm' && mask[i+1] == 'm' && mask[i+2] == 'm' && mask[i+3] == 'm') {\r\n pieces.push('mmmm');\r\n i += 3;\r\n } else if (mask[i] == 'm' && mask[i+1] == 'm' && mask[i+2] == 'm') {\r\n pieces.push('mmm');\r\n i += 2;\r\n } else if (mask[i] == 'm' && mask[i+1] == 'm') {\r\n pieces.push('mm');\r\n i++;\r\n } else if (mask[i] == 'd' && mask[i+1] == 'd') {\r\n pieces.push('dd');\r\n i++;\r\n } else if (mask[i] == 'h' && mask[i+1] == 'h' && mask[i+2] == '2' && mask[i+3] == '4') {\r\n pieces.push('hh24');\r\n i += 3;\r\n } else if (mask[i] == 'h' && mask[i+1] == 'h') {\r\n pieces.push('hh');\r\n i++;\r\n } else if (mask[i] == 'm' && mask[i+1] == 'i') {\r\n pieces.push('mi');\r\n i++;\r\n } else if (mask[i] == 's' && mask[i+1] == 's') {\r\n pieces.push('ss');\r\n i++;\r\n } else if (mask[i] == 'a' && mask[i+1] == 'm') {\r\n pieces.push('am');\r\n i++;\r\n } else if (mask[i] == 'p' && mask[i+1] == 'm') {\r\n pieces.push('pm');\r\n i++;\r\n } else if (mask[i] == '\\\\' && mask[i+1] == '0') {\r\n pieces.push('\\\\0');\r\n i++;\r\n } else if (mask[i] == '\\\\' && mask[i+1] == 'a') {\r\n pieces.push('\\\\a');\r\n i++;\r\n } else {\r\n pieces.push(mask[i]);\r\n }\r\n } else {\r\n if (mask[i] == '#' && mask[i+1] == '.' && mask[i+2] == '#' && mask[i+3] == '#') {\r\n pieces.push('#.##');\r\n i += 3;\r\n } else if (mask[i] == '#' && mask[i+1] == ',' && mask[i+2] == '#' && mask[i+3] == '#') {\r\n pieces.push('#,##');\r\n i += 3;\r\n } else if (mask[i] == '#' && mask[i+1] == ' ' && mask[i+2] == '#' && mask[i+3] == '#') {\r\n pieces.push('# ##');\r\n i += 3;\r\n } else if (mask[i] == '[' && mask[i+1] == '-' && mask[i+2] == ']') {\r\n pieces.push('[-]');\r\n i += 2;\r\n } else {\r\n pieces.push(mask[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** \r\n * Thanks for the collaboration\r\n */\r\n obj.fromKeyCode = function(e) {\r\n var _to_ascii = {\r\n '188': '44',\r\n '109': '45',\r\n '190': '46',\r\n '191': '47',\r\n '192': '96',\r\n '220': '92',\r\n '222': '39',\r\n '221': '93',\r\n '219': '91',\r\n '173': '45',\r\n '187': '61', //IE Key codes\r\n '186': '59', //IE Key codes\r\n '189': '45' //IE Key codes\r\n }\r\n\r\n var shiftUps = {\r\n \"96\": \"~\",\r\n \"49\": \"!\",\r\n \"50\": \"@\",\r\n \"51\": \"#\",\r\n \"52\": \"$\",\r\n \"53\": \"%\",\r\n \"54\": \"^\",\r\n \"55\": \"&\",\r\n \"56\": \"*\",\r\n \"57\": \"(\",\r\n \"48\": \")\",\r\n \"45\": \"_\",\r\n \"61\": \"+\",\r\n \"91\": \"{\",\r\n \"93\": \"}\",\r\n \"92\": \"|\",\r\n \"59\": \":\",\r\n \"39\": \"\\\"\",\r\n \"44\": \"<\",\r\n \"46\": \">\",\r\n \"47\": \"?\"\r\n };\r\n\r\n var c = e.which;\r\n\r\n if (_to_ascii.hasOwnProperty(c)) {\r\n c = _to_ascii[c];\r\n }\r\n\r\n if (!e.shiftKey && (c >= 65 && c <= 90)) {\r\n c = String.fromCharCode(c + 32);\r\n } else if (e.shiftKey && shiftUps.hasOwnProperty(c)) {\r\n c = shiftUps[c];\r\n } else if (96 <= c && c <= 105) {\r\n c = String.fromCharCode(c - 48);\r\n } else {\r\n c = String.fromCharCode(c);\r\n }\r\n\r\n return c;\r\n }\r\n\r\n return obj;\r\n})();\r\n\r\njSuites.mobile = (function(el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n if (jSuites.el) {\r\n jSuites.el.addEventListener('mousedown', function(e) {\r\n if (e.target.classList.contains('option-title')) {\r\n if (e.target.classList.contains('selected')) {\r\n e.target.classList.remove('selected');\r\n } else {\r\n e.target.classList.add('selected');\r\n }\r\n }\r\n });\r\n }\r\n\r\n return obj;\r\n})();\r\n\r\njSuites.pages = (function() {\r\n var container = null;\r\n var current = null;\r\n\r\n // Create a page\r\n var createPage = function(options, callback) {\r\n // Create page\r\n var page = document.createElement('div');\r\n page.classList.add('page');\r\n\r\n // Always hidden\r\n page.style.display = 'none';\r\n\r\n // Keep options\r\n page.options = options ? options : {};\r\n\r\n if (! current) {\r\n container.appendChild(page);\r\n } else {\r\n container.insertBefore(page, current.nextSibling);\r\n }\r\n\r\n jSuites.ajax({\r\n url: page.options.url,\r\n method: 'GET',\r\n success: function(result) {\r\n // Push to refresh controls\r\n jSuites.refresh(page, page.options.onpush);\r\n\n // Open page\r\n page.innerHTML = result;\r\n // Get javascript\r\n var script = page.getElementsByTagName('script');\r\n // Run possible inline scripts\r\n for (var i = 0; i < script.length; i++) {\r\n // Get type\r\n var type = script[i].getAttribute('type');\r\n if (! type || type == 'text/javascript') {\r\n eval(script[i].innerHTML);\r\n }\r\n }\r\n // Set title\r\n page.setTitle = function(text) {\r\n this.children[0].children[0].children[1].innerHTML = text;\r\n }\r\n // Show page\r\n if (! page.options.closed) {\r\n showPage(page);\r\n }\r\n // Onload callback\r\n if (typeof(page.options.onload) == 'function') {\r\n page.options.onload(page);\r\n }\r\n // Force callback\r\n if (typeof(callback) == 'function') {\r\n callback(page);\r\n }\r\n }\r\n });\r\n\r\n return page;\r\n }\r\n\r\n var showPage = function(page, ignoreHistory, callback) {\r\n if (current) {\r\n if (current == page) {\r\n current = page;\r\n } else {\r\n // Keep scroll in the top\r\n window.scrollTo({ top: 0 });\r\n\r\n // Show page\r\n page.style.display = '';\r\n\r\n var a = Array.prototype.indexOf.call(container.children, current);\r\n var b = Array.prototype.indexOf.call(container.children, page);\r\n\r\n // Leave\r\n if (typeof(current.options.onleave) == 'function') {\r\n current.options.onleave(current, page, ignoreHistory);\r\n }\r\n\r\n jSuites.slideLeft(container, (a < b ? 0 : 1), function() {\r\n current.style.display = 'none';\r\n current = page;\r\n });\r\n\r\n // Enter\r\n if (typeof(page.options.onenter) == 'function') {\r\n page.options.onenter(page, current, ignoreHistory);\r\n }\r\n }\r\n } else {\r\n // Show\r\n page.style.display = '';\r\n\r\n // Keep current\r\n current = page;\r\n\r\n // Enter\r\n if (typeof(page.options.onenter) == 'function') {\r\n page.options.onenter(page);\r\n }\r\n }\r\n\r\n // Add history\r\n if (! ignoreHistory) {\r\n // Add history\r\n window.history.pushState({ route: page.options.route }, page.options.title, page.options.route);\r\n }\r\n\r\n // Callback\r\n if (typeof(callback) == 'function') {\r\n callback(page);\r\n }\r\n }\r\n\r\n // Init method\r\n var obj = function(route, mixed) {\r\n\r\n // Create page container\r\n if (! container) {\r\n container = document.querySelector('.pages');\r\n if (! container) {\r\n container = document.createElement('div');\r\n container.className = 'pages';\r\n }\r\n\r\n // Append container to the application\r\n if (jSuites.el) {\r\n jSuites.el.appendChild(container);\r\n } else {\r\n document.body.appendChild(container);\r\n }\r\n }\r\n\r\n if (! obj.pages[route]) {\r\n if (! route) {\r\n alert('Error, no route provided');\r\n } else {\r\n if (typeof(mixed) == 'function') {\r\n var options = {};\r\n var callback = mixed;\r\n } else {\r\n // Page options\r\n var options = mixed ? mixed : {};\r\n }\r\n\r\n // Closed\r\n options.closed = mixed && mixed.closed ? 1 : 0;\r\n // Keep Route\r\n options.route = route;\r\n\r\n // New page url\r\n if (! options.url) {\r\n var routePath = route.split('#');\r\n options.url = jSuites.pages.path + routePath[0] + '.html';\r\n }\r\n // Title\r\n if (! options.title) {\r\n options.title = 'Untitled';\r\n }\r\n\r\n // Create new page\r\n obj.pages[route] = createPage(options, callback ? callback : null);\r\n }\r\n } else {\r\n // Update config\r\n if (mixed) {\r\n // History\r\n var ignoreHistory = 0;\r\n\r\n if (typeof(mixed) == 'function') {\r\n var callback = mixed;\r\n } else {\r\n if (typeof(mixed.onenter) == 'function') {\r\n obj.pages[route].options.onenter = mixed.onenter;\r\n }\r\n if (typeof(mixed.onleave) == 'function') {\r\n obj.pages[route].options.onleave = mixed.onleave;\r\n }\r\n\r\n // Ignore history\r\n ignoreHistory = mixed.ignoreHistory ? 1 : 0; \r\n }\r\n }\r\n\r\n showPage(obj.pages[route], ignoreHistory, callback ? callback : null);\r\n }\r\n }\r\n\r\n obj.pages = {};\r\n\r\n // Get page\r\n obj.get = function(route) {\r\n if (obj.pages[route]) {\r\n return obj.pages[route]; \r\n }\r\n }\r\n\r\n obj.getContainer = function() {\r\n return container;\r\n }\r\n\r\n obj.destroy = function() {\r\n // Current is null\r\n current = null;\r\n // Destroy containers\r\n obj.pages = {};\r\n // Reset container\r\n if (container) {\r\n container.innerHTML = '';\r\n }\r\n }\r\n\r\n return obj;\r\n})();\r\n\r\n// Path\r\njSuites.pages.path = 'pages';\r\n\r\n// Panel\r\njSuites.panel = (function() {\r\n // No initial panel declared\r\n var panel = null;\r\n\r\n var obj = function(route) {\r\n if (! panel) {\r\n obj.create(jSuites.pages.path + route + '.html');\r\n }\r\n\r\n // Show panel\r\n panel.style.display = '';\r\n\r\n // Add animation\r\n if (panel.classList.contains('panel-left')) {\r\n jSuites.slideLeft(panel, 1);\r\n } else {\r\n jSuites.slideRight(panel, 1);\r\n }\r\n }\r\n\r\n obj.create = function(route) {\r\n if (! panel) {\r\n // Create element\r\n panel = document.createElement('div');\r\n panel.classList.add('panel');\r\n panel.classList.add('panel-left');\r\n panel.style.display = 'none';\r\n\r\n // Bind to the app\r\n if (jSuites.el) {\r\n jSuites.el.appendChild(panel);\r\n } else {\r\n document.body.appendChild(panel);\r\n }\r\n }\r\n\r\n // Remote content\r\n if (route) {\r\n\t var url = jSuites.pages.path + route + '.html';\r\n\r\n jSuites.ajax({\r\n url: url,\r\n method: 'GET',\r\n success: function(result) {\r\n // Set content\r\n panel.innerHTML = result;\r\n // Get javascript\r\n var script = panel.getElementsByTagName('script');\r\n // Run possible inline scripts\r\n for (var i = 0; i < script.length; i++) {\r\n // Get type\r\n var type = script[i].getAttribute('type');\r\n if (! type || type == 'text/javascript') {\r\n eval(script[i].innerHTML);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n obj.close = function() {\r\n if (panel) {\r\n // Animation\r\n if (panel.classList.contains('panel-left')) {\r\n jSuites.slideLeft(panel, 0, function() {\r\n panel.style.display = 'none';\r\n });\r\n } else {\r\n jSuites.slideRight(panel, 0, function() {\r\n panel.style.display = 'none';\r\n });\r\n }\r\n }\r\n }\r\n\r\n obj.get = function() {\r\n return panel;\r\n }\r\n\r\n obj.destroy = function() {\r\n panel.remove();\r\n panel = null;\r\n }\r\n\r\n return obj;\r\n})();\r\n\r\njSuites.toolbar = (function(el, options) {\r\n var obj = {};\r\n obj.options = options;\r\n\r\n obj.selectItem = function(element) {\r\n var elements = toolbarContent.children;\r\n for (var i = 0; i < elements.length; i++) {\r\n elements[i].classList.remove('selected');\r\n }\r\n element.classList.add('selected');\r\n }\r\n\r\n obj.hide = function() {\r\n jSuites.slideBottom(toolbar, 0, function() {\r\n toolbar.style.display = 'none';\r\n });\r\n }\r\n\r\n obj.show = function() {\r\n toolbar.style.display = '';\r\n jSuites.slideBottom(toolbar, 1);\r\n }\r\n\r\n obj.get = function() {\r\n return toolbar;\r\n }\r\n\r\n obj.setBadge = function(index, value) {\r\n toolbarContent.children[index].children[1].firstChild.innerHTML = value;\r\n }\r\n\r\n obj.destroy = function() {\r\n toolbar.remove();\r\n toolbar = null;\r\n }\r\n\r\n var toolbar = document.createElement('div');\r\n toolbar.classList.add('jtoolbar');\r\n toolbar.onclick = function(e) {\r\n var element = jSuites.getElement(e.target, 'jtoolbar-item');\r\n if (element) {\r\n obj.selectItem(element);\r\n }\r\n }\r\n\r\n var toolbarContent = document.createElement('div');\r\n toolbar.appendChild(toolbarContent);\r\n\r\n for (var i = 0; i < options.items.length; i++) {\r\n var toolbarItem = document.createElement('div');\r\n toolbarItem.classList.add('jtoolbar-item');\r\n if (options.items[i].route) {\r\n toolbarItem.setAttribute('data-href', options.items[i].route);\r\n jSuites.pages(options.items[i].route, {\r\n closed: true,\r\n onenter: function() {\r\n obj.selectItem(toolbarItem);\r\n }\r\n });\r\n }\r\n\r\n if (options.items[i].icon) {\r\n var toolbarIcon = document.createElement('i');\r\n toolbarIcon.classList.add('material-icons');\r\n toolbarIcon.innerHTML = options.items[i].icon;\r\n toolbarItem.appendChild(toolbarIcon);\r\n }\r\n\r\n var toolbarBadge = document.createElement('div');\r\n toolbarBadge.classList.add('jbadge');\r\n var toolbarBadgeContent = document.createElement('div');\r\n toolbarBadgeContent.innerHTML = options.items[i].badge ? options.items[i].badge : '';\r\n toolbarBadge.appendChild(toolbarBadgeContent);\r\n toolbarItem.appendChild(toolbarBadge);\r\n\r\n if (options.items[i].title) {\r\n var toolbarTitle = document.createElement('span');\r\n toolbarTitle.innerHTML = options.items[i].title;\r\n toolbarItem.appendChild(toolbarTitle);\r\n }\r\n\r\n toolbarContent.appendChild(toolbarItem);\r\n }\r\n\r\n el.toolbar = obj;\r\n\r\n el.appendChild(toolbar);\r\n\r\n return obj;\r\n});\r\n\r\njSuites.actionsheet = (function() {\r\n var actionsheet = document.createElement('div');\r\n actionsheet.className = 'jactionsheet';\r\n actionsheet.style.display = 'none';\r\n\r\n var actionContent = document.createElement('div');\r\n actionContent.className = 'jactionsheet-content';\r\n actionsheet.appendChild(actionContent);\r\n\r\n var obj = function(options) {\r\n if (options) {\r\n obj.options = options;\r\n }\r\n\r\n // Reset container\r\n actionContent.innerHTML = '';\r\n\r\n // Create new elements\r\n for (var i = 0; i < obj.options.length; i++) {\r\n var actionGroup = document.createElement('div');\r\n actionGroup.className = 'jactionsheet-group';\r\n\r\n for (var j = 0; j < obj.options[i].length; j++) {\r\n var v = obj.options[i][j];\r\n var actionItem = document.createElement('div');\r\n var actionInput = document.createElement('input');\r\n actionInput.type = 'button';\r\n actionInput.value = v.title;\r\n if (v.className) {\r\n actionInput.className = v.className; \r\n }\r\n if (v.onclick) {\r\n actionInput.onclick = v.onclick; \r\n }\r\n if (v.action == 'cancel') {\r\n actionInput.style.color = 'red';\r\n }\r\n actionItem.appendChild(actionInput);\r\n actionGroup.appendChild(actionItem);\r\n }\r\n\r\n actionContent.appendChild(actionGroup);\r\n }\r\n\r\n // Show\r\n actionsheet.style.display = '';\r\n\r\n // Append\r\n jSuites.el.appendChild(actionsheet);\r\n\r\n // Animation\r\n jSuites.slideBottom(actionContent, true);\r\n }\r\n\r\n obj.close = function() {\r\n if (actionsheet.style.display != 'none') {\r\n // Remove any existing actionsheet\r\n jSuites.slideBottom(actionContent, false, function() {\r\n actionsheet.remove();\r\n actionsheet.style.display = 'none';\r\n });\r\n }\r\n }\r\n\r\n var mouseUp = function(e) {\r\n obj.close();\r\n }\r\n\r\n actionsheet.addEventListener('mouseup', mouseUp);\r\n\r\n obj.options = {};\r\n\r\n return obj;\r\n})();\r\n\r\n/**\r\n * (c) jSuites modal\r\n * https://github.com/paulhodel/jsuites\r\n *\r\n * @author: Paul Hodel \r\n * @description: Modal\r\n */\r\n\r\njSuites.modal = (function(el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n url: null,\r\n onopen: null,\r\n onclose: null,\r\n closed: false,\r\n width: null,\r\n height: null,\r\n title: null,\r\n };\r\n\r\n // Loop through our object\r\n for (var property in defaults) {\r\n if (options && options.hasOwnProperty(property)) {\r\n obj.options[property] = options[property];\r\n } else {\r\n obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n // Title\r\n if (! obj.options.title && el.getAttribute('title')) {\r\n obj.options.title = el.getAttribute('title');\r\n }\r\n\r\n var temp = document.createElement('div');\r\n for (var i = 0; i < el.children.length; i++) {\r\n temp.appendChild(el.children[i]);\r\n }\r\n\r\n obj.content = document.createElement('div');\r\n obj.content.className = 'jmodal_content';\r\n obj.content.innerHTML = el.innerHTML;\r\n\r\n for (var i = 0; i < temp.children.length; i++) {\r\n obj.content.appendChild(temp.children[i]);\r\n }\r\n\r\n obj.container = document.createElement('div');\r\n obj.container.className = 'jmodal';\r\n obj.container.appendChild(obj.content);\r\n\r\n if (obj.options.width) {\r\n obj.container.style.width = obj.options.width;\r\n }\r\n if (obj.options.height) {\r\n obj.container.style.height = obj.options.height;\r\n }\r\n if (obj.options.title) {\r\n obj.container.setAttribute('title', obj.options.title);\r\n } else {\r\n obj.container.classList.add('no-title');\r\n }\r\n el.innerHTML = '';\r\n el.style.display = 'none';\r\n el.appendChild(obj.container);\r\n\r\n // Backdrop\r\n var backdrop = document.createElement('div');\r\n backdrop.className = 'jmodal_backdrop';\r\n el.appendChild(backdrop);\r\n\r\n obj.open = function() {\r\n el.style.display = 'block';\r\n // Fullscreen\r\n const rect = obj.container.getBoundingClientRect();\r\n if (jSuites.getWindowWidth() < rect.width) {\r\n obj.container.style.top = '';\r\n obj.container.style.left = '';\r\n obj.container.classList.add('jmodal_fullscreen');\r\n jSuites.slideBottom(obj.container, 1);\r\n } else {\r\n backdrop.style.display = 'block';\r\n }\r\n // Current\r\n jSuites.modal.current = obj;\r\n // Event\r\n if (typeof(obj.options.onopen) == 'function') {\r\n obj.options.onopen(el, obj);\r\n }\r\n }\r\n\r\n obj.resetPosition = function() {\r\n obj.container.style.top = '';\r\n obj.container.style.left = '';\r\n }\r\n\r\n obj.isOpen = function() {\r\n return el.style.display != 'none' ? true : false;\r\n }\r\n\r\n obj.close = function() {\r\n el.style.display = 'none';\r\n // Backdrop\r\n backdrop.style.display = '';\r\n // Current\r\n jSuites.modal.current = null;\r\n // Remove fullscreen class\r\n obj.container.classList.remove('jmodal_fullscreen');\r\n // Event\r\n if (typeof(obj.options.onclose) == 'function') {\r\n obj.options.onclose(el, obj);\r\n }\r\n }\r\n\r\n if (! jSuites.modal.hasEvents) {\r\n jSuites.modal.current = obj;\r\n\r\n if ('ontouchstart' in document.documentElement === true) {\r\n document.addEventListener(\"touchstart\", jSuites.modal.mouseDownControls);\r\n } else {\r\n document.addEventListener('mousedown', jSuites.modal.mouseDownControls);\r\n document.addEventListener('mousemove', jSuites.modal.mouseMoveControls);\r\n document.addEventListener('mouseup', jSuites.modal.mouseUpControls);\r\n }\r\n\r\n document.addEventListener('keydown', jSuites.modal.keyDownControls);\r\n\r\n jSuites.modal.hasEvents = true;\r\n }\r\n\r\n if (obj.options.url) {\r\n jSuites.ajax({\r\n url: obj.options.url,\r\n method: 'GET',\r\n success: function(data) {\r\n obj.content.innerHTML = data;\r\n\r\n if (! obj.options.closed) {\r\n obj.open();\r\n }\r\n }\r\n });\r\n } else {\r\n if (! obj.options.closed) {\r\n obj.open();\r\n }\r\n }\r\n\r\n // Keep object available from the node\r\n el.modal = obj;\r\n\r\n return obj;\r\n});\r\n\r\njSuites.modal.current = null;\r\njSuites.modal.position = null;\r\n\r\njSuites.modal.keyDownControls = function(e) {\r\n if (e.which == 27) {\r\n if (jSuites.modal.current) {\r\n jSuites.modal.current.close();\r\n }\r\n }\r\n}\r\n\r\njSuites.modal.mouseUpControls = function(e) {\r\n if (jSuites.modal.current) {\r\n jSuites.modal.current.container.style.cursor = 'auto';\r\n }\r\n jSuites.modal.position = null;\r\n}\r\n\r\njSuites.modal.mouseMoveControls = function(e) {\r\n if (jSuites.modal.current && jSuites.modal.position) {\r\n if (e.which == 1 || e.which == 3) {\r\n var position = jSuites.modal.position;\r\n jSuites.modal.current.container.style.top = (position[1] + (e.clientY - position[3]) + (position[5] / 2)) + 'px';\r\n jSuites.modal.current.container.style.left = (position[0] + (e.clientX - position[2]) + (position[4] / 2)) + 'px';\r\n jSuites.modal.current.container.style.cursor = 'move';\r\n } else {\r\n jSuites.modal.current.container.style.cursor = 'auto';\r\n }\r\n }\r\n}\r\n\r\njSuites.modal.mouseDownControls = function(e) {\r\n jSuites.modal.position = [];\r\n\r\n if (e.target.classList.contains('jmodal')) {\r\n setTimeout(function() {\r\n // Get target info\r\n var rect = e.target.getBoundingClientRect();\r\n\r\n if (e.changedTouches && e.changedTouches[0]) {\r\n var x = e.changedTouches[0].clientX;\r\n var y = e.changedTouches[0].clientY;\r\n } else {\r\n var x = e.clientX;\r\n var y = e.clientY;\r\n }\r\n\r\n if (rect.width - (x - rect.left) < 50 && (y - rect.top) < 50) {\r\n setTimeout(function() {\r\n jSuites.modal.current.close();\r\n }, 100);\r\n } else {\r\n if (e.target.getAttribute('title') && (y - rect.top) < 50) {\r\n if (document.selection) {\r\n document.selection.empty();\r\n } else if ( window.getSelection ) {\r\n window.getSelection().removeAllRanges();\r\n }\r\n\r\n jSuites.modal.position = [\r\n rect.left,\r\n rect.top,\r\n e.clientX,\r\n e.clientY,\r\n rect.width,\r\n rect.height,\r\n ];\r\n }\r\n }\r\n }, 100);\r\n }\r\n}\r\n\r\n\r\njSuites.notification = (function(options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n icon: null,\r\n name: 'Notification',\r\n date: null,\r\n title: null,\r\n message: null,\r\n timeout: 4000,\r\n autoHide: true,\r\n closeable: true,\r\n };\r\n\r\n // Loop through our object\r\n for (var property in defaults) {\r\n if (options && options.hasOwnProperty(property)) {\r\n obj.options[property] = options[property];\r\n } else {\r\n obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n var notification = document.createElement('div');\r\n notification.className = 'jnotification';\r\n\r\n var notificationContainer = document.createElement('div');\r\n notificationContainer.className = 'jnotification-container';\r\n notification.appendChild(notificationContainer);\r\n\r\n var notificationHeader = document.createElement('div');\r\n notificationHeader.className = 'jnotification-header';\r\n notificationContainer.appendChild(notificationHeader);\r\n\r\n var notificationImage = document.createElement('div');\r\n notificationImage.className = 'jnotification-image';\r\n notificationHeader.appendChild(notificationImage);\r\n\r\n if (obj.options.icon) {\r\n var notificationIcon = document.createElement('img');\r\n notificationIcon.src = obj.options.icon;\r\n notificationImage.appendChild(notificationIcon);\r\n }\r\n\r\n var notificationName = document.createElement('div');\r\n notificationName.className = 'jnotification-name';\r\n notificationName.innerHTML = obj.options.name;\r\n notificationHeader.appendChild(notificationName);\r\n\r\n if (obj.options.closeable == true) {\r\n var notificationClose = document.createElement('div');\r\n notificationClose.className = 'jnotification-close';\r\n notificationClose.onclick = function() {\r\n obj.hide();\r\n }\r\n notificationHeader.appendChild(notificationClose);\r\n }\r\n\r\n var notificationDate = document.createElement('div');\r\n notificationDate.className = 'jnotification-date';\r\n notificationHeader.appendChild(notificationDate);\r\n\r\n var notificationContent = document.createElement('div');\r\n notificationContent.className = 'jnotification-content';\r\n notificationContainer.appendChild(notificationContent);\r\n\r\n if (obj.options.title) {\r\n var notificationTitle = document.createElement('div');\r\n notificationTitle.className = 'jnotification-title';\r\n notificationTitle.innerHTML = obj.options.title;\r\n notificationContent.appendChild(notificationTitle);\r\n }\r\n\r\n var notificationMessage = document.createElement('div');\r\n notificationMessage.className = 'jnotification-message';\r\n notificationMessage.innerHTML = obj.options.message;\r\n notificationContent.appendChild(notificationMessage);\r\n\r\n obj.show = function() {\r\n document.body.appendChild(notification);\r\n if (jSuites.getWindowWidth() > 800) { \r\n jSuites.fadeIn(notification);\r\n } else {\r\n jSuites.slideTop(notification, 1);\r\n }\r\n }\r\n\r\n obj.hide = function() {\r\n if (jSuites.getWindowWidth() > 800) { \r\n jSuites.fadeOut(notification, function() {\r\n notification.parentNode.removeChild(notification);\r\n });\r\n } else {\r\n jSuites.slideTop(notification, 0, function() {\r\n notification.parentNode.removeChild(notification);\r\n });\r\n }\r\n };\r\n\r\n obj.show();\r\n\r\n if (obj.options.autoHide == true) {\r\n setTimeout(function() {\r\n obj.hide();\r\n }, obj.options.timeout);\r\n }\r\n\r\n if (jSuites.getWindowWidth() < 800) {\r\n notification.addEventListener(\"swipeup\", function(e) {\r\n obj.hide();\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n }\r\n\r\n return obj;\r\n});\r\n\r\njSuites.rating = (function(el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n number: 5,\r\n value: 0,\r\n tooltip: [ 'Very bad', 'Bad', 'Average', 'Good', 'Very good' ],\r\n onchange: null,\r\n };\r\n\r\n // Loop through the initial configuration\r\n for (var property in defaults) {\r\n if (options && options.hasOwnProperty(property)) {\r\n obj.options[property] = options[property];\r\n } else {\r\n obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n // Class\r\n el.classList.add('jrating');\r\n\r\n // Add elements\r\n for (var i = 0; i < obj.options.number; i++) {\r\n var div = document.createElement('div');\r\n div.setAttribute('data-index', (i + 1))\r\n div.setAttribute('title', obj.options.tooltip[i])\r\n el.appendChild(div);\r\n }\r\n\r\n // Set value\r\n obj.setValue = function(index) {\r\n for (var i = 0; i < obj.options.number; i++) {\r\n if (i < index) {\r\n el.children[i].classList.add('jrating-selected');\r\n } else {\r\n el.children[i].classList.remove('jrating-over');\r\n el.children[i].classList.remove('jrating-selected');\r\n }\r\n }\r\n\r\n obj.options.value = index;\r\n\r\n if (typeof(obj.options.onchange) == 'function') {\r\n obj.options.onchange(el, index);\r\n }\r\n }\r\n\r\n obj.getValue = function() {\r\n return obj.options.value;\r\n }\r\n\r\n if (obj.options.value) {\r\n for (var i = 0; i < obj.options.number; i++) {\r\n if (i < obj.options.value) {\r\n el.children[i].classList.add('jrating-selected');\r\n }\r\n }\r\n }\r\n\r\n // Events\r\n el.addEventListener(\"click\", function(e) {\r\n var index = e.target.getAttribute('data-index');\r\n if (index != undefined) {\r\n if (index == obj.options.value) {\r\n obj.setValue(0);\r\n } else {\r\n obj.setValue(index);\r\n }\r\n }\r\n });\r\n\r\n el.addEventListener(\"mouseover\", function(e) {\r\n var index = e.target.getAttribute('data-index');\r\n for (var i = 0; i < obj.options.number; i++) {\r\n if (i < index) {\r\n el.children[i].classList.add('jrating-over');\r\n } else {\r\n el.children[i].classList.remove('jrating-over');\r\n }\r\n }\r\n });\r\n\r\n el.addEventListener(\"mouseout\", function(e) {\r\n for (var i = 0; i < obj.options.number; i++) {\r\n el.children[i].classList.remove('jrating-over');\r\n }\r\n });\r\n\r\n el.rating = obj;\r\n\r\n return obj;\r\n});\r\n\r\n\r\n/**\r\n * (c) Image slider\r\n * https://github.com/paulhodel/jtools\r\n *\r\n * @author: Paul Hodel \r\n * @description: Image Slider\r\n */\r\n\r\njSuites.slider = (function(el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n obj.currentImage = null;\r\n\r\n if (options) {\r\n obj.options = options;\r\n }\r\n\r\n // Items\r\n obj.options.items = [];\r\n\r\n if (! el.classList.contains('jslider')) {\r\n el.classList.add('jslider');\r\n\r\n // Create container\r\n var container = document.createElement('div');\r\n container.className = 'jslider-container';\r\n\r\n // Move children inside\r\n if (el.children.length > 0) {\r\n // Keep children items\r\n for (var i = 0; i < el.children.length; i++) {\r\n obj.options.items.push(el.children[i]);\r\n }\r\n }\r\n if (obj.options.items.length > 0) {\r\n for (var i = 0; i < obj.options.items.length; i++) {\r\n obj.options.items[i].classList.add('jfile');\r\n var index = obj.options.items[i].src.lastIndexOf('/');\r\n if (index < 0) {\r\n obj.options.items[i].setAttribute('data-name', obj.options.items[i].src);\r\n } else {\r\n obj.options.items[i].setAttribute('data-name', obj.options.items[i].src.substr(index + 1));\r\n }\r\n var index = obj.options.items[i].src.lastIndexOf('/');\r\n\r\n container.appendChild(obj.options.items[i]);\r\n }\r\n }\r\n el.appendChild(container);\r\n // Add close buttom\r\n var close = document.createElement('div');\r\n close.className = 'jslider-close';\r\n close.innerHTML = '';\r\n close.onclick = function() {\r\n obj.close();\r\n }\r\n el.appendChild(close);\r\n } else {\r\n var container = el.querySelector('slider-container');\r\n }\r\n\r\n obj.show = function(target) {\r\n if (! target) {\r\n var target = container.children[0];\r\n }\r\n\r\n if (! container.classList.contains('jslider-preview')) {\r\n container.classList.add('jslider-preview');\r\n close.style.display = 'block';\r\n }\r\n\r\n // Hide all images\r\n for (var i = 0; i < container.children.length; i++) {\r\n container.children[i].style.display = 'none';\r\n }\r\n\r\n // Show clicked only\r\n target.style.display = 'block';\r\n\r\n // Is there any previous\r\n if (target.previousSibling) {\r\n container.classList.add('jslider-left');\r\n } else {\r\n container.classList.remove('jslider-left');\r\n }\r\n\r\n // Is there any next\r\n if (target.nextSibling) {\r\n container.classList.add('jslider-right');\r\n } else {\r\n container.classList.remove('jslider-right');\r\n }\r\n\r\n obj.currentImage = target;\r\n }\r\n\r\n obj.open = function() {\r\n obj.show();\r\n\r\n // Event\r\n if (typeof(obj.options.onopen) == 'function') {\r\n obj.options.onopen(el);\r\n }\r\n }\r\n\r\n obj.close = function() {\r\n container.classList.remove('jslider-preview');\r\n container.classList.remove('jslider-left');\r\n container.classList.remove('jslider-right');\r\n\r\n for (var i = 0; i < container.children.length; i++) {\r\n container.children[i].style.display = '';\r\n }\r\n\r\n close.style.display = '';\r\n\r\n obj.currentImage = null;\r\n\r\n // Event\r\n if (typeof(obj.options.onclose) == 'function') {\r\n obj.options.onclose(el);\r\n }\r\n }\r\n\r\n obj.reset = function() {\r\n container.innerHTML = '';\r\n }\r\n\r\n obj.addFile = function(v, ignoreEvents) {\r\n var img = document.createElement('img');\r\n img.setAttribute('data-lastmodified', v.lastmodified);\r\n img.setAttribute('data-name', v.name);\r\n img.setAttribute('data-size', v.size);\r\n img.setAttribute('data-extension', v.extension);\r\n img.setAttribute('data-cover', v.cover);\r\n img.setAttribute('src', v.file);\r\n img.className = 'jfile';\r\n container.appendChild(img);\r\n obj.options.items.push(img);\r\n\r\n // Onchange\r\n if (! ignoreEvents) {\r\n if (typeof(obj.options.onchange) == 'function') {\r\n obj.options.onchange(el, v);\r\n }\r\n }\r\n }\r\n\r\n obj.addFiles = function(files) {\r\n for (var i = 0; i < files.length; i++) {\r\n obj.addFile(files[i]);\r\n }\r\n }\r\n\r\n obj.next = function() {\r\n if (obj.currentImage.nextSibling) {\r\n obj.show(obj.currentImage.nextSibling);\r\n }\r\n }\r\n \r\n obj.prev = function() {\r\n if (obj.currentImage.previousSibling) {\r\n obj.show(obj.currentImage.previousSibling);\r\n }\r\n }\r\n\r\n obj.getData = function() {\r\n return jSuites.getFiles(container);\r\n }\r\n\r\n // Append data\r\n if (obj.options.data && obj.options.data.length) {\r\n for (var i = 0; i < obj.options.data.length; i++) {\r\n if (obj.options.data[i]) {\r\n obj.addFile(obj.options.data[i]);\r\n }\r\n }\r\n }\r\n\r\n // Allow insert\r\n if (obj.options.allowAttachment) {\r\n var attachmentInput = document.createElement('input');\r\n attachmentInput.type = 'file';\r\n attachmentInput.className = 'slider-attachment';\r\n attachmentInput.setAttribute('accept', 'image/*');\r\n attachmentInput.style.display = 'none';\r\n attachmentInput.onchange = function() {\r\n var reader = [];\r\n\r\n for (var i = 0; i < this.files.length; i++) {\r\n var type = this.files[i].type.split('/');\r\n\r\n if (type[0] == 'image') {\r\n var extension = this.files[i].name;\r\n extension = extension.split('.');\r\n extension = extension[extension.length-1];\r\n\r\n var file = {\r\n size: this.files[i].size,\r\n name: this.files[i].name,\r\n extension: extension,\r\n cover: 0,\r\n lastmodified: this.files[i].lastModified,\r\n }\r\n\r\n reader[i] = new FileReader();\r\n reader[i].addEventListener(\"load\", function (e) {\r\n file.file = e.target.result;\r\n obj.addFile(file);\r\n }, false);\r\n\r\n reader[i].readAsDataURL(this.files[i]);\r\n } else {\r\n alert('The extension is not allowed');\r\n }\r\n };\r\n }\r\n\r\n var attachmentIcon = document.createElement('i');\r\n attachmentIcon.innerHTML = 'attachment';\r\n attachmentIcon.className = 'jslider-attach material-icons';\r\n attachmentIcon.onclick = function() {\r\n jSuites.click(attachmentInput);\r\n }\r\n\r\n el.appendChild(attachmentInput);\r\n el.appendChild(attachmentIcon);\r\n }\r\n\r\n // Push to refresh\r\n var longTouchTimer = null;\r\n\r\n var mouseDown = function(e) {\r\n if (e.target.tagName == 'IMG') {\r\n // Remove\r\n var targetImage = e.target;\r\n longTouchTimer = setTimeout(function() {\r\n if (e.target.src.substr(0,4) == 'data') {\r\n e.target.remove();\r\n } else {\r\n if (e.target.classList.contains('jremove')) {\r\n e.target.classList.remove('jremove');\r\n } else {\r\n e.target.classList.add('jremove');\r\n }\r\n }\r\n\r\n // Onchange\r\n if (typeof(obj.options.onchange) == 'function') {\r\n obj.options.onchange(el, e.target);\r\n }\r\n }, 1000);\r\n }\r\n }\r\n\r\n var mouseUp = function(e) {\r\n if (longTouchTimer) {\r\n clearTimeout(longTouchTimer);\r\n }\r\n\r\n // Open slider\r\n if (e.target.tagName == 'IMG') {\r\n if (! e.target.classList.contains('jremove')) {\r\n obj.show(e.target);\r\n }\r\n } else {\r\n // Arrow controls\r\n if (e.target.clientWidth - e.offsetX < 40) {\r\n // Show next image\r\n obj.next();\r\n } else if (e.offsetX < 40) {\r\n // Show previous image\r\n obj.prev();\r\n }\r\n }\r\n }\r\n\r\n container.addEventListener('mousedown', mouseDown);\r\n container.addEventListener('touchstart', mouseDown);\r\n container.addEventListener('mouseup', mouseUp);\r\n container.addEventListener('touchend', mouseUp);\r\n\r\n // Add global events\r\n el.addEventListener(\"swipeleft\", function(e) {\r\n obj.next();\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n\r\n el.addEventListener(\"swiperight\", function(e) {\r\n obj.prev();\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n\r\n\r\n el.slider = obj;\r\n\r\n return obj;\r\n});\r\n\r\n/**\n * (c) jTools v1.0.1 - Element sorting\n * https://github.com/paulhodel/jtools\n *\n * @author: Paul Hodel \n * @description: Element drag and drop sorting\n */\n\njSuites.sorting = (function(el, options) {\n el.classList.add('jsorting');\n\n el.addEventListener('dragstart', function(e) {\n e.target.classList.add('dragging');\n });\n\n el.addEventListener('dragover', function(e) {\n e.preventDefault();\n\n if (e.target.clientHeight / 2 > e.offsetY) {\n e.path[0].style.borderTop = '1px dotted #ccc';\n e.path[0].style.borderBottom = '';\n } else {\n e.path[0].style.borderTop = '';\n e.path[0].style.borderBottom = '1px dotted #ccc';\n }\n });\n\n el.addEventListener('dragleave', function(e) {\n e.path[0].style.borderTop = '';\n e.path[0].style.borderBottom = '';\n });\n\n el.addEventListener('dragend', function(e) {\n e.path[1].querySelector('.dragging').classList.remove('dragging');\n });\n\n el.addEventListener('drop', function(e) {\n var element = e.path[1].querySelector('.dragging');\n\n if (e.target.clientHeight / 2 > e.offsetY) {\n e.path[1].insertBefore(element, e.path[0]);\n } else {\n e.path[1].insertBefore(element, e.path[0].nextSibling);\n }\n\n e.path[0].style.borderTop = '';\n e.path[0].style.borderBottom = '';\n });\n\n for (var i = 0; i < el.children.length; i++) {\n el.children[i].setAttribute('draggable', 'true');\n };\n\n return el;\n});\r\n\r\njSuites.tabs = (function(el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n data: null,\r\n allowCreate: false,\r\n onload: null,\r\n onchange: null,\r\n oncreate: null,\r\n animation: false,\r\n create: null,\r\n autoName: false,\r\n prefixName: '',\r\n hideHeaders: false,\r\n };\r\n\r\n // Loop through the initial configuration\r\n for (var property in defaults) {\r\n if (options && options.hasOwnProperty(property)) {\r\n obj.options[property] = options[property];\r\n } else {\r\n obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n // Class\r\n el.classList.add('jtabs');\r\n\r\n if (obj.options.animation == true) {\r\n // Border\r\n var border = document.createElement('div');\r\n border.className = 'jtabs-border';\r\n el.appendChild(border);\r\n\r\n var setBorder = function(index) {\r\n var rect = headers.children[index].getBoundingClientRect();\r\n var rectContent = content.children[index].getBoundingClientRect();\r\n border.style.width = rect.width + 'px';\r\n border.style.left = (rect.left - rectContent.left) + 'px';\r\n border.style.top = rect.height + 'px';\r\n }\r\n }\r\n\r\n // Set value\r\n obj.open = function(index) {\r\n for (var i = 0; i < headers.children.length; i++) {\r\n headers.children[i].classList.remove('jtabs-selected');\r\n if (content.children[i]) {\r\n content.children[i].classList.remove('jtabs-selected');\r\n }\r\n }\r\n\r\n headers.children[index].classList.add('jtabs-selected');\r\n if (content.children[index]) {\r\n content.children[index].classList.add('jtabs-selected');\r\n }\r\n\r\n // Hide\r\n if (obj.options.hideHeaders == true && (headers.children.length < 2 && obj.options.allowCreate == false)) {\r\n headers.style.display = 'none';\r\n } else {\r\n headers.style.display = '';\r\n // Set border\r\n if (obj.options.animation == true) {\r\n setTimeout(function() {\r\n setBorder(index);\r\n }, 100);\r\n }\r\n }\r\n }\r\n\r\n obj.selectIndex = function(a) {\r\n var index = Array.prototype.indexOf.call(headers.children, a);\r\n if (index >= 0) {\r\n obj.open(index);\r\n }\r\n }\r\n\r\n obj.create = function(title, div) {\r\n if (typeof(obj.options.create) == 'function') {\r\n obj.options.create();\r\n } else {\r\n obj.appendElement(title, div);\r\n\r\n if (typeof(obj.options.oncreate) == 'function') {\r\n obj.options.oncreate(el, div)\r\n }\r\n }\r\n }\r\n\r\n obj.appendElement = function(title, div) {\r\n if (! title) {\r\n if (obj.options.autoName == true) {\r\n var title = obj.options.prefixName;\r\n title += ' ' + (parseInt(content.children.length) + 1);\r\n } else {\r\n var title = prompt('Title?', '');\r\n }\r\n }\r\n\r\n if (title) {\r\n // Add headers\r\n var header = document.createElement('div');\r\n header.innerHTML = title;\r\n if (obj.options.allowCreate) {\r\n headers.insertBefore(header, headers.lastChild);\r\n } else {\r\n headers.appendChild(header);\r\n }\r\n\r\n // Add content\r\n if (! div) {\r\n var div = document.createElement('div');\r\n }\r\n content.appendChild(div);\r\n\r\n // Open new tab\r\n obj.selectIndex(header);\r\n }\r\n }\r\n\r\n // Create from data\r\n if (obj.options.data) {\r\n // Make sure the component is blank\r\n el.innerHTML = '';\r\n var headers = document.createElement('div');\r\n var content = document.createElement('div');\r\n headers.classList.add('jtabs-headers');\r\n content.classList.add('jtabs-content');\r\n el.appendChild(headers);\r\n el.appendChild(content);\r\n\r\n for (var i = 0; i < obj.options.data.length; i++) {\r\n var headersItem = document.createElement('div');\r\n headers.appendChild(headersItem);\r\n var contentItem = document.createElement('div');\r\n content.appendChild(contentItem);\r\n\r\n headersItem.innerHTML = obj.options.data[i].title;\r\n if (obj.options.data[i].content) {\r\n contentItem.innerHTML = obj.options.data[i].content;\r\n } else if (obj.options.data[i].url) {\r\n jSuites.ajax({\r\n url: obj.options.data[i].url,\r\n type: 'GET',\r\n success: function(result) {\r\n contentItem.innerHTML = result;\r\n },\r\n complete: function() {\r\n if (typeof(obj.options.onload) == 'function') {\r\n obj.options.onload(el);\r\n\r\n obj.open(0);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n } else if (el.children[0] && el.children[1]) {\r\n // Create from existing elements\r\n var headers = el.children[0];\r\n var content = el.children[1];\r\n headers.classList.add('jtabs-headers');\r\n content.classList.add('jtabs-content');\r\n } else {\r\n el.innerHTML = '';\r\n var headers = document.createElement('div');\r\n var content = document.createElement('div');\r\n headers.classList.add('jtabs-headers');\r\n content.classList.add('jtabs-content');\r\n el.appendChild(headers);\r\n el.appendChild(content);\r\n }\r\n\r\n // New\r\n if (obj.options.allowCreate == true) {\r\n var add = document.createElement('i');\r\n add.className = 'jtabs-add';\r\n headers.appendChild(add);\r\n }\r\n\r\n // Events\r\n headers.addEventListener(\"click\", function(e) {\r\n if (e.target.tagName == 'DIV') {\r\n obj.selectIndex(e.target);\r\n } else {\r\n obj.create();\r\n }\r\n });\r\n\r\n if (headers.children.length) {\r\n obj.open(0);\r\n }\r\n\r\n el.tabs = obj;\r\n\r\n return obj;\r\n});\r\n\r\njSuites.tags = (function(el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n /**\r\n * @typedef {Object} defaults\r\n * @property {(string|Array)} value - Initial value of the compontent\r\n * @property {number} limit - Max number of tags inside the element\r\n * @property {string} search - The URL for suggestions\r\n * @property {string} placeholder - The default instruction text on the element\r\n * @property {validation} validation - Method to validate the tags\r\n * @property {requestCallback} onbeforechange - Method to be execute before any changes on the element\r\n * @property {requestCallback} onchange - Method to be execute after any changes on the element\r\n * @property {requestCallback} onfocus - Method to be execute when on focus\r\n * @property {requestCallback} onblur - Method to be execute when on blur\r\n * @property {requestCallback} onload - Method to be execute when the element is loaded\r\n */\r\n var defaults = {\r\n value: null,\r\n limit: null,\r\n limitMessage: 'The limit of entries is: ',\r\n search: null,\r\n placeholder: null,\r\n validation: null,\r\n onbeforechange: null,\r\n onchange: null,\r\n onfocus: null,\r\n onblur: null,\r\n onload: null,\r\n colors: null,\r\n };\r\n\r\n // Loop through though the default configuration\r\n for (var property in defaults) {\r\n if (options && options.hasOwnProperty(property)) {\r\n obj.options[property] = options[property];\r\n } else {\r\n obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n // Search helpers\r\n var searchContainer = null;\r\n var searchTerms = null;\r\n var searchIndex = 0;\r\n var searchTimer = 0;\r\n\r\n /**\r\n * Add a new tag to the element\r\n * @param {(?string|Array)} value - The value of the new element\r\n */\r\n obj.add = function(value, focus) {\r\n if (typeof(obj.options.onbeforechange) == 'function') {\r\n var v = obj.options.onbeforechange(el, obj, value);\r\n if (v != null) {\r\n value = v;\r\n }\r\n }\r\n\r\n // Close search\r\n if (searchContainer) {\r\n searchContainer.style.display = '';\r\n }\r\n\r\n if (obj.options.limit > 0 && el.children.length >= obj.options.limit) {\r\n alert(obj.options.limitMessage + ' ' + obj.options.limit);\r\n } else {\r\n // Get node\r\n var node = getSelectionStart();\r\n\r\n // Mix argument string or array\r\n if (! value || typeof(value) == 'string') {\r\n var div = document.createElement('div');\r\n div.innerHTML = value ? value : '
';\r\n if (node && node.parentNode.classList.contains('jtags')) {\r\n el.insertBefore(div, node.nextSibling);\r\n } else {\r\n el.appendChild(div);\r\n }\r\n } else {\r\n if (node && node.parentNode.classList.contains('jtags')) {\r\n if (! node.innerText.replace(\"\\n\", \"\")) {\r\n el.removeChild(node);\r\n }\r\n }\r\n\r\n for (var i = 0; i <= value.length; i++) {\r\n if (! obj.options.limit || el.children.length < obj.options.limit) {\r\n var div = document.createElement('div');\r\n div.innerHTML = value[i] ? value[i] : '
';\r\n el.appendChild(div);\r\n }\r\n }\r\n }\r\n\r\n // Place caret\r\n if (focus) {\r\n setTimeout(function() {\r\n caret(div);\r\n }, 0);\r\n }\r\n\r\n // Filter\r\n filter();\r\n\r\n if (typeof(obj.options.onchange) == 'function') {\r\n obj.options.onchange(el, obj, value ? value : '');\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get all tags in the element\r\n * @return {Array} data - All tags as an array\r\n */\r\n obj.getData = function() {\r\n var data = [];\r\n for (var i = 0; i < el.children.length; i++) {\r\n var value = obj.getValue(i);\r\n if (value) {\r\n var id = el.children[i].getAttribute('data-id');\r\n if (! id) {\r\n id = value;\r\n }\r\n data.push({ id: id, value: value });\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n /**\r\n * Get the value of one tag. Null for all tags\r\n * @param {?number} index - Tag index number. Null for all tags.\r\n * @return {string} value - All tags separated by comma\r\n */\r\n obj.getValue = function(index) {\r\n var value = null;\r\n\r\n if (index != null) {\r\n // Get one individual value\r\n value = el.children[index].innerText.replace(\"\\n\", \"\");\r\n } else {\r\n // Get all\r\n var data = [];\r\n for (var i = 0; i < el.children.length; i++) {\r\n value = el.children[i].innerText.replace(\"\\n\", \"\");\r\n if (value) {\r\n data.push(obj.getValue(i));\r\n }\r\n }\r\n value = data.join(',');\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Set the value of the element based on a string separeted by (,|;|\\r\\n)\r\n * @param {string} value - A string with the tags\r\n */\r\n obj.setValue = function(text) {\r\n // Remove whitespaces\r\n text = text.trim();\r\n\r\n if (text) {\r\n // Tags\r\n var data = extractTags(text);\r\n // Add tags to the element\r\n obj.add(data);\r\n }\r\n }\r\n\r\n obj.reset = function() {\r\n el.innerHTML = '

';\r\n }\r\n\r\n /**\r\n * Verify if all tags in the element are valid\r\n * @return {boolean}\r\n */\r\n obj.isValid = function() {\r\n var test = 0;\r\n for (var i = 0; i < el.children.length; i++) {\r\n if (el.children[i].classList.contains('jtags_error')) {\r\n test++;\r\n }\r\n }\r\n return test == 0 ? true : false;\r\n }\r\n\r\n /**\r\n * Add one element from the suggestions to the element\r\n * @param {object} item - Node element in the suggestions container\r\n */ \r\n obj.selectIndex = function(item) {\r\n // Reset terms\r\n searchTerms = '';\r\n var node = getSelectionStart();\r\n // Append text to the caret\r\n node.innerText = item.children[1].innerText;\r\n // Set node id\r\n if (item.children[1].getAttribute('data-id')) {\r\n node.setAttribute('data-id', item.children[1].getAttribute('data-id'));\r\n }\r\n // Close container\r\n if (searchContainer) {\r\n searchContainer.style.display = '';\r\n searchContainer.innerHTML = '';\r\n }\r\n // Remove any error\r\n node.classList.remove('jtags_error');\r\n // Add new item\r\n obj.add();\r\n }\r\n\r\n /**\r\n * Search for suggestions\r\n * @param {object} node - Target node for any suggestions\r\n */\r\n obj.search = function(node) {\r\n // Create and append search container to the DOM\r\n if (! searchContainer) {\r\n var div = document.createElement('div');\r\n div.style.position = 'relative';\r\n el.parentNode.insertBefore(div, el.nextSibling);\r\n\r\n // Create container\r\n searchContainer = document.createElement('div');\r\n searchContainer.classList.add('jtags_search');\r\n div.appendChild(searchContainer);\r\n }\r\n\r\n // Search for\r\n var terms = node.anchorNode.nodeValue;\r\n\r\n // Search\r\n if (node.anchorNode.nodeValue && terms != searchTerms) {\r\n // Terms\r\n searchTerms = node.anchorNode.nodeValue;\r\n // Reset index\r\n searchIndex = 0;\r\n // Get remove results\r\n jSuites.ajax({\r\n url: obj.options.search + searchTerms,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function(data) {\r\n // Reset container\r\n searchContainer.innerHTML = '';\r\n\r\n // Print results\r\n if (! data.length) {\r\n // Show container\r\n searchContainer.style.display = '';\r\n } else {\r\n // Show container\r\n searchContainer.style.display = 'block';\r\n\r\n // Show items\r\n var len = data.length < 11 ? data.length : 10;\r\n for (var i = 0; i < len; i++) {\r\n var div = document.createElement('div');\r\n if (i == 0) {\r\n div.classList.add('selected');\r\n }\r\n var img = document.createElement('img');\r\n if (data[i].image) {\r\n img.src = data[i].image;\r\n } else {\r\n img.style.display = 'none';\r\n }\r\n div.appendChild(img);\r\n\r\n var item = document.createElement('div');\r\n item.setAttribute('data-id', data[i].id);\r\n item.innerHTML = data[i].name;\r\n div.onclick = function() {\r\n // Add item\r\n obj.selectIndex(this);\r\n }\r\n div.appendChild(item);\r\n // Append item to the container\r\n searchContainer.appendChild(div);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Destroy tags element\r\n obj.destroy = function() {\r\n // Bind events\r\n el.removeEventListener('mouseup', tagsMouseUp);\r\n el.removeEventListener('keydown', tagsKeyDown);\r\n el.removeEventListener('keyup', tagsKeyUp);\r\n el.removeEventListener('paste', tagsPaste);\r\n el.removeEventListener('focus', tagsFocus);\r\n el.removeEventListener('blur', tagsBlur);\r\n // Remove element\r\n el.parentNode.removeChild(el);\r\n }\r\n\r\n var getRandomColor = function(index) {\r\n var rand = function(min, max) {\r\n return min + Math.random() * (max - min);\r\n }\r\n return 'hsl(' + rand(1, 360) + ',' + rand(40, 70) + '%,' + rand(65, 72) + '%)';\r\n }\r\n\r\n /**\r\n * Filter tags\r\n */\r\n var filter = function() {\r\n for (var i = 0; i < el.children.length; i++) {\r\n // Create label design\r\n if (! obj.getValue(i)) {\r\n el.children[i].classList.remove('jtags_label');\r\n } else {\r\n el.children[i].classList.add('jtags_label');\r\n\r\n // Validation in place\r\n if (typeof(obj.options.validation) == 'function') {\r\n if (obj.getValue(i)) {\r\n if (! obj.options.validation(el.children[i], el.children[i].innerText, el.children[i].getAttribute('data-id'))) {\r\n el.children[i].classList.add('jtags_error');\r\n } else {\r\n el.children[i].classList.remove('jtags_error');\r\n }\r\n } else {\r\n el.children[i].classList.remove('jtags_error');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Place caret in the element node\r\n */\r\n var caret = function(e) {\r\n var range = document.createRange();\r\n var sel = window.getSelection();\r\n range.setStart(e, e.innerText.length);\r\n range.collapse(true);\r\n sel.removeAllRanges();\r\n sel.addRange(range);\r\n }\r\n\r\n /**\r\n * Selection\r\n */\r\n var getSelectionStart = function() {\r\n var node = document.getSelection().anchorNode;\r\n if (node) {\r\n return (node.nodeType == 3 ? node.parentNode : node);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Extract tags from a string\r\n * @param {string} text - Raw string\r\n * @return {Array} data - Array with extracted tags\r\n */\r\n var extractTags = function(text) {\r\n /** @type {Array} */\r\n var data = [];\r\n\r\n /** @type {string} */\r\n var word = '';\r\n\r\n // Remove whitespaces\r\n text = text.trim();\r\n\r\n if (text) {\r\n for (var i = 0; i < text.length; i++) {\r\n if (text[i] == ',' || text[i] == ';' || text[i] == '\\r\\n') {\r\n if (word) {\r\n data.push(word);\r\n word = '';\r\n }\r\n } else {\r\n word += text[i];\r\n }\r\n }\r\n\r\n if (word) {\r\n data.push(word);\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /** @type {number} */\r\n var anchorOffset = 0;\r\n\r\n /**\r\n * Processing event keydown on the element\r\n * @param e {object}\r\n */\r\n var tagsKeyDown = function(e) {\r\n // Anchoroffset\r\n anchorOffset = window.getSelection().anchorOffset;\r\n\r\n // Verify content\r\n if (! el.children.length) {\r\n var div = document.createElement('div');\r\n div.innerHTML = '
';\r\n el.appendChild(div);\r\n }\r\n // Comma\r\n if (e.which == 9 || e.which == 186 || e.which == 188) {\r\n var n = window.getSelection().anchorOffset;\r\n if (n > 1) {\r\n if (! obj.options.limit || el.children.length < obj.options.limit) {\r\n obj.add('', true);\r\n }\r\n }\r\n e.preventDefault();\r\n } else if (e.which == 13) {\r\n // Enter\r\n if (searchContainer && searchContainer.style.display != '') {\r\n obj.selectIndex(searchContainer.children[searchIndex]);\r\n } else {\r\n var n = window.getSelection().anchorOffset;\r\n if (n > 1) {\r\n if (! obj.options.limit || el.children.length < obj.options.limit) {\r\n obj.add('', true);\r\n }\r\n }\r\n }\r\n e.preventDefault();\r\n } else if (e.which == 38) {\r\n // Up\r\n if (searchContainer && searchContainer.style.display != '') {\r\n searchContainer.children[searchIndex].classList.remove('selected');\r\n if (searchIndex > 0) {\r\n searchIndex--;\r\n }\r\n searchContainer.children[searchIndex].classList.add('selected');\r\n e.preventDefault();\r\n }\r\n } else if (e.which == 40) {\r\n // Down\r\n if (searchContainer && searchContainer.style.display != '') {\r\n searchContainer.children[searchIndex].classList.remove('selected');\r\n if (searchIndex < 9) {\r\n searchIndex++;\r\n }\r\n searchContainer.children[searchIndex].classList.add('selected');\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Processing event keyup on the element\r\n * @param e {object}\r\n */\r\n var tagsKeyUp = function(e) {\r\n if (e.which == 39) {\r\n var n = window.getSelection().anchorOffset;\r\n if (n > 1 && n == anchorOffset) {\r\n obj.add();\r\n }\r\n } else if (e.which == 13 || e.which == 38 || e.which == 40) {\r\n e.preventDefault();\r\n } else {\r\n if (searchTimer) {\r\n clearTimeout(searchTimer);\r\n }\r\n\r\n searchTimer = setTimeout(function() {\r\n // Current node\r\n var node = window.getSelection();\r\n // Search\r\n if (obj.options.search) {\r\n obj.search(node);\r\n }\r\n searchTimer = null;\r\n }, 300);\r\n }\r\n\r\n filter();\r\n }\r\n\r\n /**\r\n * Processing event paste on the element\r\n * @param e {object}\r\n */\r\n var tagsPaste = function(e) {\r\n if (e.clipboardData || e.originalEvent.clipboardData) {\r\n var html = (e.originalEvent || e).clipboardData.getData('text/html');\r\n var text = (e.originalEvent || e).clipboardData.getData('text/plain');\r\n } else if (window.clipboardData) {\r\n var html = window.clipboardData.getData('Html');\r\n var text = window.clipboardData.getData('Text');\r\n }\r\n\r\n obj.setValue(text);\r\n e.preventDefault();\r\n }\r\n\r\n /**\r\n * Processing event mouseup on the element\r\n * @param e {object}\r\n */\r\n var tagsMouseUp = function(e) {\r\n if (e.target.parentNode && e.target.parentNode.classList.contains('jtags')) {\r\n if (e.target.classList.contains('jtags_label') || e.target.classList.contains('jtags_error')) {\r\n const rect = e.target.getBoundingClientRect();\r\n if (rect.width - (e.clientX - rect.left) < 16) {\r\n el.removeChild(e.target);\r\n el.focus();\r\n }\r\n }\r\n }\r\n\r\n if (searchContainer) {\r\n searchContainer.style.display = '';\r\n }\r\n }\r\n\r\n /**\r\n * Processing event focus on the element\r\n * @param e {object}\r\n */\r\n var tagsFocus = function(e) {\r\n if (! el.children.length || obj.getValue(el.children.length - 1)) {\r\n if (! obj.options.limit || el.children.length < obj.options.limit) {\r\n var div = document.createElement('div');\r\n div.innerHTML = '
';\r\n el.appendChild(div);\r\n }\r\n }\r\n\r\n if (typeof(obj.options.onfocus) == 'function') {\r\n obj.options.onfocus(el, obj, obj.getValue());\r\n }\r\n }\r\n\r\n /**\r\n * Processing event blur on the element\r\n * @param e {object}\r\n */\r\n var tagsBlur = function(e) {\r\n if (searchContainer) {\r\n setTimeout(function() {\r\n searchContainer.style.display = '';\r\n }, 200);\r\n }\r\n\r\n for (var i = 0; i < el.children.length - 1; i++) {\r\n // Create label design\r\n if (! obj.getValue(i)) {\r\n el.removeChild(el.children[i]);\r\n }\r\n }\r\n\r\n if (typeof(obj.options.onblur) == 'function') {\r\n obj.options.onblur(el, obj, obj.getValue());\r\n }\r\n }\r\n\r\n // Bind events\r\n el.addEventListener('mouseup', tagsMouseUp);\r\n el.addEventListener('keydown', tagsKeyDown);\r\n el.addEventListener('keyup', tagsKeyUp);\r\n el.addEventListener('paste', tagsPaste);\r\n el.addEventListener('focus', tagsFocus);\r\n el.addEventListener('blur', tagsBlur);\r\n\r\n // Prepare container\r\n el.classList.add('jtags');\r\n el.setAttribute('contenteditable', true);\r\n el.setAttribute('spellcheck', false);\r\n\r\n if (obj.options.placeholder) {\r\n el.placeholder = obj.options.placeholder;\r\n }\r\n\r\n // Make sure element is empty\r\n if (obj.options.value) {\r\n obj.setValue(obj.options.value);\r\n } else {\r\n el.innerHTML = '

';\r\n }\r\n\r\n if (typeof(obj.options.onload) == 'function') {\r\n obj.options.onload(el, obj);\r\n }\r\n\r\n el.tags = obj;\r\n\r\n return obj;\r\n});\r\n\r\njSuites.tracker = (function(el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n url: null,\r\n message: 'Are you sure? There are unsaved information in your form',\r\n ignore: false,\r\n currentHash: null,\r\n submitButton:null,\r\n onload: null,\r\n onbeforesave: null,\r\n onsave: null,\r\n };\r\n\r\n // Loop through our object\r\n for (var property in defaults) {\r\n if (options && options.hasOwnProperty(property)) {\r\n obj.options[property] = options[property];\r\n } else {\r\n obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n obj.setUrl = function(url) {\r\n obj.options.url = url;\r\n }\r\n\r\n obj.load = function() {\r\n jSuites.ajax({\r\n url: obj.options.url,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function(data) {\r\n var elements = el.querySelectorAll(\"input, select, textarea\");\r\n \r\n for (var i = 0; i < elements.length; i++) {\r\n var name = elements[i].getAttribute('name');\r\n if (data[name]) {\r\n elements[i].value = data[name];\r\n }\r\n }\r\n\r\n if (typeof(obj.options.onload) == 'function') {\r\n obj.options.onload(el, data);\r\n }\r\n }\r\n });\r\n }\r\n\r\n obj.save = function() {\r\n var test = obj.validate();\r\n\r\n if (test) {\r\n jSuites.alert(test);\r\n } else {\r\n var data = obj.getElements(true);\r\n\r\n if (typeof(obj.options.onbeforesave) == 'function') {\r\n var data = obj.options.onbeforesave(el, data);\r\n\r\n if (data === false) {\r\n console.log('Onbeforesave returned false');\r\n return; \r\n }\r\n }\r\n\r\n jSuites.ajax({\r\n url: obj.options.url,\r\n method: 'POST',\r\n dataType: 'json',\r\n data: data,\r\n success: function(result) {\r\n jSuites.alert(result.message);\r\n\r\n if (typeof(obj.options.onsave) == 'function') {\r\n var data = obj.options.onsave(el, result);\r\n }\r\n\r\n obj.reset();\r\n }\r\n });\r\n }\r\n }\r\n\r\n obj.validateElement = function(element) {\r\n var emailChecker = function(data) {\r\n var pattern = new RegExp(/^([\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4})?$/);\r\n return pattern.test(data) ? true : false; \r\n }\r\n\r\n var passwordChecker = function(data) {\r\n return (data.length > 5) ? true : false;\r\n }\r\n\r\n var addError = function(element) {\r\n // Add error in the element\r\n element.classList.add('error');\r\n // Submit button\r\n if (obj.options.submitButton) {\r\n obj.options.submitButton.setAttribute('disabled', true);\r\n }\r\n // Return error message\r\n return element.getAttribute('data-error') || 'There is an error in the form';\r\n }\r\n\r\n var delError = function(element) {\r\n var error = false;\r\n // Remove class from this element\r\n element.classList.remove('error');\r\n // Get elements in the form\r\n var elements = el.querySelectorAll(\"input, select, textarea\");\r\n // Run all elements \r\n for (var i = 0; i < elements.length; i++) {\r\n if (elements[i].getAttribute('data-validation')) {\r\n if (elements[i].classList.contains('error')) {\r\n error = true;\r\n }\r\n }\r\n }\r\n\r\n if (obj.options.submitButton) {\r\n if (error) {\r\n obj.options.submitButton.setAttribute('disabled', true);\r\n } else {\r\n obj.options.submitButton.removeAttribute('disabled');\r\n }\r\n }\r\n }\r\n\r\n // Blank\r\n var test = '';\r\n if (! element.value) {\r\n test = addError(element);\r\n } else if (element.getAttribute('data-email') && ! emailChecker(element.value)) {\r\n test = addError(element);\r\n } else if (element.getAttribute('data-password') && ! emailChecker(element.value)) {\r\n test = addError(element);\r\n } else {\r\n if (element.classList.contains('error')) {\r\n delError(element);\r\n }\r\n }\r\n\r\n return test;\r\n }\r\n\r\n // Run form validation\r\n obj.validate = function() {\r\n var test = '';\r\n // Get elements in the form\r\n var elements = el.querySelectorAll(\"input, select, textarea\");\r\n // Run all elements \r\n for (var i = 0; i < elements.length; i++) {\r\n if (elements[i].getAttribute('data-validation')) {\r\n if (test) {\r\n test += \"
\\r\\n\";\r\n }\r\n test += obj.validateElement(elements[i]);\r\n }\r\n }\r\n return test;\r\n }\r\n\r\n // Check the form\r\n obj.getError = function() {\r\n // Validation\r\n return obj.validation() ? true : false;\r\n }\r\n\r\n // Return the form hash\r\n obj.setHash = function() {\r\n return obj.getHash(obj.getElements());\r\n }\r\n\r\n // Get the form hash\r\n obj.getHash = function(str) {\r\n var hash = 0, i, chr;\r\n\r\n if (str.length === 0) {\r\n return hash;\r\n } else {\r\n for (i = 0; i < str.length; i++) {\r\n chr = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + chr;\r\n hash |= 0;\r\n }\r\n }\r\n\r\n return hash;\r\n }\r\n\r\n // Is there any change in the form since start tracking?\r\n obj.isChanged = function() {\r\n var hash = obj.setHash();\r\n return (obj.options.currentHash != hash);\r\n }\r\n\r\n // Restart tracking\r\n obj.resetTracker = function() {\r\n obj.options.currentHash = obj.setHash();\r\n obj.options.ignore = false;\r\n }\r\n\r\n obj.reset = function() {\r\n obj.options.currentHash = obj.setHash();\r\n obj.options.ignore = false;\r\n }\r\n\r\n // Ignore flag\r\n obj.setIgnore = function(ignoreFlag) {\r\n obj.options.ignore = ignoreFlag ? true : false;\r\n }\r\n\r\n // Get form elements\r\n obj.getElements = function(asArray) {\r\n var data = {};\r\n var elements = el.querySelectorAll(\"input, select, textarea\");\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n var element = elements[i];\r\n var name = element.name;\r\n var value = element.value;\r\n\r\n if (name) {\r\n data[name] = value;\r\n }\r\n }\r\n\r\n return asArray == true ? data : JSON.stringify(data);\r\n }\r\n\r\n // Start tracking in one second\r\n setTimeout(function() {\r\n obj.options.currentHash = obj.setHash();\r\n }, 1000);\r\n\r\n // Alert\r\n window.addEventListener(\"beforeunload\", function (e) {\r\n if (obj.isChanged() && obj.options.ignore == false) {\r\n var confirmationMessage = obj.options.message? obj.options.message : \"\\o/\";\r\n\r\n if (confirmationMessage) {\r\n if (typeof e == 'undefined') {\r\n e = window.event;\r\n }\r\n\r\n if (e) {\r\n e.returnValue = confirmationMessage;\r\n }\r\n\r\n return confirmationMessage;\r\n } else {\r\n return void(0);\r\n }\r\n }\r\n });\r\n\r\n // Validations\r\n el.addEventListener(\"keyup\", function(e) {\r\n if (e.target.getAttribute('data-validation')) {\r\n obj.validateElement(e.target);\r\n }\r\n });\r\n\r\n el.tracker = obj;\r\n\r\n return obj;\r\n});\r\n\r\n\r\n\r\n return jSuites;\r\n\r\n})));","\r\n/**\r\n * jExcel v3.9.1\r\n *\r\n * Author: Paul Hodel \r\n * Website: https://bossanova.uk/jexcel/\r\n * Description: Create amazing web based spreadsheets.\r\n *\r\n * This software is distribute under MIT License\r\n */\r\n\r\n if (! jSuites && typeof(require) === 'function') {\r\n var jSuites = require('jsuites');\r\n require('jsuites/dist/jsuites.css');\r\n}\r\n\r\n;(function (global, factory) {\r\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n typeof define === 'function' && define.amd ? define(factory) :\r\n global.jexcel = factory();\r\n}(this, (function () {\r\n\r\n 'use strict';\r\n\r\n// Jexcel core object\n\nvar jexcel = (function(el, options) {\n // Create jexcel object\n var obj = {};\n obj.options = {};\n\n if (! (el instanceof Element || el instanceof HTMLDocument)) {\r\n console.error('JEXCEL: el is not a valid DOM element');\r\n return false;\r\n }\r\n\n // Loading default configuration\n var defaults = {\n // External data\n url:null,\n // Data\n data:null,\n // Copy behavior\n copyCompatibility:false,\n // Rows and columns definitions\n rows:[],\n columns:[],\n // Deprected legacy options\n colHeaders:[],\n colWidths:[],\n colAlignments:[],\n nestedHeaders:null,\n // Column width that is used by default\n defaultColWidth:50,\n defaultColAlign:'center',\n // Spare rows and columns\n minSpareRows:0,\n minSpareCols:0,\n // Minimal table dimensions\n minDimensions:[0,0],\n // Allow Export\n allowExport:true,\r\n // @type {boolean} - Include the header titles on download\n includeHeadersOnDownload:false,\n // Allow column sorting\n columnSorting:true,\n // Allow column dragging\n columnDrag:false,\n // Allow column resizing\n columnResize:true,\n // Allow row resizing\n rowResize:false,\n // Allow row dragging\n rowDrag:true,\n // Allow table edition\n editable:true,\n // Allow new rows\n allowInsertRow:true,\n // Allow new rows\n allowManualInsertRow:true,\n // Allow new columns\n allowInsertColumn:true,\n // Allow new rows\n allowManualInsertColumn:true,\n // Allow row delete\n allowDeleteRow:true,\n // Allow deleting of all rows\n allowDeletingAllRows:false,\n // Allow column delete\n allowDeleteColumn:true,\n // Allow rename column\n allowRenameColumn:true,\n // Allow comments\n allowComments:false,\n // Global wrap\n wordWrap:false,\n // Image options\n imageOptions: null,\n // CSV source\n csv:null,\n // Filename\n csvFileName:'jexcel',\n // Consider first line as header\n csvHeaders:true,\n // Delimiters\n csvDelimiter:',',\n // Disable corner selection\n selectionCopy:true,\n // Merged cells\n mergeCells:{},\n // Create toolbar\n toolbar:null,\n // Allow search\n search:false,\n // Create pagination\n pagination:false,\n paginationOptions:null,\n // Full screen\n fullscreen:false,\n // Lazy loading\n lazyLoading:false,\n loadingSpin:false,\n // Table overflow\n tableOverflow:false,\n tableHeight:'300px',\n tableWidth:null,\n // Meta\n meta: null,\n // Style\n style:null,\n // Execute formulas\n parseFormulas:true,\n autoIncrement:true,\n autoCasting:true,\n // Event handles\n onundo:null,\n onredo:null,\n onload:null,\n onchange:null,\n onbeforechange:null,\n onafterchanges:null,\n onbeforeinsertrow: null,\n oninsertrow:null,\n onbeforeinsertcolumn: null,\n oninsertcolumn:null,\n onbeforedeleterow:null,\n ondeleterow:null,\n onbeforedeletecolumn:null,\n ondeletecolumn:null,\n onmoverow:null,\n onmovecolumn:null,\n onresizerow:null,\n onresizecolumn:null,\n onsort:null,\n onselection:null,\n onpaste:null,\n onbeforepaste:null,\n onmerge:null,\n onfocus:null,\n onblur:null,\n onchangeheader:null,\n oneditionstart:null,\n oneditionend:null,\n onchangestyle:null,\n onchangemeta:null,\n onchangepage:null,\n // Customize any cell behavior\n updateTable:null,\n // Detach the HTML table when calling updateTable\r\n detachForUpdates: false,\n // Texts\n text:{\n noRecordsFound: 'No records found',\n showingPage: 'Showing page {0} of {1} entries',\n show: 'Show ',\n search: 'Search',\n entries: ' entries',\n columnName: 'Column name',\n insertANewColumnBefore: 'Insert a new column before',\n insertANewColumnAfter: 'Insert a new column after',\n deleteSelectedColumns: 'Delete selected columns',\n renameThisColumn: 'Rename this column',\n orderAscending: 'Order ascending',\n orderDescending: 'Order descending',\n insertANewRowBefore: 'Insert a new row before',\n insertANewRowAfter: 'Insert a new row after',\n deleteSelectedRows: 'Delete selected rows',\n editComments: 'Edit comments',\n addComments: 'Add comments',\n comments: 'Comments',\n clearComments: 'Clear comments',\n copy: 'Copy...',\n paste: 'Paste...',\n saveAs: 'Save as...',\n about: 'About',\n areYouSureToDeleteTheSelectedRows: 'Are you sure to delete the selected rows?',\n areYouSureToDeleteTheSelectedColumns: 'Are you sure to delete the selected columns?',\n thisActionWillDestroyAnyExistingMergedCellsAreYouSure: 'This action will destroy any existing merged cells. Are you sure?',\n thisActionWillClearYourSearchResultsAreYouSure: 'This action will clear your search results. Are you sure?',\n thereIsAConflictWithAnotherMergedCell: 'There is a conflict with another merged cell',\n invalidMergeProperties: 'Invalid merged properties',\n cellAlreadyMerged: 'Cell already merged',\n noCellsSelected: 'No cells selected',\n },\n // About message\n about:\"jExcel CE Spreadsheet\\nVersion 3.9.1\\nAuthor: Paul Hodel \\nWebsite: https://bossanova.uk/jexcel/v3\",\n };\n\n // Loading initial configuration from user\n for (var property in defaults) {\n if (options && options.hasOwnProperty(property)) {\n if (property === 'text') {\r\n obj.options[property] = defaults[property];\r\n for (var textKey in options[property]) {\r\n if (options[property].hasOwnProperty(textKey)){\r\n obj.options[property][textKey] = options[property][textKey];\r\n }\r\n }\r\n } else {\r\n obj.options[property] = options[property];\n }\n } else {\n obj.options[property] = defaults[property];\n }\n }\n\n // Global elements\n obj.el = el;\n obj.corner = null;\n obj.contextMenu = null;\n obj.textarea = null;\n obj.ads = null;\n obj.content = null;\n obj.table = null;\n obj.thead = null;\n obj.tbody = null;\n obj.rows = [];\n obj.results = null;\n obj.searchInput = null;\n obj.toolbar = null;\n obj.pagination = null;\n obj.pageNumber = null;\n obj.headerContainer = null;\n obj.colgroupContainer = null;\n\n // Containers\n obj.headers = [];\n obj.records = [];\n obj.history = [];\n obj.formula = [];\n obj.colgroup = [];\n obj.selection = [];\n obj.highlighted = [];\n obj.selectedCell = null;\n obj.selectedContainer = null;\n obj.style = [];\n obj.data = null;\n\n // Internal controllers\n obj.cursor = null;\n obj.historyIndex = -1;\n obj.ignoreEvents = false;\n obj.ignoreHistory = false;\n obj.edition = null;\n obj.hashString = null;\n obj.resizing = null;\n obj.dragging = null;\n\n // Lazy loading\n if (obj.options.lazyLoading == true && (obj.options.tableOverflow == false && obj.options.fullscreen == false)) {\n console.error('JEXCEL: The lazyloading only works when tableOverflow = yes or fullscreen = yes');\n obj.options.lazyLoading = false;\n }\n \n /**\n * Activate/Disable fullscreen \n * use programmatically : table.fullscreen(); or table.fullscreen(true); or table.fullscreen(false);\n * @Param {boolean} activate\n */\n obj.fullscreen = function(activate) {\n // If activate not defined, get reverse options.fullscreen\n if (activate == null) {\n activate = ! obj.options.fullscreen;\n }\n\n // If change\n if (obj.options.fullscreen != activate) {\n obj.options.fullscreen = activate;\n\n // Test LazyLoading conflict\n if (activate == true) {\n el.classList.add('fullscreen');\n } else {\n el.classList.remove('fullscreen');\n }\n } \n }\n\n /**\n * Prepare the jexcel table\n * \n * @Param config\n */\n obj.prepareTable = function() {\n // Loading initial data from remote sources\n var results = [];\n\n // Number of columns\n var size = obj.options.columns.length;\n\n if (obj.options.data && typeof(obj.options.data[0]) !== 'undefined') {\n // Data keys\n var keys = Object.keys(obj.options.data[0]);\n\n if (keys.length > size) {\n size = keys.length;\n }\n }\n\n // Minimal dimensions\n if (obj.options.minDimensions[0] > size) {\n size = obj.options.minDimensions[0];\n }\n\n // Requests\n var multiple = [];\n\n // Preparations\n for (var i = 0; i < size; i++) {\n // Deprected options. You should use only columns\n if (! obj.options.colHeaders[i]) {\n obj.options.colHeaders[i] = '';\n }\n if (! obj.options.colWidths[i]) {\n obj.options.colWidths[i] = obj.options.defaultColWidth;\n }\n if (! obj.options.colAlignments[i]) {\n obj.options.colAlignments[i] = obj.options.defaultColAlign;\n }\n\n // Default column description\n if (! obj.options.columns[i]) {\n obj.options.columns[i] = { type:'text' };\n } else if (! obj.options.columns[i].type) {\n obj.options.columns[i].type = 'text';\n }\n if (! obj.options.columns[i].name) {\n obj.options.columns[i].name = keys && keys[i] ? keys[i] : i;\n }\n if (! obj.options.columns[i].source) {\n obj.options.columns[i].source = [];\n }\n if (! obj.options.columns[i].options) {\n obj.options.columns[i].options = [];\n }\n if (! obj.options.columns[i].editor) {\n obj.options.columns[i].editor = null;\n }\n if (! obj.options.columns[i].allowEmpty) {\n obj.options.columns[i].allowEmpty = false;\n }\n if (! obj.options.columns[i].title) {\n obj.options.columns[i].title = obj.options.colHeaders[i] ? obj.options.colHeaders[i] : '';\n }\n if (! obj.options.columns[i].width) {\n obj.options.columns[i].width = obj.options.colWidths[i] ? obj.options.colWidths[i] : obj.options.defaultColWidth;\n }\n if (! obj.options.columns[i].align) {\n obj.options.columns[i].align = obj.options.colAlignments[i] ? obj.options.colAlignments[i] : 'center';\n }\n\n // Pre-load initial source for json autocomplete\n if (obj.options.columns[i].type == 'autocomplete' || obj.options.columns[i].type == 'dropdown') {\n // if remote content\n if (obj.options.columns[i].url) {\n multiple.push(jSuites.ajax({\n url: obj.options.columns[i].url,\n index: i,\n method: 'GET',\n dataType: 'json',\n multiple: multiple,\n success: function(data) {\n var source = [];\n for (var i = 0; i < data.length; i++) {\n obj.options.columns[this.index].source.push(data[i]);\n }\n },\n complete: function() {\n obj.createTable();\n }\n }));\n }\n } else if (obj.options.columns[i].type == 'calendar') {\n // Default format for date columns\n if (! obj.options.columns[i].options.format) {\n obj.options.columns[i].options.format = 'DD/MM/YYYY';\n }\n }\n }\n\n // On complete\n if (! multiple.length) {\n obj.createTable();\n }\n }\n\n obj.createTable = function() {\n // Elements\n obj.table = document.createElement('table');\n obj.thead = document.createElement('thead');\n obj.tbody = document.createElement('tbody');\n\n // Create headers controllers\n obj.headers = [];\n obj.colgroup = [];\n\n // Create table container\n obj.content = document.createElement('div');\n obj.content.classList.add('jexcel_content');\n\n // Create toolbar object\n obj.toolbar = document.createElement('div');\n obj.toolbar.classList.add('jexcel_toolbar');\n\n // Search\n var searchContainer = document.createElement('div');\n var searchText = document.createTextNode((obj.options.text.search) + ': ');\n obj.searchInput = document.createElement('input');\n obj.searchInput.classList.add('jexcel_search');\n searchContainer.appendChild(searchText);\n searchContainer.appendChild(obj.searchInput);\n obj.searchInput.onfocus = function() {\n obj.resetSelection();\n }\n\n // Pagination select option\n var paginationUpdateContainer = document.createElement('div');\n\n if (obj.options.pagination > 0 && obj.options.paginationOptions && obj.options.paginationOptions.length > 0) {\n obj.paginationDropdown = document.createElement('select');\n obj.paginationDropdown.classList.add('jexcel_pagination_dropdown');\n obj.paginationDropdown.onchange = function() {\n obj.options.pagination = parseInt(this.value);\n obj.page(0);\n }\n\n for (var i = 0; i < obj.options.paginationOptions.length; i++) {\n var temp = document.createElement('option');\n temp.value = obj.options.paginationOptions[i];\n temp.innerHTML = obj.options.paginationOptions[i];\n obj.paginationDropdown.appendChild(temp);\n }\n\n paginationUpdateContainer.appendChild(document.createTextNode(obj.options.text.show));\n paginationUpdateContainer.appendChild(obj.paginationDropdown);\n paginationUpdateContainer.appendChild(document.createTextNode(obj.options.text.entries));\n }\n\n // Filter and pagination container\n obj.filter = document.createElement('div');\n obj.filter.classList.add('jexcel_filter');\n obj.filter.appendChild(paginationUpdateContainer);\n obj.filter.appendChild(searchContainer);\n\n // Colsgroup\n obj.colgroupContainer = document.createElement('colgroup');\n var tempCol = document.createElement('col');\n tempCol.setAttribute('width', '50');\n obj.colgroupContainer.appendChild(tempCol);\n\n // Nested\n if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) {\n // Flexible way to handle nestedheaders\n if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) {\n for (var j = 0; j < obj.options.nestedHeaders.length; j++) {\n obj.thead.appendChild(obj.createNestedHeader(obj.options.nestedHeaders[j]));\n }\n } else {\n obj.thead.appendChild(obj.createNestedHeader(obj.options.nestedHeaders));\n }\n }\n\n // Row\n obj.headerContainer = document.createElement('tr');\n var tempCol = document.createElement('td');\n tempCol.classList.add('jexcel_selectall');\n obj.headerContainer.appendChild(tempCol);\n\n for (var i = 0; i < obj.options.columns.length; i++) {\n // Create header\n obj.createCellHeader(i);\n // Append cell to the container\n obj.headerContainer.appendChild(obj.headers[i]);\n obj.colgroupContainer.appendChild(obj.colgroup[i]);\n }\n\n obj.thead.appendChild(obj.headerContainer);\n\n // Content table\n obj.table = document.createElement('table');\n obj.table.classList.add('jexcel');\n obj.table.setAttribute('cellpadding', '0');\n obj.table.setAttribute('cellspacing', '0');\n obj.table.setAttribute('unselectable', 'yes');\n obj.table.setAttribute('onselectstart', 'return false');\n obj.table.appendChild(obj.colgroupContainer);\n obj.table.appendChild(obj.thead);\n obj.table.appendChild(obj.tbody);\n\n // Spreadsheet corner\n obj.corner = document.createElement('div');\n obj.corner.className = 'jexcel_corner';\n obj.corner.setAttribute('unselectable', 'on');\n obj.corner.setAttribute('onselectstart', 'return false');\n\n if (obj.options.selectionCopy == false) {\n obj.corner.style.display = 'none';\n }\n\n // Textarea helper\n obj.textarea = document.createElement('textarea');\n obj.textarea.className = 'jexcel_textarea';\n obj.textarea.id = 'jexcel_textarea';\n obj.textarea.tabIndex = '-1';\r\n\n // Contextmenu container\n obj.contextMenu = document.createElement('div');\n obj.contextMenu.className = 'jexcel_contextmenu';\n\n // Create element\n jSuites.contextmenu(obj.contextMenu, {\n onclick:function() {\n obj.contextMenu.contextmenu.close(false);\n }\n });\n\n // Powered by jExcel\r\n var ads = document.createElement('a');\r\n ads.setAttribute('href', 'https://bossanova.uk/jexcel/');\r\n obj.ads = document.createElement('div');\r\n obj.ads.className = 'jexcel_about';\r\n if (typeof(sessionStorage) !== \"undefined\" && ! sessionStorage.getItem('jexcel')) {\r\n sessionStorage.setItem('jexcel', true);\r\n var img = document.createElement('img');\r\n img.src = '//bossanova.uk/jexcel/logo.png';\r\n ads.appendChild(img);\r\n }\r\n var span = document.createElement('span');\r\n span.innerHTML = 'Jexcel spreadsheet';\r\n ads.appendChild(span);\r\n obj.ads.appendChild(ads);\n\n // Create table container TODO: frozen columns\n var container = document.createElement('div');\n container.classList.add('jexcel_table');\n\n // Pagination\n obj.pagination = document.createElement('div');\n obj.pagination.classList.add('jexcel_pagination');\n var paginationInfo = document.createElement('div');\n var paginationPages = document.createElement('div');\n obj.pagination.appendChild(paginationInfo);\n obj.pagination.appendChild(paginationPages);\n\n // Hide pagination if not in use\r\n if (! obj.options.pagination) {\r\n obj.pagination.style.display = 'none';\r\n }\r\n\n // Append containers to the table\n if (obj.options.search == true) {\n el.appendChild(obj.filter);\n }\n\n // Elements\n obj.content.appendChild(obj.table);\n obj.content.appendChild(obj.corner);\n obj.content.appendChild(obj.textarea);\n\n el.appendChild(obj.toolbar);\n el.appendChild(obj.content);\n el.appendChild(obj.pagination);\n el.appendChild(obj.contextMenu);\n el.appendChild(obj.ads);\n el.classList.add('jexcel_container');\n\n // Create toolbar\n if (obj.options.toolbar && obj.options.toolbar.length) {\n obj.createToolbar();\n }\n\n // Fullscreen\n if (obj.options.fullscreen == true) {\n el.classList.add('fullscreen');\n } else {\n // Overflow\n if (obj.options.tableOverflow == true) {\n if (obj.options.tableHeight) {\n obj.content.style['overflow-y'] = 'auto';\n obj.content.style.maxHeight = obj.options.tableHeight;\n }\n if (obj.options.tableWidth) {\n obj.content.style['overflow-x'] = 'auto';\n obj.content.style.width = obj.options.tableWidth;\n }\n }\n }\n\n // With toolbars\n if (obj.options.tableOverflow != true && obj.options.toolbar) {\n el.classList.add('with-toolbar');\n }\n\n // Actions\n if (obj.options.columnDrag == true) {\n obj.thead.classList.add('draggable');\n }\n if (obj.options.columnResize == true) {\n obj.thead.classList.add('resizable');\n }\n if (obj.options.rowDrag == true) {\n obj.tbody.classList.add('draggable');\n }\n if (obj.options.rowResize == true) {\n obj.tbody.classList.add('resizable');\n }\n\n // Load data\n obj.setData();\n\n // Style\n if (obj.options.style) {\n obj.setStyle(obj.options.style, null, null, 1, 1);\n }\n }\n\r\n /**\r\n * Refresh the data\r\n * \r\n * @return void\r\n */\r\n obj.refresh = function() {\r\n if (obj.options.url) {\r\n // Loading\r\n if (obj.options.loadingSpin == true) {\r\n jSuites.loading.show();\r\n }\r\n\r\n jSuites.ajax({\r\n url: obj.options.url,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function(result) {\r\n // Data\r\n obj.options.data = (result.data) ? result.data : result;\r\n // Prepare table\r\n obj.setData();\r\n // Hide spin\r\n if (obj.options.loadingSpin == true) {\r\n jSuites.loading.hide();\r\n }\r\n }\r\n });\r\n } else {\r\n obj.setData();\r\n }\r\n }\r\n\n /**\n * Set data\n * \n * @param array data In case no data is sent, default is reloaded\n * @return void\n */\n obj.setData = function(data) {\n // Update data\n if (data) {\n if (typeof(data) == 'string') {\n data = JSON.parse(data);\n }\n\n obj.options.data = data;\n }\n\n // Data\n if (! obj.options.data) {\n obj.options.data = [];\n }\n\n // Prepare data\n if (obj.options.data) {\n var data = [];\n for (var j = 0; j < obj.options.data.length; j++) {\n var row = [];\n for (var i = 0; i < obj.options.columns.length; i++) {\n row[i] = obj.options.data[j][obj.options.columns[i].name];\n }\n data.push(row);\n }\n\n obj.options.data = data;\n }\n\n // Adjust minimal dimensions\n var j = 0;\n var i = 0;\n var size_i = obj.options.columns.length;\n var size_j = obj.options.data.length;\n var min_i = obj.options.minDimensions[0];\n var min_j = obj.options.minDimensions[1];\n var max_i = min_i > size_i ? min_i : size_i;\n var max_j = min_j > size_j ? min_j : size_j;\n\n for (j = 0; j < max_j; j++) {\n for (i = 0; i < max_i; i++) {\n if (obj.options.data[j] == undefined) {\n obj.options.data[j] = [];\n }\n\n if (obj.options.data[j][i] == undefined) {\n obj.options.data[j][i] = '';\n }\n }\n }\n\n // Reset containers\n obj.rows = [];\n obj.results = null;\n obj.records = [];\n obj.history = [];\n\n // Reset internal controllers\n obj.historyIndex = -1;\n\n // Reset data\n obj.tbody.innerHTML = '';\n\n // Lazy loading\n if (obj.options.lazyLoading == true) {\n // Load only 100 records\n var startNumber = 0\n var finalNumber = obj.options.data.length < 100 ? obj.options.data.length : 100;\n\n if (obj.options.pagination) {\n obj.options.pagination = false;\n console.error('JEXCEL: Pagination will be disable due the lazyLoading');\n }\n } else if (obj.options.pagination) {\n // Pagination\n if (! obj.pageNumber) {\n obj.pageNumber = 0;\n }\n var quantityPerPage = obj.options.pagination;\n startNumber = (obj.options.pagination * obj.pageNumber);\n finalNumber = (obj.options.pagination * obj.pageNumber) + obj.options.pagination;\n\n if (obj.options.data.length < finalNumber) {\n finalNumber = obj.options.data.length;\n }\n } else {\n var startNumber = 0;\n var finalNumber = obj.options.data.length;\n }\n\n // Append nodes to the HTML\n for (j = 0; j < obj.options.data.length; j++) {\n // Create row\n var tr = obj.createRow(j, obj.options.data[j]);\n // Append line to the table\n if (j >= startNumber && j < finalNumber) {\n obj.tbody.appendChild(tr);\n }\n }\n\n if (obj.options.lazyLoading == true) {\n // Do not create pagination with lazyloading activated\n } else if (obj.options.pagination) {\n obj.updatePagination();\n }\n\n // Merge cells\n if (obj.options.mergeCells) {\n var keys = Object.keys(obj.options.mergeCells);\n for (var i = 0; i < keys.length; i++) {\n var num = obj.options.mergeCells[keys[i]];\n obj.setMerge(keys[i], num[0], num[1], 1);\n }\n }\n\n // Updata table with custom configurations if applicable\n obj.updateTable();\n\n // Onload\n if (! obj.ignoreEvents) {\n if (typeof(obj.options.onload) == 'function') {\n obj.options.onload(el, obj);\n }\n }\n }\n\n /**\n * Get the whole table data\n * \n * @param bool get highlighted cells only\n * @return array data\n */\n obj.getData = function(highlighted, dataOnly) {\n // Control vars\n var dataset = [];\n var px = 0;\n var py = 0;\n\n // Data type\r\n var dataType = dataOnly == true || obj.options.copyCompatibility == false ? true : false;\r\n\n // Column and row length\n var x = obj.options.columns.length\n var y = obj.options.data.length\n\n // Go through the columns to get the data\n for (var j = 0; j < y; j++) {\n px = 0;\n for (var i = 0; i < x; i++) {\n // Cell selected or fullset\n if (! highlighted || obj.records[j][i].classList.contains('highlight')) {\n // Get value\n if (! dataset[py]) {\n dataset[py] = [];\n }\n if (! dataType) {\n dataset[py][px] = obj.records[j][i].innerHTML;\n } else {\n dataset[py][px] = obj.options.data[j][i];\n }\n px++;\n }\n }\n if (px > 0) {\n py++;\n }\n }\n\n return dataset;\n }\n\n /**\n * Get the whole table data\n * \n * @param integer row number\n * @return string value\n */\n obj.getJson = function(highlighted) {\n // Control vars\n var data = [];\n\n // Column and row length\n var x = obj.options.columns.length\n var y = obj.options.data.length\n\n // Go through the columns to get the data\n for (var j = 0; j < y; j++) {\n var row = null;\n for (var i = 0; i < x; i++) {\n if (! highlighted || obj.records[j][i].classList.contains('highlight')) {\n if (row == null) {\n row = {};\n }\n row[obj.options.columns[i].name] = obj.options.data[j][i];\n }\n }\n\n if (row != null) {\n data.push(row);\n }\n }\n\n return data;\n }\n\n /**\n * Get a row data by rowNumber\n */\n obj.getRowData = function(rowNumber) {\n return obj.options.data[rowNumber];\n }\n\n /**\n * Set a row data by rowNumber\n */\n obj.setRowData = function(rowNumber, data) {\n for (var i = 0; i < obj.headers.length; i++) {\n // Update cell\n var columnName = jexcel.getColumnNameFromId([ i, rowNumber ]);\n // Set value\n if (data[i] != null) {\n obj.setValue(columnName, data[i]);\n }\n }\n }\n\n /**\n * Get a column data by columnNumber\n */\n obj.getColumnData = function(columnNumber) {\n var dataset = [];\n // Go through the rows to get the data\n for (var j = 0; j < obj.options.data.length; j++) {\n dataset.push(obj.options.data[j][columnNumber]);\n }\n return dataset;\n }\n\n /**\n * Set a column data by colNumber\n */\n obj.setColumnData = function(colNumber, data) {\n for (var j = 0; j < obj.rows.length; j++) {\n // Update cell\n var columnName = jexcel.getColumnNameFromId([ colNumber, j ]);\n // Set value\n if (data[j] != null) {\n obj.setValue(columnName, data[j]);\n }\n }\n }\n\n /**\n * Create row\n */\n obj.createRow = function(j, data) {\n // Create container\n if (! obj.records[j]) {\n obj.records[j] = [];\n }\n // Default data\n if (! data) {\n var data = obj.options.data[j];\n }\n // New line of data to be append in the table\n obj.rows[j] = document.createElement('tr');\n obj.rows[j].setAttribute('data-y', j);\n // Definitions\n if (obj.options.rows[j]) {\n if (obj.options.rows[j].height) {\n obj.rows[j].style.height = obj.options.rows[j].height;\n }\n }\n // Row number label\n var td = document.createElement('td');\n td.innerHTML = parseInt(j + 1);\n td.setAttribute('data-y', j);\n td.className = 'jexcel_row';\n obj.rows[j].appendChild(td);\n\n // Data columns\n for (i = 0; i < obj.options.columns.length; i++) {\n // New column of data to be append in the line\n obj.records[j][i] = obj.createCell(i, j, data[i]);\n // Add column to the row\n obj.rows[j].appendChild(obj.records[j][i]);\n }\n\n // Add row to the table body\n return obj.rows[j];\n }\n\n /**\n * Create cell\n */\n obj.createCell = function(i, j, value) {\n // Create cell and properties\n var td = document.createElement('td');\n td.setAttribute('data-x', i);\n td.setAttribute('data-y', j);\n // Hidden column\n if (obj.options.columns[i].type == 'hidden') {\n td.style.display = 'none';\n td.innerHTML = value;\n } else if (obj.options.columns[i].type == 'checkbox' || obj.options.columns[i].type == 'radio') {\n // Create input\n var element = document.createElement('input');\n element.type = obj.options.columns[i].type;\n element.name = 'c' + i;\n element.checked = (value == 1 || value == true || value == 'true') ? true : false;\n element.onclick = function() {\n obj.setValue(td, this.checked);\n }\n\n if (obj.options.columns[i].readOnly == true) {\n element.setAttribute('disabled', 'disabled');\n }\n\n // Append to the table\n td.appendChild(element);\n // Make sure the values are correct\n obj.options.data[j][i] = element.checked;\n } else if (obj.options.columns[i].type == 'calendar') {\n // Try formatted date\n var formatted = jSuites.calendar.extractDateFromString(value, obj.options.columns[i].options.format);\n // Create calendar cell\n td.innerHTML = jSuites.calendar.getDateString(formatted ? formatted : value, obj.options.columns[i].options.format);\n } else if (obj.options.columns[i].type == 'dropdown' || obj.options.columns[i].type == 'autocomplete') {\n // Create dropdown cell\n td.classList.add('jexcel_dropdown');\n td.innerHTML = obj.getDropDownValue(i, value);\n } else if (obj.options.columns[i].type == 'color') {\n if (obj.options.columns[i].render == 'square') {\n var color = document.createElement('div');\n color.className = 'color';\n color.style.backgroundColor = value;\n td.appendChild(color);\n } else {\n td.style.color = value;\n td.innerHTML = value;\n }\n } else if (obj.options.columns[i].type == 'image') {\n if (value && value.substr(0, 10) == 'data:image') {\n var img = document.createElement('img');\n img.src = value;\n td.appendChild(img);\n }\n } else {\n if ((''+value).substr(0,1) == '=' && obj.options.parseFormulas == true) {\n value = obj.executeFormula(value, i, j)\n }\n if (obj.options.columns[i].mask) {\n var decimal = obj.options.columns[i].decimal || '.';\n value = '' + jSuites.mask.run(value, obj.options.columns[i].mask, decimal);\n }\n\n td.innerHTML = value;\n }\n\n // Readonly\n if (obj.options.columns[i].readOnly == true) {\n td.className = 'readonly';\n }\n\n // Text align\n var colAlign = obj.options.columns[i].align ? obj.options.columns[i].align : 'center';\n td.style.textAlign = colAlign;\n\n // Wrap option\n if (obj.options.columns[i].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[i].wordWrap == true || td.innerHTML.length > 200)) {\n td.style.whiteSpace = 'pre-wrap';\n }\n\n // Overflow\n if (i > 0) {\n if (value || td.innerHTML) {\n obj.records[j][i-1].style.overflow = 'hidden';\n } else {\n if (i == obj.options.columns.length - 1) {\n td.style.overflow = 'hidden';\n }\n }\n }\n\n return td;\n }\n\n obj.createCellHeader = function(colNumber) {\n // Create col global control\n var colWidth = obj.options.columns[colNumber].width ? obj.options.columns[colNumber].width : obj.options.defaultColWidth;\n var colAlign = obj.options.columns[colNumber].align ? obj.options.columns[colNumber].align : obj.options.defaultColAlign;\n\n // Create header cell\n obj.headers[colNumber] = document.createElement('td');\n obj.headers[colNumber].innerHTML = obj.options.columns[colNumber].title ? obj.options.columns[colNumber].title : jexcel.getColumnName(colNumber);\n obj.headers[colNumber].setAttribute('data-x', colNumber);\n obj.headers[colNumber].style.textAlign = colAlign;\n if (obj.options.columns[colNumber].title) {\n obj.headers[colNumber].setAttribute('title', obj.options.columns[colNumber].title);\n }\n\n // Width control\n obj.colgroup[colNumber] = document.createElement('col');\n obj.colgroup[colNumber].setAttribute('width', colWidth);\n\n // Hidden column\n if (obj.options.columns[colNumber].type == 'hidden') {\n obj.headers[colNumber].style.display = 'none';\n obj.colgroup[colNumber].style.display = 'none';\n }\n }\n\n obj.createNestedHeader = function(nestedInformation) {\n var tr = document.createElement('tr');\n tr.classList.add('jexcel_nested');\n var td = document.createElement('td');\n tr.appendChild(td);\n\n var headerIndex = 0;\n for (var i = 0; i < nestedInformation.length; i++) {\n // Default values\n if (! nestedInformation[i].colspan) {\n nestedInformation[i].colspan = 1;\n }\n if (! nestedInformation[i].align) {\n nestedInformation[i].align = 'center';\n }\n if (! nestedInformation[i].title) {\n nestedInformation[i].title = '';\n }\n\n // Number of columns\n var numberOfColumns = nestedInformation[i].colspan;\n\n // Classes container\n var column = [];\n // Header classes for this cell\n for (var x = 0; x < numberOfColumns; x++) {\n if (obj.options.columns[headerIndex] && obj.options.columns[headerIndex].type == 'hidden') {\n numberOfColumns++;\n }\n column.push(headerIndex);\n headerIndex++;\n }\n\n // Created the nested cell\n var td = document.createElement('td');\n td.setAttribute('data-column', column.join(','));\n td.setAttribute('colspan', nestedInformation[i].colspan);\n td.setAttribute('align', nestedInformation[i].align);\n td.innerHTML = nestedInformation[i].title;\n tr.appendChild(td);\n }\n\n return tr;\n }\n\n /**\n * Create toolbar\n */\n obj.createToolbar = function(toolbar) {\n if (toolbar) {\n obj.options.toolbar = toolbar;\n } else {\n var toolbar = obj.options.toolbar;\n }\n\n for (var i = 0; i < toolbar.length; i++) {\n if (toolbar[i].type == 'i') {\n var toolbarItem = document.createElement('i');\n toolbarItem.classList.add('jexcel_toolbar_item');\n toolbarItem.classList.add('material-icons');\n toolbarItem.setAttribute('data-k', toolbar[i].k);\n toolbarItem.setAttribute('data-v', toolbar[i].v);\n // Tooltip\n if (toolbar[i].tooltip) {\n toolbarItem.setAttribute('title', toolbar[i].tooltip);\n }\n // Handle click\n if (toolbar[i].onclick && typeof(toolbar[i].onclick)) {\n toolbarItem.onclick = toolbar[i].onclick;\n } else {\n toolbarItem.onclick = function() {\n var k = this.getAttribute('data-k');\n var v = this.getAttribute('data-v');\n obj.setStyle(obj.highlighted, k, v);\n }\n }\n // Append element\n toolbarItem.innerHTML = toolbar[i].content;\n obj.toolbar.appendChild(toolbarItem);\n } else if (toolbar[i].type == 'select') {\n var toolbarItem = document.createElement('select');\n toolbarItem.classList.add('jexcel_toolbar_item');\n toolbarItem.setAttribute('data-k', toolbar[i].k);\n // Tooltip\n if (toolbar[i].tooltip) {\n toolbarItem.setAttribute('title', toolbar[i].tooltip);\n }\n // Handle onchange\n if (toolbar[i].onchange && typeof(toolbar[i].onchange)) {\n toolbarItem.onchange = toolbar[i].onchange;\n } else {\n toolbarItem.onchange = function() {\n var k = this.getAttribute('data-k');\n obj.setStyle(obj.highlighted, k, this.value);\n }\n }\n // Add options to the dropdown\n for(var j = 0; j < toolbar[i].v.length; j++) {\n var toolbarDropdownOption = document.createElement('option');\n toolbarDropdownOption.value = toolbar[i].v[j];\n toolbarDropdownOption.innerHTML = toolbar[i].v[j];\n toolbarItem.appendChild(toolbarDropdownOption);\n }\n obj.toolbar.appendChild(toolbarItem);\n } else if (toolbar[i].type == 'color') {\n var toolbarItem = document.createElement('i');\n toolbarItem.classList.add('jexcel_toolbar_item');\n toolbarItem.classList.add('material-icons');\n toolbarItem.setAttribute('data-k', toolbar[i].k);\n toolbarItem.setAttribute('data-v', '');\n // Tooltip\n if (toolbar[i].tooltip) {\n toolbarItem.setAttribute('title', toolbar[i].tooltip);\n }\n obj.toolbar.appendChild(toolbarItem);\n toolbarItem.onclick = function() {\n this.color.open();\n }\n toolbarItem.innerHTML = toolbar[i].content;\n jSuites.color(toolbarItem, {\n onchange:function(o, v) {\n var k = o.getAttribute('data-k');\n obj.setStyle(obj.highlighted, k, v);\n }\n });\n }\n }\n }\n\n /**\n * Merge cells\n * @param cellName\n * @param colspan\n * @param rowspan\n * @param ignoreHistoryAndEvents\n */\n obj.setMerge = function(cellName, colspan, rowspan, ignoreHistoryAndEvents) {\n var test = false;\n\n if (! cellName) {\n if (! obj.highlighted.length) {\n alert(obj.options.text.noCellsSelected);\n return null;\n } else {\n var x1 = parseInt(obj.highlighted[0].getAttribute('data-x'));\n var y1 = parseInt(obj.highlighted[0].getAttribute('data-y'));\n var x2 = parseInt(obj.highlighted[obj.highlighted.length-1].getAttribute('data-x'));\n var y2 = parseInt(obj.highlighted[obj.highlighted.length-1].getAttribute('data-y'));\n var cellName = jexcel.getColumnNameFromId([ x1, y1 ]);\n var colspan = (x2 - x1) + 1;\n var rowspan = (y2 - y1) + 1;\n }\n }\n\n var cell = jexcel.getIdFromColumnName(cellName, true);\n\n if (obj.options.mergeCells[cellName]) {\n if (obj.records[cell[1]][cell[0]].getAttribute('data-merged')) {\n test = obj.options.text.cellAlreadyMerged;\n }\n } else if ((! colspan || colspan < 2) && (! rowspan || rowspan < 2)) {\n test = obj.options.text.invalidMergeProperties;\n } else {\n var cells = [];\n for (var j = cell[1]; j < cell[1] + rowspan; j++) {\n for (var i = cell[0]; i < cell[0] + colspan; i++) {\n var columnName = jexcel.getColumnNameFromId([i, j]);\n if (obj.records[j][i].getAttribute('data-merged')) {\n test = obj.options.text.thereIsAConflictWithAnotherMergedCell;\n }\n }\n }\n }\n\n if (test) {\n alert(test);\n } else {\n // Add property\n if (colspan > 1) {\n obj.records[cell[1]][cell[0]].setAttribute('colspan', colspan);\n } else {\n colspan = 1;\n }\n if (rowspan > 1) {\n obj.records[cell[1]][cell[0]].setAttribute('rowspan', rowspan);\n } else {\n rowspan = 1;\n }\n // Keep links to the existing nodes\n obj.options.mergeCells[cellName] = [ colspan, rowspan, [] ];\n // Mark cell as merged\n obj.records[cell[1]][cell[0]].setAttribute('data-merged', 'true');\n // Overflow\n obj.records[cell[1]][cell[0]].style.overflow = 'hidden';\n // History data\n var data = [];\n // Adjust the nodes\n for (var y = cell[1]; y < cell[1] + rowspan; y++) {\n for (var x = cell[0]; x < cell[0] + colspan; x++) {\n if (! (cell[0] == x && cell[1] == y)) {\n data.push(obj.options.data[y][x]);\n obj.updateCell(x, y, '', true);\n obj.options.mergeCells[cellName][2].push(obj.records[y][x]);\n obj.records[y][x].style.display = 'none';\n obj.records[y][x] = obj.records[cell[1]][cell[0]];\n }\n }\n }\n // In the initialization is not necessary keep the history\n obj.updateSelection(obj.records[cell[1]][cell[0]]);\n\n if (! ignoreHistoryAndEvents) {\n obj.setHistory({\n action:'setMerge',\n column:cellName,\n colspan:colspan,\n rowspan:rowspan,\n data:data,\n });\n\n if (typeof(obj.options.onmerge) == 'function') {\n obj.options.onmerge(el, cellName, colspan, rowspan);\n }\n }\n }\n }\n\n /**\n * Merge cells\n * @param cellName\n * @param colspan\n * @param rowspan\n * @param ignoreHistoryAndEvents\n */\n obj.getMerge = function(cellName) {\n var data = {};\n if (cellName) {\n if (obj.options.mergeCells[cellName]) {\n data = [ obj.options.mergeCells[cellName][0], obj.options.mergeCells[cellName][1] ];\n } else {\n data = null;\n }\n } else {\n if (obj.options.mergeCells) {\n var mergedCells = obj.options.mergeCells;\n var keys = Object.keys(obj.options.mergeCells);\n for (var i = 0; i < keys.length; i++) {\n data[keys[i]] = [ obj.options.mergeCells[keys[i]][0], obj.options.mergeCells[keys[i]][1] ];\n }\n }\n }\n\n return data;\n }\n\n /**\n * Remove merge by cellname\n * @param cellName\n */\n obj.removeMerge = function(cellName, data, keepOptions) {\n if (obj.options.mergeCells[cellName]) {\n var cell = jexcel.getIdFromColumnName(cellName, true);\n obj.records[cell[1]][cell[0]].removeAttribute('colspan');\n obj.records[cell[1]][cell[0]].removeAttribute('rowspan');\n obj.records[cell[1]][cell[0]].removeAttribute('data-merged');\n var info = obj.options.mergeCells[cellName];\n\n var index = 0;\n for (var j = 0; j < info[1]; j++) {\n for (var i = 0; i < info[0]; i++) {\n if (j > 0 || i > 0) {\n obj.records[cell[1]+j][cell[0]+i] = info[2][index];\n obj.records[cell[1]+j][cell[0]+i].style.display = '';\n // Recover data\n if (data && data[index]) {\n obj.updateCell(cell[0]+i, cell[1]+j, data[index]);\n }\n index++;\n }\n }\n }\n\n // Update selection\n obj.updateSelection(obj.records[cell[1]][cell[0]], obj.records[cell[1]+j-1][cell[0]+i-1]);\n\n if (! keepOptions) {\n delete(obj.options.mergeCells[cellName]);\n }\n }\n }\n\n /**\n * Remove all merged cells\n */\n obj.destroyMerged = function(keepOptions) {\n // Remove any merged cells\n if (obj.options.mergeCells) {\n var mergedCells = obj.options.mergeCells;\n var keys = Object.keys(obj.options.mergeCells);\n for (var i = 0; i < keys.length; i++) {\n obj.removeMerge(keys[i], null, keepOptions);\n }\n }\n }\n\n /**\n * Is column merged\n */\n obj.isColMerged = function(x, insertBefore) {\n var cols = [];\n // Remove any merged cells\n if (obj.options.mergeCells) {\n var keys = Object.keys(obj.options.mergeCells);\n for (var i = 0; i < keys.length; i++) {\n var info = jexcel.getIdFromColumnName(keys[i], true);\n var colspan = obj.options.mergeCells[keys[i]][0];\n var x1 = info[0];\n var x2 = info[0] + (colspan > 1 ? colspan - 1 : 0);\n\n if (insertBefore == null) {\n if ((x1 <= x && x2 >= x)) {\n cols.push(keys[i]);\n }\n } else {\n if (insertBefore) {\n if ((x1 < x && x2 >= x)) {\n cols.push(keys[i]);\n }\n } else {\n if ((x1 <= x && x2 > x)) {\n cols.push(keys[i]);\n }\n }\n }\n }\n }\n\n return cols;\n }\n\n /**\n * Is rows merged\n */\n obj.isRowMerged = function(y, insertBefore) {\n var rows = [];\n // Remove any merged cells\n if (obj.options.mergeCells) {\n var keys = Object.keys(obj.options.mergeCells);\n for (var i = 0; i < keys.length; i++) {\n var info = jexcel.getIdFromColumnName(keys[i], true);\n var rowspan = obj.options.mergeCells[keys[i]][1];\n var y1 = info[1];\n var y2 = info[1] + (rowspan > 1 ? rowspan - 1 : 0);\n\n if (insertBefore == null) {\n if ((y1 <= y && y2 >= y)) {\n rows.push(keys[i]);\n }\n } else {\n if (insertBefore) {\n if ((y1 < y && y2 >= y)) {\n rows.push(keys[i]);\n }\n } else {\n if ((y1 <= y && y2 > y)) {\n rows.push(keys[i]);\n }\n }\n }\n }\n }\n\n return rows;\n }\n\n /**\n * Open the editor\n * \n * @param object cell\n * @return void\n */\n obj.openEditor = function(cell, empty, e) {\n // Get cell position\n var y = cell.getAttribute('data-y');\n var x = cell.getAttribute('data-x');\n\n // On edition start\n if (! obj.ignoreEvents) {\n if (typeof(obj.options.oneditionstart) == 'function') {\n obj.options.oneditionstart(el, cell, x, y);\n }\n }\n\n // Overflow\n if (x > 0) {\n obj.records[y][x-1].style.overflow = 'hidden';\n }\n\n // Create editor\n var createEditor = function(type) {\n // Cell information\n var info = cell.getBoundingClientRect();\n\n // Create dropdown\n var editor = document.createElement(type);\n editor.style.width = (info.width) + 'px';\n editor.style.height = (info.height - 2) + 'px';\n editor.style.minHeight = (info.height - 2) + 'px';\n\n // Edit cell\n cell.classList.add('editor');\n cell.innerHTML = '';\n cell.appendChild(editor);\n\n return editor;\n }\n\n // Readonly\n if (cell.classList.contains('readonly') == true) {\n // Do nothing\n } else {\n // Holder\n obj.edition = [ obj.records[y][x], obj.records[y][x].innerHTML, x, y ];\n\n // If there is a custom editor for it\n if (obj.options.columns[x].editor) {\n // Custom editors\n obj.options.columns[x].editor.openEditor(cell, el, empty, e);\n } else {\n // Native functions\n if (obj.options.columns[x].type == 'hidden') {\n // Do nothing\n } else if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') {\n // Get value\n var value = cell.children[0].checked ? false : true;\n // Toogle value\n obj.setValue(cell, value);\n // Do not keep edition open\n obj.edition = null;\n } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') {\n // Get current value\n var value = obj.options.data[y][x];\n\n // Create dropdown\n if (typeof(obj.options.columns[x].filter) == 'function') {\n var source = obj.options.columns[x].filter(el, cell, x, y, obj.options.columns[x].source);\n } else {\n var source = obj.options.columns[x].source;\n }\n\n // Create editor\n var editor = createEditor('div');\n var options = {\n data: source,\n multiple: obj.options.columns[x].multiple ? true : false,\n autocomplete: obj.options.columns[x].autocomplete || obj.options.columns[x].type == 'autocomplete' ? true : false,\n opened:true,\n value: obj.options.columns[x].multiple ? value.split(';') : value,\n width:'100%',\n height:editor.style.minHeight,\n position: (obj.options.tableOverflow == true || obj.options.fullscreen == true) ? true : false,\n onclose:function() {\n obj.closeEditor(cell, true);\n }\n };\n if (obj.options.columns[x].options && obj.options.columns[x].options.type) {\n options.type = obj.options.columns[x].options.type;\n }\n jSuites.dropdown(editor, options);\n } else if (obj.options.columns[x].type == 'calendar' || obj.options.columns[x].type == 'color') {\n // Value\n var value = obj.options.data[y][x];\n // Create editor\n var editor = createEditor('input');\n editor.value = value;\n\n if (obj.options.tableOverflow == true || obj.options.fullscreen == true) {\n obj.options.columns[x].options.position = true;\n }\n obj.options.columns[x].options.value = obj.options.data[y][x];\n obj.options.columns[x].options.opened = true;\n obj.options.columns[x].options.onclose = function(el, value) {\n obj.closeEditor(cell, true);\n }\n // Current value\n if (obj.options.columns[x].type == 'color') {\n jSuites.color(editor, obj.options.columns[x].options);\n } else {\n var calendar = jSuites.calendar(editor, obj.options.columns[x].options);\n calendar.setValue(value);\n }\n // Focus on editor\n editor.focus();\n } else if (obj.options.columns[x].type == 'image') {\n // Value\n var img = cell.children[0];\n // Create editor\n var editor = createEditor('div');\n editor.style.position = 'relative';\n var div = document.createElement('div');\n div.classList.add('jclose');\n if (img && img.src) {\n div.appendChild(img);\n }\n editor.appendChild(div);\n jSuites.image(div, obj.options.imageOptions);\n const rect = cell.getBoundingClientRect();\n const rectContent = div.getBoundingClientRect();\n if (window.innerHeight < rect.bottom + rectContent.height) {\n div.style.top = (rect.top - (rectContent.height + 2)) + 'px';\n } else {\n div.style.top = (rect.top) + 'px';\n }\n } else {\n // Value\n var value = empty == true ? '' : obj.options.data[y][x];\n\n // Basic editor\n if (obj.options.columns[x].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[x].wordWrap == true)) {\n var editor = createEditor('textarea');\n } else {\n var editor = createEditor('input');\n // Mask\n if (obj.options.columns[x].mask) {\n editor.setAttribute('data-mask', obj.options.columns[x].mask);\n }\n }\n\n editor.value = value;\n editor.onblur = function() {\n obj.closeEditor(cell, true);\n };\n editor.focus();\n }\n }\n }\n }\n\n /**\n * Close the editor and save the information\n * \n * @param object cell\n * @param boolean save\n * @return void\n */\n obj.closeEditor = function(cell, save) {\n var x = parseInt(cell.getAttribute('data-x'));\n var y = parseInt(cell.getAttribute('data-y'));\n\n // Get cell properties\n if (save == true) {\n // If custom editor\n if (obj.options.columns[x].editor) {\n // Custom editor\n var value = obj.options.columns[x].editor.closeEditor(cell, save);\n } else {\n // Native functions\n if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio' || obj.options.columns[x].type == 'hidden') {\n // Do nothing\n } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') {\n var value = cell.children[0].dropdown.close(true);\n } else if (obj.options.columns[x].type == 'calendar') {\n var value = cell.children[0].calendar.close(true);\n } else if (obj.options.columns[x].type == 'color') {\n var value = cell.children[1].color.close(true);\n } else if (obj.options.columns[x].type == 'image') {\n var img = cell.children[0].children[0].children[0];\n var value = img && img.tagName == 'IMG' ? img.src : '';\n } else if (obj.options.columns[x].type == 'numeric') {\n var value = cell.children[0].value;\n if (value.substr(0,1) != '=') {\n if (value == '') {\n value = obj.options.columns[x].allowEmpty ? '' : 0;\n }\n }\n cell.children[0].onblur = null;\n } else {\n var value = cell.children[0].value;\n cell.children[0].onblur = null;\n }\n }\n\n // Ignore changes if the value is the same\n if (obj.options.data[y][x] == value) {\n cell.innerHTML = obj.edition[1];\n } else {\n obj.setValue(cell, value);\n }\n } else {\n if (obj.options.columns[x].editor) {\n // Custom editor\n obj.options.columns[x].editor.closeEditor(cell, save);\n } else {\n if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') {\n cell.children[0].dropdown.close(true);\n } else if (obj.options.columns[x].type == 'calendar') {\n cell.children[0].calendar.close(true);\n } else if (obj.options.columns[x].type == 'color') {\n cell.children[1].color.close(true);\n } else {\n cell.children[0].onblur = null;\n }\n }\n\n // Restore value\n cell.innerHTML = obj.edition && obj.edition[1] ? obj.edition[1] : '';\n }\n\n // On edition end\n if (! obj.ignoreEvents) {\n if (typeof(obj.options.oneditionend) == 'function') {\n obj.options.oneditionend(el, cell, x, y, value, save);\n }\n }\n\n // Remove editor class\n cell.classList.remove('editor');\n\n // Finish edition\n obj.edition = null;\n }\n\n /**\n * Get the cell object\n * \n * @param object cell\n * @return string value\n */\n obj.getCell = function(cell) {\n // Convert in case name is excel liked ex. A10, BB92\n cell = jexcel.getIdFromColumnName(cell, true);\n var x = cell[0];\n var y = cell[1];\n\n return obj.records[y][x];\n }\n\n /**\n * Get the cell object from coords\n * \n * @param object cell\n * @return string value\n */\n obj.getCellFromCoords = function(x, y) {\n return obj.records[y][x];\n }\n\n /**\n * Get label\n * \n * @param object cell\n * @return string value\n */\n obj.getLabel = function(cell) {\n // Convert in case name is excel liked ex. A10, BB92\n cell = jexcel.getIdFromColumnName(cell, true);\n var x = cell[0];\n var y = cell[1];\n\n return obj.records[y][x].innerHTML;\n }\n\n /**\n * Get labelfrom coords\n * \n * @param object cell\n * @return string value\n */\n obj.getLabelFromCoords = function(x, y) {\n return obj.records[y][x].innerHTML;\n }\n\n /**\n * Get the value from a cell\n * \n * @param object cell\n * @return string value\n */\n obj.getValue = function(cell, processedValue) {\n if (typeof(cell) == 'object') {\n var x = cell.getAttribute('data-x');\n var y = cell.getAttribute('data-y');\n } else {\n cell = jexcel.getIdFromColumnName(cell, true);\n var x = cell[0];\n var y = cell[1];\n }\n\n var value = null;\n\n if (x != null && y != null) {\n if (obj.records[y] && obj.records[y][x] && (processedValue || obj.options.copyCompatibility == true)) {\n value = obj.records[y][x].innerHTML;\n } else {\n if (obj.options.data[y] && obj.options.data[y][x] != 'undefined') {\n value = obj.options.data[y][x];\n }\n }\n }\n\n return value;\n }\n\n /**\n * Get the value from a coords\n * \n * @param int x\n * @param int y\n * @return string value\n */\n obj.getValueFromCoords = function(x, y, processedValue) {\n var value = null;\n\n if (x != null && y != null) {\n if ((obj.records[y] && obj.records[y][x]) && processedValue || obj.options.copyCompatibility == true) {\n value = obj.records[y][x].innerHTML;\n } else {\n if (obj.options.data[y] && obj.options.data[y][x] != 'undefined') {\n value = obj.options.data[y][x];\n }\n }\n }\n\n return value;\n }\n\n /**\n * Set a cell value\n * \n * @param mixed cell destination cell\n * @param string value value\n * @return void\n */\n obj.setValue = function(cell, value, force) {\n var records = [];\n\n if (typeof(cell) == 'string') {\n var columnId = jexcel.getIdFromColumnName(cell, true);\n var x = columnId[0];\n var y = columnId[1];\n\n // Update cell\n records.push(obj.updateCell(x, y, value, force));\n\n // Update all formulas in the chain\n obj.updateFormulaChain(x, y, records);\n } else {\n var x = null;\n var y = null;\n if (cell && cell.getAttribute) {\n var x = cell.getAttribute('data-x');\n var y = cell.getAttribute('data-y');\n }\n\n // Update cell\n if (x != null && y != null) {\n records.push(obj.updateCell(x, y, value, force));\n\n // Update all formulas in the chain\n obj.updateFormulaChain(x, y, records);\n } else {\n var keys = Object.keys(cell);\n if (keys.length > 0) {\n for (var i = 0; i < keys.length; i++) {\n if (typeof(cell[i]) == 'string') {\n var columnId = jexcel.getIdFromColumnName(cell[i], true);\n var x = columnId[0];\n var y = columnId[1];\n } else {\n var x = cell[i].getAttribute('data-x');\n var y = cell[i].getAttribute('data-y');\n }\n\n // Update cell\n if (x != null && y != null) {\n records.push(obj.updateCell(x, y, value, force));\n\n // Update all formulas in the chain\n obj.updateFormulaChain(x, y, records);\n }\n }\n }\n }\n }\n\n // Update history\n obj.setHistory({\n action:'setValue',\n records:records,\n selection:obj.selectedCell,\n });\n\n // Update table with custom configurations if applicable\n obj.updateTable();\n\n // On after changes\n obj.onafterchanges(el, records);\n }\n\n /**\n * Set a cell value based on coordinates\n * \n * @param int x destination cell\n * @param int y destination cell\n * @param string value\n * @return void\n */\n obj.setValueFromCoords = function(x, y, value, force) {\n var records = [];\n records.push(obj.updateCell(x, y, value, force));\n\n // Update all formulas in the chain\n obj.updateFormulaChain(x, y, records);\n\n // Update history\n obj.setHistory({\n action:'setValue',\n records:records,\n selection:obj.selectedCell,\n });\n\n // Update table with custom configurations if applicable\n obj.updateTable();\n\n // On after changes\n obj.onafterchanges(el, records);\n }\n\n /**\n * Toogle\n */\n obj.setCheckRadioValue = function() {\n var records = [];\n var keys = Object.keys(obj.highlighted);\n for (var i = 0; i < keys.length; i++) {\n var x = obj.highlighted[i].getAttribute('data-x');\n var y = obj.highlighted[i].getAttribute('data-y');\n\n if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') {\n // Update cell\n records.push(obj.updateCell(x, y, ! obj.options.data[y][x]));\n }\n }\n\n if (records.length) {\n // Update history\n obj.setHistory({\n action:'setValue',\n records:records,\n selection:obj.selectedCell,\n });\n\n // On after changes\n obj.onafterchanges(el, records);\n }\n }\n\n /**\n * Update cell content\n * \n * @param object cell\n * @return void\n */\n obj.updateCell = function(x, y, value, force) {\n // Changing value depending on the column type\n if (obj.records[y][x].classList.contains('readonly') == true && ! force) {\n // Do nothing\r\n var record = {\r\n x: x,\r\n y: y,\r\n col: x,\r\n row: y\r\n }\n } else {\n // On change\n if (! obj.ignoreEvents) {\n if (typeof(obj.options.onbeforechange) == 'function') {\n // Overwrite a value\n var val = obj.options.onbeforechange(el, obj.records[y][x], x, y, value);\n\n // If you return something this will overwrite the value\n if (val != undefined) {\n value = val;\n }\n }\n }\n\n // History format\n var record = {\n x: x,\r\n y: y,\n col: x,\n row: y,\n newValue: value,\n oldValue: obj.options.data[y][x],\n }\n\n if (obj.options.columns[x].editor) {\n // Update data and cell\n obj.options.data[y][x] = value;\n obj.options.columns[x].editor.setValue(obj.records[y][x], value, force);\n } else {\n // Native functions\n if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') {\n // Unchecked all options\n if (obj.options.columns[x].type == 'radio') {\n for (var j = 0; j < obj.options.data.length; j++) {\n obj.options.data[j][x] = false;\n }\n }\n\n // Update data and cell\n obj.records[y][x].children[0].checked = (value == 1 || value == true || value == 'true' || value == 'TRUE') ? true : false;\n obj.options.data[y][x] = obj.records[y][x].children[0].checked;\n } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') {\n // Update data and cell\n obj.options.data[y][x] = value;\n obj.records[y][x].innerHTML = obj.getDropDownValue(x, value);\n } else if (obj.options.columns[x].type == 'calendar') {\n // Update calendar\n var formatted = jSuites.calendar.extractDateFromString(value, obj.options.columns[x].options.format);\n // Update data and cell\n obj.options.data[y][x] = value;\n obj.records[y][x].innerHTML = jSuites.calendar.getDateString(formatted ? formatted : value, obj.options.columns[x].options.format);\n } else if (obj.options.columns[x].type == 'color') {\n // Update color\n obj.options.data[y][x] = value;\n // Render\n if (obj.options.columns[x].render == 'square') {\n var color = document.createElement('div');\n color.className = 'color';\n color.style.backgroundColor = value;\n obj.records[y][x].innerHTML = '';\n obj.records[y][x].appendChild(color);\n } else {\n obj.records[y][x].style.color = value;\n obj.records[y][x].innerHTML = value;\n }\n } else if (obj.options.columns[x].type == 'image') {\n value = ''+value;\n obj.options.data[y][x] = value;\n obj.records[y][x].innerHTML = '';\n if (value && value.substr(0, 10) == 'data:image') {\n var img = document.createElement('img');\n img.src = value;\n obj.records[y][x].appendChild(img);\n }\n } else {\n // Update data and cell\n obj.options.data[y][x] = value;\n // Label\n if (('' + value).substr(0,1) == '=' && obj.options.parseFormulas == true) {\n value = obj.executeFormula(value, x, y);\n }\n if (obj.options.columns[x].mask) {\n var decimal = obj.options.columns[x].decimal || '.';\n value = '' + jSuites.mask.run(value, obj.options.columns[x].mask, decimal);\n }\n obj.records[y][x].innerHTML = value;\n\n // Handle big text inside a cell\n if (obj.options.columns[x].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[x].wordWrap == true || obj.records[y][x].innerHTML.length > 200)) {\n obj.records[y][x].style.whiteSpace = 'pre-wrap';\n } else {\n obj.records[y][x].style.whiteSpace = '';\n }\n }\n }\n\n // Overflow\n if (x > 0) {\n if (value) {\n obj.records[y][x-1].style.overflow = 'hidden';\n } else {\n obj.records[y][x-1].style.overflow = '';\n }\n }\n\n // On change\n if (! obj.ignoreEvents) {\n if (typeof(obj.options.onchange) == 'function') {\n obj.options.onchange(el, (obj.records[y] && obj.records[y][x] ? obj.records[y][x] : null), x, y, value, record.oldValue);\n }\n }\n }\n\n return record;\n }\n\n /**\n * Helper function to copy data using the corner icon\n */\n obj.copyData = function(o, d) {\n // Get data from all selected cells\n var data = obj.getData(true, true);\n\n // Selected cells\r\n var h = obj.selectedContainer;\n\n // Cells\n var x1 = parseInt(o.getAttribute('data-x'));\n var y1 = parseInt(o.getAttribute('data-y'));\n var x2 = parseInt(d.getAttribute('data-x'));\n var y2 = parseInt(d.getAttribute('data-y'));\n\n // Records\n var records = [];\n var breakControl = false;\n\n if (h[0] == x1) {\r\n // Vertical copy\r\n if (y1 < h[1]) {\r\n var rowNumber = y1 - h[1];\r\n } else {\r\n var rowNumber = 1;\r\n }\r\n var colNumber = 0;\r\n } else {\r\n if (x1 < h[0]) {\r\n var colNumber = x1 - h[0];\r\n } else {\r\n var colNumber = 1;\r\n }\r\n var rowNumber = 0;\r\n }\r\n\n // Copy data procedure\n var posx = 0;\n var posy = 0;\n\n for (var j = y1; j <= y2; j++) {\n // Skip hidden rows\n if (obj.rows[j] && obj.rows[j].style.display == 'none') {\n continue;\n }\n\n // Controls\n if (data[posy] == undefined) {\n posy = 0;\n }\n posx = 0;\n\n // Data columns\n if (h[0] != x1) {\r\n if (x1 < h[0]) {\r\n var colNumber = x1 - h[0];\r\n } else {\r\n var colNumber = 1;\r\n }\r\n }\n // Data columns\n for (var i = x1; i <= x2; i++) {\n // Update non-readonly\n if (obj.records[j][i] && ! obj.records[j][i].classList.contains('readonly') && obj.records[j][i].style.display != 'none' && breakControl == false) {\n // Stop if contains value\n if (! obj.selection.length) {\n if (obj.options.data[j][i] != '') {\n breakControl = true;\n continue;\n }\n }\n\n // Column\n if (data[posy] == undefined) {\n posx = 0;\n } else if (data[posy][posx] == undefined) {\n posx = 0;\n }\r\n\r\n // Value\r\n var value = data[posy][posx];\n\n if (value && ! data[1] && obj.options.autoIncrement == true) {\n if (obj.options.columns[i].type == 'text' || obj.options.columns[i].type == 'number') {\n if ((''+value).substr(0,1) == '=') {\n var tokens = value.match(/([A-Z]+[0-9]+)/g);\n\n if (tokens) {\n var affectedTokens = [];\n for (var index = 0; index < tokens.length; index++) {\n var position = jexcel.getIdFromColumnName(tokens[index], 1);\n position[0] += colNumber;\r\n position[1] += rowNumber;\r\n if (position[1] < 0) {\r\n position[1] = 0;\r\n }\n var token = jexcel.getColumnNameFromId([position[0], position[1]]);\n\n if (token != tokens[index]) {\n affectedTokens[tokens[index]] = token;\n }\n }\n // Update formula\n if (affectedTokens) {\n value = obj.updateFormula(value, affectedTokens)\n }\n }\n } else {\n if (value == Number(value)) {\n value = Number(value) + rowNumber;\n }\n }\n } else if (obj.options.columns[i].type == 'calendar') {\n var date = new Date(value);\n date.setDate(date.getDate() + rowNumber);\n value = date.getFullYear() + '-' + jexcel.doubleDigitFormat(parseInt(date.getMonth() + 1)) + '-' + jexcel.doubleDigitFormat(date.getDate()) + ' ' + '00:00:00';\n }\n }\n\n records.push(obj.updateCell(i, j, value));\n\n // Update all formulas in the chain\n obj.updateFormulaChain(i, j, records);\n }\n posx++;\n if (h[0] != x1) {\r\n colNumber++;\r\n }\n }\n posy++;\n rowNumber++;\n }\n\n // Update history\n obj.setHistory({\n action:'setValue',\n records:records,\n selection:obj.selectedCell,\n });\n\n // Update table with custom configuration if applicable\n obj.updateTable();\n\n // On after changes\n obj.onafterchanges(el, records);\n }\n\n /**\n * Refresh current selection\n */\n obj.refreshSelection = function() {\n if (obj.selectedCell) {\n obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);\n }\n }\n\n /**\n * Move coords to A1 in case ovelaps with an excluded cell\n */\n obj.conditionalSelectionUpdate = function(type, o, d) {\n if (type == 1) {\n if (obj.selectedCell && ((o >= obj.selectedCell[1] && o <= obj.selectedCell[3]) || (d >= obj.selectedCell[1] && d <= obj.selectedCell[3]))) {\n obj.resetSelection();\n return;\n }\n } else {\n if (obj.selectedCell && ((o >= obj.selectedCell[0] && o <= obj.selectedCell[2]) || (d >= obj.selectedCell[0] && d <= obj.selectedCell[2]))) {\n obj.resetSelection();\n return;\n }\n }\n }\n\n /**\n * Clear table selection\n */\n obj.resetSelection = function(blur) {\n // Remove style\n if (! obj.highlighted.length) {\n var previousStatus = 0;\n } else {\n var previousStatus = 1;\n\n for (var i = 0; i < obj.highlighted.length; i++) {\n obj.highlighted[i].classList.remove('highlight');\n obj.highlighted[i].classList.remove('highlight-left');\n obj.highlighted[i].classList.remove('highlight-right');\n obj.highlighted[i].classList.remove('highlight-top');\n obj.highlighted[i].classList.remove('highlight-bottom');\n obj.highlighted[i].classList.remove('highlight-selected');\n\n var px = parseInt(obj.highlighted[i].getAttribute('data-x'));\n var py = parseInt(obj.highlighted[i].getAttribute('data-y'));\n\n // Check for merged cells\n if (obj.highlighted[i].getAttribute('data-merged')) {\n var colspan = parseInt(obj.highlighted[i].getAttribute('colspan'));\n var rowspan = parseInt(obj.highlighted[i].getAttribute('rowspan'));\n var ux = colspan > 0 ? px + (colspan - 1) : px;\n var uy = rowspan > 0 ? py + (rowspan - 1): py;\n } else {\n var ux = px;\n var uy = py;\n }\n\n // Remove selected from headers\n for (var j = px; j <= ux; j++) {\n if (obj.headers[j]) {\n obj.headers[j].classList.remove('selected');\n }\n }\n\n // Remove selected from rows\n for (var j = py; j <= uy; j++) {\n if (obj.rows[j]) {\n obj.rows[j].classList.remove('selected');\n }\n }\n }\n }\n\n // Reset highlighed cells\n obj.highlighted = [];\n\n // Reset\n obj.selectedCell = null;\n\n // Hide corner\n obj.corner.style.top = '-2000px';\n obj.corner.style.left = '-2000px';\n\n if (obj.ignoreEvents != true && blur == true) {\n if (obj.options.onblur) {\n if (typeof(obj.options.onblur) == 'function') {\n if (previousStatus == 1) {\n obj.options.onblur(el);\n }\n }\n }\n }\n\n return previousStatus;\n }\n\n /**\n * Update selection based on two cells\n */\n obj.updateSelection = function(el1, el2, origin) {\n var x1 = el1.getAttribute('data-x');\n var y1 = el1.getAttribute('data-y');\n if (el2) {\n var x2 = el2.getAttribute('data-x');\n var y2 = el2.getAttribute('data-y');\n } else {\n var x2 = x1;\n var y2 = y1;\n }\n\n obj.updateSelectionFromCoords(x1, y1, x2, y2, origin);\n }\n\n /**\n * Update selection from coords\n */\n obj.updateSelectionFromCoords = function(x1, y1, x2, y2, origin) {\n // Reset Selection\n var updated = null;\n var previousState = obj.resetSelection();\n\n // Same element\n if (x2 == null) {\n x2 = x1;\n }\n if (y2 == null) {\n y2 = y1;\n }\n\n // Selection must be within the existing data\n if (x1 >= obj.headers.length) {\n x1 = obj.headers.length - 1;\n }\n if (y1 >= obj.rows.length) {\n y1 = obj.rows.length - 1;\n }\n if (x2 >= obj.headers.length) {\n x2 = obj.headers.length - 1;\n }\n if (y2 >= obj.rows.length) {\n y2 = obj.rows.length - 1;\n }\n\n // Keep selected cell\n obj.selectedCell = [x1, y1, x2, y2];\n\n // Select cells\n if (x1 != null) {\n // Add selected cell\n if (obj.records[y1][x1]) {\n obj.records[y1][x1].classList.add('highlight-selected');\n }\n\n // Origin & Destination\n if (parseInt(x1) < parseInt(x2)) {\n var px = parseInt(x1);\n var ux = parseInt(x2);\n } else {\n var px = parseInt(x2);\n var ux = parseInt(x1);\n }\n\n if (parseInt(y1) < parseInt(y2)) {\n var py = parseInt(y1);\n var uy = parseInt(y2);\n } else {\n var py = parseInt(y2);\n var uy = parseInt(y1);\n }\n\n // Verify merged columns\n for (var i = px; i <= ux; i++) {\n for (var j = py; j <= uy; j++) {\n if (obj.records[j][i] && obj.records[j][i].getAttribute('data-merged')) {\n var x = parseInt(obj.records[j][i].getAttribute('data-x'));\n var y = parseInt(obj.records[j][i].getAttribute('data-y'));\n var colspan = parseInt(obj.records[j][i].getAttribute('colspan'));\n var rowspan = parseInt(obj.records[j][i].getAttribute('rowspan'));\n\n if (colspan > 1) {\n if (x < px) {\n px = x;\n }\n if (x + colspan > ux) {\n ux = x + colspan - 1;\n }\n }\n\n if (rowspan) {\n if (y < py) {\n py = y;\n\n }\n if (y + rowspan > uy) {\n uy = y + rowspan - 1;\n }\n }\n }\n }\n }\n\n // Limits\n var borderLeft = null;\n var borderRight = null;\n var borderTop = null;\n var borderBottom = null;\n\n // Vertical limits\n for (var j = py; j <= uy; j++) {\n if (obj.rows[j].style.display != 'none') {\n if (borderTop == null) {\n borderTop = j;\n }\n borderBottom = j;\n }\n }\n\n // Redefining styles\n for (var i = px; i <= ux; i++) {\n for (var j = py; j <= uy; j++) {\n if (obj.rows[j].style.display != 'none' && obj.records[j][i].style.display != 'none') {\n obj.records[j][i].classList.add('highlight');\n obj.highlighted.push(obj.records[j][i]);\n }\n }\n\n // Horizontal limits\n if (obj.options.columns[i].type != 'hidden') {\n if (borderLeft == null) {\n borderLeft = i;\n }\n borderRight = i;\n }\n }\n\n // Create borders\n if (! borderLeft) {\n borderLeft = 0;\n }\n if (! borderRight) {\n borderRight = 0;\n }\n for (var i = borderLeft; i <= borderRight; i++) {\n if (obj.options.columns[i].type != 'hidden') {\n // Top border\n if (obj.records[borderTop][i]) {\n obj.records[borderTop][i].classList.add('highlight-top');\n }\n // Bottom border\n if (obj.records[borderBottom][i]) {\n obj.records[borderBottom][i].classList.add('highlight-bottom');\n }\n // Add selected from headers\n obj.headers[i].classList.add('selected');\n }\n }\n\n for (var j = borderTop; j <= borderBottom; j++) {\n if (obj.rows[j].style.display != 'none') {\n // Left border\n obj.records[j][borderLeft].classList.add('highlight-left');\n // Right border\n obj.records[j][borderRight].classList.add('highlight-right');\n // Add selected from rows\n obj.rows[j].classList.add('selected');\n }\n }\n\n obj.selectedContainer = [ borderLeft, borderTop, borderRight, borderBottom ];\n }\n\n // Handle events\n if (obj.ignoreEvents != true) {\n if (obj.options.onfocus) {\n if (typeof(obj.options.onfocus) == 'function') {\n if (previousState == 0) {\n obj.options.onfocus(el);\n }\n }\n }\n\n if (typeof(obj.options.onselection) == 'function') {\n obj.options.onselection(el, borderLeft, borderTop, borderRight, borderBottom, origin);\n }\n }\n\n // Find corner cell\n obj.updateCornerPosition();\n }\n\n /**\n * Remove copy selection\n * \n * @return void\n */\n obj.removeCopySelection = function() {\n // Remove current selection\n for (var i = 0; i < obj.selection.length; i++) {\n obj.selection[i].classList.remove('selection');\n obj.selection[i].classList.remove('selection-left');\n obj.selection[i].classList.remove('selection-right');\n obj.selection[i].classList.remove('selection-top');\n obj.selection[i].classList.remove('selection-bottom');\n }\n\n obj.selection = [];\n }\n\n /**\n * Update copy selection\n * \n * @param int x, y\n * @return void\n */\n obj.updateCopySelection = function(x3, y3) {\n // Remove selection\n obj.removeCopySelection();\n\n // Get elements first and last\n var x1 = obj.selectedContainer[0];\n var y1 = obj.selectedContainer[1];\n var x2 = obj.selectedContainer[2];\n var y2 = obj.selectedContainer[3];\n\n if (x3 != null && y3 != null) {\n if (x3 - x2 > 0) {\n var px = parseInt(x2) + 1;\n var ux = parseInt(x3);\n } else {\n var px = parseInt(x3);\n var ux = parseInt(x1) - 1;\n }\n\n if (y3 - y2 > 0) {\n var py = parseInt(y2) + 1;\n var uy = parseInt(y3);\n } else {\n var py = parseInt(y3);\n var uy = parseInt(y1) - 1;\n }\n\n if (ux - px < uy - py) {\n var px = parseInt(x1);\n var ux = parseInt(x2);\n } else {\n var py = parseInt(y1);\n var uy = parseInt(y2);\n }\n\n for (var j = py; j <= uy; j++) {\n for (var i = px; i <= ux; i++) {\n if (obj.records[j][i] && obj.rows[j].style.display != 'none' && obj.records[j][i].style.display != 'none') {\n obj.records[j][i].classList.add('selection');\n obj.records[py][i].classList.add('selection-top');\n obj.records[uy][i].classList.add('selection-bottom');\n obj.records[j][px].classList.add('selection-left');\n obj.records[j][ux].classList.add('selection-right');\n\n // Persist selected elements\n obj.selection.push(obj.records[j][i]);\n }\n }\n }\n }\n }\n\n /**\n * Update corner position\n * \n * @return void\n */\n obj.updateCornerPosition = function() {\n // If any selected cells\n if (! obj.highlighted.length) {\n obj.corner.style.top = '-2000px';\n obj.corner.style.left = '-2000px';\n } else {\n // Get last cell\n var last = obj.highlighted[obj.highlighted.length-1];\n\r\n const contentRect = obj.content.getBoundingClientRect();\r\n var x1 = contentRect.left;\r\n var y1 = contentRect.top;\r\n\r\n const lastRect = last.getBoundingClientRect();\r\n var x2 = lastRect.left;\r\n var y2 = lastRect.top;\r\n var w2 = lastRect.width;\r\n var h2 = lastRect.height;\r\n\n var x = (x2 - x1) + obj.content.scrollLeft + w2 - 4;\n var y = (y2 - y1) + obj.content.scrollTop + h2 - 4;\n\n // Place the corner in the correct place\n obj.corner.style.top = y + 'px';\n obj.corner.style.left = x + 'px';\n }\n }\n\n /**\n * Update scroll position based on the selection\n */\n obj.updateScroll = function(direction) {\n // jExcel Container information\n const contentRect = obj.content.getBoundingClientRect();\r\n var x1 = contentRect.left;\r\n var y1 = contentRect.top;\r\n var w1 = contentRect.width;\r\n var h1 = contentRect.height;\r\n\n // Direction Left or Up\n var reference = obj.records[obj.selectedCell[3]][obj.selectedCell[2]];\n\n // Reference\r\n const referenceRect = reference.getBoundingClientRect();\r\n var x2 = referenceRect.left;\r\n var y2 = referenceRect.top;\r\n var w2 = referenceRect.width;\r\n var h2 = referenceRect.height;\n\n // Direction\n if (direction == 0 || direction == 1) {\n var x = (x2 - x1) + obj.content.scrollLeft;\n var y = (y2 - y1) + obj.content.scrollTop - 2;\n } else {\n var x = (x2 - x1) + obj.content.scrollLeft + w2;\n var y = (y2 - y1) + obj.content.scrollTop + h2;\n }\n\n // Top position check\n if (y > (obj.content.scrollTop + 30) && y < (obj.content.scrollTop + h1)) {\n // In the viewport\n } else {\n // Out of viewport\n if (y < obj.content.scrollTop + 30) {\n obj.content.scrollTop = y - h2;\n } else {\n obj.content.scrollTop = y - (h1 - 2);\n }\n }\n\n // Left position check - TODO: change that to the bottom border of the element\n if (x > (obj.content.scrollLeft) && x < (obj.content.scrollLeft + w1)) {\n // In the viewport\n } else {\n // Out of viewport\n if (x < obj.content.scrollLeft + 30) {\n obj.content.scrollLeft = x;\n if (obj.content.scrollLeft < 50) {\n obj.content.scrollLeft = 0;\n }\n } else {\n obj.content.scrollLeft = x - (w1 - 20);\n }\n }\n }\n\n /**\n * Get the column width\n * \n * @param int column column number (first column is: 0)\n * @return int current width\n */\n obj.getWidth = function(column) {\n if (! column) {\n // Get all headers\n var data = [];\n for (var i = 0; i < obj.headers.length; i++) {\n data.push(obj.options.columns[i].width);\n }\n } else {\n // In case the column is an object\n if (typeof(column) == 'object') {\n column = $(column).getAttribute('data-x');\n }\n\n data = obj.colgroup[column].getAttribute('width')\n }\n\n return data;\n }\n\n /**\n * Set the column width\n * \n * @param int column number (first column is: 0)\n * @param int new column width\n * @param int old column width\n */\n obj.setWidth = function (column, width, oldWidth) {\n if (width > 0) {\n // In case the column is an object\n if (typeof(column) == 'object') {\n column = column.getAttribute('data-x');\n }\n\n // Oldwidth\n if (! oldWidth) {\n oldWidth = obj.colgroup[column].getAttribute('width');\n }\n\n // Set width\n obj.colgroup[column].setAttribute('width', width);\n obj.options.columns[column].width = width;\n\n // Keeping history of changes\n obj.setHistory({\n action:'setWidth',\n column:column,\n oldValue:oldWidth,\n newValue:width,\n });\n\n // On resize column\n if (obj.ignoreEvents != true) {\n if (typeof(obj.options.onresizecolumn) == 'function') {\n obj.options.onresizecolumn(el, column, width, oldWidth);\n }\n }\n\n // Update corner position\n obj.updateCornerPosition();\n }\n }\n\n /**\n * Set the row height\n * \n * @param row - row number (first row is: 0)\n * @param height - new row height\n * @param oldHeight - old row height\n */\n obj.setHeight = function (row, height, oldHeight) {\n if (height > 0) {\n // In case the column is an object\n if (typeof(row) == 'object') {\n row = row.getAttribute('data-y');\n }\n\n // Oldwidth\n if (! oldHeight) {\n oldHeight = obj.rows[row].getAttribute('height');\r\n\r\n if (! oldHeight) {\r\n var rect = obj.rows[row].getBoundingClientRect();\r\n oldHeight = rect.height;\r\n }\n }\n\n // Integer\r\n height = parseInt(height);\r\n\n // Set width\n obj.rows[row].style.height = height + 'px';\n\n // Keep options updated\n if (! obj.options.rows[row]) {\n obj.options.rows[row] = {};\n }\n obj.options.rows[row].height = height;\n\n // Keeping history of changes\n obj.setHistory({\n action:'setHeight',\n row:row,\n oldValue:oldHeight,\n newValue:height,\n });\n\n // On resize column\n if (obj.ignoreEvents != true) {\n if (typeof(obj.options.onresizerow) == 'function') {\n obj.options.onresizerow(el, row, height, oldHeight);\n }\n }\n\n // Update corner position\n obj.updateCornerPosition();\n }\n }\n\n /**\n * Get the row height\n * \n * @param row - row number (first row is: 0)\n * @return height - current row height\n */\n obj.getHeight = function(row) {\n if (! row) {\n // Get height of all rows\n var data = [];\n for (var j = 0; j < obj.rows.length; j++) {\n var h = obj.rows[j].style.height;\n if (h) {\n data[j] = h;\n }\n }\n } else {\n // In case the row is an object\n if (typeof(row) == 'object') {\n row = $(row).getAttribute('data-y');\n }\n\n var data = obj.rows[row].style.height;\n }\n\n return data;\n }\n\n /**\n * Get the column title\n * \n * @param column - column number (first column is: 0)\n * @param title - new column title\n */\n obj.getHeader = function(column) {\n return obj.headers[column].innerText;\n }\n\n /**\n * Set the column title\n * \n * @param column - column number (first column is: 0)\n * @param title - new column title\n */\n obj.setHeader = function(column, newValue) {\n if (obj.headers[column]) {\n var oldValue = obj.headers[column].innerText;\n\n if (! newValue) {\n newValue = prompt(obj.options.text.columnName, oldValue)\n }\n\n if (newValue) {\n obj.headers[column].innerHTML = newValue;\n // Keep the title property\r\n obj.headers[column].setAttribute('title', newValue);\n }\n\n obj.setHistory({\n action: 'setHeader',\n column: column,\n oldValue: oldValue,\n newValue: newValue\n });\n\n // On change\n if (! obj.ignoreEvents) {\n if (typeof(obj.options.onchangeheader) == 'function') {\n obj.options.onchangeheader(el, column, oldValue, newValue);\n }\n }\n }\n }\n\n /**\n * Get the headers\n * \n * @param asArray\n * @return mixed\n */\n obj.getHeaders = function (asArray) {\n var title = [];\n\n for (var i = 0; i < obj.headers.length; i++) {\n title.push(obj.getHeader(i));\n }\n\n return asArray ? title : title.join(obj.options.csvDelimiter);\n }\n\n /**\n * Get meta information from cell(s)\n * \n * @return integer\n */\n obj.getMeta = function(cell, key) {\n if (! cell) {\n return obj.options.meta;\n } else {\n if (key) {\n return obj.options.meta[cell] && obj.options.meta[cell][key] ? obj.options.meta[cell][key] : null;\n } else {\n return obj.options.meta[cell] ? obj.options.meta[cell] : null;\n }\n }\n }\n\n /**\n * Set meta information to cell(s)\n * \n * @return integer\n */\n obj.setMeta = function(o, k, v) {\n if (! obj.options.meta) {\n obj.options.meta = {}\n }\n\n if (k && v) {\n // Set data value\n if (! obj.options.meta[o]) {\n obj.options.meta[o] = {};\n }\n obj.options.meta[o][k] = v;\n } else {\n // Apply that for all cells\n var keys = Object.keys(o);\n for (var i = 0; i < keys.length; i++) {\n if (! obj.options.meta[keys[i]]) {\n obj.options.meta[keys[i]] = {};\n }\n\n var prop = Object.keys(o[keys[i]]);\n for (var j = 0; j < prop.length; j++) {\n obj.options.meta[keys[i]][prop[j]] = o[keys[i]][prop[j]];\n }\n }\n }\n\n if (obj.ignoreEvents != true) {\n if (typeof(obj.options.onchangemeta) == 'function') {\n obj.options.onchangemeta(el, o, k, v);\n }\n }\n }\n\n /**\n * Update meta information\n * \n * @return integer\n */\n obj.updateMeta = function(affectedCells) {\n if (obj.options.meta) {\n var newMeta = {};\n var keys = Object.keys(obj.options.meta);\n for (var i = 0; i < keys.length; i++) {\n if (affectedCells[keys[i]]) {\n newMeta[affectedCells[keys[i]]] = obj.options.meta[keys[i]];\n } else {\n newMeta[keys[i]] = obj.options.meta[keys[i]];\n }\n }\n // Update meta information\n obj.options.meta = newMeta;\n }\n }\n\n /**\n * Get style information from cell(s)\n * \n * @return integer\n */\n obj.getStyle = function(cell, key) {\n // Cell\n if (! cell) {\n // Control vars\n var data = {};\n\n // Column and row length\n var x = obj.options.data[0].length;\n var y = obj.options.data.length;\n\n // Go through the columns to get the data\n for (var j = 0; j < y; j++) {\n for (var i = 0; i < x; i++) {\n // Value\n var v = key ? obj.records[j][i].style[key] : obj.records[j][i].getAttribute('style');\n\n // Any meta data for this column?\n if (v) {\n // Column name\n var k = jexcel.getColumnNameFromId([i, j]);\n // Value\n data[k] = v;\n }\n }\n }\n\n return data;\n } else {\n cell = jexcel.getIdFromColumnName(cell, true);\n\n return key ? obj.records[cell[1]][cell[0]].style[key] : obj.records[cell[1]][cell[0]].getAttribute('style');\n }\n },\n\n obj.resetStyle = function(o, ignoreHistoryAndEvents) {\n var keys = Object.keys(o);\n for (var i = 0; i < keys.length; i++) {\n // Position\n var cell = jexcel.getIdFromColumnName(keys[i], true);\n if (obj.records[cell[1]] && obj.records[cell[1]][cell[0]]) {\n obj.records[cell[1]][cell[0]].setAttribute('style', '');\n }\n }\n obj.setStyle(o, null, null, null, ignoreHistoryAndEvents);\n }\n\n /**\n * Set meta information to cell(s)\n * \n * @return integer\n */\n obj.setStyle = function(o, k, v, force, ignoreHistoryAndEvents) {\n var newValue = {};\n var oldValue = {};\n\n // Apply style\n var applyStyle = function(cellId, key, value) {\n // Position\n var cell = jexcel.getIdFromColumnName(cellId, true);\n\n if (obj.records[cell[1]] && obj.records[cell[1]][cell[0]]) {\n // Current value\n var currentValue = obj.records[cell[1]][cell[0]].style[key];\n\n // Change layout\n if (currentValue == value && ! force) {\n value = '';\n obj.records[cell[1]][cell[0]].style[key] = '';\n } else {\n obj.records[cell[1]][cell[0]].style[key] = value;\n }\n\n // History\n if (! oldValue[cellId]) {\n oldValue[cellId] = [];\n }\n if (! newValue[cellId]) {\n newValue[cellId] = [];\n }\n\n oldValue[cellId].push([key + ':' + currentValue]);\n newValue[cellId].push([key + ':' + value]);\n }\n }\n\n if (k && v) {\n // Get object from string\n if (typeof(o) == 'string') {\n applyStyle(o, k, v);\n } else {\n // Avoid duplications\n var oneApplication = [];\n // Apply that for all cells\n for (var i = 0; i < o.length; i++) {\n var x = o[i].getAttribute('data-x');\n var y = o[i].getAttribute('data-y');\n var cellName = jexcel.getColumnNameFromId([x, y]);\n // This happens when is a merged cell\n if (! oneApplication[cellName]) {\n applyStyle(cellName, k, v);\n oneApplication[cellName] = true;\n }\n }\n }\n } else {\n var keys = Object.keys(o);\n for (var i = 0; i < keys.length; i++) {\n var style = o[keys[i]];\n if (typeof(style) == 'string') {\n style = style.split(';');\n }\n for (var j = 0; j < style.length; j++) {\n if (typeof(style[j]) == 'string') {\n style[j] = style[j].split(':');\n }\n // Apply value\n if (style[j][0].trim()) {\n applyStyle(keys[i], style[j][0].trim(), style[j][1]);\n }\n }\n }\n }\n\n var keys = Object.keys(oldValue);\n for (var i = 0; i < keys.length; i++) {\n oldValue[keys[i]] = oldValue[keys[i]].join(';');\n }\n var keys = Object.keys(newValue);\n for (var i = 0; i < keys.length; i++) {\n newValue[keys[i]] = newValue[keys[i]].join(';');\n }\n\n if (! ignoreHistoryAndEvents) {\n // Keeping history of changes\n obj.setHistory({\n action: 'setStyle',\n oldValue: oldValue,\n newValue: newValue,\n });\n }\n\n if (obj.ignoreEvents != true) {\n if (typeof(obj.options.onchangestyle) == 'function') {\n obj.options.onchangestyle(el, o, k, v);\n }\n }\n }\n\n /**\n * Get cell comments, null cell for all\n */\n obj.getComments = function(cell, withAuthor) {\n if (cell) {\r\n if (typeof(cell) == 'string') {\r\n var cell = jexcel.getIdFromColumnName(cell, true);\r\n }\r\n\r\n if (withAuthor) {\r\n return [obj.records[cell[1]][cell[0]].getAttribute('title'), obj.records[cell[1]][cell[0]].getAttribute('author')];\r\n } else {\r\n return obj.records[cell[1]][cell[0]].getAttribute('title') || '';\r\n }\r\n } else {\r\n var data = {};\r\n for (var j = 0; j < obj.options.data.length; j++) {\r\n for (var i = 0; i < obj.options.columns.length; i++) {\r\n var comments = obj.records[j][i].getAttribute('title');\r\n if (comments) {\r\n var cell = jexcel.getColumnNameFromId([i, j]);\r\n data[cell] = comments;\r\n }\r\n }\r\n }\r\n return data;\r\n }\n }\n\n /**\n * Set cell comments\n */\n obj.setComments = function(cellId, comments, author) {\n if (typeof(cellId) == 'string') {\n var cell = jexcel.getIdFromColumnName(cellId, true);\n } else {\n var cell = cellId;\n }\n\n // Keep old value\n var title = obj.records[cell[1]][cell[0]].getAttribute('title');\n var author = obj.records[cell[1]][cell[0]].getAttribute('data-author');\n var oldValue = [ title, author ];\n\n // Set new values\n obj.records[cell[1]][cell[0]].setAttribute('title', comments ? comments : '');\n obj.records[cell[1]][cell[0]].setAttribute('data-author', author ? author : '');\n\n // Remove class if there is no comment\n if (comments) {\n obj.records[cell[1]][cell[0]].classList.add('jexcel_comments');\n } else {\n obj.records[cell[1]][cell[0]].classList.remove('jexcel_comments');\n }\n\n // Save history\n obj.setHistory({\n action:'setComments',\n column: cellId,\n newValue: [ comments, author ],\n oldValue: oldValue,\n });\n }\n\n /**\n * Get table config information\n */\n obj.getConfig = function() {\n var options = obj.options;\n options.style = obj.getStyle();\n options.mergeCells = obj.getMerge();\r\n options.comments = obj.getComments();\n\n return options;\n }\n\n /**\n * Sort data and reload table\n */\n obj.orderBy = function(column, order) {\n if (column >= 0) {\n // Merged cells\n if (Object.keys(obj.options.mergeCells).length > 0) {\n if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {\n return false;\n } else {\n // Remove merged cells\n obj.destroyMerged();\n }\n }\n\n // Direction\n if (order == null) {\n order = obj.headers[column].classList.contains('arrow-down') ? 1 : 0;\n } else {\n order = order ? 1 : 0;\n }\n\n // Filter\n Array.prototype.orderBy = function(p, o) {\n return this.slice(0).sort(function(a, b) {\n var valueA = a[p] == '' ? '' : Number(a[p]) == a[p] ? Number(a[p]) : a[p].toLowerCase();\n var valueB = b[p] == '' ? '' : Number(b[p]) == b[p] ? Number(b[p]) : b[p].toLowerCase();\n\n if (! o) {\n return (valueA == '' && valueB != '') ? 1 : (valueA != '' && valueB == '') ? -1 : (valueA > valueB) ? 1 : (valueA < valueB) ? -1 : 0;\n } else {\n return (valueA == '' && valueB != '') ? 1 : (valueA != '' && valueB == '') ? -1 : (valueA > valueB) ? -1 : (valueA < valueB) ? 1 : 0;\n }\n });\n }\n\n // Test order\n var temp = [];\n if (obj.options.columns[column].type == 'calendar' ||\n obj.options.columns[column].type == 'checkbox' ||\n obj.options.columns[column].type == 'radio') {\n for (var j = 0; j < obj.options.data.length; j++) {\n temp[j] = [ j, obj.options.data[j][column] ];\n }\n } else {\n for (var j = 0; j < obj.options.data.length; j++) {\n temp[j] = [ j, obj.records[j][column].innerHTML ];\n }\n }\n temp = temp.orderBy(1, order);\n\n // Save history\n var newValue = [];\n for (var j = 0; j < temp.length; j++) {\n newValue[j] = temp[j][0];\n }\n\n // Save history\n obj.setHistory({\n action: 'orderBy',\n rows: newValue,\n column: column,\n order: order,\n });\n\n // Update order\n obj.updateOrderArrow(column, order);\n obj.updateOrder(newValue);\n\n // On sort event\n if (obj.ignoreEvents != true) {\n if (typeof(obj.options.onsort) == 'function') {\n obj.options.onsort(el, column, order);\n }\n }\n\n return true;\n }\n }\n\n /**\n * Update order arrow\n */\n obj.updateOrderArrow = function(column, order) {\n // Remove order\n for (var i = 0; i < obj.headers.length; i++) {\n obj.headers[i].classList.remove('arrow-up');\n obj.headers[i].classList.remove('arrow-down');\n }\n\n // No order specified then toggle order\n if (order) {\n obj.headers[column].classList.add('arrow-up');\n } else {\n obj.headers[column].classList.add('arrow-down');\n }\n }\n\n /**\n * Update rows position\n */\n obj.updateOrder = function(rows) {\n // History\n var data = []\n for (var j = 0; j < rows.length; j++) {\n data[j] = obj.options.data[rows[j]];\n }\n obj.options.data = data;\n\n var data = []\n for (var j = 0; j < rows.length; j++) {\n data[j] = obj.records[rows[j]];\n }\n obj.records = data;\n\n var data = []\n for (var j = 0; j < rows.length; j++) {\n data[j] = obj.rows[rows[j]];\n }\n obj.rows = data;\n\n // Update references\n obj.updateTableReferences();\n\n // Redo search\n if (obj.searchInput.value) {\n obj.search(obj.searchInput.value);\n } else {\n // Create page\n obj.results = null;\n obj.pageNumber = 0;\n\n if (obj.options.pagination > 0) {\n obj.page(0);\n } else if (obj.options.lazyLoading == true) {\n obj.loadPage(0);\n } else {\n for (var j = 0; j < obj.rows.length; j++) {\n obj.tbody.appendChild(obj.rows[j]);\n }\n }\n }\n }\n\n /**\n * Move row\n * \n * @return void\n */\n obj.moveRow = function(o, d, ignoreDom) {\n if (Object.keys(obj.options.mergeCells).length > 0) {\n if (o > d) {\r\n var insertBefore = 1;\r\n } else {\r\n var insertBefore = 0;\r\n }\r\n\r\n if (obj.isRowMerged(o).length || obj.isRowMerged(d, insertBefore).length) {\n if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {\n return false;\n } else {\n obj.destroyMerged();\n }\n }\n }\n\n if (obj.options.search == true) {\n if (obj.results && obj.results.length != obj.rows.length) {\n if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) {\n obj.resetSearch();\n } else {\n return false;\n }\n }\n\n obj.results = null;\n }\n\n if (! ignoreDom) {\n if (Array.prototype.indexOf.call(obj.tbody.children, obj.rows[d]) >= 0) {\n if (o > d) {\n obj.tbody.insertBefore(obj.rows[o], obj.rows[d]);\n } else {\n obj.tbody.insertBefore(obj.rows[o], obj.rows[d].nextSibling);\n }\n } else {\n obj.tbody.removeChild(obj.rows[o]);\n }\n }\n\n // Place references in the correct position\n obj.rows.splice(d, 0, obj.rows.splice(o, 1)[0]);\n obj.records.splice(d, 0, obj.records.splice(o, 1)[0]);\n obj.options.data.splice(d, 0, obj.options.data.splice(o, 1)[0]);\n\n // Respect pagination\n if (obj.options.pagination > 0 && obj.tbody.children.length != obj.options.pagination) {\n obj.page(obj.pageNumber);\n }\n\n // Keeping history of changes\n obj.setHistory({\n action:'moveRow',\n oldValue: o,\n newValue: d,\n });\n\n // Update table references\n obj.updateTableReferences();\n\n // Events\n if (obj.ignoreEvents != true) {\n if (typeof(obj.options.onmoverow) == 'function') {\n obj.options.onmoverow(el, o, d);\n }\n }\n }\n\n /**\n * Insert a new row\n * \n * @param mixed - number of blank lines to be insert or a single array with the data of the new row\n * @param rowNumber\n * @param insertBefore\n * @return void\n */\n obj.insertRow = function(mixed, rowNumber, insertBefore) {\n // Configuration\n if (obj.options.allowInsertRow == true) {\n // Records\n var records = [];\n\n // Data to be insert\n var data = [];\n\n // The insert could be lead by number of rows or the array of data\n if (mixed > 0) {\n var numOfRows = mixed;\n } else {\n var numOfRows = 1;\n\n if (mixed) {\n data = mixed;\n }\n }\n\n // Direction\n var insertBefore = insertBefore ? true : false;\n\n // Current column number\n var lastRow = obj.options.data.length - 1;\n\n if (rowNumber == undefined || rowNumber >= parseInt(lastRow) || rowNumber < 0) {\n rowNumber = lastRow;\n }\n\n // Onbeforeinsertrow\n if (typeof(obj.options.onbeforeinsertrow) == 'function') {\n if (! obj.options.onbeforeinsertrow(el, rowNumber, numOfRows, insertBefore)) {\n console.log('onbeforeinsertrow returned false');\n\n return false;\n }\n }\n\n // Merged cells\n if (Object.keys(obj.options.mergeCells).length > 0) {\n if (obj.isRowMerged(rowNumber, insertBefore).length) {\n if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {\n return false;\n } else {\n obj.destroyMerged();\n }\n }\n }\n\n // Clear any search\n if (obj.options.search == true) {\n if (obj.results && obj.results.length != obj.rows.length) {\n if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) {\n obj.resetSearch();\n } else {\n return false;\n }\n }\n\n obj.results = null;\n }\n\n // Insertbefore\n var rowIndex = (! insertBefore) ? rowNumber + 1 : rowNumber;\n\n // Keep the current data\n var currentRecords = obj.records.splice(rowIndex);\n var currentData = obj.options.data.splice(rowIndex);\n var currentRows = obj.rows.splice(rowIndex);\n\n // Adding lines\n var rowRecords = [];\n var rowData = [];\n var rowNode = [];\n\n for (var row = rowIndex; row < (numOfRows + rowIndex); row++) {\n // Push data to the data container\n obj.options.data[row] = [];\n for (var col = 0; col < obj.options.columns.length; col++) {\n obj.options.data[row][col] = data[col] ? data[col] : '';\n }\n // Create row\n var tr = obj.createRow(row, obj.options.data[row]);\n // Append node\n if (currentRows[0]) {\r\n if (Array.prototype.indexOf.call(obj.tbody.children, currentRows[0]) >= 0) {\r\n obj.tbody.insertBefore(tr, currentRows[0]);\n }\n } else {\r\n if (Array.prototype.indexOf.call(obj.tbody.children, obj.rows[rowNumber]) >= 0) {\r\n obj.tbody.appendChild(tr);\r\n }\r\n }\n // Record History\n rowRecords.push(obj.records[row]);\n rowData.push(obj.options.data[row]);\n rowNode.push(tr);\n }\n\n // Copy the data back to the main data\n Array.prototype.push.apply(obj.records, currentRecords);\n Array.prototype.push.apply(obj.options.data, currentData);\n Array.prototype.push.apply(obj.rows, currentRows);\n\n // Respect pagination\n if (obj.options.pagination > 0) {\n obj.page(obj.pageNumber);\n }\n\n // Keep history\n obj.setHistory({\n action: 'insertRow',\n rowNumber: rowNumber,\n numOfRows: numOfRows,\n insertBefore: insertBefore,\n rowRecords: rowRecords,\n rowData: rowData,\n rowNode: rowNode,\n });\n\n // Remove table references\n obj.updateTableReferences();\n\n // Events\n if (obj.ignoreEvents != true) {\n if (typeof(obj.options.oninsertrow) == 'function') {\n obj.options.oninsertrow(el, rowNumber, numOfRows, rowRecords, insertBefore);\n }\n }\n }\n }\n\n /**\n * Delete a row by number\n * \n * @param integer rowNumber - row number to be excluded\n * @param integer numOfRows - number of lines\n * @return void\n */\n obj.deleteRow = function(rowNumber, numOfRows) {\n // Global Configuration\n if (obj.options.allowDeleteRow == true) {\n if (obj.options.allowDeletingAllRows == true || obj.options.data.length > 1) {\n // Delete row definitions\n if (rowNumber == undefined) {\n var number = obj.getSelectedRows();\n\n if (! number[0]) {\n rowNumber = obj.options.data.length - 1;\n numOfRows = 1;\n } else {\n rowNumber = parseInt(number[0].getAttribute('data-y'));\n numOfRows = number.length;\n }\n }\n\n // Last column\n var lastRow = obj.options.data.length - 1;\n\n if (rowNumber == undefined || rowNumber > lastRow || rowNumber < 0) {\n rowNumber = lastRow;\n }\n\n if (! numOfRows) {\n numOfRows = 1;\n }\n\n // Do not delete more than the number of recoreds\n if (rowNumber + numOfRows >= obj.options.data.length) {\n numOfRows = obj.options.data.length - rowNumber;\n }\n\n // Onbeforedeleterow\n if (typeof(obj.options.onbeforedeleterow) == 'function') {\n if (! obj.options.onbeforedeleterow(el, rowNumber, numOfRows)) {\n console.log('onbeforedeleterow returned false');\n return false;\n }\n }\n\n if (parseInt(rowNumber) > -1) {\n // Merged cells\n var mergeExists = false;\n if (Object.keys(obj.options.mergeCells).length > 0) {\n for (var row = rowNumber; row < rowNumber + numOfRows; row++) {\n if (obj.isRowMerged(row, false).length) {\n mergeExists = true;\n }\n }\n }\n if (mergeExists) {\n if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {\n return false;\n } else {\n obj.destroyMerged();\n }\n }\n\n // Clear any search\n if (obj.options.search == true) {\n if (obj.results && obj.results.length != obj.rows.length) {\n if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) {\n obj.resetSearch();\n } else {\n return false;\n }\n }\n\n obj.results = null;\n }\n\n // Remove node\n for (var row = rowNumber; row < rowNumber + numOfRows; row++) {\n if (Array.prototype.indexOf.call(obj.tbody.children, obj.rows[row]) >= 0) {\n obj.rows[row].className = '';\n obj.rows[row].parentNode.removeChild(obj.rows[row]);\n }\n }\n\n // Remove data\n var rowRecords = obj.records.splice(rowNumber, numOfRows);\n var rowData = obj.options.data.splice(rowNumber, numOfRows);\n var rowNode = obj.rows.splice(rowNumber, numOfRows);\n\n // Respect pagination\n if (obj.options.pagination > 0 && obj.tbody.children.length != obj.options.pagination) {\n obj.page(obj.pageNumber);\n }\n\n // Remove selection\n obj.conditionalSelectionUpdate(1, rowNumber, (rowNumber + numOfRows) - 1);\n\n // Keep history\n obj.setHistory({\n action: 'deleteRow',\n rowNumber: rowNumber,\n numOfRows: numOfRows,\n insertBefore: 1,\n rowRecords: rowRecords,\n rowData: rowData,\n rowNode: rowNode\n });\n\n // Remove table references\n obj.updateTableReferences();\n\n // Events\n if (obj.ignoreEvents != true) {\n if (typeof(obj.options.ondeleterow) == 'function') {\n obj.options.ondeleterow(el, rowNumber, numOfRows, rowRecords);\n }\n }\n }\n } else {\n console.error('JEXCEL. It is not possible to delete the last row');\n }\n }\n }\n\n\n /**\n * Move column\n * \n * @return void\n */\n obj.moveColumn = function(o, d) {\n if (Object.keys(obj.options.mergeCells).length > 0) {\n if (o > d) {\r\n var insertBefore = 1;\r\n } else {\r\n var insertBefore = 0;\r\n }\r\n\r\n if (obj.isColMerged(o).length || obj.isColMerged(d, insertBefore).length) {\r\n if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {\n return false;\n } else {\n obj.destroyMerged();\n }\n }\n }\n\n var o = parseInt(o);\n var d = parseInt(d);\n\n if (o > d) {\n obj.headerContainer.insertBefore(obj.headers[o], obj.headers[d]);\n obj.colgroupContainer.insertBefore(obj.colgroup[o], obj.colgroup[d]);\n\n for (var j = 0; j < obj.rows.length; j++) {\n obj.rows[j].insertBefore(obj.records[j][o], obj.records[j][d]);\n }\n } else {\n obj.headerContainer.insertBefore(obj.headers[o], obj.headers[d].nextSibling);\n obj.colgroupContainer.insertBefore(obj.colgroup[o], obj.colgroup[d].nextSibling);\n\n for (var j = 0; j < obj.rows.length; j++) {\n obj.rows[j].insertBefore(obj.records[j][o], obj.records[j][d].nextSibling);\n }\n }\n\n obj.options.columns.splice(d, 0, obj.options.columns.splice(o, 1)[0]);\n obj.headers.splice(d, 0, obj.headers.splice(o, 1)[0]);\n obj.colgroup.splice(d, 0, obj.colgroup.splice(o, 1)[0]);\n\n for (var j = 0; j < obj.rows.length; j++) {\n obj.options.data[j].splice(d, 0, obj.options.data[j].splice(o, 1)[0]);\n obj.records[j].splice(d, 0, obj.records[j].splice(o, 1)[0]);\n }\n\n // Keeping history of changes\n obj.setHistory({\n action:'moveColumn',\n oldValue: o,\n newValue: d,\n });\n\n // Update table references\n obj.updateTableReferences();\n\n // Events\n if (obj.ignoreEvents != true) {\n if (typeof(obj.options.onmovecolumn) == 'function') {\n obj.options.onmovecolumn(el, o, d);\n }\n }\n }\n\n\n /**\n * Insert a new column\n * \n * @param mixed - num of columns to be added or data to be added in one single column\n * @param int columnNumber - number of columns to be created\n * @param bool insertBefore\n * @param object properties - column properties\n * @return void\n */\n obj.insertColumn = function(mixed, columnNumber, insertBefore, properties) {\n // Configuration\n if (obj.options.allowInsertColumn == true) {\n // Records\n var records = [];\n\n // Data to be insert\n var data = [];\n\n // The insert could be lead by number of rows or the array of data\n if (mixed > 0) {\n var numOfColumns = mixed;\n } else {\n var numOfColumns = 1;\n\n if (mixed) {\n data = mixed;\n }\n }\n\n // Direction\n var insertBefore = insertBefore ? true : false;\n\n // Current column number\n var lastColumn = obj.options.columns.length - 1;\n\n // Confirm position\n if (columnNumber == undefined || columnNumber >= parseInt(lastColumn) || columnNumber < 0) {\n columnNumber = lastColumn;\n }\n\n // Onbeforeinsertcolumn\n if (typeof(obj.options.onbeforeinsertcolumn) == 'function') {\n if (! obj.options.onbeforeinsertcolumn(el, columnNumber, numOfColumns, insertBefore)) {\n console.log('onbeforeinsertcolumn returned false');\n\n return false;\n }\n }\n\n // Merged cells\n if (Object.keys(obj.options.mergeCells).length > 0) {\n if (obj.isColMerged(columnNumber, insertBefore).length) {\n if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {\n return false;\n } else {\n obj.destroyMerged();\n }\n }\n }\n\n // Create default properties\n if (! properties) {\n properties = [];\n }\n\n for (var i = 0; i < numOfColumns; i++) {\n if (! properties[i]) {\n properties[i] = { type:'text', source:[], options:[], width:obj.options.defaultColWidth, align:obj.options.defaultColAlign };\n }\n }\n\n // Insert before\n var columnIndex = (! insertBefore) ? columnNumber + 1 : columnNumber;\n obj.options.columns = jexcel.injectArray(obj.options.columns, columnIndex, properties);\n\n // Open space in the containers\n var currentHeaders = obj.headers.splice(columnIndex);\n var currentColgroup = obj.colgroup.splice(columnIndex);\n\n // History\n var historyHeaders = [];\n var historyColgroup = [];\n var historyRecords = [];\n var historyData = [];\n\n // Add new headers\n for (var col = columnIndex; col < (numOfColumns + columnIndex); col++) {\n obj.createCellHeader(col);\n obj.headerContainer.insertBefore(obj.headers[col], obj.headerContainer.children[col+1]);\n obj.colgroupContainer.insertBefore(obj.colgroup[col], obj.colgroupContainer.children[col+1]);\n\n historyHeaders.push(obj.headers[col]);\n historyColgroup.push(obj.colgroup[col]);\n }\n\n // Adding visual columns\n for (var row = 0; row < obj.options.data.length; row++) {\n // Keep the current data\n var currentData = obj.options.data[row].splice(columnIndex);\n var currentRecord = obj.records[row].splice(columnIndex);\n\n // History\n historyData[row] = [];\n historyRecords[row] = [];\n\n for (var col = columnIndex; col < (numOfColumns + columnIndex); col++) {\n // New value\n var value = data[row] ? data[row] : '';\n obj.options.data[row][col] = value;\n // New cell\n var td = obj.createCell(col, row, obj.options.data[row][col]);\n obj.records[row][col] = td;\n // Add cell to the row\n if (obj.rows[row]) {\n obj.rows[row].insertBefore(td, obj.rows[row].children[col+1]);\n }\n\n // Record History\n historyData[row].push(value);\n historyRecords[row].push(td);\n }\n\n // Copy the data back to the main data\n Array.prototype.push.apply(obj.options.data[row], currentData);\n Array.prototype.push.apply(obj.records[row], currentRecord);\n }\n\n Array.prototype.push.apply(obj.headers, currentHeaders);\n Array.prototype.push.apply(obj.colgroup, currentColgroup);\n\n // Adjust nested headers\n if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) {\n // Flexible way to handle nestedheaders\n if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) {\n for (var j = 0; j < obj.options.nestedHeaders.length; j++) {\n var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) + numOfColumns;\n obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan;\n obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan);\n }\n } else {\n var colspan = parseInt(obj.options.nestedHeaders[0].colspan) + numOfColumns;\n obj.options.nestedHeaders[0].colspan = colspan;\n obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan);\n }\n }\n\n // Keep history\n obj.setHistory({\n action: 'insertColumn',\n columnNumber:columnNumber,\n numOfColumns:numOfColumns,\n insertBefore:insertBefore,\n columns:properties,\n headers:historyHeaders,\n colgroup:historyColgroup,\n records:historyRecords,\n data:historyData,\n });\n\n // Remove table references\n obj.updateTableReferences();\n\n // Events\n if (obj.ignoreEvents != true) {\n if (typeof(obj.options.oninsertcolumn) == 'function') {\n obj.options.oninsertcolumn(el, columnNumber, numOfColumns, historyRecords, insertBefore);\n }\n }\n }\n }\n\n /**\n * Delete a column by number\n * \n * @param integer columnNumber - reference column to be excluded\n * @param integer numOfColumns - number of columns to be excluded from the reference column\n * @return void\n */\n obj.deleteColumn = function(columnNumber, numOfColumns) {\n // Global Configuration\n if (obj.options.allowDeleteColumn == true) {\n if (obj.headers.length > 1) {\n // Delete column definitions\n if (columnNumber == undefined) {\n var number = obj.getSelectedColumns(true);\n\n if (! number.length) {\n // Remove last column\n columnNumber = obj.headers.length - 1;\n numOfColumns = 1;\n } else {\n // Remove selected\n columnNumber = parseInt(number[0]);\n numOfColumns = parseInt(number.length);\n }\n }\n\n // Lasat column\n var lastColumn = obj.options.data[0].length - 1;\n\n if (columnNumber == undefined || columnNumber > lastColumn || columnNumber < 0) {\n columnNumber = lastColumn;\n }\n\n // Minimum of columns to be delete is 1\n if (! numOfColumns) {\n numOfColumns = 1;\n }\n\n\n\n // Can't delete more than the limit of the table\n if (numOfColumns > obj.options.data[0].length - columnNumber) {\n numOfColumns = obj.options.data[0].length - columnNumber;\n }\n\n // onbeforedeletecolumn\n if (typeof(obj.options.onbeforedeletecolumn) == 'function') {\n if (! obj.options.onbeforedeletecolumn(el, columnNumber, numOfColumns)) {\n console.log('onbeforedeletecolumn returned false');\n return false;\n }\n }\n\n // Can't remove the last column\n if (parseInt(columnNumber) > -1) {\n // Merged cells\n var mergeExists = false;\n if (Object.keys(obj.options.mergeCells).length > 0) {\n for (var col = columnNumber; col < columnNumber + numOfColumns; col++) {\n if (obj.isColMerged(col, false).length) {\n mergeExists = true;\n }\n }\n }\n if (mergeExists) {\n if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) {\n return false;\n } else {\n obj.destroyMerged();\n }\n }\n\n // Delete the column properties\n var columns = obj.options.columns.splice(columnNumber, numOfColumns);\n\n for (var col = columnNumber; col < columnNumber + numOfColumns; col++) {\n obj.colgroup[col].className = '';\n obj.headers[col].className = '';\n obj.colgroup[col].parentNode.removeChild(obj.colgroup[col]);\n obj.headers[col].parentNode.removeChild(obj.headers[col]);\n }\n\n var historyHeaders = obj.headers.splice(columnNumber, numOfColumns);\n var historyColgroup = obj.colgroup.splice(columnNumber, numOfColumns);\n var historyRecords = [];\n var historyData = [];\n\n for (var row = 0; row < obj.options.data.length; row++) {\n for (var col = columnNumber; col < columnNumber + numOfColumns; col++) {\n obj.records[row][col].className = '';\n obj.records[row][col].parentNode.removeChild(obj.records[row][col]);\n }\n }\n\n // Delete headers\n for (var row = 0; row < obj.options.data.length; row++) {\n // History\n historyData[row] = obj.options.data[row].splice(columnNumber, numOfColumns);\n historyRecords[row] = obj.records[row].splice(columnNumber, numOfColumns);\n }\n\n // Remove selection\n obj.conditionalSelectionUpdate(0, columnNumber, (columnNumber + numOfColumns) - 1);\n\n // Adjust nested headers\n if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) {\n // Flexible way to handle nestedheaders\n if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) {\n for (var j = 0; j < obj.options.nestedHeaders.length; j++) {\n var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) - numOfColumns;\n obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan;\n obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan);\n }\n } else {\n var colspan = parseInt(obj.options.nestedHeaders[0].colspan) - numOfColumns;\n obj.options.nestedHeaders[0].colspan = colspan;\n obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan);\n }\n }\n\n // Keeping history of changes\n obj.setHistory({\n action:'deleteColumn',\n columnNumber:columnNumber,\n numOfColumns:numOfColumns,\n insertBefore: 1,\n columns:columns,\n headers:historyHeaders,\n colgroup:historyColgroup,\n records:historyRecords,\n data:historyData,\n });\n\n // Update table references\n obj.updateTableReferences();\n\n // Delete\n if (obj.ignoreEvents != true) {\n if (typeof(obj.options.ondeletecolumn) == 'function') {\n obj.options.ondeletecolumn(el, columnNumber, numOfColumns, historyRecords);\n }\n }\n }\n } else {\n console.error('JEXCEL. It is not possible to delete the last column');\n }\n }\n }\n\n /**\n * Get seleted rows numbers\n * \n * @return array\n */\n obj.getSelectedRows = function(asIds) {\n var rows = [];\n // Get all selected rows\n for (var j = 0; j < obj.rows.length; j++) {\n if (obj.rows[j].classList.contains('selected')) {\n if (asIds) {\n rows.push(j);\n } else {\n rows.push(obj.rows[j]);\n }\n }\n }\n\n return rows;\n },\n\n /**\n * Get seleted column numbers\n * \n * @return array\n */\n obj.getSelectedColumns = function() {\n var cols = [];\n // Get all selected cols\n for (var i = 0; i < obj.headers.length; i++) {\n if (obj.headers[i].classList.contains('selected')) {\n cols.push(i);\n }\n }\n\n return cols;\n }\n\n /**\n * Get highlighted\n * \n * @return array\n */\n obj.getHighlighted = function() {\n return obj.highlighted;\n }\n\n /**\n * Update cell references\n * \n * @return void\n */\n obj.updateTableReferences = function() {\n // Update headers\n for (var i = 0; i < obj.headers.length; i++) {\n var x = obj.headers[i].getAttribute('data-x');\n\n if (x != i) {\n // Update coords\n obj.headers[i].setAttribute('data-x', i);\n // Title\n if (! obj.headers[i].getAttribute('title')) {\n obj.headers[i].innerHTML = jexcel.getColumnName(i);\n }\n }\n }\n\n // Update all rows\n for (var j = 0; j < obj.rows.length; j++) {\n if (obj.rows[j]) {\n var y = obj.rows[j].getAttribute('data-y');\n\n if (y != j) {\n // Update coords\n obj.rows[j].setAttribute('data-y', j);\n obj.rows[j].children[0].setAttribute('data-y', j);\n // Row number\n obj.rows[j].children[0].innerHTML = j + 1;\n }\n }\n }\n\n // Regular cells affected by this change\n var affectedTokens = [];\n var mergeCellUpdates = [];\n\n // Update cell\n var updatePosition = function(x,y,i,j) {\n if (x != i) {\n obj.records[j][i].setAttribute('data-x', i);\n }\n if (y != j) {\n obj.records[j][i].setAttribute('data-y', j);\n }\n\n // Other updates\n if (x != i || y != j) {\n var columnIdFrom = jexcel.getColumnNameFromId([x, y]);\n var columnIdTo = jexcel.getColumnNameFromId([i, j]);\n affectedTokens[columnIdFrom] = columnIdTo;\n }\n }\n\n for (var j = 0; j < obj.records.length; j++) {\n for (var i = 0; i < obj.records[0].length; i++) {\n if (obj.records[j][i]) {\n // Current values\n var x = obj.records[j][i].getAttribute('data-x');\n var y = obj.records[j][i].getAttribute('data-y');\n\n // Update column\n if (obj.records[j][i].getAttribute('data-merged')) {\n var columnIdFrom = jexcel.getColumnNameFromId([x, y]);\n var columnIdTo = jexcel.getColumnNameFromId([i, j]);\n if (mergeCellUpdates[columnIdFrom] == null) {\n if (columnIdFrom == columnIdTo) {\n mergeCellUpdates[columnIdFrom] = false;\n } else {\n var totalX = parseInt(i - x);\n var totalY = parseInt(j - y);\n mergeCellUpdates[columnIdFrom] = [ columnIdTo, totalX, totalY ];\n }\n }\n } else {\n updatePosition(x,y,i,j);\n }\n }\n }\n }\n\n // Update merged if applicable\n var keys = Object.keys(mergeCellUpdates);\n if (keys.length) {\n for (var i = 0; i < keys.length; i++) {\n if (mergeCellUpdates[keys[i]]) {\n var info = jexcel.getIdFromColumnName(keys[i], true)\n var x = info[0];\n var y = info[1];\n updatePosition(x,y,x + mergeCellUpdates[keys[i]][1],y + mergeCellUpdates[keys[i]][2]);\n\n var columnIdFrom = keys[i];\n var columnIdTo = mergeCellUpdates[keys[i]][0];\n for (var j = 0; j < obj.options.mergeCells[columnIdFrom][2].length; j++) {\n var x = parseInt(obj.options.mergeCells[columnIdFrom][2][j].getAttribute('data-x'));\n var y = parseInt(obj.options.mergeCells[columnIdFrom][2][j].getAttribute('data-y'));\n obj.options.mergeCells[columnIdFrom][2][j].setAttribute('data-x', x + mergeCellUpdates[keys[i]][1]);\n obj.options.mergeCells[columnIdFrom][2][j].setAttribute('data-y', y + mergeCellUpdates[keys[i]][2]);\n }\n\n obj.options.mergeCells[columnIdTo] = obj.options.mergeCells[columnIdFrom];\n delete(obj.options.mergeCells[columnIdFrom]);\n }\n }\n }\n\n // Update formulas\n obj.updateFormulas(affectedTokens);\n\n // Update meta data\n obj.updateMeta(affectedTokens);\n\n // Refresh selection\n obj.refreshSelection();\n\n // Update table with custom configuration if applicable\n obj.updateTable();\n }\n\n /**\n * Custom settings for the cells\n */\n obj.updateTable = function() {\n // Check for spare\n if (obj.options.minSpareRows > 0) {\n var numBlankRows = 0;\n for (var j = obj.rows.length - 1; j >= 0; j--) {\n var test = false;\n for (var i = 0; i < obj.headers.length; i++) {\n if (obj.options.data[j][i]) {\n test = true;\n }\n }\n if (test) {\n break;\n } else {\n numBlankRows++;\n }\n }\n\n if (obj.options.minSpareRows - numBlankRows > 0) {\n obj.insertRow(obj.options.minSpareRows - numBlankRows)\n }\n }\n\n if (obj.options.minSpareCols > 0) {\n var numBlankCols = 0;\n for (var i = obj.headers.length - 1; i >= 0 ; i--) {\n var test = false;\n for (var j = 0; j < obj.rows.length; j++) {\n if (obj.options.data[j][i]) {\n test = true;\n }\n }\n if (test) {\n break;\n } else {\n numBlankCols++;\n }\n }\n\n if (obj.options.minSpareCols - numBlankCols > 0) {\n obj.insertColumn(obj.options.minSpareCols - numBlankCols)\n }\n }\n\n // Customizations by the developer\n if (typeof(obj.options.updateTable) == 'function') {\n if (obj.options.detachForUpdates) {\r\n el.removeChild(obj.content);\r\n }\r\n\n for (var j = 0; j < obj.rows.length; j++) {\n for (var i = 0; i < obj.headers.length; i++) {\n obj.options.updateTable(el, obj.records[j][i], i, j, obj.options.data[j][i], obj.records[j][i].innerText, jexcel.getColumnNameFromId([i, j]));\n }\n }\n\r\n if (obj.options.detachForUpdates) {\r\n el.insertBefore(obj.content, obj.pagination);\r\n }\n }\n\n // Update corner position\n setTimeout(function() {\n obj.updateCornerPosition();\n },0);\n }\n\r\n /**\r\n * Show column\r\n */\r\n obj.showColumn = function(colNumber) {\r\n obj.headers[colNumber].style.display = '';\r\n obj.colgroup[colNumber].style.display = '';\r\n for (var j = 0; j < obj.options.data.length; j++) {\r\n obj.records[j][colNumber].style.display = '';\r\n }\r\n }\r\n\r\n /**\r\n * Hide column\r\n */\r\n obj.hideColumn = function(colNumber) {\r\n obj.headers[colNumber].style.display = 'none';\r\n obj.colgroup[colNumber].style.display = 'none';\r\n for (var j = 0; j < obj.options.data.length; j++) {\r\n obj.records[j][colNumber].style.display = 'none';\r\n }\r\n }\r\n\n /**\n * Show index column\n */\n obj.showIndex = function() {\n obj.table.classList.remove('jexcel_hidden_index');\n }\n\n /**\n * Hide index column\n */\n obj.hideIndex = function() {\n obj.table.classList.add('jexcel_hidden_index');\n }\n\n /**\n * Update all related cells in the chain\n */\n var chainLoopProtection = [];\n\n obj.updateFormulaChain = function(x, y, records) {\n var cellId = jexcel.getColumnNameFromId([x, y]);\n if (obj.formula[cellId] && obj.formula[cellId].length > 0) {\n if (chainLoopProtection[cellId]) {\n obj.records[y][x].innerHTML = '#ERROR';\n obj.formula[cellId] = '';\n } else {\n // Protection\n chainLoopProtection[cellId] = true;\n\n for (var i = 0; i < obj.formula[cellId].length; i++) {\n var cell = jexcel.getIdFromColumnName(obj.formula[cellId][i], true);\n // Update cell\n var value = ''+obj.options.data[cell[1]][cell[0]];\n if (value.substr(0,1) == '=') {\n records.push(obj.updateCell(cell[0], cell[1], value, true));\n } else {\n // No longer a formula, remove from the chain\n Object.keys(obj.formula)[i] = null;\n }\n obj.updateFormulaChain(cell[0], cell[1], records);\n }\n }\n }\n\n chainLoopProtection = [];\n }\n\n /**\n * Update formulas\n */\n obj.updateFormulas = function(referencesToUpdate) {\n // Update formulas\n for (var j = 0; j < obj.options.data.length; j++) {\n for (var i = 0; i < obj.options.data[0].length; i++) {\n var value = '' + obj.options.data[j][i];\n // Is formula\n if (value.substr(0,1) == '=') {\n // Replace tokens\n var newFormula = obj.updateFormula(value, referencesToUpdate);\n if (newFormula != value) {\n obj.options.data[j][i] = newFormula;\n }\n }\n }\n }\n\n // Update formula chain\n var formula = [];\n var keys = Object.keys(obj.formula);\n for (var j = 0; j < keys.length; j++) {\n // Current key and values\n var key = keys[j];\n var value = obj.formula[key];\n // Update key\n if (referencesToUpdate[key]) {\n key = referencesToUpdate[key];\n }\n // Update values\n formula[key] = [];\n for (var i = 0; i < value.length; i++) {\n var letter = value[i];\n if (referencesToUpdate[letter]) {\n letter = referencesToUpdate[letter];\n }\n formula[key].push(letter);\n }\n }\n obj.formula = formula;\n }\n\n /**\n * Update formula\n */\n obj.updateFormula = function(formula, referencesToUpdate) {\n var testLetter = /[A-Z]/;\n var testNumber = /[0-9]/;\n\n var newFormula = '';\n var letter = null;\n var number = null;\n var token = '';\n\n for (var index = 0; index < formula.length; index++) {\n if (testLetter.exec(formula[index])) {\n letter = 1;\n number = 0;\n token += formula[index];\n } else if (testNumber.exec(formula[index])) {\n number = letter ? 1 : 0;\n token += formula[index];\n } else {\n if (letter && number) {\n token = referencesToUpdate[token] ? referencesToUpdate[token] : token;\n }\n newFormula += token;\n newFormula += formula[index];\n letter = 0;\n number = 0;\n token = '';\n }\n }\n\n if (token) {\n if (letter && number) {\n token = referencesToUpdate[token] ? referencesToUpdate[token] : token;\n }\n newFormula += token;\n }\n\n return newFormula;\n }\n\n /**\n * Parse formulas\n */\n obj.executeFormula = function(expression, x, y) {\n\n var formulaResults = [];\n var formulaLoopProtection = [];\n\n // Execute formula with loop protection\n var execute = function(expression, x, y) {\n // Parent column identification\n var parentId = jexcel.getColumnNameFromId([x, y]);\n\n // Code protection\n if (formulaLoopProtection[parentId]) {\n console.error('Reference loop detected');\n return '#ERROR';\n }\n\n formulaLoopProtection[parentId] = true;\n\n // Convert range tokens\n var tokensUpdate = function(tokens) {\n for (var index = 0; index < tokens.length; index++) {\n var f = [];\n var token = tokens[index].split(':');\n var e1 = jexcel.getIdFromColumnName(token[0], true);\n var e2 = jexcel.getIdFromColumnName(token[1], true);\n\n if (e1[0] <= e2[0]) {\n var x1 = e1[0];\n var x2 = e2[0];\n } else {\n var x1 = e2[0];\n var x2 = e1[0];\n }\n\n if (e1[1] <= e2[1]) {\n var y1 = e1[1];\n var y2 = e2[1];\n } else {\n var y1 = e2[1];\n var y2 = e1[1];\n }\n\n for (var j = y1; j <= y2; j++) {\n for (var i = x1; i <= x2; i++) {\n f.push(jexcel.getColumnNameFromId([i, j]));\n }\n }\n\n expression = expression.replace(tokens[index], f.join(','));\n }\n }\n\n var tokens = expression.match(/([A-Z]+[0-9]+)\\:([A-Z]+[0-9]+)/g);\n if (tokens && tokens.length) {\n tokensUpdate(tokens);\n }\n\n // String\n var evalstring = '';\n\n // Get tokens\n var tokens = expression.match(/([A-Z]+[0-9]+)/g);\n\n // Direct self-reference protection\n if (tokens && tokens.indexOf(parentId) > -1) {\n console.error('Self Reference detected');\n return '#ERROR';\n } else {\n if (tokens) {\n for (var i = 0; i < tokens.length; i++) {\n // Keep chain\n if (! obj.formula[tokens[i]]) {\n obj.formula[tokens[i]] = [];\n }\n // Is already in the register\n if (obj.formula[tokens[i]].indexOf(parentId) < 0) {\n obj.formula[tokens[i]].push(parentId);\n }\n\n // Do not calculate again\n if (eval('typeof(' + tokens[i] + ') == \"undefined\"')) {\n // Coords\n var position = jexcel.getIdFromColumnName(tokens[i], 1);\n // Get value\n if (typeof(obj.options.data[position[1]]) != 'undefined' && typeof(obj.options.data[position[1]][position[0]]) != 'undefined') {\n var value = obj.options.data[position[1]][position[0]];\n } else {\n var value = '';\n }\n // Get column data\n if ((''+value).substr(0,1) == '=') {\n if (formulaResults[tokens[i]]) {\n value = formulaResults[tokens[i]];\n } else {\n value = execute(value, position[0], position[1]);\n formulaResults[tokens[i]] = value;\n }\n }\n // Type!\n if ((''+value).trim() == '') {\n // Null\n evalstring += \"var \" + tokens[i] + \" = null;\";\n } else {\n if (value == Number(value) && obj.options.autoCasting == true) {\n // Number\n evalstring += \"var \" + tokens[i] + \" = \" + Number(value) + \";\";\n } else {\n // Trying any formatted number\n var number = obj.parseNumber(value, position[0])\n if (obj.options.autoCasting == true && number) {\n // Render as number\n evalstring += \"var \" + tokens[i] + \" = \" + number + \";\";\n } else {\n // Render as string\n evalstring += \"var \" + tokens[i] + \" = '\" + value + \"';\";\n }\n }\n }\n }\n }\n }\n\n // Convert formula to javascript\n try {\n evalstring += \"function COLUMN() { return parseInt(x) + 1; }; function ROW() { return parseInt(y) + 1; }; function CELL() { return parentId; };\";\n\n var res = eval(evalstring + expression.substr(1));\n } catch (e) {\n var res = '#ERROR';\n }\n\n return res;\n }\n }\n\n return execute(expression, x, y);\n }\n\n /**\n * Trying to extract a number from a string\n */\n obj.parseNumber = function(value, columnNumber) {\n // Decimal point\n var decimal = columnNumber && obj.options.columns[columnNumber].decimal ? obj.options.columns[columnNumber].decimal : '.';\n\n // Parse both parts of the number\n var number = ('' + value);\n number = number.split(decimal);\n number[0] = number[0].match(/[+-]?[0-9]/g);\n if (number[0]) {\n number[0] = number[0].join('');\n }\n if (number[1]) {\n number[1] = number[1].match(/[0-9]*/g).join('');\n }\n\n // Is a valid number\n if (number[0] && Number(number[0]) >= 0) {\n if (! number[1]) {\n var value = Number(number[0] + '.00');\n } else {\n var value = Number(number[0] + '.' + number[1]);\n }\n } else {\n var value = null;\n }\n\n return value;\n }\n\n /**\n * Get row number\n */\n obj.row = function(cell) {\n }\n\n /**\n * Get col number\n */\n obj.col = function(cell) {\n }\n\n obj.up = function(shiftKey, ctrlKey) {\n if (shiftKey) {\n if (obj.selectedCell[3] > 0) {\n obj.up.visible(1, ctrlKey ? 0 : 1)\n }\n } else {\n if (obj.selectedCell[1] > 0) {\n obj.up.visible(0, ctrlKey ? 0 : 1)\n }\n obj.selectedCell[2] = obj.selectedCell[0];\n obj.selectedCell[3] = obj.selectedCell[1];\n }\n\n // Update selection\n obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);\n\n // Change page\n if (obj.options.lazyLoading == true) {\n if (obj.selectedCell[1] == 0 || obj.selectedCell[3] == 0) {\n obj.loadPage(0);\n obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);\n } else {\n if (obj.loadValidation()) {\n obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);\n } else {\n var item = parseInt(obj.tbody.firstChild.getAttribute('data-y'));\n if (obj.selectedCell[1] - item < 30) {\n obj.loadUp();\n obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);\n }\n }\n }\n } else if (obj.options.pagination > 0) {\n var pageNumber = obj.whichPage(obj.selectedCell[3]);\n if (pageNumber != obj.pageNumber) {\n obj.page(pageNumber);\n }\n }\n\n obj.updateScroll(1);\n }\n\n obj.up.visible = function(group, direction) {\n if (group == 0) {\n var x = parseInt(obj.selectedCell[0]);\n var y = parseInt(obj.selectedCell[1]);\n } else {\n var x = parseInt(obj.selectedCell[2]);\n var y = parseInt(obj.selectedCell[3]);\n }\n\n if (direction == 0) {\n for (var j = 0; j < y; j++) {\n if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') {\n y = j;\n break;\n }\n }\n } else {\n y = obj.up.get(x, y);\n }\n\n if (group == 0) {\n obj.selectedCell[0] = x;\n obj.selectedCell[1] = y;\n } else {\n obj.selectedCell[2] = x;\n obj.selectedCell[3] = y;\n }\n }\n\n obj.up.get = function(x, y) {\n var x = parseInt(x);\n var y = parseInt(y);\n for (var j = (y - 1); j >= 0; j--) {\n if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') {\n if (obj.records[j][x].getAttribute('data-merged')) {\n if (obj.records[j][x] == obj.records[y][x]) {\n continue;\n }\n }\n y = j;\n break;\n }\n }\n\n return y;\n }\n\n obj.down = function(shiftKey, ctrlKey) {\n if (shiftKey) {\n if (obj.selectedCell[3] < obj.records.length - 1) {\n obj.down.visible(1, ctrlKey ? 0 : 1)\n }\n } else {\n if (obj.selectedCell[1] < obj.records.length - 1) {\n obj.down.visible(0, ctrlKey ? 0 : 1)\n }\n obj.selectedCell[2] = obj.selectedCell[0];\n obj.selectedCell[3] = obj.selectedCell[1];\n }\n\n obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);\n\n // Change page\n if (obj.options.lazyLoading == true) {\n if ((obj.selectedCell[1] == obj.records.length - 1 || obj.selectedCell[3] == obj.records.length - 1)) {\n obj.loadPage(-1);\n obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);\n } else {\n if (obj.loadValidation()) {\n obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);\n } else {\n var item = parseInt(obj.tbody.lastChild.getAttribute('data-y'));\n if (item - obj.selectedCell[3] < 30) {\n obj.loadDown();\n obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);\n }\n }\n }\n } else if (obj.options.pagination > 0) {\n var pageNumber = obj.whichPage(obj.selectedCell[3]);\n if (pageNumber != obj.pageNumber) {\n obj.page(pageNumber);\n }\n }\n\n obj.updateScroll(3);\n }\n\n obj.down.visible = function(group, direction) {\n if (group == 0) {\n var x = parseInt(obj.selectedCell[0]);\n var y = parseInt(obj.selectedCell[1]);\n } else {\n var x = parseInt(obj.selectedCell[2]);\n var y = parseInt(obj.selectedCell[3]);\n }\n\n if (direction == 0) {\n for (var j = obj.rows.length - 1; j > y; j--) {\n if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') {\n y = j;\n break;\n }\n }\n } else {\n y = obj.down.get(x, y);\n }\n\n if (group == 0) {\n obj.selectedCell[0] = x;\n obj.selectedCell[1] = y;\n } else {\n obj.selectedCell[2] = x;\n obj.selectedCell[3] = y;\n }\n }\n\n obj.down.get = function(x, y) {\n var x = parseInt(x);\n var y = parseInt(y);\n for (var j = (y + 1); j < obj.rows.length; j++) {\n if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') {\n if (obj.records[j][x].getAttribute('data-merged')) {\n if (obj.records[j][x] == obj.records[y][x]) {\n continue;\n }\n }\n y = j;\n break;\n }\n }\n\n return y;\n }\n\n obj.right = function(shiftKey, ctrlKey) {\n if (shiftKey) {\n if (obj.selectedCell[2] < obj.headers.length - 1) {\n obj.right.visible(1, ctrlKey ? 0 : 1)\n }\n } else {\n if (obj.selectedCell[0] < obj.headers.length - 1) {\n obj.right.visible(0, ctrlKey ? 0 : 1)\n }\n obj.selectedCell[2] = obj.selectedCell[0];\n obj.selectedCell[3] = obj.selectedCell[1];\n }\n\n obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);\n obj.updateScroll(2);\n }\n\n obj.right.visible = function(group, direction) {\n if (group == 0) {\n var x = parseInt(obj.selectedCell[0]);\n var y = parseInt(obj.selectedCell[1]);\n } else {\n var x = parseInt(obj.selectedCell[2]);\n var y = parseInt(obj.selectedCell[3]);\n }\n\n if (direction == 0) {\n for (var i = obj.headers.length - 1; i > x; i--) {\n if (obj.records[y][i].style.display != 'none') {\n x = i;\n break;\n }\n }\n } else {\n x = obj.right.get(x, y);\n }\n\n if (group == 0) {\n obj.selectedCell[0] = x;\n obj.selectedCell[1] = y;\n } else {\n obj.selectedCell[2] = x;\n obj.selectedCell[3] = y;\n }\n }\n\n obj.right.get = function(x, y) {\n var x = parseInt(x);\n var y = parseInt(y);\n\n for (var i = (x + 1); i < obj.headers.length; i++) {\n if (obj.records[y][i].style.display != 'none') {\n if (obj.records[y][i].getAttribute('data-merged')) {\n if (obj.records[y][i] == obj.records[y][x]) {\n continue;\n }\n }\n x = i;\n break;\n }\n }\n\n return x;\n }\n\n obj.left = function(shiftKey, ctrlKey) {\n if (shiftKey) {\n if (obj.selectedCell[2] > 0) {\n obj.left.visible(1, ctrlKey ? 0 : 1)\n }\n } else {\n if (obj.selectedCell[0] > 0) {\n obj.left.visible(0, ctrlKey ? 0 : 1)\n }\n obj.selectedCell[2] = obj.selectedCell[0];\n obj.selectedCell[3] = obj.selectedCell[1];\n }\n\n obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);\n obj.updateScroll(0);\n }\n\n obj.left.visible = function(group, direction) {\n if (group == 0) {\n var x = parseInt(obj.selectedCell[0]);\n var y = parseInt(obj.selectedCell[1]);\n } else {\n var x = parseInt(obj.selectedCell[2]);\n var y = parseInt(obj.selectedCell[3]);\n }\n\n if (direction == 0) {\n for (var i = 0; i < x; i++) {\n if (obj.records[y][i].style.display != 'none') {\n x = i;\n break;\n }\n }\n } else {\n x = obj.left.get(x, y);\n }\n\n if (group == 0) {\n obj.selectedCell[0] = x;\n obj.selectedCell[1] = y;\n } else {\n obj.selectedCell[2] = x;\n obj.selectedCell[3] = y;\n }\n }\n\n obj.left.get = function(x, y) {\n var x = parseInt(x);\n var y = parseInt(y);\n for (var i = (x - 1); i >= 0; i--) {\n if (obj.records[y][i].style.display != 'none') {\n if (obj.records[y][i].getAttribute('data-merged')) {\n if (obj.records[y][i] == obj.records[y][x]) {\n continue;\n }\n }\n x = i;\n break;\n }\n }\n\n return x;\n }\n\n obj.first = function(shiftKey, ctrlKey) {\n if (shiftKey) {\n if (ctrlKey) {\n obj.selectedCell[3] = 0;\n } else {\n obj.left.visible(1, 0);\n }\n } else {\n if (ctrlKey) {\n obj.selectedCell[1] = 0;\n } else {\n obj.left.visible(0, 0);\n }\n obj.selectedCell[2] = obj.selectedCell[0];\n obj.selectedCell[3] = obj.selectedCell[1];\n }\n\n // Change page\n if (obj.options.lazyLoading == true && (obj.selectedCell[1] == 0 || obj.selectedCell[3] == 0)) {\n obj.loadPage(0);\n } else if (obj.options.pagination > 0) {\n var pageNumber = obj.whichPage(obj.selectedCell[3]);\n if (pageNumber != obj.pageNumber) {\n obj.page(pageNumber);\n }\n }\n\n obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);\n obj.updateScroll(1);\n }\n\n obj.last = function(shiftKey, ctrlKey) {\n if (shiftKey) {\n if (ctrlKey) {\n obj.selectedCell[3] = obj.records.length - 1;\n } else {\n obj.right.visible(1, 0);\n }\n } else {\n if (ctrlKey) {\n obj.selectedCell[1] = obj.records.length - 1;\n } else {\n obj.right.visible(0, 0);\n }\n obj.selectedCell[2] = obj.selectedCell[0];\n obj.selectedCell[3] = obj.selectedCell[1];\n }\n\n // Change page\n if (obj.options.lazyLoading == true && (obj.selectedCell[1] == obj.records.length - 1 || obj.selectedCell[3] == obj.records.length - 1)) {\n obj.loadPage(-1);\n } else if (obj.options.pagination > 0) {\n var pageNumber = obj.whichPage(obj.selectedCell[3]);\n if (pageNumber != obj.pageNumber) {\n obj.page(pageNumber);\n }\n }\n\n obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);\n obj.updateScroll(3);\n }\n\n obj.selectAll = function() {\n if (! obj.selectedCell) {\n obj.selectedCell = [];\n }\n\n obj.selectedCell[0] = 0;\n obj.selectedCell[1] = 0;\n obj.selectedCell[2] = obj.headers.length - 1;\n obj.selectedCell[3] = obj.records.length - 1;\n\n obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]);\n }\n\n /**\n * Go to a page in a lazyLoading\n */\n obj.loadPage = function(pageNumber) {\n // Search\n if (obj.options.search == true && obj.results) {\n var results = obj.results;\n } else {\n var results = obj.rows;\n }\n\n // Per page\n var quantityPerPage = 100;\n\n // pageNumber\n if (pageNumber == null || pageNumber == -1) {\n // Last page\n pageNumber = Math.ceil(results.length / quantityPerPage); \n }\n\n var startRow = (pageNumber * quantityPerPage);\n var finalRow = (pageNumber * quantityPerPage) + quantityPerPage;\n if (finalRow > results.length) {\n finalRow = results.length;\n }\n startRow = finalRow - 100;\n if (startRow < 0) {\n startRow = 0;\n }\n\n // Appeding items\n for (var j = startRow; j < finalRow; j++) {\n if (obj.options.search == true && obj.results) {\n obj.tbody.appendChild(obj.rows[results[j]]);\n } else {\n obj.tbody.appendChild(obj.rows[j]);\n }\n\n if (obj.tbody.children.length > quantityPerPage) {\n obj.tbody.removeChild(obj.tbody.firstChild);\n }\n }\n }\n\n obj.loadUp = function() {\n // Search\n if (obj.options.search == true && obj.results) {\n var results = obj.results;\n } else {\n var results = obj.rows;\n }\n var test = 0;\n if (results.length > 100) {\n // Get the first element in the page\n var item = parseInt(obj.tbody.firstChild.getAttribute('data-y'));\n if (obj.options.search == true && obj.results) {\n item = results.indexOf(item);\n }\n if (item > 0) {\n for (var j = 0; j < 30; j++) {\n item = item - 1;\n if (item > -1) {\n if (obj.options.search == true && obj.results) {\n obj.tbody.insertBefore(obj.rows[results[item]], obj.tbody.firstChild);\n } else {\n obj.tbody.insertBefore(obj.rows[item], obj.tbody.firstChild);\n }\n if (obj.tbody.children.length > 100) {\n obj.tbody.removeChild(obj.tbody.lastChild);\n test = 1;\n }\n }\n }\n }\n }\n return test;\n }\n\n obj.loadDown = function() {\n // Search\n if (obj.options.search == true && obj.results) {\n var results = obj.results;\n } else {\n var results = obj.rows;\n }\n var test = 0;\n if (results.length > 100) {\n // Get the last element in the page\n var item = parseInt(obj.tbody.lastChild.getAttribute('data-y'));\n if (obj.options.search == true && obj.results) {\n item = results.indexOf(item);\n }\n if (item < obj.rows.length - 1) {\n for (var j = 0; j <= 30; j++) {\n if (item < results.length) {\n if (obj.options.search == true && obj.results) {\n obj.tbody.appendChild(obj.rows[results[item]]);\n } else {\n obj.tbody.appendChild(obj.rows[item]);\n }\n if (obj.tbody.children.length > 100) {\n obj.tbody.removeChild(obj.tbody.firstChild);\n test = 1;\n }\n }\n item = item + 1;\n }\n }\n }\n\n return test;\n }\n\n obj.loadValidation = function() {\n if (obj.selectedCell) {\n var currentPage = parseInt(obj.tbody.firstChild.getAttribute('data-y')) / 100;\n var selectedPage = parseInt(obj.selectedCell[3] / 100);\n var totalPages = parseInt(obj.rows.length / 100);\n\n if (currentPage != selectedPage && selectedPage <= totalPages) {\n if (! Array.prototype.indexOf.call(obj.tbody.children, obj.rows[obj.selectedCell[3]])) {\n obj.loadPage(selectedPage);\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Reset search\n */\n obj.resetSearch = function() {\n obj.searchInput.value = '';\n obj.search('');\n obj.results = null;\n }\n\n /**\n * Search\n */\n obj.search = function(query) {\n // Query\n if (query) {\n var query = query.toLowerCase();\n }\n\n // Reset selection\n obj.resetSelection();\n\n // Total of results\n obj.pageNumber = 0;\n obj.results = [];\n\n if (query) {\n // Search filter\n var search = function(item, query, index) {\n for (var i = 0; i < item.length; i++) {\n if ((''+item[i]).toLowerCase().search(query) >= 0 ||\n (''+obj.records[index][i].innerHTML).toLowerCase().search(query) >= 0) {\n return true;\n }\n }\n return false;\n }\n\n // Result\n var addToResult = function(k) {\n if (obj.results.indexOf(k) == -1) {\n obj.results.push(k);\n }\n }\n\n // Filter\n var data = obj.options.data.filter(function(v, k) {\n if (search(v, query, k)) {\n // Merged rows found\n var rows = obj.isRowMerged(k);\n if (rows.length) {\n for (var i = 0; i < rows.length; i++) {\n var row = jexcel.getIdFromColumnName(rows[i], true);\n for (var j = 0; j < obj.options.mergeCells[rows[i]][1]; j++) {\n addToResult(row[1]+j);\n }\n }\n } else {\n // Normal row found\n addToResult(k);\n }\n return true;\n } else {\n return false;\n }\n });\n } else {\n obj.results = null;\n }\n\n var total = 0;\n var index = 0;\n\n // Page 1\n if (obj.options.lazyLoading == true) {\n total = 100;\n } else if (obj.options.pagination > 0) {\n total = obj.options.pagination;\n } else {\n if (obj.results) {\n total = obj.results.length;\n } else {\n total = obj.rows.length;\n }\n }\n\n // Reset current nodes\n while (obj.tbody.firstChild) {\n obj.tbody.removeChild(obj.tbody.firstChild);\n }\n\n // Hide all records from the table\n for (var j = 0; j < obj.rows.length; j++) {\n if (! obj.results || obj.results.indexOf(j) > -1) {\n if (index < total) {\n obj.tbody.appendChild(obj.rows[j]);\n index++;\n }\n obj.rows[j].style.display = '';\n } else {\n obj.rows[j].style.display = 'none';\n }\n }\n\n // Update pagination\n if (obj.options.pagination > 0) {\n obj.updatePagination();\n }\n\n return total;\n }\n\n /**\n * Which page the cell is\n */\n obj.whichPage = function(cell) {\n // Search\n if (obj.options.search == true && obj.results) {\n cell = obj.results.indexOf(cell);\n }\n\n return (Math.ceil((parseInt(cell) + 1) / parseInt(obj.options.pagination))) - 1;\n }\n\n /**\n * Go to page\n */\n obj.page = function(pageNumber) {\n var oldPage = obj.pageNumber;\r\n\n // Search\n if (obj.options.search == true && obj.results) {\n var results = obj.results;\n } else {\n var results = obj.rows;\n }\n\n // Per page\n var quantityPerPage = parseInt(obj.options.pagination);\n\n // pageNumber\n if (pageNumber == null || pageNumber == -1) {\n // Last page\n pageNumber = Math.ceil(results.length / quantityPerPage); \n }\n\n // Page number\n obj.pageNumber = pageNumber;\n\n var startRow = (pageNumber * quantityPerPage);\n var finalRow = (pageNumber * quantityPerPage) + quantityPerPage;\n if (finalRow > results.length) {\n finalRow = results.length;\n }\n if (startRow < 0) {\n startRow = 0;\n }\n\n // Reset container\n while (obj.tbody.firstChild) {\n obj.tbody.removeChild(obj.tbody.firstChild);\n }\n\n // Appeding items\n for (var j = startRow; j < finalRow; j++) {\n if (obj.options.search == true && obj.results) {\n obj.tbody.appendChild(obj.rows[results[j]]);\n } else {\n obj.tbody.appendChild(obj.rows[j]);\n }\n }\n\n if (obj.options.pagination > 0) {\n obj.updatePagination();\n }\n\n // Update corner position\n obj.updateCornerPosition();\n\r\n if (typeof(obj.options.onchangepage) == 'function') {\r\n obj.options.onchangepage(el, pageNumber, oldPage);\r\n }\n }\n\n /**\n * Update the pagination\n */\n obj.updatePagination = function() {\n // Reset container\n obj.pagination.children[0].innerHTML = '';\n obj.pagination.children[1].innerHTML = '';\n\n // Start pagination\n if (obj.options.pagination) {\n // Searchable\n if (obj.options.search == true && obj.results) {\n var results = obj.results.length;\n } else {\n var results = obj.rows.length;\n }\n\n if (! results) {\n // No records found\n obj.pagination.children[0].innerHTML = obj.options.text.noRecordsFound;\n } else {\n // Pagination container\n var quantyOfPages = Math.ceil(results / obj.options.pagination);\n\n if (obj.pageNumber < 6) {\n var startNumber = 1;\n var finalNumber = quantyOfPages < 10 ? quantyOfPages : 10;\n } else if (quantyOfPages - obj.pageNumber < 5) {\n var startNumber = quantyOfPages - 9;\n var finalNumber = quantyOfPages;\n if (startNumber < 1) {\n startNumber = 1;\n }\n } else {\n var startNumber = obj.pageNumber - 4;\n var finalNumber = obj.pageNumber + 5;\n }\n\n // First\n if (startNumber > 1) {\n var paginationItem = document.createElement('div');\n paginationItem.className = 'jexcel_page';\n paginationItem.innerHTML = '<';\n paginationItem.title = 1;\n obj.pagination.children[1].appendChild(paginationItem);\n }\n\n // Get page links\n for (var i = startNumber; i <= finalNumber; i++) {\n var paginationItem = document.createElement('div');\n paginationItem.className = 'jexcel_page';\n paginationItem.innerHTML = i;\n obj.pagination.children[1].appendChild(paginationItem);\n\n if (obj.pageNumber == (i-1)) {\n paginationItem.classList.add('jexcel_page_selected');\n }\n }\n\n // Last\n if (finalNumber < quantyOfPages) {\n var paginationItem = document.createElement('div');\n paginationItem.className = 'jexcel_page';\n paginationItem.innerHTML = '>';\n paginationItem.title = quantyOfPages;\n obj.pagination.children[1].appendChild(paginationItem);\n }\n\n // Text\n var format = function(format) {\n var args = Array.prototype.slice.call(arguments, 1);\n return format.replace(/{(\\d+)}/g, function(match, number) {\n return typeof args[number] != 'undefined'\n ? args[number]\n : match\n ;\n });\n };\n\n obj.pagination.children[0].innerHTML = format(obj.options.text.showingPage, obj.pageNumber + 1, quantyOfPages)\n }\n }\n }\n\n /**\n * Download CSV table\n * \n * @return null\n */\n obj.download = function(includeHeaders) {\n if (obj.options.allowExport == false) {\n console.error('Export not allowed');\n } else {\n // Data\n var data = '';\n if (includeHeaders == true || obj.options.includeHeadersOnDownload == true) {\n data += obj.getHeaders();\n data += \"\\r\\n\";\n }\n\r\n // Get data\n data += obj.copy(false, obj.options.csvDelimiter, true);\r\n\n // Download element\n var blob = new Blob([\"\\uFEFF\"+data], {type: 'text/csv;charset=utf-8;'});\n\r\n // IE Compatibility\r\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\r\n window.navigator.msSaveOrOpenBlob(blob, options.csvFileName + '.csv');\r\n } else {\n // Download element\n var pom = document.createElement('a');\n var url = URL.createObjectURL(blob);\n pom.href = url;\n pom.setAttribute('download', obj.options.csvFileName + '.csv');\n document.body.appendChild(pom);\n pom.click();\n pom.parentNode.removeChild(pom);\n }\n }\n }\n\n /**\n * Initializes a new history record for undo/redo\n * \n * @return null\n */\n obj.setHistory = function(changes) {\n if (obj.ignoreHistory != true) {\n // Increment and get the current history index\n var index = ++obj.historyIndex;\n\n // Slice the array to discard undone changes\n obj.history = (obj.history = obj.history.slice(0, index + 1));\n\n // Keep history\n obj.history[index] = changes;\n }\n }\n\n /**\n * Copy method\n * \n * @param bool highlighted - Get only highlighted cells\n * @param delimiter - \\t default to keep compatibility with excel\n * @return string value\n */\n obj.copy = function(highlighted, delimiter, returnData) {\n if (! delimiter) {\n delimiter = \"\\t\";\n }\n\n // Controls\n var col = [];\n var colLabel = [];\n var row = [];\n var rowLabel = [];\n var x = obj.options.data[0].length\n var y = obj.options.data.length\n var tmp = '';\n\n // Reset container\n obj.style = [];\n\n // Go through the columns to get the data\n for (var j = 0; j < y; j++) {\n col = [];\n colLabel = [];\n\n for (var i = 0; i < x; i++) {\n // If cell is highlighted\n if (! highlighted || obj.records[j][i].classList.contains('highlight')) {\n // Values\n var value = obj.options.data[j][i];\n if (value.match && (value.match(/,/g) || value.match(/\\n/) || value.match(/\\\"/))) {\n value = value.replace(new RegExp('\"', 'g'), '\"\"');\n value = '\"' + value + '\"';\n }\n col.push(value);\n\n // Labels\n if (obj.options.columns[i].type == 'checkbox' || obj.options.columns[i].type == 'radio') {\r\n var label = value;\n } else {\r\n var label = obj.records[j][i].innerHTML;\n if (label.match && (label.match(/,/g) || label.match(/\\n/) || label.match(/\\\"/))) {\n // Scape double quotes\n label = label.replace(new RegExp('\"', 'g'), '\"\"');\n label = '\"' + label + '\"';\n }\r\n }\n colLabel.push(label);\n\n // Get style\n tmp = obj.records[j][i].getAttribute('style');\n obj.style.push(tmp ? tmp : '');\n }\n }\n\n if (col.length) {\n row.push(col.join(delimiter));\n }\n if (colLabel.length) {\n rowLabel.push(colLabel.join(delimiter));\n }\n }\n\n // Final string\n var str = row.join(\"\\r\\n\");\n var strLabel = rowLabel.join(\"\\r\\n\");\n\n // Create a hidden textarea to copy the values\n if (! returnData) {\n if (obj.options.copyCompatibility == true) {\n obj.textarea.value = strLabel;\n } else {\n obj.textarea.value = str;\n }\n obj.textarea.select();\n document.execCommand(\"copy\");\n }\n\n // Keep data\n if (obj.options.copyCompatibility == true) {\n obj.data = strLabel;\n } else {\n obj.data = str;\n }\n // Keep non visible information\n obj.hashString = obj.hash(obj.data);\n\n return obj.data;\n }\n\n /**\n * jExcel paste method\n * \n * @param integer row number\n * @return string value\n */\n obj.paste = function(x, y, data) {\n // Paste filter\n if (typeof(obj.options.onbeforepaste) == 'function') {\n var data = obj.options.onbeforepaste(el, data);\n }\n\n // Controls\n var hash = obj.hash(data);\n var style = (hash == obj.hashString) ? obj.style : null;\n\n // Depending on the behavior\n if (obj.options.copyCompatibility == true && hash == obj.hashString) {\n var data = obj.data;\n }\n\n // Split new line\n var data = obj.parseCSV(data, \"\\t\");\n\n if (x != null && y != null && data) {\n // Records\n var i = 0;\n var j = 0;\n var records = [];\n var newStyle = {};\n var oldStyle = {};\n var styleIndex = 0;\n\n // Index\n var colIndex = parseInt(x);\n var rowIndex = parseInt(y);\n var row = null;\n\n // Go through the columns to get the data\n while (row = data[j]) {\n i = 0;\n colIndex = parseInt(x);\n\n while (row[i] != null) {\n // Update and keep history\n var record = obj.updateCell(colIndex, rowIndex, row[i]);\n // Keep history\n records.push(record);\n // Update all formulas in the chain\n obj.updateFormulaChain(colIndex, rowIndex, records);\n // Style\n if (style && style[styleIndex]) {\n var columnName = jexcel.getColumnNameFromId([colIndex, rowIndex]);\n newStyle[columnName] = style[styleIndex];\n oldStyle[columnName] = obj.getStyle(columnName);\n obj.records[rowIndex][colIndex].setAttribute('style', style[styleIndex]);\n styleIndex++\n }\n i++;\n if (row[i] != null) {\n if (colIndex >= obj.headers.length - 1) {\n obj.insertColumn();\n }\n colIndex = obj.right.get(colIndex, rowIndex);\n }\n }\n\n j++;\n if (data[j]) {\n if (rowIndex >= obj.rows.length-1) {\n obj.insertRow();\n }\n rowIndex = obj.down.get(x, rowIndex);\n }\n }\n\n // Select the new cells\n obj.updateSelectionFromCoords(x, y, colIndex, rowIndex);\n\n // Update history\n obj.setHistory({\n action:'setValue',\n records:records,\n selection:obj.selectedCell,\n newStyle:newStyle,\n oldStyle:oldStyle,\n });\n\n // Update table\n obj.updateTable();\n\n // Paste event\n if (typeof(obj.options.onpaste) == 'function') {\n obj.options.onpaste(el, records);\n }\n\n // On after changes\n obj.onafterchanges(el, records);\n }\n }\n\n /**\n * Process row\n */\n obj.historyProcessRow = function(type, historyRecord) {\n var rowIndex = (! historyRecord.insertBefore) ? historyRecord.rowNumber + 1 : historyRecord.rowNumber;\n\n if (obj.options.search == true) {\n if (obj.results && obj.results.length != obj.rows.length) {\n obj.resetSearch();\n }\n }\n\n // Remove row\n if (type == 1) {\n var numOfRows = historyRecord.numOfRows;\n // Remove nodes\n for (var j = rowIndex; j < (numOfRows + rowIndex); j++) {\n obj.rows[j].parentNode.removeChild(obj.rows[j]);\n }\n // Remove references\n obj.records.splice(rowIndex, numOfRows);\n obj.options.data.splice(rowIndex, numOfRows);\n obj.rows.splice(rowIndex, numOfRows);\n\n obj.conditionalSelectionUpdate(1, rowIndex, (numOfRows + rowIndex) - 1);\n } else {\n // Insert data\n obj.records = jexcel.injectArray(obj.records, rowIndex, historyRecord.rowRecords);\n obj.options.data = jexcel.injectArray(obj.options.data, rowIndex, historyRecord.rowData);\n obj.rows = jexcel.injectArray(obj.rows, rowIndex, historyRecord.rowNode);\n // Insert nodes\n var index = 0\n for (var j = rowIndex; j < (historyRecord.numOfRows + rowIndex); j++) {\n obj.tbody.insertBefore(historyRecord.rowNode[index], obj.tbody.children[j]);\n index++;\n }\n }\n\n // Respect pagination\n if (obj.options.pagination > 0) {\n obj.page(obj.pageNumber);\n }\n\n obj.updateTableReferences();\n }\n\n /**\n * Process column\n */\n obj.historyProcessColumn = function(type, historyRecord) {\n var columnIndex = (! historyRecord.insertBefore) ? historyRecord.columnNumber + 1 : historyRecord.columnNumber;\n\n // Remove column\n if (type == 1) {\n var numOfColumns = historyRecord.numOfColumns;\n\n obj.options.columns.splice(columnIndex, numOfColumns);\n for (var i = columnIndex; i < (numOfColumns + columnIndex); i++) {\n obj.headers[i].parentNode.removeChild(obj.headers[i]);\n obj.colgroup[i].parentNode.removeChild(obj.colgroup[i]);\n }\n obj.headers.splice(columnIndex, numOfColumns);\n obj.colgroup.splice(columnIndex, numOfColumns);\n for (var j = 0; j < historyRecord.data.length; j++) {\n for (var i = columnIndex; i < (numOfColumns + columnIndex); i++) {\n obj.records[j][i].parentNode.removeChild(obj.records[j][i]);\n }\n obj.records[j].splice(columnIndex, numOfColumns);\n obj.options.data[j].splice(columnIndex, numOfColumns);\n }\n\n obj.conditionalSelectionUpdate(0, columnIndex, (numOfColumns + columnIndex) - 1);\n } else {\n // Insert data\n obj.options.columns = jexcel.injectArray(obj.options.columns, columnIndex, historyRecord.columns);\n obj.headers = jexcel.injectArray(obj.headers, columnIndex, historyRecord.headers);\n obj.colgroup = jexcel.injectArray(obj.colgroup, columnIndex, historyRecord.colgroup);\n\n var index = 0\n for (var i = columnIndex; i < (historyRecord.numOfColumns + columnIndex); i++) {\n obj.headerContainer.insertBefore(historyRecord.headers[index], obj.headerContainer.children[i+1]);\n obj.colgroupContainer.insertBefore(historyRecord.colgroup[index], obj.colgroupContainer.children[i+1]);\n index++;\n }\n\n for (var j = 0; j < historyRecord.data.length; j++) {\n obj.options.data[j] = jexcel.injectArray(obj.options.data[j], columnIndex, historyRecord.data[j]);\n obj.records[j] = jexcel.injectArray(obj.records[j], columnIndex, historyRecord.records[j]);\n var index = 0\n for (var i = columnIndex; i < (historyRecord.numOfColumns + columnIndex); i++) {\n obj.rows[j].insertBefore(historyRecord.records[j][index], obj.rows[j].children[i+1]);\n index++;\n }\n }\n }\n\n // Adjust nested headers\n if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) {\n // Flexible way to handle nestedheaders\n if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) {\n for (var j = 0; j < obj.options.nestedHeaders.length; j++) {\n if (type == 1) {\n var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) - historyRecord.numOfColumns;\n } else {\n var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) + historyRecord.numOfColumns;\n }\n obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan;\n obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan);\n }\n } else {\n if (type == 1) {\n var colspan = parseInt(obj.options.nestedHeaders[0].colspan) - historyRecord.numOfColumns;\n } else {\n var colspan = parseInt(obj.options.nestedHeaders[0].colspan) + historyRecord.numOfColumns;\n }\n obj.options.nestedHeaders[0].colspan = colspan;\n obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan);\n }\n }\n\n obj.updateTableReferences();\n }\n\n /**\n * Undo last action\n */\n obj.undo = function() {\n // Ignore events and history\n var ignoreEvents = obj.ignoreEvents ? true : false;\n var ignoreHistory = obj.ignoreHistory ? true : false;\n\n obj.ignoreEvents = true;\n obj.ignoreHistory = true;\n\n // Records\n var records = [];\n\n // Update cells\n if (obj.historyIndex >= 0) {\n // History\n var historyRecord = obj.history[obj.historyIndex--];\n\n if (historyRecord.action == 'insertRow') {\n obj.historyProcessRow(1, historyRecord);\n } else if (historyRecord.action == 'deleteRow') {\n obj.historyProcessRow(0, historyRecord);\n } else if (historyRecord.action == 'insertColumn') {\n obj.historyProcessColumn(1, historyRecord);\n } else if (historyRecord.action == 'deleteColumn') {\n obj.historyProcessColumn(0, historyRecord);\n } else if (historyRecord.action == 'moveRow') {\n obj.moveRow(historyRecord.newValue, historyRecord.oldValue);\n } else if (historyRecord.action == 'moveColumn') {\n obj.moveColumn(historyRecord.newValue, historyRecord.oldValue);\n } else if (historyRecord.action == 'setMerge') {\n obj.removeMerge(historyRecord.column, historyRecord.data);\n } else if (historyRecord.action == 'setStyle') {\n obj.setStyle(historyRecord.oldValue, null, null, 1);\n } else if (historyRecord.action == 'setWidth') {\n obj.setWidth(historyRecord.column, historyRecord.oldValue);\n } else if (historyRecord.action == 'setHeight') {\n obj.setHeight(historyRecord.row, historyRecord.oldValue);\n } else if (historyRecord.action == 'setHeader') {\n obj.setHeader(historyRecord.column, historyRecord.oldValue);\n } else if (historyRecord.action == 'setComments') {\n obj.setComments(historyRecord.column, historyRecord.oldValue[0], historyRecord.oldValue[1]);\n } else if (historyRecord.action == 'orderBy') {\n var rows = [];\n for (var j = 0; j < historyRecord.rows.length; j++) {\n rows[historyRecord.rows[j]] = j;\n }\n obj.updateOrderArrow(historyRecord.column, historyRecord.order ? 0 : 1);\n obj.updateOrder(rows);\n } else if (historyRecord.action == 'setValue') {\n // Redo for changes in cells\n for (var i = 0; i < historyRecord.records.length; i++) {\n obj.updateCell(historyRecord.records[i].col, historyRecord.records[i].row, historyRecord.records[i].oldValue);\n obj.updateFormulaChain(historyRecord.records[i].col, historyRecord.records[i].row, records);\n if (historyRecord.oldStyle) {\n obj.resetStyle(historyRecord.oldStyle, true);\n }\n }\n // Update selection\n if (! historyRecord.selection) {\n historyRecord.selection = [historyRecord.records[0].col, historyRecord.records[0].row];\n }\n obj.updateSelectionFromCoords(historyRecord.selection[0], historyRecord.selection[1], historyRecord.selection[2], historyRecord.selection[3]);\n // Update table\n obj.updateTable();\n }\n }\n obj.ignoreEvents = ignoreEvents;\n obj.ignoreHistory = ignoreHistory;\n\n if (typeof(obj.options.onundo) == 'function') {\n obj.options.onundo(el, historyRecord);\n }\n }\n\n /**\n * Redo previously undone action\n */\n obj.redo = function() {\n // Ignore events and history\n var ignoreEvents = obj.ignoreEvents ? true : false;\n var ignoreHistory = obj.ignoreHistory ? true : false;\n\n obj.ignoreEvents = true;\n obj.ignoreHistory = true;\n\n // Records\n var records = [];\n\n // Update cells\n if (obj.historyIndex < obj.history.length - 1) {\n // History\n var historyRecord = obj.history[++obj.historyIndex];\n\n if (historyRecord.action == 'insertRow') {\n obj.historyProcessRow(0, historyRecord);\n } else if (historyRecord.action == 'deleteRow') {\n obj.historyProcessRow(1, historyRecord);\n } else if (historyRecord.action == 'insertColumn') {\n obj.historyProcessColumn(0, historyRecord);\n } else if (historyRecord.action == 'deleteColumn') {\n obj.historyProcessColumn(1, historyRecord);\n } else if (historyRecord.action == 'moveRow') {\n obj.moveRow(historyRecord.oldValue, historyRecord.newValue);\n } else if (historyRecord.action == 'moveColumn') {\n obj.moveColumn(historyRecord.oldValue, historyRecord.newValue);\n } else if (historyRecord.action == 'setMerge') {\n obj.setMerge(historyRecord.column, historyRecord.colspan, historyRecord.rowspan, 1);\n } else if (historyRecord.action == 'setStyle') {\n obj.setStyle(historyRecord.newValue, null, null, 1);\n } else if (historyRecord.action == 'setWidth') {\n obj.setWidth(historyRecord.column, historyRecord.newValue);\n } else if (historyRecord.action == 'setHeight') {\n obj.setHeight(historyRecord.row, historyRecord.newValue);\n } else if (historyRecord.action == 'setHeader') {\n obj.setHeader(historyRecord.column, historyRecord.newValue);\n } else if (historyRecord.action == 'setComments') {\n obj.setComments(historyRecord.column, historyRecord.newValue[0], historyRecord.newValue[1]);\n } else if (historyRecord.action == 'orderBy') {\n obj.updateOrderArrow(historyRecord.column, historyRecord.order);\n obj.updateOrder(historyRecord.rows);\n } else if (historyRecord.action == 'setValue') {\n // Redo for changes in cells\n for (var i = 0; i < historyRecord.records.length; i++) {\n obj.updateCell(historyRecord.records[i].col, historyRecord.records[i].row, historyRecord.records[i].newValue);\n obj.updateFormulaChain(historyRecord.records[i].col, historyRecord.records[i].row, records);\n if (historyRecord.newStyle) {\n obj.resetStyle(historyRecord.newStyle, true);\n }\n }\n\n // Update selection\n if (! historyRecord.selection) {\n historyRecord.selection = [historyRecord.records[0].col, historyRecord.records[0].row];\n }\n obj.updateSelectionFromCoords(historyRecord.selection[0], historyRecord.selection[1], historyRecord.selection[2], historyRecord.selection[3]);\n // Update table\n obj.updateTable();\n }\n }\n obj.ignoreEvents = ignoreEvents;\n obj.ignoreHistory = ignoreHistory;\n\n if (typeof(obj.options.onredo) == 'function') {\n obj.options.onredo(el, historyRecord);\n }\n }\n\n /**\n * Get dropdown value from key\n */\n obj.getDropDownValue = function(column, key) {\n var value = [];\n\n if (obj.options.columns[column] && obj.options.columns[column].source) {\n // Create array from source\n var combo = [];\n var source = obj.options.columns[column].source;\n\n for (var i = 0; i < source.length; i++) {\n if (typeof(source[i]) == 'object') {\n combo[source[i].id] = source[i].name;\n } else {\n combo[source[i]] = source[i];\n }\n }\n\n // Garante single multiple compatibily\n var keys = ('' + key).split(';')\n\n for (var i = 0; i < keys.length; i++) {\n if (combo[keys[i]]) {\n value.push(combo[keys[i]]);\n }\n }\n } else {\n console.error('Invalid column');\n }\n\n return (value.length > 0) ? value.join('; ') : '';\n }\n\n /**\n * From starckoverflow contributions\n */\n obj.parseCSV = function(str, delimiter) {\n // Remove last line break\n str = str.replace(/\\r?\\n$|\\r$|\\n$/g, \"\");\n // Last caracter is the delimiter\n if (str.charCodeAt(str.length-1) == 9) {\n str += \"\\0\";\n }\n // user-supplied delimeter or default comma\n delimiter = (delimiter || \",\");\n\n var arr = [];\n var quote = false; // true means we're inside a quoted field\n // iterate over each character, keep track of current row and column (of the returned array)\n for (var row = 0, col = 0, c = 0; c < str.length; c++) {\n var cc = str[c], nc = str[c+1];\n arr[row] = arr[row] || [];\n arr[row][col] = arr[row][col] || '';\n\n // If the current character is a quotation mark, and we're inside a quoted field, and the next character is also a quotation mark, add a quotation mark to the current column and skip the next character\n if (cc == '\"' && quote && nc == '\"') { arr[row][col] += cc; ++c; continue; } \n\n // If it's just one quotation mark, begin/end quoted field\n if (cc == '\"') { quote = !quote; continue; }\n\n // If it's a comma and we're not in a quoted field, move on to the next column\n if (cc == delimiter && !quote) { ++col; continue; }\n\n // If it's a newline (CRLF) and we're not in a quoted field, skip the next character and move on to the next row and move to column 0 of that new row\n if (cc == '\\r' && nc == '\\n' && !quote) { ++row; col = 0; ++c; continue; }\n\n // If it's a newline (LF or CR) and we're not in a quoted field, move on to the next row and move to column 0 of that new row\n if (cc == '\\n' && !quote) { ++row; col = 0; continue; }\n if (cc == '\\r' && !quote) { ++row; col = 0; continue; }\n\n // Otherwise, append the current character to the current column\n arr[row][col] += cc;\n }\n return arr;\n }\n\n obj.hash = function(str) {\n var hash = 0, i, chr;\n\n if (str.length === 0) {\n return hash;\n } else {\n for (i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0;\n }\n }\n return hash;\n }\n\n obj.onafterchanges = function(el, records) {\n if (! obj.ignoreEvents) {\n // On after changes\n if (typeof(obj.options.onafterchanges) == 'function') {\n obj.options.onafterchanges(el, records);\n }\n }\n }\r\n\n obj.destroy = function() {\r\n jexcel.destroy(el);\r\n }\r\n\n /**\n * Initialization method\n */\n obj.init = function() {\n jexcel.current = obj;\n\n // Build handlers\n if (typeof(jexcel.build) == 'function') {\n jexcel.build();\n jexcel.build = null;\n }\n\n // Load the table data based on an CSV file\n if (obj.options.csv) {\n // Loading\n if (obj.options.loadingSpin == true) {\n jSuites.loading.show();\n }\n\n // Load CSV file\n jSuites.ajax({\n url: obj.options.csv,\n method: 'GET',\n dataType: 'text',\n success: function(result) {\n // Convert data\n var newData = obj.parseCSV(result, obj.options.csvDelimiter)\n\n // Headers\n if (obj.options.csvHeaders == true && newData.length > 0) {\n var headers = newData.shift();\n for(var i = 0; i < headers.length; i++) {\n if (! obj.options.columns[i]) {\n obj.options.columns[i] = { type:'text', align:obj.options.defaultColAlign, width:obj.options.defaultColWidth };\n }\n // Precedence over pre-configurated titles\n if (typeof obj.options.columns[i].title === 'undefined') {\n obj.options.columns[i].title = headers[i];\n }\n }\n }\n // Data\n obj.options.data = newData;\n // Prepare table\n obj.prepareTable();\n // Hide spin\n if (obj.options.loadingSpin == true) {\n jSuites.loading.hide();\n }\n }\n });\n } else if (obj.options.url) {\n // Loading\n if (obj.options.loadingSpin == true) {\n jSuites.loading.show();\n }\n\n jSuites.ajax({\n url: obj.options.url,\n method: 'GET',\n dataType: 'json',\n success: function(result) {\n // Data\n obj.options.data = (result.data) ? result.data : result;\n // Prepare table\n obj.prepareTable();\n // Hide spin\n if (obj.options.loadingSpin == true) {\n jSuites.loading.hide();\n }\n }\n });\n } else {\n // Prepare table\n obj.prepareTable();\n }\n }\n\n // Context menu\n if (options && options.contextMenu != null) {\n obj.options.contextMenu = options.contextMenu;\n } else {\n obj.options.contextMenu = function(el, x, y, e) {\n var items = [];\n\n if (y == null) {\n // Insert a new column\n if (obj.options.allowInsertColumn == true) {\n items.push({\n title:obj.options.text.insertANewColumnBefore,\n onclick:function() {\n obj.insertColumn(1, parseInt(x), 1);\n }\n });\n }\n\n if (obj.options.allowInsertColumn == true) {\n items.push({\n title:obj.options.text.insertANewColumnAfter,\n onclick:function() {\n obj.insertColumn(1, parseInt(x), 0);\n }\n });\n }\n\n // Delete a column\n if (obj.options.allowDeleteColumn == true) {\n items.push({\n title:obj.options.text.deleteSelectedColumns,\n onclick:function() {\n obj.deleteColumn(obj.getSelectedColumns().length ? undefined : parseInt(x));\n }\n });\n }\n\n // Rename column\n if (obj.options.allowRenameColumn == true) {\n items.push({\n title:obj.options.text.renameThisColumn,\n onclick:function() {\n obj.setHeader(x);\n }\n });\n }\n\n // Sorting\n if (obj.options.columnSorting == true) {\n // Line\n items.push({ type:'line' });\n\n items.push({\n title:obj.options.text.orderAscending,\n onclick:function() {\n obj.orderBy(x, 0);\n }\n });\n items.push({\n title:obj.options.text.orderDescending,\n onclick:function() {\n obj.orderBy(x, 1);\n }\n });\n }\n } else {\n // Insert new row\n if (obj.options.allowInsertRow == true) {\n items.push({\n title:obj.options.text.insertANewRowBefore,\n onclick:function() {\n obj.insertRow(1, parseInt(y), 1);\n }\n });\n\n items.push({\n title:obj.options.text.insertANewRowAfter,\n onclick:function() {\n obj.insertRow(1, parseInt(y));\n }\n });\n }\n\n if (obj.options.allowDeleteRow == true) {\n items.push({\n title:obj.options.text.deleteSelectedRows,\n onclick:function() {\n obj.deleteRow(obj.getSelectedRows().length ? undefined : parseInt(y));\n }\n });\n }\n\n if (x) {\n if (obj.options.allowComments == true) {\n items.push({ type:'line' });\n\n var title = obj.records[y][x].getAttribute('title') || '';\n\n items.push({\n title: title ? obj.options.text.editComments : obj.options.text.addComments,\n onclick:function() {\n var comment = prompt(obj.options.text.comments, title);\r\n if (comment) {\r\n obj.setComments([ x, y ], comment);\r\n }\n }\n });\n\n if (title) {\n items.push({\n title:obj.options.text.clearComments,\n onclick:function() {\n obj.setComments([ x, y ], '');\n }\n });\n }\n }\n }\n }\n\n // Line\n items.push({ type:'line' });\n\n // Copy\n items.push({\n title:obj.options.text.copy,\n shortcut:'Ctrl + C',\n onclick:function() {\n obj.copy(true);\n }\n });\n\n // Paste\n if (navigator && navigator.clipboard) {\n items.push({\n title:obj.options.text.paste,\n shortcut:'Ctrl + V',\n onclick:function() {\n if (obj.selectedCell) {\n navigator.clipboard.readText().then(function(text) {\n if (text) {\n jexcel.current.paste(obj.selectedCell[0], obj.selectedCell[1], text);\n }\n });\n }\n }\n });\n }\n\n // Save\n if (obj.options.allowExport) {\n items.push({\n title: obj.options.text.saveAs,\n shortcut: 'Ctrl + S',\n onclick: function () {\n obj.download();\n }\n });\n }\n\n // About\n if (obj.options.about) {\n items.push({\n title:obj.options.text.about,\n onclick:function() {\n alert(obj.options.about);\n }\n });\n }\n\n return items;\n }\n }\n\n obj.scrollControls = function(e) {\n if (obj.options.lazyLoading == true) {\n if (jexcel.timeControlLoading == null) {\n jexcel.timeControlLoading = setTimeout(function() {\n if (obj.content.scrollTop + obj.content.clientHeight >= obj.content.scrollHeight) {\n if (obj.loadDown()) {\n if (obj.content.scrollTop + obj.content.clientHeight > obj.content.scrollHeight - 10) {\n obj.content.scrollTop = obj.content.scrollTop - obj.content.clientHeight;\n }\n obj.updateCornerPosition();\n }\n } else if (obj.content.scrollTop <= obj.content.clientHeight) {\n if (obj.loadUp()) {\n if (obj.content.scrollTop < 10) {\n obj.content.scrollTop = obj.content.scrollTop + obj.content.clientHeight;\n }\n obj.updateCornerPosition();\n }\n }\n\n jexcel.timeControlLoading = null;\n }, 100);\n }\n }\n\n // Close editor\n if (obj.options.lazyLoading == true || obj.options.tableOverflow == true) {\n if (obj.edition && e.target.className.substr(0,9) != 'jdropdown') {\n obj.closeEditor(obj.edition[0], true);\n }\n }\n }\n\n el.addEventListener(\"DOMMouseScroll\", obj.scrollControls);\n el.addEventListener(\"mousewheel\", obj.scrollControls);\n\n el.jexcel = obj;\n\n obj.init();\n\n return obj;\n});\n\njexcel.current = null;\njexcel.timeControl = null;\njexcel.timeControlLoading = null;\n\njexcel.destroy = function(element, destroyEventHandlers) {\n if (element.jexcel) {\n element.removeEventListener(\"DOMMouseScroll\", element.jexcel.scrollControls);\n element.removeEventListener(\"mousewheel\", element.jexcel.scrollControls);\n element.jexcel = null;\n element.innerHTML = '';\n\n if (destroyEventHandlers) {\n document.removeEventListener(\"keydown\", jexcel.keyDownControls);\n document.removeEventListener(\"mouseup\", jexcel.mouseUpControls);\n document.removeEventListener(\"mousedown\", jexcel.mouseDownControls);\n document.removeEventListener(\"mousemove\", jexcel.mouseMoveControls);\n document.removeEventListener(\"mouseover\", jexcel.mouseOverControls);\n document.removeEventListener(\"dblclick\", jexcel.doubleClickControls);\n document.removeEventListener(\"paste\", jexcel.pasteControls);\n document.removeEventListener(\"contextmenu\", jexcel.contextMenuControls);\n document.removeEventListener(\"touchstart\", jexcel.touchStartControls);\n document.removeEventListener(\"touchend\", jexcel.touchEndControls);\n document.removeEventListener(\"touchcancel\", jexcel.touchEndControls);\n jexcel = null;\n }\n }\n}\n\njexcel.build = function() {\n document.addEventListener(\"keydown\", jexcel.keyDownControls);\n document.addEventListener(\"mouseup\", jexcel.mouseUpControls);\n document.addEventListener(\"mousedown\", jexcel.mouseDownControls);\n document.addEventListener(\"mousemove\", jexcel.mouseMoveControls);\n document.addEventListener(\"mouseover\", jexcel.mouseOverControls);\n document.addEventListener(\"dblclick\", jexcel.doubleClickControls);\n document.addEventListener(\"paste\", jexcel.pasteControls);\n document.addEventListener(\"contextmenu\", jexcel.contextMenuControls);\n document.addEventListener(\"touchstart\", jexcel.touchStartControls);\n document.addEventListener(\"touchend\", jexcel.touchEndControls);\n document.addEventListener(\"touchcancel\", jexcel.touchEndControls);\n document.addEventListener(\"touchmove\", jexcel.touchEndControls);\n}\n\n/**\n * Events\n */\njexcel.keyDownControls = function(e) {\n if (jexcel.current) {\n if (jexcel.current.edition) {\n if (e.which == 27) {\n // Escape\n if (jexcel.current.edition) {\n // Exit without saving\n jexcel.current.closeEditor(jexcel.current.edition[0], false);\n }\n e.preventDefault();\n } else if (e.which == 13) {\n // Enter\n if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'calendar') {\n jexcel.current.editor[0].children[0].calendar.close(1);\n } else if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'dropdown' ||\n jexcel.current.options.columns[jexcel.current.edition[2]].type == 'autocomplete') {\n // Do nothing\n } else {\n // Alt enter -> do not close editor\n if ((jexcel.current.options.wordWrap == true ||\n jexcel.current.options.columns[jexcel.current.edition[2]].wordWrap == true ||\n jexcel.current.options.data[jexcel.current.edition[3]][jexcel.current.edition[2]].length > 200) && e.altKey) {\n // Add new line to the editor\n var editorTextarea = jexcel.current.edition[0].children[0];\n var editorValue = jexcel.current.edition[0].children[0].value;\n var editorIndexOf = editorTextarea.selectionStart;\n editorValue = editorValue.slice(0, editorIndexOf) + \"\\n\" + editorValue.slice(editorIndexOf);\n editorTextarea.value = editorValue;\n editorTextarea.focus();\n editorTextarea.selectionStart = editorIndexOf + 1;\n editorTextarea.selectionEnd = editorIndexOf + 1;\n } else {\n jexcel.current.edition[0].children[0].blur();\n }\n }\n } else if (e.which == 9) {\n // Tab\n if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'calendar') {\n jexcel.current.edition[0].children[0].calendar.close(1);\n } else {\n jexcel.current.edition[0].children[0].blur();\n }\n }\n }\n\n if (! jexcel.current.edition && jexcel.current.selectedCell) {\n // Which key\n if (e.which == 37) {\n jexcel.current.left(e.shiftKey, e.ctrlKey);\n e.preventDefault();\n } else if (e.which == 39) {\n jexcel.current.right(e.shiftKey, e.ctrlKey);\n e.preventDefault();\n } else if (e.which == 38) {\n jexcel.current.up(e.shiftKey, e.ctrlKey);\n e.preventDefault();\n } else if (e.which == 40) {\n jexcel.current.down(e.shiftKey, e.ctrlKey);\n e.preventDefault();\n } else if (e.which == 36) {\n jexcel.current.first(e.shiftKey, e.ctrlKey);\n e.preventDefault();\n } else if (e.which == 35) {\n jexcel.current.last(e.shiftKey, e.ctrlKey);\n e.preventDefault();\n } else if (e.which == 32) {\n if (jexcel.current.options.editable == true) {\n jexcel.current.setCheckRadioValue();\n }\n e.preventDefault();\n } else if (e.which == 46) {\n // Delete\n if (jexcel.current.options.editable == true) {\n if (jexcel.current.selectedRow) {\n if (jexcel.current.options.allowDeleteRow == true) {\n if (confirm(jexcel.current.options.text.areYouSureToDeleteTheSelectedRows)) {\n jexcel.current.deleteRow();\n }\n }\n } else if (jexcel.current.selectedHeader) {\n if (jexcel.current.options.allowDeleteColumn == true) {\n if (confirm(jexcel.current.options.text.areYouSureToDeleteTheSelectedColumns)) {\n jexcel.current.deleteColumn();\n }\n }\n } else {\n // Change value\n jexcel.current.setValue(jexcel.current.highlighted, '');\n }\n }\n } else if (e.which == 13) {\n // Move cursor\n if (e.shiftKey) {\n jexcel.current.up();\n } else {\n if (jexcel.current.options.allowInsertRow == true) {\n if (jexcel.current.options.allowManualInsertRow == true) {\n if (jexcel.current.selectedCell[1] == jexcel.current.options.data.length - 1) {\n // New record in case selectedCell in the last row\n jexcel.current.insertRow();\n }\n }\n }\n\n jexcel.current.down();\n }\n e.preventDefault();\n } else if (e.which == 9) {\n // Tab\n if (e.shiftKey) {\n jexcel.current.left();\n } else {\n if (jexcel.current.options.allowInsertColumn == true) {\n if (jexcel.current.options.allowManualInsertColumn == true) {\n if (jexcel.current.selectedCell[0] == jexcel.current.options.data[0].length - 1) {\n // New record in case selectedCell in the last column\n jexcel.current.insertColumn();\n }\n }\n }\n\n jexcel.current.right();\n }\n e.preventDefault();\n } else {\n if ((e.ctrlKey || e.metaKey) && ! e.shiftKey) {\n if (e.which == 65) {\n // Ctrl + A\n jexcel.current.selectAll();\n e.preventDefault();\n } else if (e.which == 83) {\n // Ctrl + S\n jexcel.current.download();\n e.preventDefault();\n } else if (e.which == 89) {\n // Ctrl + Y\n jexcel.current.redo();\n e.preventDefault();\n } else if (e.which == 90) {\n // Ctrl + Z\n jexcel.current.undo();\n e.preventDefault();\n } else if (e.which == 67) {\n // Ctrl + C\n jexcel.current.copy(true);\n e.preventDefault();\n } else if (e.which == 67) {\n // Ctrl + C\n jexcel.current.copy(true);\n e.preventDefault();\n } else if (e.which == 88) {\n // Ctrl + X\n if (jexcel.current.options.editable == true) {\n jexcel.cutControls();\n } else {\n jexcel.copyControls();\n }\n e.preventDefault();\n } else if (e.which == 86) {\n // Ctrl + V\n jexcel.pasteControls();\n }\n } else {\n if (jexcel.current.selectedCell) {\n if (jexcel.current.options.editable == true) {\n var rowId = jexcel.current.selectedCell[1];\n var columnId = jexcel.current.selectedCell[0];\n\n // If is not readonly\n if (jexcel.current.options.columns[columnId].type != 'readonly') {\n // Characters able to start a edition\n if (e.keyCode == 32) {\n // Space\n if (jexcel.current.options.columns[columnId].type == 'checkbox' ||\n jexcel.current.options.columns[columnId].type == 'radio') {\n e.preventDefault();\n } else {\n // Start edition\n jexcel.current.openEditor(jexcel.current.records[rowId][columnId], true);\n }\n } else if (e.keyCode == 113) {\n // Start edition with current content F2\n jexcel.current.openEditor(jexcel.current.records[rowId][columnId], false);\n } else if ((e.keyCode == 8) ||\n (e.keyCode >= 48 && e.keyCode <= 57) ||\n (e.keyCode >= 96 && e.keyCode <= 111) ||\n (e.keyCode == 187) ||\n (e.keyCode == 189) ||\n ((String.fromCharCode(e.keyCode) == e.key || String.fromCharCode(e.keyCode).toLowerCase() == e.key.toLowerCase()) && jexcel.validLetter(String.fromCharCode(e.keyCode)))) {\n // Start edition\n jexcel.current.openEditor(jexcel.current.records[rowId][columnId], true);\n // Prevent entries in the calendar\n if (jexcel.current.options.columns[columnId].type == 'calendar') {\n e.preventDefault();\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (e.target.classList.contains('jexcel_search')) {\n if (jexcel.timeControl) {\n clearTimeout(jexcel.timeControl);\n }\n\n jexcel.timeControl = setTimeout(function() {\n jexcel.current.search(e.target.value);\n }, 200);\n }\n }\n }\n}\n\njexcel.isMouseAction = false;\n\njexcel.mouseDownControls = function(e) {\n e = e || window.event;\n if (e.buttons) {\n var mouseButton = e.buttons;\n } else if (e.button) {\n var mouseButton = e.button;\n } else {\n var mouseButton = e.which;\n }\n\n // Get elements\n var jexcelTable = jexcel.getElement(e.target);\n\n if (jexcelTable[0]) {\n if (jexcel.current != jexcelTable[0].jexcel) {\n if (jexcel.current) {\n jexcel.current.resetSelection();\n }\n jexcel.current = jexcelTable[0].jexcel;\n }\n } else {\n if (jexcel.current) {\n jexcel.current.resetSelection(true);\n jexcel.current = null;\n }\n }\n\n if (jexcel.current && mouseButton == 1) {\n if (e.target.classList.contains('jexcel_selectall')) {\n if (jexcel.current) {\n jexcel.current.selectAll();\n }\n } else if (e.target.classList.contains('jexcel_corner')) {\n if (jexcel.current.options.editable == true) {\n jexcel.current.selectedCorner = true;\n }\n } else {\n // Header found\n if (jexcelTable[1] == 1) {\n var columnId = e.target.getAttribute('data-x');\n if (columnId) {\n // Update cursor\n var info = e.target.getBoundingClientRect();\n if (jexcel.current.options.columnResize == true && info.width - e.offsetX < 6) {\n // Resize helper\n jexcel.current.resizing = {\n mousePosition: e.pageX,\n column: columnId,\n width: info.width,\n };\n\n // Border indication\n jexcel.current.headers[columnId].classList.add('resizing');\n for (var j = 0; j < jexcel.current.records.length; j++) {\n if (jexcel.current.records[j][columnId]) {\n jexcel.current.records[j][columnId].classList.add('resizing');\n }\n }\n } else if (jexcel.current.options.columnDrag == true && info.height - e.offsetY < 6) {\n if (jexcel.current.isColMerged(columnId).length) {\n console.error('JEXCEL: This column is part of a merged cell.');\n } else {\n // Reset selection\n jexcel.current.resetSelection();\n // Drag helper\n jexcel.current.dragging = {\n element: e.target,\n column:columnId,\n destination:columnId,\n };\n // Border indication\n jexcel.current.headers[columnId].classList.add('dragging');\n for (var j = 0; j < jexcel.current.records.length; j++) {\n if (jexcel.current.records[j][columnId]) {\n jexcel.current.records[j][columnId].classList.add('dragging');\n }\n }\n }\n } else {\n if (jexcel.current.selectedHeader && (e.shiftKey || e.ctrlKey)) {\n var o = jexcel.current.selectedHeader;\n var d = columnId;\n } else {\n // Press to rename\n if (jexcel.current.selectedHeader == columnId && jexcel.current.options.allowRenameColumn == true) {\n jexcel.timeControl = setTimeout(function() {\n jexcel.current.setHeader(columnId);\n }, 800);\n }\n\n // Keep track of which header was selected first\n jexcel.current.selectedHeader = columnId;\n\n // Update selection single column\n var o = columnId;\n var d = columnId;\n }\n\n // Update selection\n jexcel.current.updateSelectionFromCoords(o, 0, d, jexcel.current.options.data.length - 1);\n }\n } else {\n if (e.target.parentNode.classList.contains('jexcel_nested')) {\n if (e.target.getAttribute('data-column')) {\n var column = e.target.getAttribute('data-column').split(',');\n var c1 = parseInt(column[0]);\n var c2 = parseInt(column[column.length-1]);\n } else {\r\n var c1 = 0;\r\n var c2 = jexcel.current.options.columns.length - 1;\r\n }\n jexcel.current.updateSelectionFromCoords(c1, 0, c2, jexcel.current.options.data.length - 1);\n }\n }\n } else {\n jexcel.current.selectedHeader = false;\n }\n\n // Body found\n if (jexcelTable[1] == 2) {\n var rowId = e.target.getAttribute('data-y');\n\n if (e.target.classList.contains('jexcel_row')) {\n var info = e.target.getBoundingClientRect();\n if (jexcel.current.options.rowResize == true && info.height - e.offsetY < 6) {\n // Resize helper\n jexcel.current.resizing = {\n element: e.target.parentNode,\n mousePosition: e.pageY,\n row: rowId,\n height: info.height,\n };\n // Border indication\n e.target.parentNode.classList.add('resizing');\n } else if (jexcel.current.options.rowDrag == true && info.width - e.offsetX < 6) {\n if (jexcel.current.isRowMerged(rowId).length) {\n console.error('JEXCEL: This row is part of a merged cell');\n } else if (jexcel.current.options.search == true && jexcel.current.results) {\n console.error('JEXCEL: Please clear your search before perform this action');\n } else {\n // Reset selection\n jexcel.current.resetSelection();\n // Drag helper\n jexcel.current.dragging = {\n element: e.target.parentNode,\n row:rowId,\n destination:rowId,\n };\n // Border indication\n e.target.parentNode.classList.add('dragging');\n }\n } else {\n if (jexcel.current.selectedRow && (e.shiftKey || e.ctrlKey)) {\n var o = jexcel.current.selectedRow;\n var d = rowId;\n } else {\n // Keep track of which header was selected first\n jexcel.current.selectedRow = rowId;\n\n // Update selection single column\n var o = rowId;\n var d = rowId;\n }\n\n // Update selection\n jexcel.current.updateSelectionFromCoords(0, o, jexcel.current.options.data[0].length - 1, d);\n }\n } else {\n // Jclose\n if (e.target.classList.contains('jclose') && e.target.clientWidth - e.offsetX < 50 && e.offsetY < 50) {\n jexcel.current.closeEditor(jexcel.current.edition[0], true);\n } else {\n var getCellCoords = function(element) {\n var x = element.getAttribute('data-x');\n var y = element.getAttribute('data-y');\n if (x && y) {\n return [x, y];\n } else {\n if (element.parentNode) {\n return getCellCoords(element.parentNode);\n }\n }\n };\n\n var position = getCellCoords(e.target);\n if (position) {\n var columnId = position[0];\n var rowId = position[1];\n // Close edition\n if (jexcel.current.edition) {\n if (jexcel.current.edition[2] != columnId || jexcel.current.edition[3] != rowId) {\n jexcel.current.closeEditor(jexcel.current.edition[0], true);\n }\n }\n\n if (! jexcel.current.edition) {\n // Update cell selection\n if (e.shiftKey) {\n jexcel.current.updateSelectionFromCoords(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], columnId, rowId);\n } else {\n jexcel.current.updateSelectionFromCoords(columnId, rowId);\n }\n }\n\n // No full row selected\n jexcel.current.selectedHeader = null;\n jexcel.current.selectedRow = null;\n }\n }\n }\n } else {\n jexcel.current.selectedRow = false;\n }\n\n // Pagination\n if (e.target.classList.contains('jexcel_page')) {\n if (e.target.innerText == '<') {\n jexcel.current.page(0);\n } else if (e.target.innerText == '>') {\n jexcel.current.page(e.target.getAttribute('title') - 1);\n } else {\n jexcel.current.page(e.target.innerText - 1);\n }\n }\n }\n\n if (jexcel.current.edition) {\n jexcel.isMouseAction = false;\n } else {\n jexcel.isMouseAction = true;\n }\n } else {\n jexcel.isMouseAction = false;\n }\n}\n\njexcel.mouseUpControls = function(e) {\n if (jexcel.current) {\n // Update cell size\n if (jexcel.current.resizing) {\n // Columns to be updated\n if (jexcel.current.resizing.column) {\n // Remove Class\n jexcel.current.headers[jexcel.current.resizing.column].classList.remove('resizing');\n var newWidth = jexcel.current.colgroup[jexcel.current.resizing.column].getAttribute('width');\n jexcel.current.setWidth(jexcel.current.resizing.column, newWidth, jexcel.current.resizing.width);\n // Remove border\n jexcel.current.headers[jexcel.current.resizing.column].classList.remove('resizing');\n for (var j = 0; j < jexcel.current.records.length; j++) {\n if (jexcel.current.records[j][jexcel.current.resizing.column]){\n jexcel.current.records[j][jexcel.current.resizing.column].classList.remove('resizing');\n }\n }\n } else {\n // Remove Class\n jexcel.current.rows[jexcel.current.resizing.row].children[0].classList.remove('resizing');\n var newHeight = jexcel.current.rows[jexcel.current.resizing.row].getAttribute('height');\n jexcel.current.setHeight(jexcel.current.resizing.row, newHeight, jexcel.current.resizing.height);\n // Remove border\n jexcel.current.resizing.element.classList.remove('resizing');\n }\n // Reset resizing helper\n jexcel.current.resizing = null;\n } else if (jexcel.current.dragging) {\n // Reset dragging helper\n if (jexcel.current.dragging) {\n if (jexcel.current.dragging.column) {\n // Target\n var columnId = e.target.getAttribute('data-x');\n // Remove move style\n jexcel.current.headers[jexcel.current.dragging.column].classList.remove('dragging');\n for (var j = 0; j < jexcel.current.rows.length; j++) {\n if (jexcel.current.records[j][jexcel.current.dragging.column]) {\n jexcel.current.records[j][jexcel.current.dragging.column].classList.remove('dragging');\n }\n }\n for (var i = 0; i < jexcel.current.headers.length; i++) {\n jexcel.current.headers[i].classList.remove('dragging-left');\n jexcel.current.headers[i].classList.remove('dragging-right');\n }\n // Update position\n if (columnId) {\n if (jexcel.current.dragging.column != jexcel.current.dragging.destination) {\n jexcel.current.moveColumn(jexcel.current.dragging.column, jexcel.current.dragging.destination);\n }\n }\n } else {\n var position = Array.prototype.indexOf.call(jexcel.current.dragging.element.parentNode.children, jexcel.current.dragging.element);\n if (jexcel.current.dragging.row != position) {\n jexcel.current.moveRow(jexcel.current.dragging.row, position, true);\n }\n jexcel.current.dragging.element.classList.remove('dragging');\n }\n jexcel.current.dragging = null;\n }\n } else {\n // Close any corner selection\n if (jexcel.current.selectedCorner) {\n jexcel.current.selectedCorner = false;\n\n // Data to be copied\n if (jexcel.current.selection.length > 0) {\n // Copy data\n jexcel.current.copyData(jexcel.current.selection[0], jexcel.current.selection[jexcel.current.selection.length - 1]);\n\n // Remove selection\n jexcel.current.removeCopySelection();\n }\n }\n }\n }\n\n // Clear any time control\n if (jexcel.timeControl) {\n clearTimeout(jexcel.timeControl);\n jexcel.timeControl = null;\n }\n\n // Mouse up\n jexcel.isMouseAction = false;\n}\n\n// Mouse move controls\njexcel.mouseMoveControls = function(e) {\n e = e || window.event;\n if (e.buttons) {\n var mouseButton = e.buttons;\n } else if (e.button) {\n var mouseButton = e.button;\n } else {\n var mouseButton = e.which;\n }\n\n if (! mouseButton) {\n jexcel.isMouseAction = false;\n }\n\n if (jexcel.current) {\n if (jexcel.isMouseAction == true) {\n // Resizing is ongoing\n if (jexcel.current.resizing) {\n if (jexcel.current.resizing.column) {\n var width = e.pageX - jexcel.current.resizing.mousePosition;\n\n if (jexcel.current.resizing.width + width > 0) {\n var tempWidth = jexcel.current.resizing.width + width;\n jexcel.current.colgroup[jexcel.current.resizing.column].setAttribute('width', tempWidth);\n\n jexcel.current.updateCornerPosition();\n }\n } else {\n var height = e.pageY - jexcel.current.resizing.mousePosition;\n\n if (jexcel.current.resizing.height + height > 0) {\n var tempHeight = jexcel.current.resizing.height + height;\n jexcel.current.rows[jexcel.current.resizing.row].setAttribute('height', tempHeight);\n\n jexcel.current.updateCornerPosition();\n }\n }\n }\n } else {\n var x = e.target.getAttribute('data-x');\n var y = e.target.getAttribute('data-y');\n var rect = e.target.getBoundingClientRect();\n\n if (jexcel.current.cursor) {\n jexcel.current.cursor.style.cursor = '';\n jexcel.current.cursor = null;\n }\n\n if (e.target.parentNode.parentNode && e.target.parentNode.parentNode.className) {\n if (e.target.parentNode.parentNode.classList.contains('resizable')) {\n if (e.target && x && ! y && (rect.width - (e.clientX - rect.left) < 6)) {\n jexcel.current.cursor = e.target;\n jexcel.current.cursor.style.cursor = 'col-resize';\n } else if (e.target && ! x && y && (rect.height - (e.clientY - rect.top) < 6)) {\n jexcel.current.cursor = e.target;\n jexcel.current.cursor.style.cursor = 'row-resize';\n }\n }\n\n if (e.target.parentNode.parentNode.classList.contains('draggable')) {\n if (e.target && ! x && y && (rect.width - (e.clientX - rect.left) < 6)) {\n jexcel.current.cursor = e.target;\n jexcel.current.cursor.style.cursor = 'move';\n } else if (e.target && x && ! y && (rect.height - (e.clientY - rect.top) < 6)) {\n jexcel.current.cursor = e.target;\n jexcel.current.cursor.style.cursor = 'move';\n }\n }\n }\n }\n }\n}\n\njexcel.mouseOverControls = function(e) {\n e = e || window.event;\n if (e.buttons) {\n var mouseButton = e.buttons;\n } else if (e.button) {\n var mouseButton = e.button;\n } else {\n var mouseButton = e.which;\n }\n\n if (! mouseButton) {\n jexcel.isMouseAction = false;\n }\n\n if (jexcel.current && jexcel.isMouseAction == true) {\n // Get elements\n var jexcelTable = jexcel.getElement(e.target);\n\n if (jexcelTable[0]) {\n // Avoid cross reference\n if (jexcel.current != jexcelTable[0].jexcel) {\n if (jexcel.current) {\n return false;\n }\n }\n\n var columnId = e.target.getAttribute('data-x');\n var rowId = e.target.getAttribute('data-y');\n\n if (jexcel.current.dragging) {\n if (jexcel.current.dragging.column) {\n if (columnId) {\n if (jexcel.current.isColMerged(columnId).length) {\n console.error('JEXCEL: This column is part of a merged cell.');\n } else {\n for (var i = 0; i < jexcel.current.headers.length; i++) {\n jexcel.current.headers[i].classList.remove('dragging-left');\n jexcel.current.headers[i].classList.remove('dragging-right');\n }\n\n if (jexcel.current.dragging.column == columnId) {\n jexcel.current.dragging.destination = parseInt(columnId);\n } else {\n if (e.target.clientWidth / 2 > e.offsetX) {\n if (jexcel.current.dragging.column < columnId) {\n jexcel.current.dragging.destination = parseInt(columnId) - 1;\n } else {\n jexcel.current.dragging.destination = parseInt(columnId);\n }\n jexcel.current.headers[columnId].classList.add('dragging-left');\n } else {\n if (jexcel.current.dragging.column < columnId) {\n jexcel.current.dragging.destination = parseInt(columnId);\n } else {\n jexcel.current.dragging.destination = parseInt(columnId) + 1;\n }\n jexcel.current.headers[columnId].classList.add('dragging-right');\n }\n }\n }\n }\n } else {\n if (rowId) {\n if (jexcel.current.isRowMerged(rowId).length) {\n console.error('JEXCEL: This row is part of a merged cell.');\n } else {\n var target = (e.target.clientHeight / 2 > e.offsetY) ? e.target.parentNode.nextSibling : e.target.parentNode;\n e.target.parentNode.parentNode.insertBefore(jexcel.current.dragging.element, target);\n }\n }\n }\n } else if (jexcel.current.resizing) {\n } else {\n // Header found\n if (jexcelTable[1] == 1) {\n if (jexcel.current.selectedHeader) {\n var columnId = e.target.getAttribute('data-x');\n var o = jexcel.current.selectedHeader;\n var d = columnId;\n // Update selection\n jexcel.current.updateSelectionFromCoords(o, 0, d, jexcel.current.options.data.length - 1);\n }\n }\n\n // Body found\n if (jexcelTable[1] == 2) {\n if (e.target.classList.contains('jexcel_row')) {\n if (jexcel.current.selectedRow) {\n var o = jexcel.current.selectedRow;\n var d = rowId;\n // Update selection\n jexcel.current.updateSelectionFromCoords(0, o, jexcel.current.options.data[0].length - 1, d);\n }\n } else {\n // Do not select edtion is in progress\n if (! jexcel.current.edition) {\n if (columnId && rowId) {\n if (jexcel.current.selectedCorner) {\n jexcel.current.updateCopySelection(columnId, rowId);\n } else {\n if (jexcel.current.selectedCell) {\n jexcel.current.updateSelectionFromCoords(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], columnId, rowId);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n // Clear any time control\n if (jexcel.timeControl) {\n clearTimeout(jexcel.timeControl);\n jexcel.timeControl = null;\n }\n}\n\n/**\n * Double click event handler: controls the double click in the corner, cell edition or column re-ordering.\n */\njexcel.doubleClickControls = function(e) {\n // Jexcel is selected\n if (jexcel.current) {\n // Corner action\n if (e.target.classList.contains('jexcel_corner')) {\n // Any selected cells\n if (jexcel.current.highlighted.length > 0) {\n // Copy from this\n var x1 = jexcel.current.highlighted[0].getAttribute('data-x');\n var y1 = parseInt(jexcel.current.highlighted[jexcel.current.highlighted.length - 1].getAttribute('data-y')) + 1;\n // Until this\n var x2 = jexcel.current.highlighted[jexcel.current.highlighted.length - 1].getAttribute('data-x');\n var y2 = jexcel.current.records.length - 1\n // Execute copy\n jexcel.current.copyData(jexcel.current.records[y1][x1], jexcel.current.records[y2][x2]);\n }\n } else {\n // Get table\n var jexcelTable = jexcel.getElement(e.target);\n\n // Double click over header\n if (jexcelTable[1] == 1 && jexcel.current.options.columnSorting == true) {\n // Check valid column header coords\n var columnId = e.target.getAttribute('data-x');\n if (columnId) {\n jexcel.current.orderBy(columnId);\n }\n }\n\n // Double click over body\n if (jexcelTable[1] == 2 && jexcel.current.options.editable == true) {\n if (! jexcel.current.edition) {\n var getCellCoords = function(element) {\n if (element.parentNode) {\n var x = element.getAttribute('data-x');\n var y = element.getAttribute('data-y');\n if (x && y) {\n return element;\n } else {\n return getCellCoords(element.parentNode);\n }\n }\n }\n var cell = getCellCoords(e.target);\n if (cell && cell.classList.contains('highlight')) {\n jexcel.current.openEditor(cell);\n }\n }\n }\n }\n }\n}\n\njexcel.copyControls = function(e) {\n if (jexcel.current && jexcel.copyControls.enabled) {\n if (! jexcel.current.edition) {\n jexcel.current.copy(true);\n }\n }\n}\n\njexcel.cutControls = function(e) {\n if (jexcel.current) {\n if (! jexcel.current.edition) {\n jexcel.current.copy(true);\n if (jexcel.current.options.editable == true) {\n jexcel.current.setValue(jexcel.current.highlighted, '');\n }\n }\n }\n}\n\njexcel.pasteControls = function(e) {\n if (jexcel.current && jexcel.current.selectedCell) {\n if (! jexcel.current.edition) {\n if (jexcel.current.options.editable == true) {\n if (e && e.clipboardData) {\n jexcel.current.paste(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], e.clipboardData.getData('text'));\n e.preventDefault();\n } else if (window.clipboardData) {\n jexcel.current.paste(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], window.clipboardData.getData('text'));\n }\n }\n }\n }\n}\n\njexcel.contextMenuControls = function(e) {\n e = e || window.event;\n if (\"buttons\" in e) {\n var mouseButton = e.buttons;\n } else {\n var mouseButton = e.which || e.button;\n }\n\n if (jexcel.current) {\n if (jexcel.current.edition) {\n e.preventDefault();\n } else if (jexcel.current.options.contextMenu) {\n jexcel.current.contextMenu.contextmenu.close();\n\n if (jexcel.current) {\n var x = e.target.getAttribute('data-x');\n var y = e.target.getAttribute('data-y');\n\n if (x || y) {\n // Table found\n var items = jexcel.current.options.contextMenu(jexcel.current, x, y, e);\n // The id is depending on header and body\n jexcel.current.contextMenu.contextmenu.open(e, items);\n // Avoid the real one\n e.preventDefault();\n }\n }\n }\n }\n}\n\njexcel.touchStartControls = function(e) {\n var jexcelTable = jexcel.getElement(e.target);\n\n if (jexcelTable[0]) {\n if (jexcel.current != jexcelTable[0].jexcel) {\n if (jexcel.current) {\n jexcel.current.resetSelection();\n }\n jexcel.current = jexcelTable[0].jexcel;\n }\n } else {\n if (jexcel.current) {\n jexcel.current.resetSelection();\n jexcel.current = null;\n }\n }\n\n if (jexcel.current) {\n if (! jexcel.current.edition) {\n var columnId = e.target.getAttribute('data-x');\n var rowId = e.target.getAttribute('data-y');\n\n if (columnId && rowId) {\n jexcel.current.updateSelectionFromCoords(columnId, rowId);\n\n jexcel.timeControl = setTimeout(function() {\n // Keep temporary reference to the element\r\n if (jexcel.current.options.columns[columnId].type == 'color') {\r\n jexcel.tmpElement = null;\r\n } else {\r\n jexcel.tmpElement = e.target;\r\n }\r\n jexcel.current.openEditor(e.target, false, e);\n }, 500);\n }\n }\n }\n}\n\njexcel.touchEndControls = function(e) {\n // Clear any time control\n if (jexcel.timeControl) {\n clearTimeout(jexcel.timeControl);\n jexcel.timeControl = null;\n // Element\r\n if (jexcel.tmpElement && jexcel.tmpElement.children[0].tagName == 'INPUT') {\r\n jexcel.tmpElement.children[0].focus();\r\n }\n jexcel.tmpElement = null;\n }\r\n}\r\n\r\n/**\r\n * Jexcel extensions\r\n */\r\n\r\njexcel.createTabs = function(tabs, result) {\r\n // Create tab container\r\n tabs.innerHTML = '';\r\n tabs.classList.add('jexcel_tabs');\r\n var spreadsheet = []\r\n var link = [];\r\n for (var i = 0; i < result.length; i++) {\r\n // Spreadsheet container\r\n spreadsheet[i] = document.createElement('div');\r\n spreadsheet[i].classList.add('jexcel_tab');\r\n // Tab link\r\n link[i] = document.createElement('div');\r\n link[i].classList.add('jexcel_tab_link');\r\n link[i].setAttribute('data-spreadsheet', i);\r\n link[i].innerHTML = result[i].sheetName;\r\n link[i].onclick = function() {\r\n for (var j = 0; j < spreadsheet.length; j++) {\r\n spreadsheet[j].style.display = 'none';\r\n link[j].classList.remove('selected');\r\n }\r\n var i = this.getAttribute('data-spreadsheet');\r\n spreadsheet[i].style.display = 'block';\r\n link[i].classList.add('selected')\r\n }\r\n tabs.appendChild(link[i]);\r\n }\r\n\r\n // Append spreadsheet\r\n for (var i = 0; i < spreadsheet.length - 1; i++) {\r\n tabs.appendChild(spreadsheet[i]);\r\n jexcel(spreadsheet[i], result[i]);\r\n }\r\n\r\n // First tab\r\n spreadsheet[0].style.display = 'block';\r\n link[0].classList.add('selected')\r\n}\r\n\r\njexcel.fromSpreadsheet = function(file, __callback) {\r\n var convert = function(workbook) {\r\n var spreadsheets = [];\r\n workbook.SheetNames.forEach(function(sheetName) {\r\n var spreadsheet = {};\r\n spreadsheet.rows = [];\r\n spreadsheet.columns = [];\r\n spreadsheet.data = [];\r\n spreadsheet.style = {};\r\n spreadsheet.sheetName = sheetName;\r\n\r\n // Column widths\r\n var temp = workbook.Sheets[sheetName]['!cols'];\r\n if (temp && temp.length) {\r\n for (var i = 0; i < temp.length; i++) {\r\n spreadsheet.columns[i] = {};\r\n if (temp[i] && temp[i].wpx) {\r\n spreadsheet.columns[i].width = temp[i].wpx + 'px';\r\n }\r\n }\r\n }\r\n // Rows heights\r\n var temp = workbook.Sheets[sheetName]['!rows'];\r\n if (temp && temp.length) {\r\n for (var i = 0; i < temp.length; i++) {\r\n if (temp[i] && temp[i].hpx) {\r\n spreadsheet.rows[i] = {};\r\n spreadsheet.rows[i].height = temp[i].hpx + 'px';\r\n }\r\n }\r\n }\r\n // Merge cells\r\n var temp = workbook.Sheets[sheetName]['!merges'];\r\n if (temp && temp.length > 0) {\r\n spreadsheet.mergeCells = [];\r\n for (var i = 0; i < temp.length; i++) {\r\n var x1 = temp[i].s.c;\r\n var y1 = temp[i].s.r;\r\n var x2 = temp[i].e.c;\r\n var y2 = temp[i].e.r;\r\n var key = jexcel.getColumnNameFromId([x1,y1]);\r\n spreadsheet.mergeCells[key] = [ x2-x1+1, y2-y1+1 ];\r\n }\r\n }\r\n // Data container\r\n var max_x = 0;\r\n var max_y = 0;\r\n var temp = Object.keys(workbook.Sheets[sheetName]);\r\n for (var i = 0; i < temp.length; i++) {\r\n if (temp[i].substr(0,1) != '!') {\r\n var cell = workbook.Sheets[sheetName][temp[i]];\r\n var info = jexcel.getIdFromColumnName(temp[i], true);\r\n if (! spreadsheet.data[info[1]]) {\r\n spreadsheet.data[info[1]] = [];\r\n }\r\n spreadsheet.data[info[1]][info[0]] = cell.f ? '=' + cell.f : cell.w;\r\n if (max_x < info[0]) {\r\n max_x = info[0];\r\n }\r\n if (max_y < info[1]) {\r\n max_y = info[1];\r\n }\r\n // Style\r\n if (cell.style && Object.keys(cell.style).length > 0) {\r\n spreadsheet.style[temp[i]] = cell.style;\r\n }\r\n if (cell.s && cell.s.fgColor) {\r\n if (spreadsheet.style[temp[i]]) {\r\n spreadsheet.style[temp[i]] += ';';\r\n }\r\n spreadsheet.style[temp[i]] += 'background-color:#' + cell.s.fgColor.rgb;\r\n }\r\n }\r\n }\r\n var numColumns = spreadsheet.columns;\r\n for (var j = 0; j <= max_y; j++) {\r\n for (var i = 0; i <= max_x; i++) {\r\n if (! spreadsheet.data[j]) {\r\n spreadsheet.data[j] = [];\r\n }\r\n if (! spreadsheet.data[j][i]) {\r\n if (numColumns < i) {\r\n spreadsheet.data[j][i] = '';\r\n }\r\n }\r\n }\r\n }\r\n spreadsheets.push(spreadsheet);\r\n });\r\n\r\n return spreadsheets;\r\n }\r\n\r\n var oReq;\r\n oReq = new XMLHttpRequest();\r\n oReq.open(\"GET\", file, true);\r\n\r\n if(typeof Uint8Array !== 'undefined') {\r\n oReq.responseType = \"arraybuffer\";\r\n oReq.onload = function(e) {\r\n var arraybuffer = oReq.response;\r\n var data = new Uint8Array(arraybuffer);\r\n var wb = XLSX.read(data, {type:\"array\", cellFormula:true, cellStyles:true });\r\n __callback(convert(wb))\r\n };\r\n } else {\r\n oReq.setRequestHeader(\"Accept-Charset\", \"x-user-defined\"); \r\n oReq.onreadystatechange = function() { if(oReq.readyState == 4 && oReq.status == 200) {\r\n var ff = convertResponseBodyToText(oReq.responseBody);\r\n var wb = XLSX.read(ff, {type:\"binary\", cellFormula:true, cellStyles:true });\r\n __callback(convert(wb))\r\n }};\r\n }\r\n\r\n oReq.send();\r\n}\r\n\r\n/**\r\n * Valid international letter\r\n */\r\n\r\njexcel.validLetter = function (text) {\r\n var regex = /([\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\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\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\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-\\u0C33\\u0C35-\\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\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\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\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\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\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\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-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\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-\\u0400-\\u04FF']+)/g;\r\n return text.match(regex) ? 1 : 0;\r\n}\r\n\r\n/**\r\n * Helper injectArray\r\n */\r\njexcel.injectArray = function(o, idx, arr) {\r\n return o.slice(0, idx).concat(arr).concat(o.slice(idx));\r\n}\r\n\r\n/**\r\n * Get letter based on a number\r\n * \r\n * @param integer i\r\n * @return string letter\r\n */\r\njexcel.getColumnName = function(i) {\r\n var letter = '';\r\n if (i > 701) {\r\n letter += String.fromCharCode(64 + parseInt(i / 676));\r\n letter += String.fromCharCode(64 + parseInt((i % 676) / 26));\r\n } else if (i > 25) {\r\n letter += String.fromCharCode(64 + parseInt(i / 26));\r\n }\r\n letter += String.fromCharCode(65 + (i % 26));\r\n\r\n return letter;\r\n}\r\n\r\n/**\r\n * Convert excel like column to jexcel id\r\n * \r\n * @param string id\r\n * @return string id\r\n */\r\njexcel.getIdFromColumnName = function (id, arr) {\r\n // Get the letters\r\n var t = /^[a-zA-Z]+/.exec(id);\r\n\r\n if (t) {\r\n // Base 26 calculation\r\n var code = 0;\r\n for (var i = 0; i < t[0].length; i++) {\r\n code += parseInt(t[0].charCodeAt(i) - 64) * Math.pow(26, (t[0].length - 1 - i));\r\n }\r\n code--;\r\n // Make sure jexcel starts on zero\r\n if (code < 0) {\r\n code = 0;\r\n }\r\n\r\n // Number\r\n var number = parseInt(/[0-9]+$/.exec(id));\r\n if (number > 0) {\r\n number--;\r\n }\r\n\r\n if (arr == true) {\r\n id = [ code, number ];\r\n } else {\r\n id = code + '-' + number;\r\n }\r\n }\r\n\r\n return id;\r\n}\r\n\r\n/**\r\n * Convert jexcel id to excel like column name\r\n * \r\n * @param string id\r\n * @return string id\r\n */\r\njexcel.getColumnNameFromId = function (cellId) {\r\n if (! Array.isArray(cellId)) {\r\n cellId = cellId.split('-');\r\n }\r\n\r\n return jexcel.getColumnName(parseInt(cellId[0])) + (parseInt(cellId[1]) + 1);\r\n}\r\n\r\n/**\r\n * Verify element inside jexcel table\r\n * \r\n * @param string id\r\n * @return string id\r\n */\r\njexcel.getElement = function(element) {\r\n var jexcelSection = 0;\r\n var jexcelElement = 0;\r\n\r\n function path (element) {\r\n if (element.className) {\r\n if (element.classList.contains('jexcel_container')) {\r\n jexcelElement = element;\r\n }\r\n }\r\n\r\n if (element.tagName == 'THEAD') {\r\n jexcelSection = 1;\r\n } else if (element.tagName == 'TBODY') {\r\n jexcelSection = 2;\r\n }\r\n\r\n if (element.parentNode) {\r\n path(element.parentNode);\r\n }\r\n }\r\n\r\n path(element);\r\n\r\n return [ jexcelElement, jexcelSection ];\r\n}\r\n\r\njexcel.doubleDigitFormat = function(v) {\r\n v = ''+v;\r\n if (v.length == 1) {\r\n v = '0'+v;\r\n }\r\n return v;\r\n}\r\n\r\n/**\r\n * Jquery Support\r\n */\r\nif (typeof(jQuery) != 'undefined') {\r\n (function($){\r\n $.fn.jexcel = function(method) {\r\n var spreadsheetContainer = $(this).get(0);\r\n if (! spreadsheetContainer.jexcel) {\r\n return jexcel($(this).get(0), arguments[0]);\r\n } else {\r\n return spreadsheetContainer.jexcel[method].apply(this, Array.prototype.slice.call( arguments, 1 ));\r\n }\r\n };\r\n\r\n })(jQuery);\r\n}\r\n\r\n\r\n// Based on sutoiku work (https://github.com/sutoiku)\r\n\r\nvar error = (function() {\r\n var exports = {};\r\n\r\n exports.nil = new Error('#NULL!');\r\n exports.div0 = new Error('#DIV/0!');\r\n exports.value = new Error('#VALUE!');\r\n exports.ref = new Error('#REF!');\r\n exports.name = new Error('#NAME?');\r\n exports.num = new Error('#NUM!');\r\n exports.na = new Error('#N/A');\r\n exports.error = new Error('#ERROR!');\r\n exports.data = new Error('#GETTING_DATA');\r\n\r\n return exports;\r\n})();\r\n\r\nvar utils = (function() {\r\n var exports = {};\r\n\r\n exports.flattenShallow = function(array) {\r\n if (!array || !array.reduce) {\r\n return array;\r\n }\r\n\r\n return array.reduce(function(a, b) {\r\n var aIsArray = Array.isArray(a);\r\n var bIsArray = Array.isArray(b);\r\n\r\n if (aIsArray && bIsArray) {\r\n return a.concat(b);\r\n }\r\n if (aIsArray) {\r\n a.push(b);\r\n\r\n return a;\r\n }\r\n if (bIsArray) {\r\n return [ a ].concat(b);\r\n }\r\n\r\n return [ a, b ];\r\n });\r\n };\r\n\r\n exports.isFlat = function(array) {\r\n if (!array) {\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < array.length; ++i) {\r\n if (Array.isArray(array[i])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n exports.flatten = function() {\r\n var result = exports.argsToArray.apply(null, arguments);\r\n\r\n while (!exports.isFlat(result)) {\r\n result = exports.flattenShallow(result);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n exports.argsToArray = function(args) {\r\n var result = [];\r\n\r\n exports.arrayEach(args, function(value) {\r\n result.push(value);\r\n });\r\n\r\n return result;\r\n };\r\n\r\n exports.numbers = function() {\r\n var possibleNumbers = this.flatten.apply(null, arguments);\r\n return possibleNumbers.filter(function(el) {\r\n return typeof el === 'number';\r\n });\r\n };\r\n\r\n exports.cleanFloat = function(number) {\r\n var power = 1e14;\r\n return Math.round(number * power) / power;\r\n };\r\n\r\n exports.parseBool = function(bool) {\r\n if (typeof bool === 'boolean') {\r\n return bool;\r\n }\r\n\r\n if (bool instanceof Error) {\r\n return bool;\r\n }\r\n\r\n if (typeof bool === 'number') {\r\n return bool !== 0;\r\n }\r\n\r\n if (typeof bool === 'string') {\r\n var up = bool.toUpperCase();\r\n if (up === 'TRUE') {\r\n return true;\r\n }\r\n\r\n if (up === 'FALSE') {\r\n return false;\r\n }\r\n }\r\n\r\n if (bool instanceof Date && !isNaN(bool)) {\r\n return true;\r\n }\r\n\r\n return error.value;\r\n };\r\n\r\n exports.parseNumber = function(string) {\r\n if (string === undefined || string === '') {\r\n return error.value;\r\n }\r\n if (!isNaN(string)) {\r\n return parseFloat(string);\r\n }\r\n\r\n return error.value;\r\n };\r\n\r\n exports.parseNumberArray = function(arr) {\r\n var len;\r\n\r\n if (!arr || (len = arr.length) === 0) {\r\n return error.value;\r\n }\r\n\r\n var parsed;\r\n\r\n while (len--) {\r\n parsed = exports.parseNumber(arr[len]);\r\n if (parsed === error.value) {\r\n return parsed;\r\n }\r\n arr[len] = parsed;\r\n }\r\n\r\n return arr;\r\n };\r\n\r\n exports.parseMatrix = function(matrix) {\r\n var n;\r\n\r\n if (!matrix || (n = matrix.length) === 0) {\r\n return error.value;\r\n }\r\n var pnarr;\r\n\r\n for (var i = 0; i < matrix.length; i++) {\r\n pnarr = exports.parseNumberArray(matrix[i]);\r\n matrix[i] = pnarr;\r\n\r\n if (pnarr instanceof Error) {\r\n return pnarr;\r\n }\r\n }\r\n\r\n return matrix;\r\n };\r\n\r\n var d1900 = new Date(Date.UTC(1900, 0, 1));\r\n exports.parseDate = function(date) {\r\n if (!isNaN(date)) {\r\n if (date instanceof Date) {\r\n return new Date(date);\r\n }\r\n var d = parseInt(date, 10);\r\n if (d < 0) {\r\n return error.num;\r\n }\r\n if (d <= 60) {\r\n return new Date(d1900.getTime() + (d - 1) * 86400000);\r\n }\r\n return new Date(d1900.getTime() + (d - 2) * 86400000);\r\n }\r\n if (typeof date === 'string') {\r\n date = new Date(date);\r\n if (!isNaN(date)) {\r\n return date;\r\n }\r\n }\r\n return error.value;\r\n };\r\n\r\n exports.parseDateArray = function(arr) {\r\n var len = arr.length;\r\n var parsed;\r\n while (len--) {\r\n parsed = this.parseDate(arr[len]);\r\n if (parsed === error.value) {\r\n return parsed;\r\n }\r\n arr[len] = parsed;\r\n }\r\n return arr;\r\n };\r\n\r\n exports.anyIsError = function() {\r\n var n = arguments.length;\r\n while (n--) {\r\n if (arguments[n] instanceof Error) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n exports.arrayValuesToNumbers = function(arr) {\r\n var n = arr.length;\r\n var el;\r\n while (n--) {\r\n el = arr[n];\r\n if (typeof el === 'number') {\r\n continue;\r\n }\r\n if (el === true) {\r\n arr[n] = 1;\r\n continue;\r\n }\r\n if (el === false) {\r\n arr[n] = 0;\r\n continue;\r\n }\r\n if (typeof el === 'string') {\r\n var number = this.parseNumber(el);\r\n if (number instanceof Error) {\r\n arr[n] = 0;\r\n } else {\r\n arr[n] = number;\r\n }\r\n }\r\n }\r\n return arr;\r\n };\r\n\r\n exports.rest = function(array, idx) {\r\n idx = idx || 1;\r\n if (!array || typeof array.slice !== 'function') {\r\n return array;\r\n }\r\n return array.slice(idx);\r\n };\r\n\r\n exports.initial = function(array, idx) {\r\n idx = idx || 1;\r\n if (!array || typeof array.slice !== 'function') {\r\n return array;\r\n }\r\n return array.slice(0, array.length - idx);\r\n };\r\n\r\n exports.arrayEach = function(array, iteratee) {\r\n var index = -1, length = array.length;\r\n\r\n while (++index < length) {\r\n if (iteratee(array[index], index, array) === false) {\r\n break;\r\n }\r\n }\r\n\r\n return array;\r\n };\r\n\r\n exports.transpose = function(matrix) {\r\n if (!matrix) {\r\n return error.value;\r\n }\r\n\r\n return matrix[0].map(function(col, i) {\r\n return matrix.map(function(row) {\r\n return row[i];\r\n });\r\n });\r\n };\r\n\r\n return exports;\r\n})();\r\n\r\njexcel.methods = {};\r\n\r\njexcel.methods.datetime = (function() {\r\n var exports = {};\r\n\r\n var d1900 = new Date(1900, 0, 1);\r\n var WEEK_STARTS = [\r\n undefined,\r\n 0,\r\n 1,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n 1,\r\n 2,\r\n 3,\r\n 4,\r\n 5,\r\n 6,\r\n 0\r\n ];\r\n var WEEK_TYPES = [\r\n [],\r\n [1, 2, 3, 4, 5, 6, 7],\r\n [7, 1, 2, 3, 4, 5, 6],\r\n [6, 0, 1, 2, 3, 4, 5],\r\n [],\r\n [],\r\n [],\r\n [],\r\n [],\r\n [],\r\n [],\r\n [7, 1, 2, 3, 4, 5, 6],\r\n [6, 7, 1, 2, 3, 4, 5],\r\n [5, 6, 7, 1, 2, 3, 4],\r\n [4, 5, 6, 7, 1, 2, 3],\r\n [3, 4, 5, 6, 7, 1, 2],\r\n [2, 3, 4, 5, 6, 7, 1],\r\n [1, 2, 3, 4, 5, 6, 7]\r\n ];\r\n var WEEKEND_TYPES = [\r\n [],\r\n [6, 0],\r\n [0, 1],\r\n [1, 2],\r\n [2, 3],\r\n [3, 4],\r\n [4, 5],\r\n [5, 6],\r\n undefined,\r\n undefined,\r\n undefined, [0, 0],\r\n [1, 1],\r\n [2, 2],\r\n [3, 3],\r\n [4, 4],\r\n [5, 5],\r\n [6, 6]\r\n ];\r\n\r\n exports.DATE = function(year, month, day) {\r\n year = utils.parseNumber(year);\r\n month = utils.parseNumber(month);\r\n day = utils.parseNumber(day);\r\n if (utils.anyIsError(year, month, day)) {\r\n return error.value;\r\n }\r\n if (year < 0 || month < 0 || day < 0) {\r\n return error.num;\r\n }\r\n var date = new Date(year, month - 1, day);\r\n return date;\r\n };\r\n\r\n exports.DATEVALUE = function(date_text) {\r\n if (typeof date_text !== 'string') {\r\n return error.value;\r\n }\r\n var date = Date.parse(date_text);\r\n if (isNaN(date)) {\r\n return error.value;\r\n }\r\n if (date <= -2203891200000) {\r\n return (date - d1900) / 86400000 + 1;\r\n }\r\n return (date - d1900) / 86400000 + 2;\r\n };\r\n\r\n exports.DAY = function(serial_number) {\r\n var date = utils.parseDate(serial_number);\r\n if (date instanceof Error) {\r\n return date;\r\n }\r\n return date.getDate();\r\n };\r\n\r\n exports.DAYS = function(end_date, start_date) {\r\n end_date = utils.parseDate(end_date);\r\n start_date = utils.parseDate(start_date);\r\n if (end_date instanceof Error) {\r\n return end_date;\r\n }\r\n if (start_date instanceof Error) {\r\n return start_date;\r\n }\r\n return serial(end_date) - serial(start_date);\r\n };\r\n\r\n exports.DAYS360 = function(start_date, end_date, method) {\r\n };\r\n\r\n exports.EDATE = function(start_date, months) {\r\n start_date = utils.parseDate(start_date);\r\n if (start_date instanceof Error) {\r\n return start_date;\r\n }\r\n if (isNaN(months)) {\r\n return error.value;\r\n }\r\n months = parseInt(months, 10);\r\n start_date.setMonth(start_date.getMonth() + months);\r\n return serial(start_date);\r\n };\r\n\r\n exports.EOMONTH = function(start_date, months) {\r\n start_date = utils.parseDate(start_date);\r\n if (start_date instanceof Error) {\r\n return start_date;\r\n }\r\n if (isNaN(months)) {\r\n return error.value;\r\n }\r\n months = parseInt(months, 10);\r\n return serial(new Date(start_date.getFullYear(), start_date.getMonth() + months + 1, 0));\r\n };\r\n\r\n exports.HOUR = function(serial_number) {\r\n serial_number = utils.parseDate(serial_number);\r\n if (serial_number instanceof Error) {\r\n return serial_number;\r\n }\r\n return serial_number.getHours();\r\n };\r\n\r\n exports.INTERVAL = function(second) {\r\n if (typeof second !== 'number' && typeof second !== 'string') {\r\n return error.value;\r\n } else {\r\n second = parseInt(second, 10);\r\n }\r\n\r\n var year = Math.floor(second/946080000);\r\n second = second%946080000;\r\n var month = Math.floor(second/2592000);\r\n second = second%2592000;\r\n var day = Math.floor(second/86400);\r\n second = second%86400;\r\n\r\n var hour = Math.floor(second/3600);\r\n second = second%3600;\r\n var min = Math.floor(second/60);\r\n second = second%60;\r\n var sec = second;\r\n\r\n year = (year > 0) ? year + 'Y' : '';\r\n month = (month > 0) ? month + 'M' : '';\r\n day = (day > 0) ? day + 'D' : '';\r\n hour = (hour > 0) ? hour + 'H' : '';\r\n min = (min > 0) ? min + 'M' : '';\r\n sec = (sec > 0) ? sec + 'S' : '';\r\n\r\n return 'P' + year + month + day + 'T' + hour + min + sec;\r\n };\r\n\r\n exports.ISOWEEKNUM = function(date) {\r\n date = utils.parseDate(date);\r\n if (date instanceof Error) {\r\n return date;\r\n }\r\n\r\n date.setHours(0, 0, 0);\r\n date.setDate(date.getDate() + 4 - (date.getDay() || 7));\r\n var yearStart = new Date(date.getFullYear(), 0, 1);\r\n return Math.ceil((((date - yearStart) / 86400000) + 1) / 7);\r\n };\r\n\r\n exports.MINUTE = function(serial_number) {\r\n serial_number = utils.parseDate(serial_number);\r\n if (serial_number instanceof Error) {\r\n return serial_number;\r\n }\r\n return serial_number.getMinutes();\r\n };\r\n\r\n exports.MONTH = function(serial_number) {\r\n serial_number = utils.parseDate(serial_number);\r\n if (serial_number instanceof Error) {\r\n return serial_number;\r\n }\r\n return serial_number.getMonth() + 1;\r\n };\r\n\r\n exports.NETWORKDAYS = function(start_date, end_date, holidays) {\r\n };\r\n\r\n exports.NETWORKDAYS.INTL = function(start_date, end_date, weekend, holidays) {\r\n };\r\n\r\n exports.NOW = function() {\r\n return new Date();\r\n };\r\n\r\n exports.SECOND = function(serial_number) {\r\n serial_number = utils.parseDate(serial_number);\r\n if (serial_number instanceof Error) {\r\n return serial_number;\r\n }\r\n return serial_number.getSeconds();\r\n };\r\n\r\n exports.TIME = function(hour, minute, second) {\r\n hour = utils.parseNumber(hour);\r\n minute = utils.parseNumber(minute);\r\n second = utils.parseNumber(second);\r\n if (utils.anyIsError(hour, minute, second)) {\r\n return error.value;\r\n }\r\n if (hour < 0 || minute < 0 || second < 0) {\r\n return error.num;\r\n }\r\n return (3600 * hour + 60 * minute + second) / 86400;\r\n };\r\n\r\n exports.TIMEVALUE = function(time_text) {\r\n time_text = utils.parseDate(time_text);\r\n if (time_text instanceof Error) {\r\n return time_text;\r\n }\r\n return (3600 * time_text.getHours() + 60 * time_text.getMinutes() + time_text.getSeconds()) / 86400;\r\n };\r\n\r\n exports.TODAY = function() {\r\n return new Date();\r\n };\r\n\r\n exports.WEEKDAY = function(serial_number, return_type) {\r\n serial_number = utils.parseDate(serial_number);\r\n if (serial_number instanceof Error) {\r\n return serial_number;\r\n }\r\n if (return_type === undefined) {\r\n return_type = 1;\r\n }\r\n var day = serial_number.getDay();\r\n return WEEK_TYPES[return_type][day];\r\n };\r\n\r\n exports.WEEKNUM = function(serial_number, return_type) {\r\n };\r\n\r\n exports.WORKDAY = function(start_date, days, holidays) {\r\n };\r\n\r\n exports.WORKDAY.INTL = function(start_date, days, weekend, holidays) {\r\n };\r\n\r\n exports.YEAR = function(serial_number) {\r\n serial_number = utils.parseDate(serial_number);\r\n if (serial_number instanceof Error) {\r\n return serial_number;\r\n }\r\n return serial_number.getFullYear();\r\n };\r\n\r\n function isLeapYear(year) {\r\n return new Date(year, 1, 29).getMonth() === 1;\r\n }\r\n\r\n exports.YEARFRAC = function(start_date, end_date, basis) {\r\n };\r\n\r\n function serial(date) {\r\n var addOn = (date > -2203891200000)?2:1;\r\n return (date - d1900) / 86400000 + addOn;\r\n }\r\n\r\n return exports;\r\n})();\r\n\r\njexcel.methods.database = (function() {\r\n var exports = {};\r\n\r\n function compact(array) {\r\n if (!array) {\r\n return array;\r\n }\r\n var result = [];\r\n for (var i = 0; i < array.length; ++i) {\r\n if (!array[i]) {\r\n continue;\r\n }\r\n result.push(array[i]);\r\n }\r\n return result;\r\n }\r\n\r\n exports.FINDFIELD = function(database, title) {\r\n var index = null;\r\n for (var i = 0; i < database.length; i++) {\r\n if (database[i][0] === title) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n // Return error if the input field title is incorrect\r\n if (index == null) {\r\n return error.value;\r\n }\r\n return index;\r\n };\r\n\r\n function findResultIndex(database, criterias) {\r\n var matches = {};\r\n for (var i = 1; i < database[0].length; ++i) {\r\n matches[i] = true;\r\n }\r\n var maxCriteriaLength = criterias[0].length;\r\n for (i = 1; i < criterias.length; ++i) {\r\n if (criterias[i].length > maxCriteriaLength) {\r\n maxCriteriaLength = criterias[i].length;\r\n }\r\n }\r\n\r\n for (var k = 1; k < database.length; ++k) {\r\n for (var l = 1; l < database[k].length; ++l) {\r\n var currentCriteriaResult = false;\r\n var hasMatchingCriteria = false;\r\n for (var j = 0; j < criterias.length; ++j) {\r\n var criteria = criterias[j];\r\n if (criteria.length < maxCriteriaLength) {\r\n continue;\r\n }\r\n\r\n var criteriaField = criteria[0];\r\n if (database[k][0] !== criteriaField) {\r\n continue;\r\n }\r\n hasMatchingCriteria = true;\r\n for (var p = 1; p < criteria.length; ++p) {\r\n currentCriteriaResult = currentCriteriaResult\r\n || eval(database[k][l] + criteria[p]); // jshint\r\n // ignore:line\r\n }\r\n }\r\n if (hasMatchingCriteria) {\r\n matches[l] = matches[l] && currentCriteriaResult;\r\n }\r\n }\r\n }\r\n\r\n var result = [];\r\n for (var n = 0; n < database[0].length; ++n) {\r\n if (matches[n]) {\r\n result.push(n - 1);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Database functions\r\n exports.DAVERAGE = function(database, field, criteria) {\r\n // Return error if field is not a number and not a string\r\n if (isNaN(field) && (typeof field !== \"string\")) {\r\n return error.value;\r\n }\r\n var resultIndexes = findResultIndex(database, criteria);\r\n var targetFields = [];\r\n if (typeof field === \"string\") {\r\n var index = exports.FINDFIELD(database, field);\r\n targetFields = utils.rest(database[index]);\r\n } else {\r\n targetFields = utils.rest(database[field]);\r\n }\r\n var sum = 0;\r\n for (var i = 0; i < resultIndexes.length; i++) {\r\n sum += targetFields[resultIndexes[i]];\r\n }\r\n return resultIndexes.length === 0 ? error.div0 : sum / resultIndexes.length;\r\n };\r\n\r\n exports.DCOUNT = function(database, field, criteria) {\r\n };\r\n\r\n exports.DCOUNTA = function(database, field, criteria) {\r\n };\r\n\r\n exports.DGET = function(database, field, criteria) {\r\n // Return error if field is not a number and not a string\r\n if (isNaN(field) && (typeof field !== \"string\")) {\r\n return error.value;\r\n }\r\n var resultIndexes = findResultIndex(database, criteria);\r\n var targetFields = [];\r\n if (typeof field === \"string\") {\r\n var index = exports.FINDFIELD(database, field);\r\n targetFields = utils.rest(database[index]);\r\n } else {\r\n targetFields = utils.rest(database[field]);\r\n }\r\n // Return error if no record meets the criteria\r\n if (resultIndexes.length === 0) {\r\n return error.value;\r\n }\r\n // Returns the #NUM! error value because more than one record meets the\r\n // criteria\r\n if (resultIndexes.length > 1) {\r\n return error.num;\r\n }\r\n\r\n return targetFields[resultIndexes[0]];\r\n };\r\n\r\n exports.DMAX = function(database, field, criteria) {\r\n // Return error if field is not a number and not a string\r\n if (isNaN(field) && (typeof field !== \"string\")) {\r\n return error.value;\r\n }\r\n var resultIndexes = findResultIndex(database, criteria);\r\n var targetFields = [];\r\n if (typeof field === \"string\") {\r\n var index = exports.FINDFIELD(database, field);\r\n targetFields = utils.rest(database[index]);\r\n } else {\r\n targetFields = utils.rest(database[field]);\r\n }\r\n var maxValue = targetFields[resultIndexes[0]];\r\n for (var i = 1; i < resultIndexes.length; i++) {\r\n if (maxValue < targetFields[resultIndexes[i]]) {\r\n maxValue = targetFields[resultIndexes[i]];\r\n }\r\n }\r\n return maxValue;\r\n };\r\n\r\n exports.DMIN = function(database, field, criteria) {\r\n // Return error if field is not a number and not a string\r\n if (isNaN(field) && (typeof field !== \"string\")) {\r\n return error.value;\r\n }\r\n var resultIndexes = findResultIndex(database, criteria);\r\n var targetFields = [];\r\n if (typeof field === \"string\") {\r\n var index = exports.FINDFIELD(database, field);\r\n targetFields = utils.rest(database[index]);\r\n } else {\r\n targetFields = utils.rest(database[field]);\r\n }\r\n var minValue = targetFields[resultIndexes[0]];\r\n for (var i = 1; i < resultIndexes.length; i++) {\r\n if (minValue > targetFields[resultIndexes[i]]) {\r\n minValue = targetFields[resultIndexes[i]];\r\n }\r\n }\r\n return minValue;\r\n };\r\n\r\n exports.DPRODUCT = function(database, field, criteria) {\r\n // Return error if field is not a number and not a string\r\n if (isNaN(field) && (typeof field !== \"string\")) {\r\n return error.value;\r\n }\r\n var resultIndexes = findResultIndex(database, criteria);\r\n var targetFields = [];\r\n if (typeof field === \"string\") {\r\n var index = exports.FINDFIELD(database, field);\r\n targetFields = utils.rest(database[index]);\r\n } else {\r\n targetFields = utils.rest(database[field]);\r\n }\r\n var targetValues = [];\r\n for (var i = 0; i < resultIndexes.length; i++) {\r\n targetValues[i] = targetFields[resultIndexes[i]];\r\n }\r\n targetValues = compact(targetValues);\r\n var result = 1;\r\n for (i = 0; i < targetValues.length; i++) {\r\n result *= targetValues[i];\r\n }\r\n return result;\r\n };\r\n\r\n exports.DSTDEV = function(database, field, criteria) {\r\n };\r\n\r\n exports.DSTDEVP = function(database, field, criteria) {\r\n };\r\n\r\n exports.DSUM = function(database, field, criteria) {\r\n };\r\n\r\n exports.DVAR = function(database, field, criteria) {\r\n };\r\n\r\n exports.DVARP = function(database, field, criteria) {\r\n };\r\n\r\n exports.MATCH = function(lookupValue, lookupArray, matchType) {\r\n if (!lookupValue && !lookupArray) {\r\n return error.na;\r\n }\r\n if (arguments.length === 2) {\r\n matchType = 1;\r\n }\r\n if (!(lookupArray instanceof Array)) {\r\n return error.na;\r\n }\r\n if (matchType !== -1 && matchType !== 0 && matchType !== 1) {\r\n return error.na;\r\n }\r\n\r\n var index;\r\n var indexValue;\r\n\r\n for (var idx = 0; idx < lookupArray.length; idx++) {\r\n if (matchType === 1) {\r\n if (lookupArray[idx] === lookupValue) {\r\n return idx + 1;\r\n } else if (lookupArray[idx] < lookupValue) {\r\n if (!indexValue) {\r\n index = idx + 1;\r\n indexValue = lookupArray[idx];\r\n } else if (lookupArray[idx] > indexValue) {\r\n index = idx + 1;\r\n indexValue = lookupArray[idx];\r\n }\r\n }\r\n } else if (matchType === 0) {\r\n if (typeof lookupValue === 'string') {\r\n lookupValue = lookupValue.replace(/\\?/g, '.');\r\n if (lookupArray[idx].toLowerCase().match(lookupValue.toLowerCase())) {\r\n return idx + 1;\r\n }\r\n } else {\r\n if (lookupArray[idx] === lookupValue) {\r\n return idx + 1;\r\n }\r\n }\r\n } else if (matchType === -1) {\r\n if (lookupArray[idx] === lookupValue) {\r\n return idx + 1;\r\n } else if (lookupArray[idx] > lookupValue) {\r\n if (!indexValue) {\r\n index = idx + 1;\r\n indexValue = lookupArray[idx];\r\n } else if (lookupArray[idx] < indexValue) {\r\n index = idx + 1;\r\n indexValue = lookupArray[idx];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return index ? index : error.na;\r\n };\r\n\r\n return exports;\r\n})();\r\n\r\njexcel.methods.engineering = (function() {\r\n var exports = {};\r\n\r\n function isValidBinaryNumber(number) {\r\n return (/^[01]{1,10}$/).test(number);\r\n }\r\n\r\n exports.BESSELI = function(x, n) {\r\n };\r\n\r\n exports.BESSELJ = function(x, n) {\r\n };\r\n\r\n exports.BESSELK = function(x, n) {\r\n };\r\n\r\n exports.BESSELY = function(x, n) {\r\n };\r\n\r\n exports.BIN2DEC = function(number) {\r\n // Return error if number is not binary or contains more than 10\r\n // characters (10 digits)\r\n if (!isValidBinaryNumber(number)) {\r\n return error.num;\r\n }\r\n\r\n // Convert binary number to decimal\r\n var result = parseInt(number, 2);\r\n\r\n // Handle negative numbers\r\n var stringified = number.toString();\r\n if (stringified.length === 10 && stringified.substring(0, 1) === '1') {\r\n return parseInt(stringified.substring(1), 2) - 512;\r\n } else {\r\n return result;\r\n }\r\n };\r\n\r\n exports.BIN2HEX = function(number, places) {\r\n // Return error if number is not binary or contains more than 10\r\n // characters (10 digits)\r\n if (!isValidBinaryNumber(number)) {\r\n return error.num;\r\n }\r\n\r\n // Ignore places and return a 10-character hexadecimal number if number\r\n // is negative\r\n var stringified = number.toString();\r\n if (stringified.length === 10 && stringified.substring(0, 1) === '1') {\r\n return (1099511627264 + parseInt(stringified.substring(1), 2)).toString(16);\r\n }\r\n\r\n // Convert binary number to hexadecimal\r\n var result = parseInt(number, 2).toString(16);\r\n\r\n // Return hexadecimal number using the minimum number of characters\r\n // necessary if places is undefined\r\n if (places === undefined) {\r\n return result;\r\n } else {\r\n // Return error if places is nonnumeric\r\n if (isNaN(places)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if places is negative\r\n if (places < 0) {\r\n return error.num;\r\n }\r\n\r\n // Truncate places in case it is not an integer\r\n places = Math.floor(places);\r\n\r\n // Pad return value with leading 0s (zeros) if necessary (using\r\n // Underscore.string)\r\n return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;\r\n }\r\n };\r\n\r\n exports.BIN2OCT = function(number, places) {\r\n // Return error if number is not binary or contains more than 10\r\n // characters (10 digits)\r\n if (!isValidBinaryNumber(number)) {\r\n return error.num;\r\n }\r\n\r\n // Ignore places and return a 10-character octal number if number is\r\n // negative\r\n var stringified = number.toString();\r\n if (stringified.length === 10 && stringified.substring(0, 1) === '1') {\r\n return (1073741312 + parseInt(stringified.substring(1), 2)).toString(8);\r\n }\r\n\r\n // Convert binary number to octal\r\n var result = parseInt(number, 2).toString(8);\r\n\r\n // Return octal number using the minimum number of characters necessary\r\n // if places is undefined\r\n if (places === undefined) {\r\n return result;\r\n } else {\r\n // Return error if places is nonnumeric\r\n if (isNaN(places)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if places is negative\r\n if (places < 0) {\r\n return error.num;\r\n }\r\n\r\n // Truncate places in case it is not an integer\r\n places = Math.floor(places);\r\n\r\n // Pad return value with leading 0s (zeros) if necessary (using\r\n // Underscore.string)\r\n return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;\r\n }\r\n };\r\n\r\n exports.BITAND = function(number1, number2) {\r\n // Return error if either number is a non-numeric value\r\n number1 = utils.parseNumber(number1);\r\n number2 = utils.parseNumber(number2);\r\n if (utils.anyIsError(number1, number2)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if either number is less than 0\r\n if (number1 < 0 || number2 < 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if either number is a non-integer\r\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\r\n return error.num;\r\n }\r\n\r\n // Return error if either number is greater than (2^48)-1\r\n if (number1 > 281474976710655 || number2 > 281474976710655) {\r\n return error.num;\r\n }\r\n\r\n // Return bitwise AND of two numbers\r\n return number1 & number2;\r\n };\r\n\r\n exports.BITLSHIFT = function(number, shift) {\r\n number = utils.parseNumber(number);\r\n shift = utils.parseNumber(shift);\r\n if (utils.anyIsError(number, shift)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if number is less than 0\r\n if (number < 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if number is a non-integer\r\n if (Math.floor(number) !== number) {\r\n return error.num;\r\n }\r\n\r\n // Return error if number is greater than (2^48)-1\r\n if (number > 281474976710655) {\r\n return error.num;\r\n }\r\n\r\n // Return error if the absolute value of shift is greater than 53\r\n if (Math.abs(shift) > 53) {\r\n return error.num;\r\n }\r\n\r\n // Return number shifted by shift bits to the left or to the right if\r\n // shift is negative\r\n return (shift >= 0) ? number << shift : number >> -shift;\r\n };\r\n\r\n exports.BITOR = function(number1, number2) {\r\n number1 = utils.parseNumber(number1);\r\n number2 = utils.parseNumber(number2);\r\n if (utils.anyIsError(number1, number2)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if either number is less than 0\r\n if (number1 < 0 || number2 < 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if either number is a non-integer\r\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\r\n return error.num;\r\n }\r\n\r\n // Return error if either number is greater than (2^48)-1\r\n if (number1 > 281474976710655 || number2 > 281474976710655) {\r\n return error.num;\r\n }\r\n\r\n // Return bitwise OR of two numbers\r\n return number1 | number2;\r\n };\r\n\r\n exports.BITRSHIFT = function(number, shift) {\r\n number = utils.parseNumber(number);\r\n shift = utils.parseNumber(shift);\r\n if (utils.anyIsError(number, shift)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if number is less than 0\r\n if (number < 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if number is a non-integer\r\n if (Math.floor(number) !== number) {\r\n return error.num;\r\n }\r\n\r\n // Return error if number is greater than (2^48)-1\r\n if (number > 281474976710655) {\r\n return error.num;\r\n }\r\n\r\n // Return error if the absolute value of shift is greater than 53\r\n if (Math.abs(shift) > 53) {\r\n return error.num;\r\n }\r\n\r\n // Return number shifted by shift bits to the right or to the left if\r\n // shift is negative\r\n return (shift >= 0) ? number >> shift : number << -shift;\r\n };\r\n\r\n exports.BITXOR = function(number1, number2) {\r\n number1 = utils.parseNumber(number1);\r\n number2 = utils.parseNumber(number2);\r\n if (utils.anyIsError(number1, number2)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if either number is less than 0\r\n if (number1 < 0 || number2 < 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if either number is a non-integer\r\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\r\n return error.num;\r\n }\r\n\r\n // Return error if either number is greater than (2^48)-1\r\n if (number1 > 281474976710655 || number2 > 281474976710655) {\r\n return error.num;\r\n }\r\n\r\n // Return bitwise XOR of two numbers\r\n return number1 ^ number2;\r\n };\r\n\r\n exports.COMPLEX = function(real, imaginary, suffix) {\r\n real = utils.parseNumber(real);\r\n imaginary = utils.parseNumber(imaginary);\r\n if (utils.anyIsError(real, imaginary)) {\r\n return real;\r\n }\r\n\r\n // Set suffix\r\n suffix = (suffix === undefined) ? 'i' : suffix;\r\n\r\n // Return error if suffix is neither \"i\" nor \"j\"\r\n if (suffix !== 'i' && suffix !== 'j') {\r\n return error.value;\r\n }\r\n\r\n // Return complex number\r\n if (real === 0 && imaginary === 0) {\r\n return 0;\r\n } else if (real === 0) {\r\n return (imaginary === 1) ? suffix : imaginary.toString() + suffix;\r\n } else if (imaginary === 0) {\r\n return real.toString();\r\n } else {\r\n var sign = (imaginary > 0) ? '+' : '';\r\n return real.toString() + sign + ((imaginary === 1) ? suffix : imaginary.toString() + suffix);\r\n }\r\n };\r\n\r\n exports.CONVERT = function(number, from_unit, to_unit) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n\r\n // List of units supported by CONVERT and units defined by the\r\n // International System of Units\r\n // [Name, Symbol, Alternate symbols, Quantity, ISU, CONVERT, Conversion\r\n // ratio]\r\n var units = [\r\n [\"a.u. of action\", \"?\", null, \"action\", false, false, 1.05457168181818e-34],\r\n [\"a.u. of charge\", \"e\", null, \"electric_charge\", false, false, 1.60217653141414e-19],\r\n [\"a.u. of energy\", \"Eh\", null, \"energy\", false, false, 4.35974417757576e-18],\r\n [\"a.u. of length\", \"a?\", null, \"length\", false, false, 5.29177210818182e-11],\r\n [\"a.u. of mass\", \"m?\", null, \"mass\", false, false, 9.10938261616162e-31],\r\n [\"a.u. of time\", \"?/Eh\", null, \"time\", false, false, 2.41888432650516e-17],\r\n [\"admiralty knot\", \"admkn\", null, \"speed\", false, true, 0.514773333],\r\n [\"ampere\", \"A\", null, \"electric_current\", true, false, 1],\r\n [\"ampere per meter\", \"A/m\", null, \"magnetic_field_intensity\", true, false, 1],\r\n [\"ångström\", \"Å\", [\"ang\"], \"length\", false, true, 1e-10],\r\n [\"are\", \"ar\", null, \"area\", false, true, 100],\r\n [\"astronomical unit\", \"ua\", null, \"length\", false, false, 1.49597870691667e-11],\r\n [\"bar\", \"bar\", null, \"pressure\", false, false, 100000],\r\n [\"barn\", \"b\", null, \"area\", false, false, 1e-28],\r\n [\"becquerel\", \"Bq\", null, \"radioactivity\", true, false, 1],\r\n [\"bit\", \"bit\", [\"b\"], \"information\", false, true, 1],\r\n [\"btu\", \"BTU\", [\"btu\"], \"energy\", false, true, 1055.05585262],\r\n [\"byte\", \"byte\", null, \"information\", false, true, 8],\r\n [\"candela\", \"cd\", null, \"luminous_intensity\", true, false, 1],\r\n [\"candela per square metre\", \"cd/m?\", null, \"luminance\", true, false, 1],\r\n [\"coulomb\", \"C\", null, \"electric_charge\", true, false, 1],\r\n [\"cubic ångström\", \"ang3\", [\"ang^3\"], \"volume\", false, true, 1e-30],\r\n [\"cubic foot\", \"ft3\", [\"ft^3\"], \"volume\", false, true, 0.028316846592],\r\n [\"cubic inch\", \"in3\", [\"in^3\"], \"volume\", false, true, 0.000016387064],\r\n [\"cubic light-year\", \"ly3\", [\"ly^3\"], \"volume\", false, true, 8.46786664623715e-47],\r\n [\"cubic metre\", \"m?\", null, \"volume\", true, true, 1],\r\n [\"cubic mile\", \"mi3\", [\"mi^3\"], \"volume\", false, true, 4168181825.44058],\r\n [\"cubic nautical mile\", \"Nmi3\", [\"Nmi^3\"], \"volume\", false, true, 6352182208],\r\n [\"cubic Pica\", \"Pica3\", [\"Picapt3\", \"Pica^3\", \"Picapt^3\"], \"volume\", false, true, 7.58660370370369e-8],\r\n [\"cubic yard\", \"yd3\", [\"yd^3\"], \"volume\", false, true, 0.764554857984],\r\n [\"cup\", \"cup\", null, \"volume\", false, true, 0.0002365882365],\r\n [\"dalton\", \"Da\", [\"u\"], \"mass\", false, false, 1.66053886282828e-27],\r\n [\"day\", \"d\", [\"day\"], \"time\", false, true, 86400],\r\n [\"degree\", \"°\", null, \"angle\", false, false, 0.0174532925199433],\r\n [\"degrees Rankine\", \"Rank\", null, \"temperature\", false, true, 0.555555555555556],\r\n [\"dyne\", \"dyn\", [\"dy\"], \"force\", false, true, 0.00001],\r\n [\"electronvolt\", \"eV\", [\"ev\"], \"energy\", false, true, 1.60217656514141],\r\n [\"ell\", \"ell\", null, \"length\", false, true, 1.143],\r\n [\"erg\", \"erg\", [\"e\"], \"energy\", false, true, 1e-7],\r\n [\"farad\", \"F\", null, \"electric_capacitance\", true, false, 1],\r\n [\"fluid ounce\", \"oz\", null, \"volume\", false, true, 0.0000295735295625],\r\n [\"foot\", \"ft\", null, \"length\", false, true, 0.3048],\r\n [\"foot-pound\", \"flb\", null, \"energy\", false, true, 1.3558179483314],\r\n [\"gal\", \"Gal\", null, \"acceleration\", false, false, 0.01],\r\n [\"gallon\", \"gal\", null, \"volume\", false, true, 0.003785411784],\r\n [\"gauss\", \"G\", [\"ga\"], \"magnetic_flux_density\", false, true, 1],\r\n [\"grain\", \"grain\", null, \"mass\", false, true, 0.0000647989],\r\n [\"gram\", \"g\", null, \"mass\", false, true, 0.001],\r\n [\"gray\", \"Gy\", null, \"absorbed_dose\", true, false, 1],\r\n [\"gross registered ton\", \"GRT\", [\"regton\"], \"volume\", false, true, 2.8316846592],\r\n [\"hectare\", \"ha\", null, \"area\", false, true, 10000],\r\n [\"henry\", \"H\", null, \"inductance\", true, false, 1],\r\n [\"hertz\", \"Hz\", null, \"frequency\", true, false, 1],\r\n [\"horsepower\", \"HP\", [\"h\"], \"power\", false, true, 745.69987158227],\r\n [\"horsepower-hour\", \"HPh\", [\"hh\", \"hph\"], \"energy\", false, true, 2684519.538],\r\n [\"hour\", \"h\", [\"hr\"], \"time\", false, true, 3600],\r\n [\"imperial gallon (U.K.)\", \"uk_gal\", null, \"volume\", false, true, 0.00454609],\r\n [\"imperial hundredweight\", \"lcwt\", [\"uk_cwt\", \"hweight\"], \"mass\", false, true, 50.802345],\r\n [\"imperial quart (U.K)\", \"uk_qt\", null, \"volume\", false, true, 0.0011365225],\r\n [\"imperial ton\", \"brton\", [\"uk_ton\", \"LTON\"], \"mass\", false, true, 1016.046909],\r\n [\"inch\", \"in\", null, \"length\", false, true, 0.0254],\r\n [\"international acre\", \"uk_acre\", null, \"area\", false, true, 4046.8564224],\r\n [\"IT calorie\", \"cal\", null, \"energy\", false, true, 4.1868],\r\n [\"joule\", \"J\", null, \"energy\", true, true, 1],\r\n [\"katal\", \"kat\", null, \"catalytic_activity\", true, false, 1],\r\n [\"kelvin\", \"K\", [\"kel\"], \"temperature\", true, true, 1],\r\n [\"kilogram\", \"kg\", null, \"mass\", true, true, 1],\r\n [\"knot\", \"kn\", null, \"speed\", false, true, 0.514444444444444],\r\n [\"light-year\", \"ly\", null, \"length\", false, true, 9460730472580800],\r\n [\"litre\", \"L\", [\"l\", \"lt\"], \"volume\", false, true, 0.001],\r\n [\"lumen\", \"lm\", null, \"luminous_flux\", true, false, 1],\r\n [\"lux\", \"lx\", null, \"illuminance\", true, false, 1],\r\n [\"maxwell\", \"Mx\", null, \"magnetic_flux\", false, false, 1e-18],\r\n [\"measurement ton\", \"MTON\", null, \"volume\", false, true, 1.13267386368],\r\n [\"meter per hour\", \"m/h\", [\"m/hr\"], \"speed\", false, true, 0.00027777777777778],\r\n [\"meter per second\", \"m/s\", [\"m/sec\"], \"speed\", true, true, 1],\r\n [\"meter per second squared\", \"m?s??\", null, \"acceleration\", true, false, 1],\r\n [\"parsec\", \"pc\", [\"parsec\"], \"length\", false, true, 30856775814671900],\r\n [\"meter squared per second\", \"m?/s\", null, \"kinematic_viscosity\", true, false, 1],\r\n [\"metre\", \"m\", null, \"length\", true, true, 1],\r\n [\"miles per hour\", \"mph\", null, \"speed\", false, true, 0.44704],\r\n [\"millimetre of mercury\", \"mmHg\", null, \"pressure\", false, false, 133.322],\r\n [\"minute\", \"?\", null, \"angle\", false, false, 0.000290888208665722],\r\n [\"minute\", \"min\", [\"mn\"], \"time\", false, true, 60],\r\n [\"modern teaspoon\", \"tspm\", null, \"volume\", false, true, 0.000005],\r\n [\"mole\", \"mol\", null, \"amount_of_substance\", true, false, 1],\r\n [\"morgen\", \"Morgen\", null, \"area\", false, true, 2500],\r\n [\"n.u. of action\", \"?\", null, \"action\", false, false, 1.05457168181818e-34],\r\n [\"n.u. of mass\", \"m?\", null, \"mass\", false, false, 9.10938261616162e-31],\r\n [\"n.u. of speed\", \"c?\", null, \"speed\", false, false, 299792458],\r\n [\"n.u. of time\", \"?/(me?c??)\", null, \"time\", false, false, 1.28808866778687e-21],\r\n [\"nautical mile\", \"M\", [\"Nmi\"], \"length\", false, true, 1852],\r\n [\"newton\", \"N\", null, \"force\", true, true, 1],\r\n [\"œrsted\", \"Oe \", null, \"magnetic_field_intensity\", false, false, 79.5774715459477],\r\n [\"ohm\", \"Ω\", null, \"electric_resistance\", true, false, 1],\r\n [\"ounce mass\", \"ozm\", null, \"mass\", false, true, 0.028349523125],\r\n [\"pascal\", \"Pa\", null, \"pressure\", true, false, 1],\r\n [\"pascal second\", \"Pa?s\", null, \"dynamic_viscosity\", true, false, 1],\r\n [\"pferdestärke\", \"PS\", null, \"power\", false, true, 735.49875],\r\n [\"phot\", \"ph\", null, \"illuminance\", false, false, 0.0001],\r\n [\"pica (1/6 inch)\", \"pica\", null, \"length\", false, true, 0.00035277777777778],\r\n [\"pica (1/72 inch)\", \"Pica\", [\"Picapt\"], \"length\", false, true, 0.00423333333333333],\r\n [\"poise\", \"P\", null, \"dynamic_viscosity\", false, false, 0.1],\r\n [\"pond\", \"pond\", null, \"force\", false, true, 0.00980665],\r\n [\"pound force\", \"lbf\", null, \"force\", false, true, 4.4482216152605],\r\n [\"pound mass\", \"lbm\", null, \"mass\", false, true, 0.45359237],\r\n [\"quart\", \"qt\", null, \"volume\", false, true, 0.000946352946],\r\n [\"radian\", \"rad\", null, \"angle\", true, false, 1],\r\n [\"second\", \"?\", null, \"angle\", false, false, 0.00000484813681109536],\r\n [\"second\", \"s\", [\"sec\"], \"time\", true, true, 1],\r\n [\"short hundredweight\", \"cwt\", [\"shweight\"], \"mass\", false, true, 45.359237],\r\n [\"siemens\", \"S\", null, \"electrical_conductance\", true, false, 1],\r\n [\"sievert\", \"Sv\", null, \"equivalent_dose\", true, false, 1],\r\n [\"slug\", \"sg\", null, \"mass\", false, true, 14.59390294],\r\n [\"square ångström\", \"ang2\", [\"ang^2\"], \"area\", false, true, 1e-20],\r\n [\"square foot\", \"ft2\", [\"ft^2\"], \"area\", false, true, 0.09290304],\r\n [\"square inch\", \"in2\", [\"in^2\"], \"area\", false, true, 0.00064516],\r\n [\"square light-year\", \"ly2\", [\"ly^2\"], \"area\", false, true, 8.95054210748189e+31],\r\n [\"square meter\", \"m?\", null, \"area\", true, true, 1],\r\n [\"square mile\", \"mi2\", [\"mi^2\"], \"area\", false, true, 2589988.110336],\r\n [\"square nautical mile\", \"Nmi2\", [\"Nmi^2\"], \"area\", false, true, 3429904],\r\n [\"square Pica\", \"Pica2\", [\"Picapt2\", \"Pica^2\", \"Picapt^2\"], \"area\", false, true, 0.00001792111111111],\r\n [\"square yard\", \"yd2\", [\"yd^2\"], \"area\", false, true, 0.83612736],\r\n [\"statute mile\", \"mi\", null, \"length\", false, true, 1609.344],\r\n [\"steradian\", \"sr\", null, \"solid_angle\", true, false, 1],\r\n [\"stilb\", \"sb\", null, \"luminance\", false, false, 0.0001],\r\n [\"stokes\", \"St\", null, \"kinematic_viscosity\", false, false, 0.0001],\r\n [\"stone\", \"stone\", null, \"mass\", false, true, 6.35029318],\r\n [\"tablespoon\", \"tbs\", null, \"volume\", false, true, 0.0000147868],\r\n [\"teaspoon\", \"tsp\", null, \"volume\", false, true, 0.00000492892],\r\n [\"tesla\", \"T\", null, \"magnetic_flux_density\", true, true, 1],\r\n [\"thermodynamic calorie\", \"c\", null, \"energy\", false, true, 4.184],\r\n [\"ton\", \"ton\", null, \"mass\", false, true, 907.18474],\r\n [\"tonne\", \"t\", null, \"mass\", false, false, 1000],\r\n [\"U.K. pint\", \"uk_pt\", null, \"volume\", false, true, 0.00056826125],\r\n [\"U.S. bushel\", \"bushel\", null, \"volume\", false, true, 0.03523907],\r\n [\"U.S. oil barrel\", \"barrel\", null, \"volume\", false, true, 0.158987295],\r\n [\"U.S. pint\", \"pt\", [\"us_pt\"], \"volume\", false, true, 0.000473176473],\r\n [\"U.S. survey mile\", \"survey_mi\", null, \"length\", false, true, 1609.347219],\r\n [\"U.S. survey/statute acre\", \"us_acre\", null, \"area\", false, true, 4046.87261],\r\n [\"volt\", \"V\", null, \"voltage\", true, false, 1],\r\n [\"watt\", \"W\", null, \"power\", true, true, 1],\r\n [\"watt-hour\", \"Wh\", [\"wh\"], \"energy\", false, true, 3600],\r\n [\"weber\", \"Wb\", null, \"magnetic_flux\", true, false, 1],\r\n [\"yard\", \"yd\", null, \"length\", false, true, 0.9144],\r\n [\"year\", \"yr\", null, \"time\", false, true, 31557600]\r\n ];\r\n\r\n // Binary prefixes\r\n // [Name, Prefix power of 2 value, Previx value, Abbreviation, Derived\r\n // from]\r\n var binary_prefixes = {\r\n Yi: [\"yobi\", 80, 1208925819614629174706176, \"Yi\", \"yotta\"],\r\n Zi: [\"zebi\", 70, 1180591620717411303424, \"Zi\", \"zetta\"],\r\n Ei: [\"exbi\", 60, 1152921504606846976, \"Ei\", \"exa\"],\r\n Pi: [\"pebi\", 50, 1125899906842624, \"Pi\", \"peta\"],\r\n Ti: [\"tebi\", 40, 1099511627776, \"Ti\", \"tera\"],\r\n Gi: [\"gibi\", 30, 1073741824, \"Gi\", \"giga\"],\r\n Mi: [\"mebi\", 20, 1048576, \"Mi\", \"mega\"],\r\n ki: [\"kibi\", 10, 1024, \"ki\", \"kilo\"]\r\n };\r\n\r\n // Unit prefixes\r\n // [Name, Multiplier, Abbreviation]\r\n var unit_prefixes = {\r\n Y: [\"yotta\", 1e+24, \"Y\"],\r\n Z: [\"zetta\", 1e+21, \"Z\"],\r\n E: [\"exa\", 1e+18, \"E\"],\r\n P: [\"peta\", 1e+15, \"P\"],\r\n T: [\"tera\", 1e+12, \"T\"],\r\n G: [\"giga\", 1e+09, \"G\"],\r\n M: [\"mega\", 1e+06, \"M\"],\r\n k: [\"kilo\", 1e+03, \"k\"],\r\n h: [\"hecto\", 1e+02, \"h\"],\r\n e: [\"dekao\", 1e+01, \"e\"],\r\n d: [\"deci\", 1e-01, \"d\"],\r\n c: [\"centi\", 1e-02, \"c\"],\r\n m: [\"milli\", 1e-03, \"m\"],\r\n u: [\"micro\", 1e-06, \"u\"],\r\n n: [\"nano\", 1e-09, \"n\"],\r\n p: [\"pico\", 1e-12, \"p\"],\r\n f: [\"femto\", 1e-15, \"f\"],\r\n a: [\"atto\", 1e-18, \"a\"],\r\n z: [\"zepto\", 1e-21, \"z\"],\r\n y: [\"yocto\", 1e-24, \"y\"]\r\n };\r\n\r\n // Initialize units and multipliers\r\n var from = null;\r\n var to = null;\r\n var base_from_unit = from_unit;\r\n var base_to_unit = to_unit;\r\n var from_multiplier = 1;\r\n var to_multiplier = 1;\r\n var alt;\r\n\r\n // Lookup from and to units\r\n for (var i = 0; i < units.length; i++) {\r\n alt = (units[i][2] === null) ? [] : units[i][2];\r\n if (units[i][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) {\r\n from = units[i];\r\n }\r\n if (units[i][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) {\r\n to = units[i];\r\n }\r\n }\r\n\r\n // Lookup from prefix\r\n if (from === null) {\r\n var from_binary_prefix = binary_prefixes[from_unit.substring(0, 2)];\r\n var from_unit_prefix = unit_prefixes[from_unit.substring(0, 1)];\r\n\r\n // Handle dekao unit prefix (only unit prefix with two characters)\r\n if (from_unit.substring(0, 2) === 'da') {\r\n from_unit_prefix = [\"dekao\", 1e+01, \"da\"];\r\n }\r\n\r\n // Handle binary prefixes first (so that 'Yi' is processed before\r\n // 'Y')\r\n if (from_binary_prefix) {\r\n from_multiplier = from_binary_prefix[2];\r\n base_from_unit = from_unit.substring(2);\r\n } else if (from_unit_prefix) {\r\n from_multiplier = from_unit_prefix[1];\r\n base_from_unit = from_unit.substring(from_unit_prefix[2].length);\r\n }\r\n\r\n // Lookup from unit\r\n for (var j = 0; j < units.length; j++) {\r\n alt = (units[j][2] === null) ? [] : units[j][2];\r\n if (units[j][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) {\r\n from = units[j];\r\n }\r\n }\r\n }\r\n\r\n // Lookup to prefix\r\n if (to === null) {\r\n var to_binary_prefix = binary_prefixes[to_unit.substring(0, 2)];\r\n var to_unit_prefix = unit_prefixes[to_unit.substring(0, 1)];\r\n\r\n // Handle dekao unit prefix (only unit prefix with two characters)\r\n if (to_unit.substring(0, 2) === 'da') {\r\n to_unit_prefix = [\"dekao\", 1e+01, \"da\"];\r\n }\r\n\r\n // Handle binary prefixes first (so that 'Yi' is processed before\r\n // 'Y')\r\n if (to_binary_prefix) {\r\n to_multiplier = to_binary_prefix[2];\r\n base_to_unit = to_unit.substring(2);\r\n } else if (to_unit_prefix) {\r\n to_multiplier = to_unit_prefix[1];\r\n base_to_unit = to_unit.substring(to_unit_prefix[2].length);\r\n }\r\n\r\n // Lookup to unit\r\n for (var k = 0; k < units.length; k++) {\r\n alt = (units[k][2] === null) ? [] : units[k][2];\r\n if (units[k][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) {\r\n to = units[k];\r\n }\r\n }\r\n }\r\n\r\n // Return error if a unit does not exist\r\n if (from === null || to === null) {\r\n return error.na;\r\n }\r\n\r\n // Return error if units represent different quantities\r\n if (from[3] !== to[3]) {\r\n return error.na;\r\n }\r\n\r\n // Return converted number\r\n return number * from[6] * from_multiplier / (to[6] * to_multiplier);\r\n };\r\n\r\n exports.DEC2BIN = function(number, places) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n\r\n // Return error if number is not decimal, is lower than -512, or is\r\n // greater than 511\r\n if (!/^-?[0-9]{1,3}$/.test(number) || number < -512 || number > 511) {\r\n return error.num;\r\n }\r\n\r\n // Ignore places and return a 10-character binary number if number is\r\n // negative\r\n if (number < 0) {\r\n return '1' + REPT('0', 9 - (512 + number).toString(2).length) + (512 + number).toString(2);\r\n }\r\n\r\n // Convert decimal number to binary\r\n var result = parseInt(number, 10).toString(2);\r\n\r\n // Return binary number using the minimum number of characters necessary\r\n // if places is undefined\r\n if (typeof places === 'undefined') {\r\n return result;\r\n } else {\r\n // Return error if places is nonnumeric\r\n if (isNaN(places)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if places is negative\r\n if (places < 0) {\r\n return error.num;\r\n }\r\n\r\n // Truncate places in case it is not an integer\r\n places = Math.floor(places);\r\n\r\n // Pad return value with leading 0s (zeros) if necessary (using\r\n // Underscore.string)\r\n return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;\r\n }\r\n };\r\n\r\n exports.DEC2HEX = function(number, places) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n\r\n // Return error if number is not decimal, is lower than -549755813888,\r\n // or is greater than 549755813887\r\n if (!/^-?[0-9]{1,12}$/.test(number) || number < -549755813888 || number > 549755813887) {\r\n return error.num;\r\n }\r\n\r\n // Ignore places and return a 10-character hexadecimal number if number\r\n // is negative\r\n if (number < 0) {\r\n return (1099511627776 + number).toString(16);\r\n }\r\n\r\n // Convert decimal number to hexadecimal\r\n var result = parseInt(number, 10).toString(16);\r\n\r\n // Return hexadecimal number using the minimum number of characters\r\n // necessary if places is undefined\r\n if (typeof places === 'undefined') {\r\n return result;\r\n } else {\r\n // Return error if places is nonnumeric\r\n if (isNaN(places)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if places is negative\r\n if (places < 0) {\r\n return error.num;\r\n }\r\n\r\n // Truncate places in case it is not an integer\r\n places = Math.floor(places);\r\n\r\n // Pad return value with leading 0s (zeros) if necessary (using\r\n // Underscore.string)\r\n return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;\r\n }\r\n };\r\n\r\n exports.DEC2OCT = function(number, places) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n\r\n // Return error if number is not decimal, is lower than -549755813888,\r\n // or is greater than 549755813887\r\n if (!/^-?[0-9]{1,9}$/.test(number) || number < -536870912 || number > 536870911) {\r\n return error.num;\r\n }\r\n\r\n // Ignore places and return a 10-character octal number if number is\r\n // negative\r\n if (number < 0) {\r\n return (1073741824 + number).toString(8);\r\n }\r\n\r\n // Convert decimal number to octal\r\n var result = parseInt(number, 10).toString(8);\r\n\r\n // Return octal number using the minimum number of characters necessary\r\n // if places is undefined\r\n if (typeof places === 'undefined') {\r\n return result;\r\n } else {\r\n // Return error if places is nonnumeric\r\n if (isNaN(places)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if places is negative\r\n if (places < 0) {\r\n return error.num;\r\n }\r\n\r\n // Truncate places in case it is not an integer\r\n places = Math.floor(places);\r\n\r\n // Pad return value with leading 0s (zeros) if necessary (using\r\n // Underscore.string)\r\n return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;\r\n }\r\n };\r\n\r\n exports.DELTA = function(number1, number2) {\r\n // Set number2 to zero if undefined\r\n number2 = (number2 === undefined) ? 0 : number2;\r\n number1 = utils.parseNumber(number1);\r\n number2 = utils.parseNumber(number2);\r\n if (utils.anyIsError(number1, number2)) {\r\n return error.value;\r\n }\r\n\r\n // Return delta\r\n return (number1 === number2) ? 1 : 0;\r\n };\r\n\r\n exports.ERF = function(lower_bound, upper_bound) {\r\n };\r\n\r\n exports.ERF.PRECISE = function() {\r\n };\r\n\r\n exports.ERFC = function(x) {\r\n };\r\n\r\n exports.ERFC.PRECISE = function() {\r\n };\r\n\r\n exports.GESTEP = function(number, step) {\r\n step = step || 0;\r\n number = utils.parseNumber(number);\r\n if (utils.anyIsError(step, number)) {\r\n return number;\r\n }\r\n\r\n // Return delta\r\n return (number >= step) ? 1 : 0;\r\n };\r\n\r\n exports.HEX2BIN = function(number, places) {\r\n // Return error if number is not hexadecimal or contains more than ten\r\n // characters (10 digits)\r\n if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {\r\n return error.num;\r\n }\r\n\r\n // Check if number is negative\r\n var negative = (number.length === 10 && number.substring(0, 1).toLowerCase() === 'f') ? true : false;\r\n\r\n // Convert hexadecimal number to decimal\r\n var decimal = (negative) ? parseInt(number, 16) - 1099511627776 : parseInt(number, 16);\r\n\r\n // Return error if number is lower than -512 or greater than 511\r\n if (decimal < -512 || decimal > 511) {\r\n return error.num;\r\n }\r\n\r\n // Ignore places and return a 10-character binary number if number is\r\n // negative\r\n if (negative) {\r\n return '1' + REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2);\r\n }\r\n\r\n // Convert decimal number to binary\r\n var result = decimal.toString(2);\r\n\r\n // Return binary number using the minimum number of characters necessary\r\n // if places is undefined\r\n if (places === undefined) {\r\n return result;\r\n } else {\r\n // Return error if places is nonnumeric\r\n if (isNaN(places)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if places is negative\r\n if (places < 0) {\r\n return error.num;\r\n }\r\n\r\n // Truncate places in case it is not an integer\r\n places = Math.floor(places);\r\n\r\n // Pad return value with leading 0s (zeros) if necessary (using\r\n // Underscore.string)\r\n return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;\r\n }\r\n };\r\n\r\n exports.HEX2DEC = function(number) {\r\n // Return error if number is not hexadecimal or contains more than ten\r\n // characters (10 digits)\r\n if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {\r\n return error.num;\r\n }\r\n\r\n // Convert hexadecimal number to decimal\r\n var decimal = parseInt(number, 16);\r\n\r\n // Return decimal number\r\n return (decimal >= 549755813888) ? decimal - 1099511627776 : decimal;\r\n };\r\n\r\n exports.HEX2OCT = function(number, places) {\r\n // Return error if number is not hexadecimal or contains more than ten\r\n // characters (10 digits)\r\n if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {\r\n return error.num;\r\n }\r\n\r\n // Convert hexadecimal number to decimal\r\n var decimal = parseInt(number, 16);\r\n\r\n // Return error if number is positive and greater than 0x1fffffff\r\n // (536870911)\r\n if (decimal > 536870911 && decimal < 1098974756864) {\r\n return error.num;\r\n }\r\n\r\n // Ignore places and return a 10-character octal number if number is\r\n // negative\r\n if (decimal >= 1098974756864) {\r\n return (decimal - 1098437885952).toString(8);\r\n }\r\n\r\n // Convert decimal number to octal\r\n var result = decimal.toString(8);\r\n\r\n // Return octal number using the minimum number of characters necessary\r\n // if places is undefined\r\n if (places === undefined) {\r\n return result;\r\n } else {\r\n // Return error if places is nonnumeric\r\n if (isNaN(places)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if places is negative\r\n if (places < 0) {\r\n return error.num;\r\n }\r\n\r\n // Truncate places in case it is not an integer\r\n places = Math.floor(places);\r\n\r\n // Pad return value with leading 0s (zeros) if necessary (using\r\n // Underscore.string)\r\n return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;\r\n }\r\n };\r\n\r\n exports.IMABS = function(inumber) {\r\n // Lookup real and imaginary coefficients using exports.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n // Return error if either coefficient is not a number\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Return absolute value of complex number\r\n return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));\r\n };\r\n\r\n exports.IMAGINARY = function(inumber) {\r\n if (inumber === undefined || inumber === true || inumber === false) {\r\n return error.value;\r\n }\r\n\r\n // Return 0 if inumber is equal to 0\r\n if (inumber === 0 || inumber === '0') {\r\n return 0;\r\n }\r\n\r\n // Handle special cases\r\n if (['i', 'j'].indexOf(inumber) >= 0) {\r\n return 1;\r\n }\r\n\r\n // Normalize imaginary coefficient\r\n inumber = inumber.replace('+i', '+1i').replace('-i', '-1i').replace('+j', '+1j').replace('-j', '-1j');\r\n\r\n // Lookup sign\r\n var plus = inumber.indexOf('+');\r\n var minus = inumber.indexOf('-');\r\n if (plus === 0) {\r\n plus = inumber.indexOf('+', 1);\r\n }\r\n\r\n if (minus === 0) {\r\n minus = inumber.indexOf('-', 1);\r\n }\r\n\r\n // Lookup imaginary unit\r\n var last = inumber.substring(inumber.length - 1, inumber.length);\r\n var unit = (last === 'i' || last === 'j');\r\n\r\n if (plus >= 0 || minus >= 0) {\r\n // Return error if imaginary unit is neither i nor j\r\n if (!unit) {\r\n return error.num;\r\n }\r\n\r\n // Return imaginary coefficient of complex number\r\n if (plus >= 0) {\r\n return (isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))) ?\r\n error.num :\r\n Number(inumber.substring(plus + 1, inumber.length - 1));\r\n } else {\r\n return (isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))) ?\r\n error.num :\r\n -Number(inumber.substring(minus + 1, inumber.length - 1));\r\n }\r\n } else {\r\n if (unit) {\r\n return (isNaN(inumber.substring(0, inumber.length - 1))) ? error.num : inumber.substring(0, inumber.length - 1);\r\n } else {\r\n return (isNaN(inumber)) ? error.num : 0;\r\n }\r\n }\r\n };\r\n\r\n exports.IMARGUMENT = function(inumber) {\r\n // Lookup real and imaginary coefficients using exports.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n // Return error if either coefficient is not a number\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if inumber is equal to zero\r\n if (x === 0 && y === 0) {\r\n return error.div0;\r\n }\r\n\r\n // Return PI/2 if x is equal to zero and y is positive\r\n if (x === 0 && y > 0) {\r\n return Math.PI / 2;\r\n }\r\n\r\n // Return -PI/2 if x is equal to zero and y is negative\r\n if (x === 0 && y < 0) {\r\n return -Math.PI / 2;\r\n }\r\n\r\n // Return zero if x is negative and y is equal to zero\r\n if (y === 0 && x > 0) {\r\n return 0;\r\n }\r\n\r\n // Return zero if x is negative and y is equal to zero\r\n if (y === 0 && x < 0) {\r\n return -Math.PI;\r\n }\r\n\r\n // Return argument of complex number\r\n if (x > 0) {\r\n return Math.atan(y / x);\r\n } else if (x < 0 && y >= 0) {\r\n return Math.atan(y / x) + Math.PI;\r\n } else {\r\n return Math.atan(y / x) - Math.PI;\r\n }\r\n };\r\n\r\n exports.IMCONJUGATE = function(inumber) {\r\n // Lookup real and imaginary coefficients using exports.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Lookup imaginary unit\r\n var unit = inumber.substring(inumber.length - 1);\r\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\r\n\r\n // Return conjugate of complex number\r\n return (y !== 0) ? exports.COMPLEX(x, -y, unit) : inumber;\r\n };\r\n\r\n exports.IMCOS = function(inumber) {\r\n // Lookup real and imaginary coefficients using exports.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Lookup imaginary unit\r\n var unit = inumber.substring(inumber.length - 1);\r\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\r\n\r\n // Return cosine of complex number\r\n return exports.COMPLEX(Math.cos(x) * (Math.exp(y) + Math.exp(-y)) / 2, -Math.sin(x) * (Math.exp(y) - Math.exp(-y)) / 2, unit);\r\n };\r\n\r\n exports.IMCOSH = function(inumber) {\r\n // Lookup real and imaginary coefficients using exports.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Lookup imaginary unit\r\n var unit = inumber.substring(inumber.length - 1);\r\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\r\n\r\n // Return hyperbolic cosine of complex number\r\n return exports.COMPLEX(Math.cos(y) * (Math.exp(x) + Math.exp(-x)) / 2, Math.sin(y) * (Math.exp(x) - Math.exp(-x)) / 2, unit);\r\n };\r\n\r\n exports.IMCOT = function(inumber) {\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Return cotangent of complex number\r\n return exports.IMDIV(exports.IMCOS(inumber), exports.IMSIN(inumber));\r\n };\r\n\r\n exports.IMDIV = function(inumber1, inumber2) {\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var a = exports.IMREAL(inumber1);\r\n var b = exports.IMAGINARY(inumber1);\r\n var c = exports.IMREAL(inumber2);\r\n var d = exports.IMAGINARY(inumber2);\r\n\r\n if (utils.anyIsError(a, b, c, d)) {\r\n return error.value;\r\n }\r\n\r\n // Lookup imaginary unit\r\n var unit1 = inumber1.substring(inumber1.length - 1);\r\n var unit2 = inumber2.substring(inumber2.length - 1);\r\n var unit = 'i';\r\n if (unit1 === 'j') {\r\n unit = 'j';\r\n } else if (unit2 === 'j') {\r\n unit = 'j';\r\n }\r\n\r\n // Return error if inumber2 is null\r\n if (c === 0 && d === 0) {\r\n return error.num;\r\n }\r\n\r\n // Return exponential of complex number\r\n var den = c * c + d * d;\r\n return exports.COMPLEX((a * c + b * d) / den, (b * c - a * d) / den, unit);\r\n };\r\n\r\n exports.IMEXP = function(inumber) {\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Lookup imaginary unit\r\n var unit = inumber.substring(inumber.length - 1);\r\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\r\n\r\n // Return exponential of complex number\r\n var e = Math.exp(x);\r\n return exports.COMPLEX(e * Math.cos(y), e * Math.sin(y), unit);\r\n };\r\n\r\n exports.IMLN = function(inumber) {\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Lookup imaginary unit\r\n var unit = inumber.substring(inumber.length - 1);\r\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\r\n\r\n // Return exponential of complex number\r\n return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)), Math.atan(y / x), unit);\r\n };\r\n\r\n exports.IMLOG10 = function(inumber) {\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Lookup imaginary unit\r\n var unit = inumber.substring(inumber.length - 1);\r\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\r\n\r\n // Return exponential of complex number\r\n return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(10), Math.atan(y / x) / Math.log(10), unit);\r\n };\r\n\r\n exports.IMLOG2 = function(inumber) {\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Lookup imaginary unit\r\n var unit = inumber.substring(inumber.length - 1);\r\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\r\n\r\n // Return exponential of complex number\r\n return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(2), Math.atan(y / x) / Math.log(2), unit);\r\n };\r\n\r\n exports.IMPOWER = function(inumber, number) {\r\n number = utils.parseNumber(number);\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n if (utils.anyIsError(number, x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Lookup imaginary unit\r\n var unit = inumber.substring(inumber.length - 1);\r\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\r\n\r\n // Calculate power of modulus\r\n var p = Math.pow(exports.IMABS(inumber), number);\r\n\r\n // Calculate argument\r\n var t = exports.IMARGUMENT(inumber);\r\n\r\n // Return exponential of complex number\r\n return exports.COMPLEX(p * Math.cos(number * t), p * Math.sin(number * t), unit);\r\n };\r\n\r\n exports.IMPRODUCT = function() {\r\n // Initialize result\r\n var result = arguments[0];\r\n\r\n // Loop on all numbers\r\n for (var i = 1; i < arguments.length; i++) {\r\n // Lookup coefficients of two complex numbers\r\n var a = exports.IMREAL(result);\r\n var b = exports.IMAGINARY(result);\r\n var c = exports.IMREAL(arguments[i]);\r\n var d = exports.IMAGINARY(arguments[i]);\r\n\r\n if (utils.anyIsError(a, b, c, d)) {\r\n return error.value;\r\n }\r\n\r\n // Complute product of two complex numbers\r\n result = exports.COMPLEX(a * c - b * d, a * d + b * c);\r\n }\r\n\r\n // Return product of complex numbers\r\n return result;\r\n };\r\n\r\n exports.IMREAL = function(inumber) {\r\n if (inumber === undefined || inumber === true || inumber === false) {\r\n return error.value;\r\n }\r\n\r\n // Return 0 if inumber is equal to 0\r\n if (inumber === 0 || inumber === '0') {\r\n return 0;\r\n }\r\n\r\n // Handle special cases\r\n if (['i', '+i', '1i', '+1i', '-i', '-1i', 'j', '+j', '1j', '+1j', '-j', '-1j'].indexOf(inumber) >= 0) {\r\n return 0;\r\n }\r\n\r\n // Lookup sign\r\n var plus = inumber.indexOf('+');\r\n var minus = inumber.indexOf('-');\r\n if (plus === 0) {\r\n plus = inumber.indexOf('+', 1);\r\n }\r\n if (minus === 0) {\r\n minus = inumber.indexOf('-', 1);\r\n }\r\n\r\n // Lookup imaginary unit\r\n var last = inumber.substring(inumber.length - 1, inumber.length);\r\n var unit = (last === 'i' || last === 'j');\r\n\r\n if (plus >= 0 || minus >= 0) {\r\n // Return error if imaginary unit is neither i nor j\r\n if (!unit) {\r\n return error.num;\r\n }\r\n\r\n // Return real coefficient of complex number\r\n if (plus >= 0) {\r\n return (isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))) ?\r\n error.num :\r\n Number(inumber.substring(0, plus));\r\n } else {\r\n return (isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))) ?\r\n error.num :\r\n Number(inumber.substring(0, minus));\r\n }\r\n } else {\r\n if (unit) {\r\n return (isNaN(inumber.substring(0, inumber.length - 1))) ? error.num : 0;\r\n } else {\r\n return (isNaN(inumber)) ? error.num : inumber;\r\n }\r\n }\r\n };\r\n\r\n exports.IMSEC = function(inumber) {\r\n // Return error if inumber is a logical value\r\n if (inumber === true || inumber === false) {\r\n return error.value;\r\n }\r\n\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Return secant of complex number\r\n return exports.IMDIV('1', exports.IMCOS(inumber));\r\n };\r\n\r\n exports.IMSECH = function(inumber) {\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Return hyperbolic secant of complex number\r\n return exports.IMDIV('1', exports.IMCOSH(inumber));\r\n };\r\n\r\n exports.IMSIN = function(inumber) {\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Lookup imaginary unit\r\n var unit = inumber.substring(inumber.length - 1);\r\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\r\n\r\n // Return sine of complex number\r\n return exports.COMPLEX(Math.sin(x) * (Math.exp(y) + Math.exp(-y)) / 2, Math.cos(x) * (Math.exp(y) - Math.exp(-y)) / 2, unit);\r\n };\r\n\r\n exports.IMSINH = function(inumber) {\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Lookup imaginary unit\r\n var unit = inumber.substring(inumber.length - 1);\r\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\r\n\r\n // Return hyperbolic sine of complex number\r\n return exports.COMPLEX(Math.cos(y) * (Math.exp(x) - Math.exp(-x)) / 2, Math.sin(y) * (Math.exp(x) + Math.exp(-x)) / 2, unit);\r\n };\r\n\r\n exports.IMSQRT = function(inumber) {\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Lookup imaginary unit\r\n var unit = inumber.substring(inumber.length - 1);\r\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\r\n\r\n // Calculate power of modulus\r\n var s = Math.sqrt(exports.IMABS(inumber));\r\n\r\n // Calculate argument\r\n var t = exports.IMARGUMENT(inumber);\r\n\r\n // Return exponential of complex number\r\n return exports.COMPLEX(s * Math.cos(t / 2), s * Math.sin(t / 2), unit);\r\n };\r\n\r\n exports.IMCSC = function (inumber) {\r\n // Return error if inumber is a logical value\r\n if (inumber === true || inumber === false) {\r\n return error.value;\r\n }\r\n\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n // Return error if either coefficient is not a number\r\n if (utils.anyIsError(x, y)) {\r\n return error.num;\r\n }\r\n\r\n // Return cosecant of complex number\r\n return exports.IMDIV('1', exports.IMSIN(inumber));\r\n };\r\n\r\n exports.IMCSCH = function (inumber) {\r\n // Return error if inumber is a logical value\r\n if (inumber === true || inumber === false) {\r\n return error.value;\r\n }\r\n\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n // Return error if either coefficient is not a number\r\n if (utils.anyIsError(x, y)) {\r\n return error.num;\r\n }\r\n\r\n // Return hyperbolic cosecant of complex number\r\n return exports.IMDIV('1', exports.IMSINH(inumber));\r\n };\r\n\r\n exports.IMSUB = function(inumber1, inumber2) {\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var a = this.IMREAL(inumber1);\r\n var b = this.IMAGINARY(inumber1);\r\n var c = this.IMREAL(inumber2);\r\n var d = this.IMAGINARY(inumber2);\r\n\r\n if (utils.anyIsError(a, b, c, d)) {\r\n return error.value;\r\n }\r\n\r\n // Lookup imaginary unit\r\n var unit1 = inumber1.substring(inumber1.length - 1);\r\n var unit2 = inumber2.substring(inumber2.length - 1);\r\n var unit = 'i';\r\n if (unit1 === 'j') {\r\n unit = 'j';\r\n } else if (unit2 === 'j') {\r\n unit = 'j';\r\n }\r\n\r\n // Return _ of two complex numbers\r\n return this.COMPLEX(a - c, b - d, unit);\r\n };\r\n\r\n exports.IMSUM = function() {\r\n var args = utils.flatten(arguments);\r\n\r\n // Initialize result\r\n var result = args[0];\r\n\r\n // Loop on all numbers\r\n for (var i = 1; i < args.length; i++) {\r\n // Lookup coefficients of two complex numbers\r\n var a = this.IMREAL(result);\r\n var b = this.IMAGINARY(result);\r\n var c = this.IMREAL(args[i]);\r\n var d = this.IMAGINARY(args[i]);\r\n\r\n if (utils.anyIsError(a, b, c, d)) {\r\n return error.value;\r\n }\r\n\r\n // Complute product of two complex numbers\r\n result = this.COMPLEX(a + c, b + d);\r\n }\r\n\r\n // Return sum of complex numbers\r\n return result;\r\n };\r\n\r\n exports.IMTAN = function(inumber) {\r\n // Return error if inumber is a logical value\r\n if (inumber === true || inumber === false) {\r\n return error.value;\r\n }\r\n\r\n // Lookup real and imaginary coefficients using Formula.js\r\n // [http://formulajs.org]\r\n var x = exports.IMREAL(inumber);\r\n var y = exports.IMAGINARY(inumber);\r\n\r\n if (utils.anyIsError(x, y)) {\r\n return error.value;\r\n }\r\n\r\n // Return tangent of complex number\r\n return this.IMDIV(this.IMSIN(inumber), this.IMCOS(inumber));\r\n };\r\n\r\n exports.OCT2BIN = function(number, places) {\r\n // Return error if number is not hexadecimal or contains more than ten\r\n // characters (10 digits)\r\n if (!/^[0-7]{1,10}$/.test(number)) {\r\n return error.num;\r\n }\r\n\r\n // Check if number is negative\r\n var negative = (number.length === 10 && number.substring(0, 1) === '7') ? true : false;\r\n\r\n // Convert octal number to decimal\r\n var decimal = (negative) ? parseInt(number, 8) - 1073741824 : parseInt(number, 8);\r\n\r\n // Return error if number is lower than -512 or greater than 511\r\n if (decimal < -512 || decimal > 511) {\r\n return error.num;\r\n }\r\n\r\n // Ignore places and return a 10-character binary number if number is\r\n // negative\r\n if (negative) {\r\n return '1' + REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2);\r\n }\r\n\r\n // Convert decimal number to binary\r\n var result = decimal.toString(2);\r\n\r\n // Return binary number using the minimum number of characters necessary\r\n // if places is undefined\r\n if (typeof places === 'undefined') {\r\n return result;\r\n } else {\r\n // Return error if places is nonnumeric\r\n if (isNaN(places)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if places is negative\r\n if (places < 0) {\r\n return error.num;\r\n }\r\n\r\n // Truncate places in case it is not an integer\r\n places = Math.floor(places);\r\n\r\n // Pad return value with leading 0s (zeros) if necessary (using\r\n // Underscore.string)\r\n return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;\r\n }\r\n };\r\n\r\n exports.OCT2DEC = function(number) {\r\n // Return error if number is not octal or contains more than ten\r\n // characters (10 digits)\r\n if (!/^[0-7]{1,10}$/.test(number)) {\r\n return error.num;\r\n }\r\n\r\n // Convert octal number to decimal\r\n var decimal = parseInt(number, 8);\r\n\r\n // Return decimal number\r\n return (decimal >= 536870912) ? decimal - 1073741824 : decimal;\r\n };\r\n\r\n exports.OCT2HEX = function(number, places) {\r\n // Return error if number is not octal or contains more than ten\r\n // characters (10 digits)\r\n if (!/^[0-7]{1,10}$/.test(number)) {\r\n return error.num;\r\n }\r\n\r\n // Convert octal number to decimal\r\n var decimal = parseInt(number, 8);\r\n\r\n // Ignore places and return a 10-character octal number if number is\r\n // negative\r\n if (decimal >= 536870912) {\r\n return 'ff' + (decimal + 3221225472).toString(16);\r\n }\r\n\r\n // Convert decimal number to hexadecimal\r\n var result = decimal.toString(16);\r\n\r\n // Return hexadecimal number using the minimum number of characters\r\n // necessary if places is undefined\r\n if (places === undefined) {\r\n return result;\r\n } else {\r\n // Return error if places is nonnumeric\r\n if (isNaN(places)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if places is negative\r\n if (places < 0) {\r\n return error.num;\r\n }\r\n\r\n // Truncate places in case it is not an integer\r\n places = Math.floor(places);\r\n\r\n // Pad return value with leading 0s (zeros) if necessary (using\r\n // Underscore.string)\r\n return (places >= result.length) ? REPT('0', places - result.length) + result : error.num;\r\n }\r\n };\r\n\r\n return exports;\r\n})();\r\n\r\njexcel.methods.financial = (function() {\r\n var exports = {};\r\n\r\n function validDate(d) {\r\n return d && d.getTime && !isNaN(d.getTime());\r\n }\r\n\r\n function ensureDate(d) {\r\n return (d instanceof Date)?d:new Date(d);\r\n }\r\n\r\n exports.ACCRINT = function(issue, first, settlement, rate, par, frequency, basis) {\r\n // Return error if either date is invalid\r\n issue = ensureDate(issue);\r\n first = ensureDate(first);\r\n settlement = ensureDate(settlement);\r\n if (!validDate(issue) || !validDate(first) || !validDate(settlement)) {\r\n return '#VALUE!';\r\n }\r\n\r\n // Return error if either rate or par are lower than or equal to zero\r\n if (rate <= 0 || par <= 0) {\r\n return '#NUM!';\r\n }\r\n\r\n // Return error if frequency is neither 1, 2, or 4\r\n if ([1, 2, 4].indexOf(frequency) === -1) {\r\n return '#NUM!';\r\n }\r\n\r\n // Return error if basis is neither 0, 1, 2, 3, or 4\r\n if ([0, 1, 2, 3, 4].indexOf(basis) === -1) {\r\n return '#NUM!';\r\n }\r\n\r\n // Return error if settlement is before or equal to issue\r\n if (settlement <= issue) {\r\n return '#NUM!';\r\n }\r\n\r\n // Set default values\r\n par = par || 0;\r\n basis = basis || 0;\r\n\r\n // Compute accrued interest\r\n return par * rate * YEARFRAC(issue, settlement, basis);\r\n };\r\n\r\n exports.ACCRINTM = null;\r\n\r\n exports.AMORDEGRC = null;\r\n\r\n exports.AMORLINC = null;\r\n\r\n exports.COUPDAYBS = null;\r\n\r\n exports.COUPDAYS = null;\r\n\r\n exports.COUPDAYSNC = null;\r\n\r\n exports.COUPNCD = null;\r\n\r\n exports.COUPNUM = null;\r\n\r\n exports.COUPPCD = null;\r\n\r\n exports.CUMIPMT = function(rate, periods, value, start, end, type) {\r\n // Credits: algorithm inspired by Apache OpenOffice\r\n // Credits: Hannes Stiebitzhofer for the translations of function and\r\n // variable names\r\n // Requires exports.FV() and exports.PMT() from exports.js\r\n // [http://stoic.com/exports/]\r\n\r\n rate = utils.parseNumber(rate);\r\n periods = utils.parseNumber(periods);\r\n value = utils.parseNumber(value);\r\n if (utils.anyIsError(rate, periods, value)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if either rate, periods, or value are lower than or\r\n // equal to zero\r\n if (rate <= 0 || periods <= 0 || value <= 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if start < 1, end < 1, or start > end\r\n if (start < 1 || end < 1 || start > end) {\r\n return error.num;\r\n }\r\n\r\n // Return error if type is neither 0 nor 1\r\n if (type !== 0 && type !== 1) {\r\n return error.num;\r\n }\r\n\r\n // Compute cumulative interest\r\n var payment = exports.PMT(rate, periods, value, 0, type);\r\n var interest = 0;\r\n\r\n if (start === 1) {\r\n if (type === 0) {\r\n interest = -value;\r\n start++;\r\n }\r\n }\r\n\r\n for (var i = start; i <= end; i++) {\r\n if (type === 1) {\r\n interest += exports.FV(rate, i - 2, payment, value, 1) - payment;\r\n } else {\r\n interest += exports.FV(rate, i - 1, payment, value, 0);\r\n }\r\n }\r\n interest *= rate;\r\n\r\n // Return cumulative interest\r\n return interest;\r\n };\r\n\r\n exports.CUMPRINC = function(rate, periods, value, start, end, type) {\r\n // Credits: algorithm inspired by Apache OpenOffice\r\n // Credits: Hannes Stiebitzhofer for the translations of function and\r\n // variable names\r\n\r\n rate = utils.parseNumber(rate);\r\n periods = utils.parseNumber(periods);\r\n value = utils.parseNumber(value);\r\n if (utils.anyIsError(rate, periods, value)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if either rate, periods, or value are lower than or\r\n // equal to zero\r\n if (rate <= 0 || periods <= 0 || value <= 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if start < 1, end < 1, or start > end\r\n if (start < 1 || end < 1 || start > end) {\r\n return error.num;\r\n }\r\n\r\n // Return error if type is neither 0 nor 1\r\n if (type !== 0 && type !== 1) {\r\n return error.num;\r\n }\r\n\r\n // Compute cumulative principal\r\n var payment = exports.PMT(rate, periods, value, 0, type);\r\n var principal = 0;\r\n if (start === 1) {\r\n if (type === 0) {\r\n principal = payment + value * rate;\r\n } else {\r\n principal = payment;\r\n }\r\n start++;\r\n }\r\n for (var i = start; i <= end; i++) {\r\n if (type > 0) {\r\n principal += payment - (exports.FV(rate, i - 2, payment, value, 1) - payment) * rate;\r\n } else {\r\n principal += payment - exports.FV(rate, i - 1, payment, value, 0) * rate;\r\n }\r\n }\r\n\r\n // Return cumulative principal\r\n return principal;\r\n };\r\n\r\n exports.DB = function(cost, salvage, life, period, month) {\r\n // Initialize month\r\n month = (month === undefined) ? 12 : month;\r\n\r\n cost = utils.parseNumber(cost);\r\n salvage = utils.parseNumber(salvage);\r\n life = utils.parseNumber(life);\r\n period = utils.parseNumber(period);\r\n month = utils.parseNumber(month);\r\n if (utils.anyIsError(cost, salvage, life, period, month)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if any of the parameters is negative\r\n if (cost < 0 || salvage < 0 || life < 0 || period < 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if month is not an integer between 1 and 12\r\n if ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].indexOf(month) === -1) {\r\n return error.num;\r\n }\r\n\r\n // Return error if period is greater than life\r\n if (period > life) {\r\n return error.num;\r\n }\r\n\r\n // Return 0 (zero) if salvage is greater than or equal to cost\r\n if (salvage >= cost) {\r\n return 0;\r\n }\r\n\r\n // Rate is rounded to three decimals places\r\n var rate = (1 - Math.pow(salvage / cost, 1 / life)).toFixed(3);\r\n\r\n // Compute initial depreciation\r\n var initial = cost * rate * month / 12;\r\n\r\n // Compute total depreciation\r\n var total = initial;\r\n var current = 0;\r\n var ceiling = (period === life) ? life - 1 : period;\r\n for (var i = 2; i <= ceiling; i++) {\r\n current = (cost - total) * rate;\r\n total += current;\r\n }\r\n\r\n // Depreciation for the first and last periods are special cases\r\n if (period === 1) {\r\n // First period\r\n return initial;\r\n } else if (period === life) {\r\n // Last period\r\n return (cost - total) * rate;\r\n } else {\r\n return current;\r\n }\r\n };\r\n\r\n exports.DDB = function(cost, salvage, life, period, factor) {\r\n // Initialize factor\r\n factor = (factor === undefined) ? 2 : factor;\r\n\r\n cost = utils.parseNumber(cost);\r\n salvage = utils.parseNumber(salvage);\r\n life = utils.parseNumber(life);\r\n period = utils.parseNumber(period);\r\n factor = utils.parseNumber(factor);\r\n if (utils.anyIsError(cost, salvage, life, period, factor)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if any of the parameters is negative or if factor is\r\n // null\r\n if (cost < 0 || salvage < 0 || life < 0 || period < 0 || factor <= 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if period is greater than life\r\n if (period > life) {\r\n return error.num;\r\n }\r\n\r\n // Return 0 (zero) if salvage is greater than or equal to cost\r\n if (salvage >= cost) {\r\n return 0;\r\n }\r\n\r\n // Compute depreciation\r\n var total = 0;\r\n var current = 0;\r\n for (var i = 1; i <= period; i++) {\r\n current = Math.min((cost - total) * (factor / life), (cost - salvage - total));\r\n total += current;\r\n }\r\n\r\n // Return depreciation\r\n return current;\r\n };\r\n\r\n exports.DISC = null;\r\n\r\n exports.DOLLARDE = function(dollar, fraction) {\r\n // Credits: algorithm inspired by Apache OpenOffice\r\n\r\n dollar = utils.parseNumber(dollar);\r\n fraction = utils.parseNumber(fraction);\r\n if (utils.anyIsError(dollar, fraction)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if fraction is negative\r\n if (fraction < 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if fraction is greater than or equal to 0 and less than\r\n // 1\r\n if (fraction >= 0 && fraction < 1) {\r\n return error.div0;\r\n }\r\n\r\n // Truncate fraction if it is not an integer\r\n fraction = parseInt(fraction, 10);\r\n\r\n // Compute integer part\r\n var result = parseInt(dollar, 10);\r\n\r\n // Add decimal part\r\n result += (dollar % 1) * Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN10)) / fraction;\r\n\r\n // Round result\r\n var power = Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN2) + 1);\r\n result = Math.round(result * power) / power;\r\n\r\n // Return converted dollar price\r\n return result;\r\n };\r\n\r\n exports.DOLLARFR = function(dollar, fraction) {\r\n // Credits: algorithm inspired by Apache OpenOffice\r\n\r\n dollar = utils.parseNumber(dollar);\r\n fraction = utils.parseNumber(fraction);\r\n if (utils.anyIsError(dollar, fraction)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if fraction is negative\r\n if (fraction < 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if fraction is greater than or equal to 0 and less than\r\n // 1\r\n if (fraction >= 0 && fraction < 1) {\r\n return error.div0;\r\n }\r\n\r\n // Truncate fraction if it is not an integer\r\n fraction = parseInt(fraction, 10);\r\n\r\n // Compute integer part\r\n var result = parseInt(dollar, 10);\r\n\r\n // Add decimal part\r\n result += (dollar % 1) * Math.pow(10, -Math.ceil(Math.log(fraction) / Math.LN10)) * fraction;\r\n\r\n // Return converted dollar price\r\n return result;\r\n };\r\n\r\n exports.DURATION = null;\r\n\r\n exports.EFFECT = function(rate, periods) {\r\n rate = utils.parseNumber(rate);\r\n periods = utils.parseNumber(periods);\r\n if (utils.anyIsError(rate, periods)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if rate <=0 or periods < 1\r\n if (rate <= 0 || periods < 1) {\r\n return error.num;\r\n }\r\n\r\n // Truncate periods if it is not an integer\r\n periods = parseInt(periods, 10);\r\n\r\n // Return effective annual interest rate\r\n return Math.pow(1 + rate / periods, periods) - 1;\r\n };\r\n\r\n exports.FV = function(rate, periods, payment, value, type) {\r\n // Credits: algorithm inspired by Apache OpenOffice\r\n\r\n value = value || 0;\r\n type = type || 0;\r\n\r\n rate = utils.parseNumber(rate);\r\n periods = utils.parseNumber(periods);\r\n payment = utils.parseNumber(payment);\r\n value = utils.parseNumber(value);\r\n type = utils.parseNumber(type);\r\n if (utils.anyIsError(rate, periods, payment, value, type)) {\r\n return error.value;\r\n }\r\n\r\n // Return future value\r\n var result;\r\n if (rate === 0) {\r\n result = value + payment * periods;\r\n } else {\r\n var term = Math.pow(1 + rate, periods);\r\n if (type === 1) {\r\n result = value * term + payment * (1 + rate) * (term - 1) / rate;\r\n } else {\r\n result = value * term + payment * (term - 1) / rate;\r\n }\r\n }\r\n return -result;\r\n };\r\n\r\n exports.FVSCHEDULE = function(principal, schedule) {\r\n principal = utils.parseNumber(principal);\r\n schedule = utils.parseNumberArray(utils.flatten(schedule));\r\n if (utils.anyIsError(principal, schedule)) {\r\n return error.value;\r\n }\r\n\r\n var n = schedule.length;\r\n var future = principal;\r\n\r\n // Apply all interests in schedule\r\n for (var i = 0; i < n; i++) {\r\n // Apply scheduled interest\r\n future *= 1 + schedule[i];\r\n }\r\n\r\n // Return future value\r\n return future;\r\n };\r\n\r\n exports.INTRATE = null;\r\n\r\n exports.IPMT = function(rate, period, periods, present, future, type) {\r\n // Credits: algorithm inspired by Apache OpenOffice\r\n\r\n future = future || 0;\r\n type = type || 0;\r\n\r\n rate = utils.parseNumber(rate);\r\n period = utils.parseNumber(period);\r\n periods = utils.parseNumber(periods);\r\n present = utils.parseNumber(present);\r\n future = utils.parseNumber(future);\r\n type = utils.parseNumber(type);\r\n if (utils.anyIsError(rate, period, periods, present, future, type)) {\r\n return error.value;\r\n }\r\n\r\n // Compute payment\r\n var payment = exports.PMT(rate, periods, present, future, type);\r\n\r\n // Compute interest\r\n var interest;\r\n if (period === 1) {\r\n if (type === 1) {\r\n interest = 0;\r\n } else {\r\n interest = -present;\r\n }\r\n } else {\r\n if (type === 1) {\r\n interest = exports.FV(rate, period - 2, payment, present, 1) - payment;\r\n } else {\r\n interest = exports.FV(rate, period - 1, payment, present, 0);\r\n }\r\n }\r\n\r\n // Return interest\r\n return interest * rate;\r\n };\r\n\r\n exports.IRR = function(values, guess) {\r\n // Credits: algorithm inspired by Apache OpenOffice\r\n\r\n guess = guess || 0;\r\n\r\n values = utils.parseNumberArray(utils.flatten(values));\r\n guess = utils.parseNumber(guess);\r\n if (utils.anyIsError(values, guess)) {\r\n return error.value;\r\n }\r\n\r\n // Calculates the resulting amount\r\n var irrResult = function(values, dates, rate) {\r\n var r = rate + 1;\r\n var result = values[0];\r\n for (var i = 1; i < values.length; i++) {\r\n result += values[i] / Math.pow(r, (dates[i] - dates[0]) / 365);\r\n }\r\n return result;\r\n };\r\n\r\n // Calculates the first derivation\r\n var irrResultDeriv = function(values, dates, rate) {\r\n var r = rate + 1;\r\n var result = 0;\r\n for (var i = 1; i < values.length; i++) {\r\n var frac = (dates[i] - dates[0]) / 365;\r\n result -= frac * values[i] / Math.pow(r, frac + 1);\r\n }\r\n return result;\r\n };\r\n\r\n // Initialize dates and check that values contains at least one positive\r\n // value and one negative value\r\n var dates = [];\r\n var positive = false;\r\n var negative = false;\r\n for (var i = 0; i < values.length; i++) {\r\n dates[i] = (i === 0) ? 0 : dates[i - 1] + 365;\r\n if (values[i] > 0) {\r\n positive = true;\r\n }\r\n if (values[i] < 0) {\r\n negative = true;\r\n }\r\n }\r\n\r\n // Return error if values does not contain at least one positive value\r\n // and one negative value\r\n if (!positive || !negative) {\r\n return error.num;\r\n }\r\n\r\n // Initialize guess and resultRate\r\n guess = (guess === undefined) ? 0.1 : guess;\r\n var resultRate = guess;\r\n\r\n // Set maximum epsilon for end of iteration\r\n var epsMax = 1e-10;\r\n\r\n // Implement Newton's method\r\n var newRate, epsRate, resultValue;\r\n var contLoop = true;\r\n do {\r\n resultValue = irrResult(values, dates, resultRate);\r\n newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate);\r\n epsRate = Math.abs(newRate - resultRate);\r\n resultRate = newRate;\r\n contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax);\r\n } while (contLoop);\r\n\r\n // Return internal rate of return\r\n return resultRate;\r\n };\r\n\r\n exports.ISPMT = function(rate, period, periods, value) {\r\n rate = utils.parseNumber(rate);\r\n period = utils.parseNumber(period);\r\n periods = utils.parseNumber(periods);\r\n value = utils.parseNumber(value);\r\n if (utils.anyIsError(rate, period, periods, value)) {\r\n return error.value;\r\n }\r\n\r\n // Return interest\r\n return value * rate * (period / periods - 1);\r\n };\r\n\r\n exports.MDURATION = null;\r\n\r\n exports.MIRR = function(values, finance_rate, reinvest_rate) {\r\n values = utils.parseNumberArray(utils.flatten(values));\r\n finance_rate = utils.parseNumber(finance_rate);\r\n reinvest_rate = utils.parseNumber(reinvest_rate);\r\n if (utils.anyIsError(values, finance_rate, reinvest_rate)) {\r\n return error.value;\r\n }\r\n\r\n // Initialize number of values\r\n var n = values.length;\r\n\r\n // Lookup payments (negative values) and incomes (positive values)\r\n var payments = [];\r\n var incomes = [];\r\n for (var i = 0; i < n; i++) {\r\n if (values[i] < 0) {\r\n payments.push(values[i]);\r\n } else {\r\n incomes.push(values[i]);\r\n }\r\n }\r\n\r\n // Return modified internal rate of return\r\n var num = -exports.NPV(reinvest_rate, incomes) * Math.pow(1 + reinvest_rate, n - 1);\r\n var den = exports.NPV(finance_rate, payments) * (1 + finance_rate);\r\n return Math.pow(num / den, 1 / (n - 1)) - 1;\r\n };\r\n\r\n exports.NOMINAL = function(rate, periods) {\r\n rate = utils.parseNumber(rate);\r\n periods = utils.parseNumber(periods);\r\n if (utils.anyIsError(rate, periods)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if rate <=0 or periods < 1\r\n if (rate <= 0 || periods < 1) {\r\n return error.num;\r\n }\r\n\r\n // Truncate periods if it is not an integer\r\n periods = parseInt(periods, 10);\r\n\r\n // Return nominal annual interest rate\r\n return (Math.pow(rate + 1, 1 / periods) - 1) * periods;\r\n };\r\n\r\n exports.NPER = function(rate, payment, present, future, type) {\r\n type = (type === undefined) ? 0 : type;\r\n future = (future === undefined) ? 0 : future;\r\n\r\n rate = utils.parseNumber(rate);\r\n payment = utils.parseNumber(payment);\r\n present = utils.parseNumber(present);\r\n future = utils.parseNumber(future);\r\n type = utils.parseNumber(type);\r\n if (utils.anyIsError(rate, payment, present, future, type)) {\r\n return error.value;\r\n }\r\n\r\n // Return number of periods\r\n var num = payment * (1 + rate * type) - future * rate;\r\n var den = (present * rate + payment * (1 + rate * type));\r\n return Math.log(num / den) / Math.log(1 + rate);\r\n };\r\n\r\n exports.NPV = function() {\r\n var args = utils.parseNumberArray(utils.flatten(arguments));\r\n if (args instanceof Error) {\r\n return args;\r\n }\r\n\r\n // Lookup rate\r\n var rate = args[0];\r\n\r\n // Initialize net present value\r\n var value = 0;\r\n\r\n // Loop on all values\r\n for (var j = 1; j < args.length; j++) {\r\n value += args[j] / Math.pow(1 + rate, j);\r\n }\r\n\r\n // Return net present value\r\n return value;\r\n };\r\n\r\n exports.ODDFPRICE = null;\r\n\r\n exports.ODDFYIELD = null;\r\n\r\n exports.ODDLPRICE = null;\r\n\r\n exports.ODDLYIELD = null;\r\n\r\n exports.PDURATION = function(rate, present, future) {\r\n rate = utils.parseNumber(rate);\r\n present = utils.parseNumber(present);\r\n future = utils.parseNumber(future);\r\n if (utils.anyIsError(rate, present, future)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if rate <=0\r\n if (rate <= 0) {\r\n return error.num;\r\n }\r\n\r\n // Return number of periods\r\n return (Math.log(future) - Math.log(present)) / Math.log(1 + rate);\r\n };\r\n\r\n exports.PMT = function(rate, periods, present, future, type) {\r\n // Credits: algorithm inspired by Apache OpenOffice\r\n\r\n future = future || 0;\r\n type = type || 0;\r\n\r\n rate = utils.parseNumber(rate);\r\n periods = utils.parseNumber(periods);\r\n present = utils.parseNumber(present);\r\n future = utils.parseNumber(future);\r\n type = utils.parseNumber(type);\r\n if (utils.anyIsError(rate, periods, present, future, type)) {\r\n return error.value;\r\n }\r\n\r\n // Return payment\r\n var result;\r\n if (rate === 0) {\r\n result = (present + future) / periods;\r\n } else {\r\n var term = Math.pow(1 + rate, periods);\r\n if (type === 1) {\r\n result = (future * rate / (term - 1) + present * rate / (1 - 1 / term)) / (1 + rate);\r\n } else {\r\n result = future * rate / (term - 1) + present * rate / (1 - 1 / term);\r\n }\r\n }\r\n return -result;\r\n };\r\n\r\n exports.PPMT = function(rate, period, periods, present, future, type) {\r\n future = future || 0;\r\n type = type || 0;\r\n\r\n rate = utils.parseNumber(rate);\r\n periods = utils.parseNumber(periods);\r\n present = utils.parseNumber(present);\r\n future = utils.parseNumber(future);\r\n type = utils.parseNumber(type);\r\n if (utils.anyIsError(rate, periods, present, future, type)) {\r\n return error.value;\r\n }\r\n\r\n return exports.PMT(rate, periods, present, future, type) - exports.IPMT(rate, period, periods, present, future, type);\r\n };\r\n\r\n exports.PRICE = null;\r\n\r\n exports.PRICEDISC = null;\r\n\r\n exports.PRICEMAT = null;\r\n\r\n exports.PV = function(rate, periods, payment, future, type) {\r\n future = future || 0;\r\n type = type || 0;\r\n\r\n rate = utils.parseNumber(rate);\r\n periods = utils.parseNumber(periods);\r\n payment = utils.parseNumber(payment);\r\n future = utils.parseNumber(future);\r\n type = utils.parseNumber(type);\r\n if (utils.anyIsError(rate, periods, payment, future, type)) {\r\n return error.value;\r\n }\r\n\r\n // Return present value\r\n if (rate === 0) {\r\n return -payment * periods - future;\r\n } else {\r\n return (((1 - Math.pow(1 + rate, periods)) / rate) * payment * (1 + rate * type) - future) / Math.pow(1 + rate, periods);\r\n }\r\n };\r\n\r\n exports.RATE = function(periods, payment, present, future, type, guess) {\r\n // Credits: rabugento\r\n\r\n guess = (guess === undefined) ? 0.01 : guess;\r\n future = (future === undefined) ? 0 : future;\r\n type = (type === undefined) ? 0 : type;\r\n\r\n periods = utils.parseNumber(periods);\r\n payment = utils.parseNumber(payment);\r\n present = utils.parseNumber(present);\r\n future = utils.parseNumber(future);\r\n type = utils.parseNumber(type);\r\n guess = utils.parseNumber(guess);\r\n if (utils.anyIsError(periods, payment, present, future, type, guess)) {\r\n return error.value;\r\n }\r\n\r\n // Set maximum epsilon for end of iteration\r\n var epsMax = 1e-6;\r\n\r\n // Set maximum number of iterations\r\n var iterMax = 100;\r\n var iter = 0;\r\n var close = false;\r\n var rate = guess;\r\n\r\n while (iter < iterMax && !close) {\r\n var t1 = Math.pow(rate + 1, periods);\r\n var t2 = Math.pow(rate + 1, periods - 1);\r\n\r\n var f1 = future + t1 * present + payment * (t1 - 1) * (rate * type + 1) / rate;\r\n var f2 = periods * t2 * present - payment * (t1 - 1) *(rate * type + 1) / Math.pow(rate,2);\r\n var f3 = periods * payment * t2 * (rate * type + 1) / rate + payment * (t1 - 1) * type / rate;\r\n\r\n var newRate = rate - f1 / (f2 + f3);\r\n\r\n if (Math.abs(newRate - rate) < epsMax) close = true;\r\n iter++\r\n rate = newRate;\r\n }\r\n\r\n if (!close) return Number.NaN + rate;\r\n return rate;\r\n };\r\n\r\n // TODO\r\n exports.RECEIVED = null;\r\n\r\n exports.RRI = function(periods, present, future) {\r\n periods = utils.parseNumber(periods);\r\n present = utils.parseNumber(present);\r\n future = utils.parseNumber(future);\r\n if (utils.anyIsError(periods, present, future)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if periods or present is equal to 0 (zero)\r\n if (periods === 0 || present === 0) {\r\n return error.num;\r\n }\r\n\r\n // Return equivalent interest rate\r\n return Math.pow(future / present, 1 / periods) - 1;\r\n };\r\n\r\n exports.SLN = function(cost, salvage, life) {\r\n cost = utils.parseNumber(cost);\r\n salvage = utils.parseNumber(salvage);\r\n life = utils.parseNumber(life);\r\n if (utils.anyIsError(cost, salvage, life)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if life equal to 0 (zero)\r\n if (life === 0) {\r\n return error.num;\r\n }\r\n\r\n // Return straight-line depreciation\r\n return (cost - salvage) / life;\r\n };\r\n\r\n exports.SYD = function(cost, salvage, life, period) {\r\n // Return error if any of the parameters is not a number\r\n cost = utils.parseNumber(cost);\r\n salvage = utils.parseNumber(salvage);\r\n life = utils.parseNumber(life);\r\n period = utils.parseNumber(period);\r\n if (utils.anyIsError(cost, salvage, life, period)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if life equal to 0 (zero)\r\n if (life === 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if period is lower than 1 or greater than life\r\n if (period < 1 || period > life) {\r\n return error.num;\r\n }\r\n\r\n // Truncate period if it is not an integer\r\n period = parseInt(period, 10);\r\n\r\n // Return straight-line depreciation\r\n return ((cost - salvage) * (life - period + 1) * 2) / (life * (life + 1));\r\n };\r\n\r\n exports.TBILLEQ = function(settlement, maturity, discount) {\r\n settlement = utils.parseDate(settlement);\r\n maturity = utils.parseDate(maturity);\r\n discount = utils.parseNumber(discount);\r\n if (utils.anyIsError(settlement, maturity, discount)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if discount is lower than or equal to zero\r\n if (discount <= 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if settlement is greater than maturity\r\n if (settlement > maturity) {\r\n return error.num;\r\n }\r\n\r\n // Return error if maturity is more than one year after settlement\r\n if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {\r\n return error.num;\r\n }\r\n\r\n // Return bond-equivalent yield\r\n return (365 * discount) / (360 - discount * DAYS360(settlement, maturity, false));\r\n };\r\n\r\n exports.TBILLPRICE = function(settlement, maturity, discount) {\r\n settlement = utils.parseDate(settlement);\r\n maturity = utils.parseDate(maturity);\r\n discount = utils.parseNumber(discount);\r\n if (utils.anyIsError(settlement, maturity, discount)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if discount is lower than or equal to zero\r\n if (discount <= 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if settlement is greater than maturity\r\n if (settlement > maturity) {\r\n return error.num;\r\n }\r\n\r\n // Return error if maturity is more than one year after settlement\r\n if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {\r\n return error.num;\r\n }\r\n\r\n // Return bond-equivalent yield\r\n return 100 * (1 - discount * DAYS360(settlement, maturity, false) / 360);\r\n };\r\n\r\n exports.TBILLYIELD = function(settlement, maturity, price) {\r\n settlement = utils.parseDate(settlement);\r\n maturity = utils.parseDate(maturity);\r\n price = utils.parseNumber(price);\r\n if (utils.anyIsError(settlement, maturity, price)) {\r\n return error.value;\r\n }\r\n\r\n // Return error if price is lower than or equal to zero\r\n if (price <= 0) {\r\n return error.num;\r\n }\r\n\r\n // Return error if settlement is greater than maturity\r\n if (settlement > maturity) {\r\n return error.num;\r\n }\r\n\r\n // Return error if maturity is more than one year after settlement\r\n if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {\r\n return error.num;\r\n }\r\n\r\n // Return bond-equivalent yield\r\n return (100 - price) * 360 / (price * DAYS360(settlement, maturity, false));\r\n };\r\n\r\n exports.VDB = null;\r\n\r\n exports.XIRR = function(values, dates, guess) {\r\n // Credits: algorithm inspired by Apache OpenOffice\r\n\r\n values = utils.parseNumberArray(utils.flatten(values));\r\n dates = utils.parseDateArray(utils.flatten(dates));\r\n guess = utils.parseNumber(guess);\r\n if (utils.anyIsError(values, dates, guess)) {\r\n return error.value;\r\n }\r\n\r\n // Calculates the resulting amount\r\n var irrResult = function(values, dates, rate) {\r\n var r = rate + 1;\r\n var result = values[0];\r\n for (var i = 1; i < values.length; i++) {\r\n result += values[i] / Math.pow(r, DAYS(dates[i], dates[0]) / 365);\r\n }\r\n return result;\r\n };\r\n\r\n // Calculates the first derivation\r\n var irrResultDeriv = function(values, dates, rate) {\r\n var r = rate + 1;\r\n var result = 0;\r\n for (var i = 1; i < values.length; i++) {\r\n var frac = DAYS(dates[i], dates[0]) / 365;\r\n result -= frac * values[i] / Math.pow(r, frac + 1);\r\n }\r\n return result;\r\n };\r\n\r\n // Check that values contains at least one positive value and one\r\n // negative value\r\n var positive = false;\r\n var negative = false;\r\n for (var i = 0; i < values.length; i++) {\r\n if (values[i] > 0) {\r\n positive = true;\r\n }\r\n if (values[i] < 0) {\r\n negative = true;\r\n }\r\n }\r\n\r\n // Return error if values does not contain at least one positive value\r\n // and one negative value\r\n if (!positive || !negative) {\r\n return error.num;\r\n }\r\n\r\n // Initialize guess and resultRate\r\n guess = guess || 0.1;\r\n var resultRate = guess;\r\n\r\n // Set maximum epsilon for end of iteration\r\n var epsMax = 1e-10;\r\n\r\n // Implement Newton's method\r\n var newRate, epsRate, resultValue;\r\n var contLoop = true;\r\n do {\r\n resultValue = irrResult(values, dates, resultRate);\r\n newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate);\r\n epsRate = Math.abs(newRate - resultRate);\r\n resultRate = newRate;\r\n contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax);\r\n } while (contLoop);\r\n\r\n // Return internal rate of return\r\n return resultRate;\r\n };\r\n\r\n exports.XNPV = function(rate, values, dates) {\r\n rate = utils.parseNumber(rate);\r\n values = utils.parseNumberArray(utils.flatten(values));\r\n dates = utils.parseDateArray(utils.flatten(dates));\r\n if (utils.anyIsError(rate, values, dates)) {\r\n return error.value;\r\n }\r\n\r\n var result = 0;\r\n for (var i = 0; i < values.length; i++) {\r\n result += values[i] / Math.pow(1 + rate, DAYS(dates[i], dates[0]) / 365);\r\n }\r\n return result;\r\n };\r\n\r\n exports.YIELD = null;\r\n\r\n exports.YIELDDISC = null;\r\n\r\n exports.YIELDMAT = null;\r\n\r\n return exports;\r\n})();\r\n\r\njexcel.methods.information = (function() {\r\n var exports = {};\r\n exports.CELL = null;\r\n\r\n exports.ERROR = {};\r\n exports.ERROR.TYPE = function(error_val) {\r\n switch (error_val) {\r\n case error.nil: return 1;\r\n case error.div0: return 2;\r\n case error.value: return 3;\r\n case error.ref: return 4;\r\n case error.name: return 5;\r\n case error.num: return 6;\r\n case error.na: return 7;\r\n case error.data: return 8;\r\n }\r\n return error.na;\r\n };\r\n\r\n exports.INFO = null;\r\n\r\n exports.ISBLANK = function(value) {\r\n return value === null;\r\n };\r\n\r\n exports.ISBINARY = function (number) {\r\n return (/^[01]{1,10}$/).test(number);\r\n };\r\n\r\n exports.ISERR = function(value) {\r\n return ([error.value, error.ref, error.div0, error.num, error.name, error.nil]).indexOf(value) >= 0 ||\r\n (typeof value === 'number' && (isNaN(value) || !isFinite(value)));\r\n };\r\n\r\n exports.ISERROR = function(value) {\r\n return exports.ISERR(value) || value === error.na;\r\n };\r\n\r\n exports.ISEVEN = function(number) {\r\n return (Math.floor(Math.abs(number)) & 1) ? false : true;\r\n };\r\n\r\n // TODO\r\n exports.ISFORMULA = null;\r\n\r\n exports.ISLOGICAL = function(value) {\r\n return value === true || value === false;\r\n };\r\n\r\n exports.ISNA = function(value) {\r\n return value === error.na;\r\n };\r\n\r\n exports.ISNONTEXT = function(value) {\r\n return typeof(value) !== 'string';\r\n };\r\n\r\n exports.ISNUMBER = function(value) {\r\n return typeof(value) === 'number' && !isNaN(value) && isFinite(value);\r\n };\r\n\r\n exports.ISODD = function(number) {\r\n return (Math.floor(Math.abs(number)) & 1) ? true : false;\r\n };\r\n\r\n exports.ISREF = null;\r\n\r\n exports.ISTEXT = function(value) {\r\n return typeof(value) === 'string';\r\n };\r\n\r\n exports.N = function(value) {\r\n if (this.ISNUMBER(value)) {\r\n return value;\r\n }\r\n if (value instanceof Date) {\r\n return value.getTime();\r\n }\r\n if (value === true) {\r\n return 1;\r\n }\r\n if (value === false) {\r\n return 0;\r\n }\r\n if (this.ISERROR(value)) {\r\n return value;\r\n }\r\n return 0;\r\n };\r\n\r\n exports.NA = function() {\r\n return error.na;\r\n };\r\n\r\n exports.SHEET = null;\r\n\r\n exports.SHEETS = null;\r\n\r\n exports.TYPE = function(value) {\r\n if (this.ISNUMBER(value)) {\r\n return 1;\r\n }\r\n if (this.ISTEXT(value)) {\r\n return 2;\r\n }\r\n if (this.ISLOGICAL(value)) {\r\n return 4;\r\n }\r\n if (this.ISERROR(value)) {\r\n return 16;\r\n }\r\n if (Array.isArray(value)) {\r\n return 64;\r\n }\r\n };\r\n\r\n return exports;\r\n})();\r\n\r\njexcel.methods.logical = (function() {\r\n var exports = {};\r\n\r\n exports.AND = function() {\r\n var args = utils.flatten(arguments);\r\n var result = true;\r\n for (var i = 0; i < args.length; i++) {\r\n if (!args[i]) {\r\n result = false;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n exports.CHOOSE = function() {\r\n if (arguments.length < 2) {\r\n return error.na;\r\n }\r\n\r\n var index = arguments[0];\r\n if (index < 1 || index > 254) {\r\n return error.value;\r\n }\r\n\r\n if (arguments.length < index + 1) {\r\n return error.value;\r\n }\r\n\r\n return arguments[index];\r\n };\r\n\r\n exports.FALSE = function() {\r\n return false;\r\n };\r\n\r\n exports.IF = function(test, then_value, otherwise_value) {\r\n return test ? then_value : otherwise_value;\r\n };\r\n\r\n exports.IFERROR = function(value, valueIfError) {\r\n if (ISERROR(value)) {\r\n return valueIfError;\r\n }\r\n return value;\r\n };\r\n\r\n exports.IFNA = function(value, value_if_na) {\r\n return value === error.na ? value_if_na : value;\r\n };\r\n\r\n exports.NOT = function(logical) {\r\n return !logical;\r\n };\r\n\r\n exports.OR = function() {\r\n var args = utils.flatten(arguments);\r\n var result = false;\r\n for (var i = 0; i < args.length; i++) {\r\n if (args[i]) {\r\n result = true;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n exports.TRUE = function() {\r\n return true;\r\n };\r\n\r\n exports.XOR = function() {\r\n var args = utils.flatten(arguments);\r\n var result = 0;\r\n for (var i = 0; i < args.length; i++) {\r\n if (args[i]) {\r\n result++;\r\n }\r\n }\r\n return (Math.floor(Math.abs(result)) & 1) ? true : false;\r\n };\r\n\r\n exports.SWITCH = function() {\r\n var result;\r\n if (arguments.length > 0) {\r\n var targetValue = arguments[0];\r\n var argc = arguments.length - 1;\r\n var switchCount = Math.floor(argc / 2);\r\n var switchSatisfied = false;\r\n var defaultClause = argc % 2 === 0 ? null : arguments[arguments.length - 1];\r\n\r\n if (switchCount) {\r\n for (var index = 0; index < switchCount; index++) {\r\n if (targetValue === arguments[index * 2 + 1]) {\r\n result = arguments[index * 2 + 2];\r\n switchSatisfied = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!switchSatisfied && defaultClause) {\r\n result = defaultClause;\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n return exports;\r\n})();\r\n\r\njexcel.methods.math = (function() {\r\n var exports = {};\r\n\r\n exports.ABS = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.abs(utils.parseNumber(number));\r\n };\r\n\r\n exports.ACOS = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.acos(number);\r\n };\r\n\r\n exports.ACOSH = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.log(number + Math.sqrt(number * number - 1));\r\n };\r\n\r\n exports.ACOT = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.atan(1 / number);\r\n };\r\n\r\n exports.ACOTH = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return 0.5 * Math.log((number + 1) / (number - 1));\r\n };\r\n\r\n exports.AGGREGATE = null\r\n\r\n exports.ARABIC = function(text) {\r\n // Credits: Rafa? Kukawski\r\n if (!/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/.test(text)) {\r\n return error.value;\r\n }\r\n var r = 0;\r\n text.replace(/[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, function(i) {\r\n r += {\r\n M: 1000,\r\n CM: 900,\r\n D: 500,\r\n CD: 400,\r\n C: 100,\r\n XC: 90,\r\n L: 50,\r\n XL: 40,\r\n X: 10,\r\n IX: 9,\r\n V: 5,\r\n IV: 4,\r\n I: 1\r\n }[i];\r\n });\r\n return r;\r\n };\r\n\r\n exports.ASIN = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.asin(number);\r\n };\r\n\r\n exports.ASINH = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.log(number + Math.sqrt(number * number + 1));\r\n };\r\n\r\n exports.ATAN = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.atan(number);\r\n };\r\n\r\n exports.ATAN2 = function(number_x, number_y) {\r\n number_x = utils.parseNumber(number_x);\r\n number_y = utils.parseNumber(number_y);\r\n if (utils.anyIsError(number_x, number_y)) {\r\n return error.value;\r\n }\r\n return Math.atan2(number_x, number_y);\r\n };\r\n\r\n exports.ATANH = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.log((1 + number) / (1 - number)) / 2;\r\n };\r\n\r\n exports.BASE = function(number, radix, min_length) {\r\n min_length = min_length || 0;\r\n\r\n number = utils.parseNumber(number);\r\n radix = utils.parseNumber(radix);\r\n min_length = utils.parseNumber(min_length);\r\n if (utils.anyIsError(number, radix, min_length)) {\r\n return error.value;\r\n }\r\n min_length = (min_length === undefined) ? 0 : min_length;\r\n var result = number.toString(radix);\r\n return new Array(Math.max(min_length + 1 - result.length, 0)).join('0') + result;\r\n };\r\n\r\n exports.CEILING = function(number, significance, mode) {\r\n significance = (significance === undefined) ? 1 : significance;\r\n mode = (mode === undefined) ? 0 : mode;\r\n\r\n number = utils.parseNumber(number);\r\n significance = utils.parseNumber(significance);\r\n mode = utils.parseNumber(mode);\r\n if (utils.anyIsError(number, significance, mode)) {\r\n return error.value;\r\n }\r\n if (significance === 0) {\r\n return 0;\r\n }\r\n\r\n significance = Math.abs(significance);\r\n if (number >= 0) {\r\n return Math.ceil(number / significance) * significance;\r\n } else {\r\n if (mode === 0) {\r\n return -1 * Math.floor(Math.abs(number) / significance) * significance;\r\n } else {\r\n return -1 * Math.ceil(Math.abs(number) / significance) * significance;\r\n }\r\n }\r\n };\r\n\r\n exports.CEILING.MATH = exports.CEILING;\r\n\r\n exports.CEILING.PRECISE = exports.CEILING;\r\n\r\n exports.COMBIN = function(number, number_chosen) {\r\n number = utils.parseNumber(number);\r\n number_chosen = utils.parseNumber(number_chosen);\r\n if (utils.anyIsError(number, number_chosen)) {\r\n return error.value;\r\n }\r\n return exports.FACT(number) / (exports.FACT(number_chosen) * exports.FACT(number - number_chosen));\r\n };\r\n\r\n exports.COMBINA = function(number, number_chosen) {\r\n number = utils.parseNumber(number);\r\n number_chosen = utils.parseNumber(number_chosen);\r\n if (utils.anyIsError(number, number_chosen)) {\r\n return error.value;\r\n }\r\n return (number === 0 && number_chosen === 0) ? 1 : exports.COMBIN(number + number_chosen - 1, number - 1);\r\n };\r\n\r\n exports.COS = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.cos(number);\r\n };\r\n\r\n exports.COSH = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return (Math.exp(number) + Math.exp(-number)) / 2;\r\n };\r\n\r\n exports.COT = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return 1 / Math.tan(number);\r\n };\r\n\r\n exports.COTH = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n var e2 = Math.exp(2 * number);\r\n return (e2 + 1) / (e2 - 1);\r\n };\r\n\r\n exports.CSC = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return 1 / Math.sin(number);\r\n };\r\n\r\n exports.CSCH = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return 2 / (Math.exp(number) - Math.exp(-number));\r\n };\r\n\r\n exports.DECIMAL = function(number, radix) {\r\n if (arguments.length < 1) {\r\n return error.value;\r\n }\r\n\r\n\r\n return parseInt(number, radix);\r\n };\r\n\r\n exports.DEGREES = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return number * 180 / Math.PI;\r\n };\r\n\r\n exports.EVEN = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return exports.CEILING(number, -2, -1);\r\n };\r\n\r\n exports.EXP = Math.exp;\r\n\r\n var MEMOIZED_FACT = [];\r\n exports.FACT = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n var n = Math.floor(number);\r\n if (n === 0 || n === 1) {\r\n return 1;\r\n } else if (MEMOIZED_FACT[n] > 0) {\r\n return MEMOIZED_FACT[n];\r\n } else {\r\n MEMOIZED_FACT[n] = exports.FACT(n - 1) * n;\r\n return MEMOIZED_FACT[n];\r\n }\r\n };\r\n\r\n exports.FACTDOUBLE = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n var n = Math.floor(number);\r\n if (n <= 0) {\r\n return 1;\r\n } else {\r\n return n * exports.FACTDOUBLE(n - 2);\r\n }\r\n };\r\n\r\n exports.FLOOR = function(number, significance, mode) {\r\n significance = (significance === undefined) ? 1 : significance;\r\n mode = (mode === undefined) ? 0 : mode;\r\n\r\n number = utils.parseNumber(number);\r\n significance = utils.parseNumber(significance);\r\n mode = utils.parseNumber(mode);\r\n if (utils.anyIsError(number, significance, mode)) {\r\n return error.value;\r\n }\r\n if (significance === 0) {\r\n return 0;\r\n }\r\n\r\n significance = Math.abs(significance);\r\n if (number >= 0) {\r\n return Math.floor(number / significance) * significance;\r\n } else {\r\n if (mode === 0) {\r\n return -1 * Math.ceil(Math.abs(number) / significance) * significance;\r\n } else {\r\n return -1 * Math.floor(Math.abs(number) / significance) * significance;\r\n }\r\n }\r\n };\r\n\r\n exports.FLOOR.MATH = exports.FLOOR;\r\n\r\n exports.GCD = null;\r\n\r\n exports.INT = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.floor(number);\r\n };\r\n\r\n exports.LCM = function() {\r\n // Credits: Jonas Raoni Soares Silva\r\n var o = utils.parseNumberArray(utils.flatten(arguments));\r\n if (o instanceof Error) {\r\n return o;\r\n }\r\n for (var i, j, n, d, r = 1;\r\n (n = o.pop()) !== undefined;) {\r\n while (n > 1) {\r\n if (n % 2) {\r\n for (i = 3, j = Math.floor(Math.sqrt(n)); i <= j && n % i; i += 2) {\r\n //empty\r\n }\r\n d = (i <= j) ? i : n;\r\n } else {\r\n d = 2;\r\n }\r\n for (n /= d, r *= d, i = o.length; i;\r\n (o[--i] % d) === 0 && (o[i] /= d) === 1 && o.splice(i, 1)) {\r\n //empty\r\n }\r\n }\r\n }\r\n return r;\r\n };\r\n\r\n exports.LN = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.log(number);\r\n };\r\n\r\n exports.LOG = function(number, base) {\r\n number = utils.parseNumber(number);\r\n base = (base === undefined) ? 10 : utils.parseNumber(base);\r\n\r\n if (utils.anyIsError(number, base)) {\r\n return error.value;\r\n }\r\n\r\n return Math.log(number) / Math.log(base);\r\n };\r\n\r\n exports.LOG10 = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.log(number) / Math.log(10);\r\n };\r\n\r\n exports.MDETERM = null;\r\n\r\n exports.MINVERSE = null;\r\n\r\n exports.MMULT = null;\r\n\r\n exports.MOD = function(dividend, divisor) {\r\n dividend = utils.parseNumber(dividend);\r\n divisor = utils.parseNumber(divisor);\r\n if (utils.anyIsError(dividend, divisor)) {\r\n return error.value;\r\n }\r\n if (divisor === 0) {\r\n return error.div0;\r\n }\r\n var modulus = Math.abs(dividend % divisor);\r\n return (divisor > 0) ? modulus : -modulus;\r\n };\r\n\r\n exports.MROUND = function(number, multiple) {\r\n number = utils.parseNumber(number);\r\n multiple = utils.parseNumber(multiple);\r\n if (utils.anyIsError(number, multiple)) {\r\n return error.value;\r\n }\r\n if (number * multiple < 0) {\r\n return error.num;\r\n }\r\n\r\n return Math.round(number / multiple) * multiple;\r\n };\r\n\r\n exports.MULTINOMIAL = function() {\r\n var args = utils.parseNumberArray(utils.flatten(arguments));\r\n if (args instanceof Error) {\r\n return args;\r\n }\r\n var sum = 0;\r\n var divisor = 1;\r\n for (var i = 0; i < args.length; i++) {\r\n sum += args[i];\r\n divisor *= exports.FACT(args[i]);\r\n }\r\n return exports.FACT(sum) / divisor;\r\n };\r\n\r\n exports.MUNIT = null;\r\n\r\n exports.ODD = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n var temp = Math.ceil(Math.abs(number));\r\n temp = (temp & 1) ? temp : temp + 1;\r\n return (number > 0) ? temp : -temp;\r\n };\r\n\r\n exports.PI = function() {\r\n return Math.PI;\r\n };\r\n\r\n exports.POWER = function(number, power) {\r\n number = utils.parseNumber(number);\r\n power = utils.parseNumber(power);\r\n if (utils.anyIsError(number, power)) {\r\n return error.value;\r\n }\r\n var result = Math.pow(number, power);\r\n if (isNaN(result)) {\r\n return error.num;\r\n }\r\n\r\n return result;\r\n };\r\n\r\n exports.PRODUCT = function() {\r\n var args = utils.parseNumberArray(utils.flatten(arguments));\r\n if (args instanceof Error) {\r\n return args;\r\n }\r\n var result = 1;\r\n for (var i = 0; i < args.length; i++) {\r\n result *= args[i];\r\n }\r\n return result;\r\n };\r\n\r\n exports.QUOTIENT = function(numerator, denominator) {\r\n numerator = utils.parseNumber(numerator);\r\n denominator = utils.parseNumber(denominator);\r\n if (utils.anyIsError(numerator, denominator)) {\r\n return error.value;\r\n }\r\n return parseInt(numerator / denominator, 10);\r\n };\r\n\r\n exports.RADIANS = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return number * Math.PI / 180;\r\n };\r\n\r\n exports.RAND = function() {\r\n return Math.random();\r\n };\r\n\r\n exports.RANDBETWEEN = function(bottom, top) {\r\n bottom = utils.parseNumber(bottom);\r\n top = utils.parseNumber(top);\r\n if (utils.anyIsError(bottom, top)) {\r\n return error.value;\r\n }\r\n // Creative Commons Attribution 3.0 License\r\n // Copyright (c) 2012 eqcode\r\n return bottom + Math.ceil((top - bottom + 1) * Math.random()) - 1;\r\n };\r\n\r\n exports.ROMAN = null;\r\n\r\n exports.ROUND = function(number, digits) {\r\n number = utils.parseNumber(number);\r\n digits = utils.parseNumber(digits);\r\n if (utils.anyIsError(number, digits)) {\r\n return error.value;\r\n }\r\n return Math.round(number * Math.pow(10, digits)) / Math.pow(10, digits);\r\n };\r\n\r\n exports.ROUNDDOWN = function(number, digits) {\r\n number = utils.parseNumber(number);\r\n digits = utils.parseNumber(digits);\r\n if (utils.anyIsError(number, digits)) {\r\n return error.value;\r\n }\r\n var sign = (number > 0) ? 1 : -1;\r\n return sign * (Math.floor(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);\r\n };\r\n\r\n exports.ROUNDUP = function(number, digits) {\r\n number = utils.parseNumber(number);\r\n digits = utils.parseNumber(digits);\r\n if (utils.anyIsError(number, digits)) {\r\n return error.value;\r\n }\r\n var sign = (number > 0) ? 1 : -1;\r\n return sign * (Math.ceil(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);\r\n };\r\n\r\n exports.SEC = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return 1 / Math.cos(number);\r\n };\r\n\r\n exports.SECH = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return 2 / (Math.exp(number) + Math.exp(-number));\r\n };\r\n\r\n exports.SERIESSUM = function(x, n, m, coefficients) {\r\n x = utils.parseNumber(x);\r\n n = utils.parseNumber(n);\r\n m = utils.parseNumber(m);\r\n coefficients = utils.parseNumberArray(coefficients);\r\n if (utils.anyIsError(x, n, m, coefficients)) {\r\n return error.value;\r\n }\r\n var result = coefficients[0] * Math.pow(x, n);\r\n for (var i = 1; i < coefficients.length; i++) {\r\n result += coefficients[i] * Math.pow(x, n + i * m);\r\n }\r\n return result;\r\n };\r\n\r\n exports.SIGN = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n if (number < 0) {\r\n return -1;\r\n } else if (number === 0) {\r\n return 0;\r\n } else {\r\n return 1;\r\n }\r\n };\r\n\r\n exports.SIN = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.sin(number);\r\n };\r\n\r\n exports.SINH = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return (Math.exp(number) - Math.exp(-number)) / 2;\r\n };\r\n\r\n exports.SQRT = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n if (number < 0) {\r\n return error.num;\r\n }\r\n return Math.sqrt(number);\r\n };\r\n\r\n exports.SQRTPI = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.sqrt(number * Math.PI);\r\n };\r\n\r\n exports.SUBTOTAL = null;\r\n\r\n exports.ADD = function (num1, num2) {\r\n if (arguments.length !== 2) {\r\n return error.na;\r\n }\r\n\r\n num1 = utils.parseNumber(num1);\r\n num2 = utils.parseNumber(num2);\r\n if (utils.anyIsError(num1, num2)) {\r\n return error.value;\r\n }\r\n\r\n return num1 + num2;\r\n };\r\n\r\n exports.MINUS = function (num1, num2) {\r\n if (arguments.length !== 2) {\r\n return error.na;\r\n }\r\n\r\n num1 = utils.parseNumber(num1);\r\n num2 = utils.parseNumber(num2);\r\n if (utils.anyIsError(num1, num2)) {\r\n return error.value;\r\n }\r\n\r\n return num1 - num2;\r\n };\r\n\r\n exports.DIVIDE = function (dividend, divisor) {\r\n if (arguments.length !== 2) {\r\n return error.na;\r\n }\r\n\r\n dividend = utils.parseNumber(dividend);\r\n divisor = utils.parseNumber(divisor);\r\n if (utils.anyIsError(dividend, divisor)) {\r\n return error.value;\r\n }\r\n\r\n if (divisor === 0) {\r\n return error.div0;\r\n }\r\n\r\n return dividend / divisor;\r\n };\r\n\r\n exports.MULTIPLY = function (factor1, factor2) {\r\n if (arguments.length !== 2) {\r\n return error.na;\r\n }\r\n\r\n factor1 = utils.parseNumber(factor1);\r\n factor2 = utils.parseNumber(factor2);\r\n if (utils.anyIsError(factor1, factor2)) {\r\n return error.value;\r\n }\r\n\r\n return factor1 * factor2;\r\n };\r\n\r\n exports.GTE = function (num1, num2) {\r\n if (arguments.length !== 2) {\r\n return error.na;\r\n }\r\n\r\n num1 = utils.parseNumber(num1);\r\n num2 = utils.parseNumber(num2);\r\n if (utils.anyIsError(num1, num2)) {\r\n return error.error;\r\n }\r\n\r\n return num1 >= num2;\r\n };\r\n\r\n exports.LT = function (num1, num2) {\r\n if (arguments.length !== 2) {\r\n return error.na;\r\n }\r\n\r\n num1 = utils.parseNumber(num1);\r\n num2 = utils.parseNumber(num2);\r\n if (utils.anyIsError(num1, num2)) {\r\n return error.error;\r\n }\r\n\r\n return num1 < num2;\r\n };\r\n\r\n exports.LTE = function (num1, num2) {\r\n if (arguments.length !== 2) {\r\n return error.na;\r\n }\r\n\r\n num1 = utils.parseNumber(num1);\r\n num2 = utils.parseNumber(num2);\r\n if (utils.anyIsError(num1, num2)) {\r\n return error.error;\r\n }\r\n\r\n return num1 <= num2;\r\n };\r\n\r\n exports.EQ = function (value1, value2) {\r\n if (arguments.length !== 2) {\r\n return error.na;\r\n }\r\n\r\n return value1 === value2;\r\n };\r\n\r\n exports.NE = function (value1, value2) {\r\n if (arguments.length !== 2) {\r\n return error.na;\r\n }\r\n\r\n return value1 !== value2;\r\n };\r\n\r\n exports.POW = function (base, exponent) {\r\n if (arguments.length !== 2) {\r\n return error.na;\r\n }\r\n\r\n base = utils.parseNumber(base);\r\n exponent = utils.parseNumber(exponent);\r\n if (utils.anyIsError(base, exponent)) {\r\n return error.error;\r\n }\r\n\r\n return exports.POWER(base, exponent);\r\n };\r\n\r\n exports.SUM = function() {\r\n var result = 0;\r\n var argsKeys = Object.keys(arguments);\r\n for (var i = 0; i < argsKeys.length; ++i) {\r\n var elt = arguments[argsKeys[i]];\r\n if (typeof elt === 'number') {\r\n result += elt;\r\n } else if (typeof elt === 'string') {\r\n var parsed = parseFloat(elt);\r\n !isNaN(parsed) && (result += parsed);\r\n } else if (Array.isArray(elt)) {\r\n result += exports.SUM.apply(null, elt);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n exports.SUMIF = function(range, criteria) {\r\n range = utils.parseNumberArray(utils.flatten(range));\r\n if (range instanceof Error) {\r\n return range;\r\n }\r\n var result = 0;\r\n for (var i = 0; i < range.length; i++) {\r\n result += (eval(range[i] + criteria)) ? range[i] : 0; // jshint ignore:line\r\n }\r\n return result;\r\n };\r\n\r\n exports.SUMIFS = function() {\r\n var args = utils.argsToArray(arguments);\r\n var range = utils.parseNumberArray(utils.flatten(args.shift()));\r\n if (range instanceof Error) {\r\n return range;\r\n }\r\n var criteria = args;\r\n\r\n var n_range_elements = range.length;\r\n var n_criterias = criteria.length;\r\n\r\n var result = 0;\r\n for (var i = 0; i < n_range_elements; i++) {\r\n var el = range[i];\r\n var condition = '';\r\n for (var c = 0; c < n_criterias; c++) {\r\n condition += el + criteria[c];\r\n if (c !== n_criterias - 1) {\r\n condition += '&&';\r\n }\r\n }\r\n if (eval(condition)) { // jshint ignore:line\r\n result += el;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n exports.SUMPRODUCT = null;\r\n\r\n exports.SUMSQ = function() {\r\n var numbers = utils.parseNumberArray(utils.flatten(arguments));\r\n if (numbers instanceof Error) {\r\n return numbers;\r\n }\r\n var result = 0;\r\n var length = numbers.length;\r\n for (var i = 0; i < length; i++) {\r\n result += (ISNUMBER(numbers[i])) ? numbers[i] * numbers[i] : 0;\r\n }\r\n return result;\r\n };\r\n\r\n exports.SUMX2MY2 = function(array_x, array_y) {\r\n array_x = utils.parseNumberArray(utils.flatten(array_x));\r\n array_y = utils.parseNumberArray(utils.flatten(array_y));\r\n if (utils.anyIsError(array_x, array_y)) {\r\n return error.value;\r\n }\r\n var result = 0;\r\n for (var i = 0; i < array_x.length; i++) {\r\n result += array_x[i] * array_x[i] - array_y[i] * array_y[i];\r\n }\r\n return result;\r\n };\r\n\r\n exports.SUMX2PY2 = function(array_x, array_y) {\r\n array_x = utils.parseNumberArray(utils.flatten(array_x));\r\n array_y = utils.parseNumberArray(utils.flatten(array_y));\r\n if (utils.anyIsError(array_x, array_y)) {\r\n return error.value;\r\n }\r\n var result = 0;\r\n array_x = utils.parseNumberArray(utils.flatten(array_x));\r\n array_y = utils.parseNumberArray(utils.flatten(array_y));\r\n for (var i = 0; i < array_x.length; i++) {\r\n result += array_x[i] * array_x[i] + array_y[i] * array_y[i];\r\n }\r\n return result;\r\n };\r\n\r\n exports.SUMXMY2 = function(array_x, array_y) {\r\n array_x = utils.parseNumberArray(utils.flatten(array_x));\r\n array_y = utils.parseNumberArray(utils.flatten(array_y));\r\n if (utils.anyIsError(array_x, array_y)) {\r\n return error.value;\r\n }\r\n var result = 0;\r\n array_x = utils.flatten(array_x);\r\n array_y = utils.flatten(array_y);\r\n for (var i = 0; i < array_x.length; i++) {\r\n result += Math.pow(array_x[i] - array_y[i], 2);\r\n }\r\n return result;\r\n };\r\n\r\n exports.TAN = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return Math.tan(number);\r\n };\r\n\r\n exports.TANH = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n var e2 = Math.exp(2 * number);\r\n return (e2 - 1) / (e2 + 1);\r\n };\r\n\r\n exports.TRUNC = function(number, digits) {\r\n digits = (digits === undefined) ? 0 : digits;\r\n number = utils.parseNumber(number);\r\n digits = utils.parseNumber(digits);\r\n if (utils.anyIsError(number, digits)) {\r\n return error.value;\r\n }\r\n var sign = (number > 0) ? 1 : -1;\r\n return sign * (Math.floor(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);\r\n };\r\n\r\n return exports;\r\n})();\r\n\r\njexcel.methods.misc = (function() {\r\n var exports = {};\r\n\r\n exports.UNIQUE = function () {\r\n var result = [];\r\n for (var i = 0; i < arguments.length; ++i) {\r\n var hasElement = false;\r\n var element = arguments[i];\r\n\r\n // Check if we've already seen this element.\r\n for (var j = 0; j < result.length; ++j) {\r\n hasElement = result[j] === element;\r\n if (hasElement) { break; }\r\n }\r\n\r\n // If we did not find it, add it to the result.\r\n if (!hasElement) {\r\n result.push(element);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n exports.FLATTEN = utils.flatten;\r\n\r\n exports.ARGS2ARRAY = function () {\r\n return Array.prototype.slice.call(arguments, 0);\r\n };\r\n\r\n exports.REFERENCE = function (context, reference) {\r\n try {\r\n var path = reference.split('.');\r\n var result = context;\r\n for (var i = 0; i < path.length; ++i) {\r\n var step = path[i];\r\n if (step[step.length - 1] === ']') {\r\n var opening = step.indexOf('[');\r\n var index = step.substring(opening + 1, step.length - 1);\r\n result = result[step.substring(0, opening)][index];\r\n } else {\r\n result = result[step];\r\n }\r\n }\r\n return result;\r\n } catch (error) {}\r\n };\r\n\r\n exports.JOIN = function (array, separator) {\r\n return array.join(separator);\r\n };\r\n\r\n exports.NUMBERS = function () {\r\n var possibleNumbers = utils.flatten(arguments);\r\n return possibleNumbers.filter(function (el) {\r\n return typeof el === 'number';\r\n });\r\n };\r\n\r\n exports.NUMERAL = null;\r\n\r\n return exports;\r\n})();\r\n\r\njexcel.methods.text = (function() {\r\n var exports = {};\r\n\r\n exports.ASC = null;\r\n\r\n exports.BAHTTEXT = null;\r\n\r\n exports.CHAR = function(number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return String.fromCharCode(number);\r\n };\r\n\r\n exports.CLEAN = function(text) {\r\n text = text || '';\r\n var re = /[\\0-\\x1F]/g;\r\n return text.replace(re, \"\");\r\n };\r\n\r\n exports.CODE = function(text) {\r\n text = text || '';\r\n return text.charCodeAt(0);\r\n };\r\n\r\n exports.CONCATENATE = function() {\r\n var args = utils.flatten(arguments);\r\n\r\n var trueFound = 0;\r\n while ((trueFound = args.indexOf(true)) > -1) {\r\n args[trueFound] = 'TRUE';\r\n }\r\n\r\n var falseFound = 0;\r\n while ((falseFound = args.indexOf(false)) > -1) {\r\n args[falseFound] = 'FALSE';\r\n }\r\n\r\n return args.join('');\r\n };\r\n\r\n exports.DBCS = null;\r\n\r\n exports.DOLLAR = null;\r\n\r\n exports.EXACT = function(text1, text2) {\r\n return text1 === text2;\r\n };\r\n\r\n exports.FIND = function(find_text, within_text, position) {\r\n position = (position === undefined) ? 0 : position;\r\n return within_text ? within_text.indexOf(find_text, position - 1) + 1 : null;\r\n };\r\n\r\n exports.FIXED = null;\r\n\r\n exports.HTML2TEXT = function (value) {\r\n var result = '';\r\n\r\n if (value) {\r\n if (value instanceof Array) {\r\n value.forEach(function (line) {\r\n if (result !== '') {\r\n result += '\\n';\r\n }\r\n result += (line.replace(/<(?:.|\\n)*?>/gm, ''));\r\n });\r\n } else {\r\n result = value.replace(/<(?:.|\\n)*?>/gm, '');\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n exports.LEFT = function(text, number) {\r\n number = (number === undefined) ? 1 : number;\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error || typeof text !== 'string') {\r\n return error.value;\r\n }\r\n return text ? text.substring(0, number) : null;\r\n };\r\n\r\n exports.LEN = function(text) {\r\n if (arguments.length === 0) {\r\n return error.error;\r\n }\r\n\r\n if (typeof text === 'string') {\r\n return text ? text.length : 0;\r\n }\r\n\r\n if (text.length) {\r\n return text.length;\r\n }\r\n\r\n return error.value;\r\n };\r\n\r\n exports.LOWER = function(text) {\r\n if (typeof text !== 'string') {\r\n return error.value;\r\n }\r\n return text ? text.toLowerCase() : text;\r\n };\r\n\r\n exports.MID = function(text, start, number) {\r\n start = utils.parseNumber(start);\r\n number = utils.parseNumber(number);\r\n if (utils.anyIsError(start, number) || typeof text !== 'string') {\r\n return number;\r\n }\r\n\r\n var begin = start - 1;\r\n var end = begin + number;\r\n\r\n return text.substring(begin, end);\r\n };\r\n\r\n exports.NUMBERVALUE = null;\r\n\r\n exports.PRONETIC = null;\r\n\r\n exports.PROPER = function(text) {\r\n if (text === undefined || text.length === 0) {\r\n return error.value;\r\n }\r\n if (text === true) {\r\n text = 'TRUE';\r\n }\r\n if (text === false) {\r\n text = 'FALSE';\r\n }\r\n if (isNaN(text) && typeof text === 'number') {\r\n return error.value;\r\n }\r\n if (typeof text === 'number') {\r\n text = '' + text;\r\n }\r\n\r\n return text.replace(/\\w\\S*/g, function(txt) {\r\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\r\n });\r\n };\r\n\r\n exports.REGEXEXTRACT = function (text, regular_expression) {\r\n var match = text.match(new RegExp(regular_expression));\r\n return match ? (match[match.length > 1 ? match.length - 1 : 0]) : null;\r\n };\r\n\r\n exports.REGEXMATCH = function (text, regular_expression, full) {\r\n var match = text.match(new RegExp(regular_expression));\r\n return full ? match : !!match;\r\n };\r\n\r\n exports.REGEXREPLACE = function (text, regular_expression, replacement) {\r\n return text.replace(new RegExp(regular_expression), replacement);\r\n };\r\n\r\n exports.REPLACE = function(text, position, length, new_text) {\r\n position = utils.parseNumber(position);\r\n length = utils.parseNumber(length);\r\n if (utils.anyIsError(position, length) ||\r\n typeof text !== 'string' ||\r\n typeof new_text !== 'string') {\r\n return error.value;\r\n }\r\n return text.substr(0, position - 1) + new_text + text.substr(position - 1 + length);\r\n };\r\n\r\n exports.REPT = function(text, number) {\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return new Array(number + 1).join(text);\r\n };\r\n\r\n exports.RIGHT = function(text, number) {\r\n number = (number === undefined) ? 1 : number;\r\n number = utils.parseNumber(number);\r\n if (number instanceof Error) {\r\n return number;\r\n }\r\n return text ? text.substring(text.length - number) : null;\r\n };\r\n\r\n exports.SEARCH = function(find_text, within_text, position) {\r\n var foundAt;\r\n if (typeof find_text !== 'string' || typeof within_text !== 'string') {\r\n return error.value;\r\n }\r\n position = (position === undefined) ? 0 : position;\r\n foundAt = within_text.toLowerCase().indexOf(find_text.toLowerCase(), position - 1)+1;\r\n return (foundAt === 0)?error.value:foundAt;\r\n };\r\n\r\n exports.SPLIT = function (text, separator) {\r\n return text.split(separator);\r\n };\r\n\r\n exports.SUBSTITUTE = function(text, old_text, new_text, occurrence) {\r\n if (!text || !old_text || !new_text) {\r\n return text;\r\n } else if (occurrence === undefined) {\r\n return text.replace(new RegExp(old_text, 'g'), new_text);\r\n } else {\r\n var index = 0;\r\n var i = 0;\r\n while (text.indexOf(old_text, index) > 0) {\r\n index = text.indexOf(old_text, index + 1);\r\n i++;\r\n if (i === occurrence) {\r\n return text.substring(0, index) + new_text + text.substring(index + old_text.length);\r\n }\r\n }\r\n }\r\n };\r\n\r\n exports.T = function(value) {\r\n return (typeof value === \"string\") ? value : '';\r\n };\r\n\r\n exports.TEXT = null;\r\n\r\n exports.TRIM = function(text) {\r\n if (typeof text !== 'string') {\r\n return error.value;\r\n }\r\n return text.replace(/ +/g, ' ').trim();\r\n };\r\n\r\n exports.UNICHAR = exports.CHAR;\r\n\r\n exports.UNICODE = exports.CODE;\r\n\r\n exports.UPPER = function(text) {\r\n if (typeof text !== 'string') {\r\n return error.value;\r\n }\r\n return text.toUpperCase();\r\n };\r\n\r\n exports.VALUE = null;\r\n\r\n return exports;\r\n})();\r\n\r\njexcel.methods.stats = (function() {\r\n var exports = {};\r\n\r\n var SQRT2PI = 2.5066282746310002;\r\n\r\n exports.AVEDEV = null;\r\n\r\n exports.AVERAGE = function() {\r\n var range = utils.numbers(utils.flatten(arguments));\r\n var n = range.length;\r\n var sum = 0;\r\n var count = 0;\r\n for (var i = 0; i < n; i++) {\r\n sum += range[i];\r\n count += 1;\r\n }\r\n return sum / count;\r\n };\r\n\r\n exports.AVERAGEA = function() {\r\n var range = utils.flatten(arguments);\r\n var n = range.length;\r\n var sum = 0;\r\n var count = 0;\r\n for (var i = 0; i < n; i++) {\r\n var el = range[i];\r\n if (typeof el === 'number') {\r\n sum += el;\r\n }\r\n if (el === true) {\r\n sum++;\r\n }\r\n if (el !== null) {\r\n count++;\r\n }\r\n }\r\n return sum / count;\r\n };\r\n\r\n exports.AVERAGEIF = function(range, criteria, average_range) {\r\n average_range = average_range || range;\r\n range = utils.flatten(range);\r\n average_range = utils.parseNumberArray(utils.flatten(average_range));\r\n if (average_range instanceof Error) {\r\n return average_range;\r\n }\r\n var average_count = 0;\r\n var result = 0;\r\n for (var i = 0; i < range.length; i++) {\r\n if (eval(range[i] + criteria)) { // jshint ignore:line\r\n result += average_range[i];\r\n average_count++;\r\n }\r\n }\r\n return result / average_count;\r\n };\r\n\r\n exports.AVERAGEIFS = null;\r\n\r\n exports.COUNT = function() {\r\n return utils.numbers(utils.flatten(arguments)).length;\r\n };\r\n\r\n exports.COUNTA = function() {\r\n var range = utils.flatten(arguments);\r\n return range.length - exports.COUNTBLANK(range);\r\n };\r\n\r\n exports.COUNTIN = function (range, value) {\r\n var result = 0;\r\n for (var i = 0; i < range.length; i++) {\r\n if (range[i] === value) {\r\n result++;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n exports.COUNTBLANK = function() {\r\n var range = utils.flatten(arguments);\r\n var blanks = 0;\r\n var element;\r\n for (var i = 0; i < range.length; i++) {\r\n element = range[i];\r\n if (element === null || element === '') {\r\n blanks++;\r\n }\r\n }\r\n return blanks;\r\n };\r\n\r\n exports.COUNTIF = function(range, criteria) {\r\n range = utils.flatten(range);\r\n if (!/[<>=!]/.test(criteria)) {\r\n criteria = '==\"' + criteria + '\"';\r\n }\r\n var matches = 0;\r\n for (var i = 0; i < range.length; i++) {\r\n if (typeof range[i] !== 'string') {\r\n if (eval(range[i] + criteria)) { // jshint ignore:line\r\n matches++;\r\n }\r\n } else {\r\n if (eval('\"' + range[i] + '\"' + criteria)) { // jshint ignore:line\r\n matches++;\r\n }\r\n }\r\n }\r\n return matches;\r\n };\r\n\r\n exports.COUNTIFS = function() {\r\n var args = utils.argsToArray(arguments);\r\n var results = new Array(utils.flatten(args[0]).length);\r\n for (var i = 0; i < results.length; i++) {\r\n results[i] = true;\r\n }\r\n for (i = 0; i < args.length; i += 2) {\r\n var range = utils.flatten(args[i]);\r\n var criteria = args[i + 1];\r\n if (!/[<>=!]/.test(criteria)) {\r\n criteria = '==\"' + criteria + '\"';\r\n }\r\n for (var j = 0; j < range.length; j++) {\r\n if (typeof range[j] !== 'string') {\r\n results[j] = results[j] && eval(range[j] + criteria); // jshint ignore:line\r\n } else {\r\n results[j] = results[j] && eval('\"' + range[j] + '\"' + criteria); // jshint ignore:line\r\n }\r\n }\r\n }\r\n var result = 0;\r\n for (i = 0; i < results.length; i++) {\r\n if (results[i]) {\r\n result++;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n exports.COUNTUNIQUE = function () {\r\n return UNIQUE.apply(null, utils.flatten(arguments)).length;\r\n };\r\n\r\n exports.FISHER = function(x) {\r\n x = utils.parseNumber(x);\r\n if (x instanceof Error) {\r\n return x;\r\n }\r\n return Math.log((1 + x) / (1 - x)) / 2;\r\n };\r\n\r\n exports.FISHERINV = function(y) {\r\n y = utils.parseNumber(y);\r\n if (y instanceof Error) {\r\n return y;\r\n }\r\n var e2y = Math.exp(2 * y);\r\n return (e2y - 1) / (e2y + 1);\r\n };\r\n\r\n exports.FREQUENCY = function(data, bins) {\r\n data = utils.parseNumberArray(utils.flatten(data));\r\n bins = utils.parseNumberArray(utils.flatten(bins));\r\n if (utils.anyIsError(data, bins)) {\r\n return error.value;\r\n }\r\n var n = data.length;\r\n var b = bins.length;\r\n var r = [];\r\n for (var i = 0; i <= b; i++) {\r\n r[i] = 0;\r\n for (var j = 0; j < n; j++) {\r\n if (i === 0) {\r\n if (data[j] <= bins[0]) {\r\n r[0] += 1;\r\n }\r\n } else if (i < b) {\r\n if (data[j] > bins[i - 1] && data[j] <= bins[i]) {\r\n r[i] += 1;\r\n }\r\n } else if (i === b) {\r\n if (data[j] > bins[b - 1]) {\r\n r[b] += 1;\r\n }\r\n }\r\n }\r\n }\r\n return r;\r\n };\r\n\r\n exports.LARGE = function(range, k) {\r\n range = utils.parseNumberArray(utils.flatten(range));\r\n k = utils.parseNumber(k);\r\n if (utils.anyIsError(range, k)) {\r\n return range;\r\n }\r\n return range.sort(function(a, b) {\r\n return b - a;\r\n })[k - 1];\r\n };\r\n\r\n exports.MAX = function() {\r\n var range = utils.numbers(utils.flatten(arguments));\r\n return (range.length === 0) ? 0 : Math.max.apply(Math, range);\r\n };\r\n\r\n exports.MAXA = function() {\r\n var range = utils.arrayValuesToNumbers(utils.flatten(arguments));\r\n return (range.length === 0) ? 0 : Math.max.apply(Math, range);\r\n };\r\n\r\n exports.MIN = function() {\r\n var range = utils.numbers(utils.flatten(arguments));\r\n return (range.length === 0) ? 0 : Math.min.apply(Math, range);\r\n };\r\n\r\n exports.MINA = function() {\r\n var range = utils.arrayValuesToNumbers(utils.flatten(arguments));\r\n return (range.length === 0) ? 0 : Math.min.apply(Math, range);\r\n };\r\n\r\n exports.MODE = {};\r\n\r\n exports.MODE.MULT = function() {\r\n // Credits: Roönaän\r\n var range = utils.parseNumberArray(utils.flatten(arguments));\r\n if (range instanceof Error) {\r\n return range;\r\n }\r\n var n = range.length;\r\n var count = {};\r\n var maxItems = [];\r\n var max = 0;\r\n var currentItem;\r\n\r\n for (var i = 0; i < n; i++) {\r\n currentItem = range[i];\r\n count[currentItem] = count[currentItem] ? count[currentItem] + 1 : 1;\r\n if (count[currentItem] > max) {\r\n max = count[currentItem];\r\n maxItems = [];\r\n }\r\n if (count[currentItem] === max) {\r\n maxItems[maxItems.length] = currentItem;\r\n }\r\n }\r\n return maxItems;\r\n };\r\n\r\n exports.MODE.SNGL = function() {\r\n var range = utils.parseNumberArray(utils.flatten(arguments));\r\n if (range instanceof Error) {\r\n return range;\r\n }\r\n return exports.MODE.MULT(range).sort(function(a, b) {\r\n return a - b;\r\n })[0];\r\n };\r\n\r\n exports.PERCENTILE = {};\r\n\r\n exports.PERCENTILE.EXC = function(array, k) {\r\n array = utils.parseNumberArray(utils.flatten(array));\r\n k = utils.parseNumber(k);\r\n if (utils.anyIsError(array, k)) {\r\n return error.value;\r\n }\r\n array = array.sort(function(a, b) {\r\n {\r\n return a - b;\r\n }\r\n });\r\n var n = array.length;\r\n if (k < 1 / (n + 1) || k > 1 - 1 / (n + 1)) {\r\n return error.num;\r\n }\r\n var l = k * (n + 1) - 1;\r\n var fl = Math.floor(l);\r\n return utils.cleanFloat((l === fl) ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl]));\r\n };\r\n\r\n exports.PERCENTILE.INC = function(array, k) {\r\n array = utils.parseNumberArray(utils.flatten(array));\r\n k = utils.parseNumber(k);\r\n if (utils.anyIsError(array, k)) {\r\n return error.value;\r\n }\r\n array = array.sort(function(a, b) {\r\n return a - b;\r\n });\r\n var n = array.length;\r\n var l = k * (n - 1);\r\n var fl = Math.floor(l);\r\n return utils.cleanFloat((l === fl) ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl]));\r\n };\r\n\r\n exports.PERCENTRANK = {};\r\n\r\n exports.PERCENTRANK.EXC = function(array, x, significance) {\r\n significance = (significance === undefined) ? 3 : significance;\r\n array = utils.parseNumberArray(utils.flatten(array));\r\n x = utils.parseNumber(x);\r\n significance = utils.parseNumber(significance);\r\n if (utils.anyIsError(array, x, significance)) {\r\n return error.value;\r\n }\r\n array = array.sort(function(a, b) {\r\n return a - b;\r\n });\r\n var uniques = UNIQUE.apply(null, array);\r\n var n = array.length;\r\n var m = uniques.length;\r\n var power = Math.pow(10, significance);\r\n var result = 0;\r\n var match = false;\r\n var i = 0;\r\n while (!match && i < m) {\r\n if (x === uniques[i]) {\r\n result = (array.indexOf(uniques[i]) + 1) / (n + 1);\r\n match = true;\r\n } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) {\r\n result = (array.indexOf(uniques[i]) + 1 + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n + 1);\r\n match = true;\r\n }\r\n i++;\r\n }\r\n return Math.floor(result * power) / power;\r\n };\r\n\r\n exports.PERCENTRANK.INC = function(array, x, significance) {\r\n significance = (significance === undefined) ? 3 : significance;\r\n array = utils.parseNumberArray(utils.flatten(array));\r\n x = utils.parseNumber(x);\r\n significance = utils.parseNumber(significance);\r\n if (utils.anyIsError(array, x, significance)) {\r\n return error.value;\r\n }\r\n array = array.sort(function(a, b) {\r\n return a - b;\r\n });\r\n var uniques = UNIQUE.apply(null, array);\r\n var n = array.length;\r\n var m = uniques.length;\r\n var power = Math.pow(10, significance);\r\n var result = 0;\r\n var match = false;\r\n var i = 0;\r\n while (!match && i < m) {\r\n if (x === uniques[i]) {\r\n result = array.indexOf(uniques[i]) / (n - 1);\r\n match = true;\r\n } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) {\r\n result = (array.indexOf(uniques[i]) + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n - 1);\r\n match = true;\r\n }\r\n i++;\r\n }\r\n return Math.floor(result * power) / power;\r\n };\r\n\r\n exports.PERMUT = function(number, number_chosen) {\r\n number = utils.parseNumber(number);\r\n number_chosen = utils.parseNumber(number_chosen);\r\n if (utils.anyIsError(number, number_chosen)) {\r\n return error.value;\r\n }\r\n return FACT(number) / FACT(number - number_chosen);\r\n };\r\n\r\n exports.PERMUTATIONA = function(number, number_chosen) {\r\n number = utils.parseNumber(number);\r\n number_chosen = utils.parseNumber(number_chosen);\r\n if (utils.anyIsError(number, number_chosen)) {\r\n return error.value;\r\n }\r\n return Math.pow(number, number_chosen);\r\n };\r\n\r\n exports.PHI = function(x) {\r\n x = utils.parseNumber(x);\r\n if (x instanceof Error) {\r\n return error.value;\r\n }\r\n return Math.exp(-0.5 * x * x) / SQRT2PI;\r\n };\r\n\r\n exports.PROB = function(range, probability, lower, upper) {\r\n if (lower === undefined) {\r\n return 0;\r\n }\r\n upper = (upper === undefined) ? lower : upper;\r\n\r\n range = utils.parseNumberArray(utils.flatten(range));\r\n probability = utils.parseNumberArray(utils.flatten(probability));\r\n lower = utils.parseNumber(lower);\r\n upper = utils.parseNumber(upper);\r\n if (utils.anyIsError(range, probability, lower, upper)) {\r\n return error.value;\r\n }\r\n\r\n if (lower === upper) {\r\n return (range.indexOf(lower) >= 0) ? probability[range.indexOf(lower)] : 0;\r\n }\r\n\r\n var sorted = range.sort(function(a, b) {\r\n return a - b;\r\n });\r\n var n = sorted.length;\r\n var result = 0;\r\n for (var i = 0; i < n; i++) {\r\n if (sorted[i] >= lower && sorted[i] <= upper) {\r\n result += probability[range.indexOf(sorted[i])];\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n exports.QUARTILE = {};\r\n\r\n exports.QUARTILE.EXC = function(range, quart) {\r\n range = utils.parseNumberArray(utils.flatten(range));\r\n quart = utils.parseNumber(quart);\r\n if (utils.anyIsError(range, quart)) {\r\n return error.value;\r\n }\r\n switch (quart) {\r\n case 1:\r\n return exports.PERCENTILE.EXC(range, 0.25);\r\n case 2:\r\n return exports.PERCENTILE.EXC(range, 0.5);\r\n case 3:\r\n return exports.PERCENTILE.EXC(range, 0.75);\r\n default:\r\n return error.num;\r\n }\r\n };\r\n\r\n exports.QUARTILE.INC = function(range, quart) {\r\n range = utils.parseNumberArray(utils.flatten(range));\r\n quart = utils.parseNumber(quart);\r\n if (utils.anyIsError(range, quart)) {\r\n return error.value;\r\n }\r\n switch (quart) {\r\n case 1:\r\n return exports.PERCENTILE.INC(range, 0.25);\r\n case 2:\r\n return exports.PERCENTILE.INC(range, 0.5);\r\n case 3:\r\n return exports.PERCENTILE.INC(range, 0.75);\r\n default:\r\n return error.num;\r\n }\r\n };\r\n\r\n exports.RANK = {};\r\n\r\n exports.RANK.AVG = function(number, range, order) {\r\n number = utils.parseNumber(number);\r\n range = utils.parseNumberArray(utils.flatten(range));\r\n if (utils.anyIsError(number, range)) {\r\n return error.value;\r\n }\r\n range = utils.flatten(range);\r\n order = order || false;\r\n var sort = (order) ? function(a, b) {\r\n return a - b;\r\n } : function(a, b) {\r\n return b - a;\r\n };\r\n range = range.sort(sort);\r\n\r\n var length = range.length;\r\n var count = 0;\r\n for (var i = 0; i < length; i++) {\r\n if (range[i] === number) {\r\n count++;\r\n }\r\n }\r\n\r\n return (count > 1) ? (2 * range.indexOf(number) + count + 1) / 2 : range.indexOf(number) + 1;\r\n };\r\n\r\n exports.RANK.EQ = function(number, range, order) {\r\n number = utils.parseNumber(number);\r\n range = utils.parseNumberArray(utils.flatten(range));\r\n if (utils.anyIsError(number, range)) {\r\n return error.value;\r\n }\r\n order = order || false;\r\n var sort = (order) ? function(a, b) {\r\n return a - b;\r\n } : function(a, b) {\r\n return b - a;\r\n };\r\n range = range.sort(sort);\r\n return range.indexOf(number) + 1;\r\n };\r\n\r\n exports.RSQ = function(data_x, data_y) { // no need to flatten here, PEARSON will take care of that\r\n data_x = utils.parseNumberArray(utils.flatten(data_x));\r\n data_y = utils.parseNumberArray(utils.flatten(data_y));\r\n if (utils.anyIsError(data_x, data_y)) {\r\n return error.value;\r\n }\r\n return Math.pow(exports.PEARSON(data_x, data_y), 2);\r\n };\r\n\r\n exports.SMALL = function(range, k) {\r\n range = utils.parseNumberArray(utils.flatten(range));\r\n k = utils.parseNumber(k);\r\n if (utils.anyIsError(range, k)) {\r\n return range;\r\n }\r\n return range.sort(function(a, b) {\r\n return a - b;\r\n })[k - 1];\r\n };\r\n\r\n exports.STANDARDIZE = function(x, mean, sd) {\r\n x = utils.parseNumber(x);\r\n mean = utils.parseNumber(mean);\r\n sd = utils.parseNumber(sd);\r\n if (utils.anyIsError(x, mean, sd)) {\r\n return error.value;\r\n }\r\n return (x - mean) / sd;\r\n };\r\n\r\n exports.STDEV = {};\r\n\r\n exports.STDEV.P = function() {\r\n var v = exports.VAR.P.apply(this, arguments);\r\n return Math.sqrt(v);\r\n };\r\n\r\n exports.STDEV.S = function() {\r\n var v = exports.VAR.S.apply(this, arguments);\r\n return Math.sqrt(v);\r\n };\r\n\r\n exports.STDEVA = function() {\r\n var v = exports.VARA.apply(this, arguments);\r\n return Math.sqrt(v);\r\n };\r\n\r\n exports.STDEVPA = function() {\r\n var v = exports.VARPA.apply(this, arguments);\r\n return Math.sqrt(v);\r\n };\r\n\r\n exports.VAR = {};\r\n\r\n exports.VAR.P = function() {\r\n var range = utils.numbers(utils.flatten(arguments));\r\n var n = range.length;\r\n var sigma = 0;\r\n var mean = exports.AVERAGE(range);\r\n for (var i = 0; i < n; i++) {\r\n sigma += Math.pow(range[i] - mean, 2);\r\n }\r\n return sigma / n;\r\n };\r\n\r\n exports.VAR.S = function() {\r\n var range = utils.numbers(utils.flatten(arguments));\r\n var n = range.length;\r\n var sigma = 0;\r\n var mean = exports.AVERAGE(range);\r\n for (var i = 0; i < n; i++) {\r\n sigma += Math.pow(range[i] - mean, 2);\r\n }\r\n return sigma / (n - 1);\r\n };\r\n\r\n exports.VARA = function() {\r\n var range = utils.flatten(arguments);\r\n var n = range.length;\r\n var sigma = 0;\r\n var count = 0;\r\n var mean = exports.AVERAGEA(range);\r\n for (var i = 0; i < n; i++) {\r\n var el = range[i];\r\n if (typeof el === 'number') {\r\n sigma += Math.pow(el - mean, 2);\r\n } else if (el === true) {\r\n sigma += Math.pow(1 - mean, 2);\r\n } else {\r\n sigma += Math.pow(0 - mean, 2);\r\n }\r\n\r\n if (el !== null) {\r\n count++;\r\n }\r\n }\r\n return sigma / (count - 1);\r\n };\r\n\r\n exports.VARPA = function() {\r\n var range = utils.flatten(arguments);\r\n var n = range.length;\r\n var sigma = 0;\r\n var count = 0;\r\n var mean = exports.AVERAGEA(range);\r\n for (var i = 0; i < n; i++) {\r\n var el = range[i];\r\n if (typeof el === 'number') {\r\n sigma += Math.pow(el - mean, 2);\r\n } else if (el === true) {\r\n sigma += Math.pow(1 - mean, 2);\r\n } else {\r\n sigma += Math.pow(0 - mean, 2);\r\n }\r\n\r\n if (el !== null) {\r\n count++;\r\n }\r\n }\r\n return sigma / count;\r\n };\r\n\r\n exports.WEIBULL = {};\r\n\r\n exports.WEIBULL.DIST = function(x, alpha, beta, cumulative) {\r\n x = utils.parseNumber(x);\r\n alpha = utils.parseNumber(alpha);\r\n beta = utils.parseNumber(beta);\r\n if (utils.anyIsError(x, alpha, beta)) {\r\n return error.value;\r\n }\r\n return (cumulative) ? 1 - Math.exp(-Math.pow(x / beta, alpha)) : Math.pow(x, alpha - 1) * Math.exp(-Math.pow(x / beta, alpha)) * alpha / Math.pow(beta, alpha);\r\n };\r\n\r\n exports.Z = {};\r\n\r\n exports.Z.TEST = function(range, x, sd) {\r\n range = utils.parseNumberArray(utils.flatten(range));\r\n x = utils.parseNumber(x);\r\n if (utils.anyIsError(range, x)) {\r\n return error.value;\r\n }\r\n\r\n sd = sd || exports.STDEV.S(range);\r\n var n = range.length;\r\n return 1 - exports.NORM.S.DIST((exports.AVERAGE(range) - x) / (sd / Math.sqrt(n)), true);\r\n };\r\n\r\n return exports;\r\n})();\r\n\r\nfor (var i = 0; i < Object.keys(jexcel.methods).length; i++) {\r\n var methods = jexcel.methods[Object.keys(jexcel.methods)[i]];\r\n for (var j = 0; j < Object.keys(methods).length; j++) {\r\n if (typeof(methods[Object.keys(methods)[j]]) == 'function') {\r\n window[Object.keys(methods)[j]] = methods[Object.keys(methods)[j]];\r\n } else {\r\n window[Object.keys(methods)[j]] = function() {\r\n return Object.keys(methods)[j] + 'Not implemented';\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n return jexcel;\r\n\r\n})));"],"names":["factory","jSuites","options","obj","app","document","querySelector","el","body","modules","querySelectorAll","i","length","m","getAttribute","window","guid","Math","floor","random","toString","w","d","e","documentElement","g","getElementsByTagName","innerWidth","clientWidth","innerHeight","clientHeight","changedTouches","x","pageX","y","pageY","clientX","scrollLeft","clientY","scrollTop","click","evt","MouseEvent","bubbles","cancelable","view","dispatchEvent","element","className","foundElement","path","classList","contains","parentNode","targetElement","tagName","formObject","ret","elements","name","value","url","__callback","http","XMLHttpRequest","open","send","status","console","error","files","data","file","src","remove","substr","content","indexOf","extension","lastIndexOf","size","date","cover","type","method","keys","Object","o","j","push","encodeURIComponent","prop","z","join","httpRequest","setRequestHeader","dataType","cache","withCredentials","beforeSend","onload","result","JSON","parse","responseText","success","err","ajax","requests","index","splice","complete","slideLeft","direction","done","add","setTimeout","slideRight","slideTop","slideBottom","fadeIn","fadeOut","keyDownControls","which","nodes","slider","close","dialog","onconfirm","mask","apply","actionUpControl","getLinkElement","target","link","history","back","panel","pages","addEventListener","getElement","scrollTo","left","behavior","calendar","current","prev","get","style","display","next","tooltip","hide","init","onpopstate","state","route","ignoreHistory","defaults","validRange","startingDay","format","readonly","today","time","resetButton","placeholder","months","weekdays","weekdays_short","onclose","onchange","fullscreen","mode","position","opened","property","hasOwnProperty","toUpperCase","split","parseInt","h","Date","getFullYear","getMonth","getDate","getHours","getMinutes","two","calendarReset","createElement","innerHTML","calendarConfirm","calendarControls","appendChild","calendarContainer","calendarContent","calendarTableContainer","calendarHeaderPrev","setAttribute","calendarLabelYear","calendarLabelMonth","calendarHeaderTitle","calendarHeaderNext","calendarHeaderRow","calendarHeader","calendarBody","calendarFooter","calendarTable","calendarSelectHour","this","calendarSelectMin","calendarControlsFooter","calendarControlsTime","maxWidth","calendarControlsUpdateButton","calendarControlsUpdate","flexGrow","calendarBackdrop","updateActions","currentDay","removeAttribute","getDays","getWindowWidth","rect","getBoundingClientRect","rectContent","bottom","height","top","ignoreEvents","update","getValue","setValue","getYears","val","newValue","oldValue","setLabel","innerText","reset","year","month","day","getDay","hour","min","isCurrentMonthAndYear","numberOfDays","firstDay","row","cell","emptyRow","fontWeight","now","test1","test2","getMonths","html","getDateString","fromFormatted","extractDateFromString","mouseUpControls","action","stopPropagation","preventDefault","test","insertBefore","nextSibling","toLowerCase","prettify","texts","justNow","xMinutesAgo","xHoursAgo","xDaysAgo","xWeeksAgo","xMonthsAgo","xYearsAgo","d1","d2","total","String","prototype","replace","text","round","prettifyAll","dateOnly","s","getSeconds","v1","v2","search","weekday","Array","substring","isOpen","color","closeOnChange","palette","colors","col","shade","container","backdrop","closeButton","onclick","table","tr","td","backgroundColor","values","focus","selected","contextmenu","items","create","width","itemContainer","itemText","title","disabled","shortcut","itemShortCut","foundId","id","dialogHeader","dialogTitle","dialogMessage","dialogFooter","dialogContainer","dialogConfirm","dialogConfirmButton","confirmLabel","dialogCancel","dialogCancelButton","cancelLabel","oncancel","message","opacity","confirm","alert","dropdown","extractFromDom","multiple","autocomplete","onopen","onblur","groups","minWidth","containerHeader","header","keyTimer","clearTimeout","find","setData","getUrl","setUrl","createItem","item","textLowerCase","image","node","removeChild","group","groupNames","groupName","groupArrow","groupContent","getText","asArray","isArray","updateLabel","selectIndex","oldLabel","currentIndex","indexToRemove","resetSelected","newLabel","selectItem","str","cursor","updateCursor","rectContainer","resetCursor","blur","offsetTop","clientTop","firstVisible","newIndex","first","last","hasEvents","mouseup","onkeydown","children","shiftKey","select","undefined","offsetWidth","a","b","c","div","editor","snippet","toolbar","maxHeight","remoteParser","youtubeKey","userSearch","parseURL","dropZone","dropAsAttachment","acceptImages","acceptFiles","maxFileSize","border","padding","onfocus","onenter","onkeyup","editorTimer","editorAction","overflowY","extractImageFromHtml","img","addImage","insertNodeAtCaret","newNode","sel","range","getSelection","rangeCount","getRangeAt","deleteContents","insertNode","setStartAfter","setEndAfter","removeAllRanges","addRange","appendElement","description","host","verifyEditor","thumbsContainer","detectUrl","getDomain","location","hostname","importImage","youtubeParser","getYoutube","getWebsite","parseContent","p","thumbnails","medium","encodeURI","trim","log","getData","json","tagged","users","userId","key","stringify","addPdf","canvas","Image","getContext","drawImage","toBlob","blob","newImage","URL","createObjectURL","toDataURL","addFile","reader","FileReader","lastModified","readAsDataURL","destroy","removeEventListener","editorMouseUp","editorMouseDown","editorMouseMove","editorKeyUp","editorKeyDown","editorDragStart","editorDragEnter","editorDragOver","editorDrop","editorPaste","editorBlur","editorFocus","removeRange","newHeight","clipboardData","originalEvent","nodeName","execCommand","caretRangeFromPoint","rangeParent","createRange","setStart","rangeOffset","anchorNode","dataTransfer","getDefaultToolbar","icon","userSelect","itemIcon","setCursor","startContainer","endContainer","setEnd","links","match","queryCommandState","singleFile","extensionNotAllowed","imageTooSmall","lastmodified","small","addImages","addFromFile","imageFile","v","srcElement","extentionNotAllowed","addFromUrl","attachmentInput","loading","show","login","href","prepareRequest","accessToken","deviceToken","facebookUrl","facebookAuthentication","onsuccess","onerror","logo","newProfile","newProfileUrl","newProfileLogin","newPasswordValidation","messageElement","divLogo","labelCode","inputCode","divCode","inputHash","divHash","inputRecovery","divRecovery","labelLogin","inputLogin","divLogin","labelName","inputName","divName","labelUsername","inputUsername","divUsername","labelPassword","inputPassword","divPassword","keyCode","execute","labelRepeatPassword","inputRepeatPassword","divRepeatPassword","labelRemember","inputRemember","divRememberButton","actionButton","divActionButton","cancelButton","requestAccess","divCancelButton","labelCaptcha","inputCaptcha","imageCaptcha","divCaptcha","facebookButton","divFacebookButton","requestLoginViaFacebook","inputRequest","divRequestButton","requestNewPassword","inputNewProfile","divNewProfileButton","showMessage","call","captcha","codeConfirmation","changeMyPassword","hash","localStorage","getItem","FB","getLoginStatus","response","f","authResponse","scope","jDestroy","fbLogin","jStart","jError","jExit","event","u","pattern","RegExp","setItem","getFormElements","password","sha512","token","queryString","int64","msint_32","lsint_32","highOrder","lowOrder","T1","T2","H","K","W","safe_add_2","lsw","msw","safe_add_4","safe_add_5","maj","ch","rotr","n","sigma0","rotr28","rotr34","rotr39","sigma1","rotr14","rotr18","rotr41","gamma0","rotr1","rotr8","shr7","shr","rotr19","rotr61","shr6","strlen","unescape","utf8_encode","bin","len","charCodeAt","str2binb","binarray","srcByte","hex_tab","charAt","binb2hex","pieces","run","decimal","Number","number","valueDecimal","currentValue","prepare","process","selectionStart","selectionEnd","fromKeyCode","input","separator","t","reverse","_to_ascii","shiftUps","fromCharCode","mobile","createPage","callback","page","refresh","onpush","script","eval","setTitle","closed","showPage","onleave","pushState","mixed","routePath","getContainer","toolbarContent","setBadge","firstChild","toolbarItem","toolbarIcon","toolbarBadge","toolbarBadgeContent","badge","toolbarTitle","actionsheet","actionContent","actionGroup","actionItem","actionInput","modal","temp","resetPosition","mouseDownControls","mouseMoveControls","selection","empty","notification","timeout","autoHide","closeable","notificationContainer","notificationHeader","notificationImage","notificationIcon","notificationName","notificationClose","notificationDate","notificationContent","notificationTitle","notificationMessage","rating","previousSibling","currentImage","addFiles","getFiles","allowAttachment","attachmentIcon","longTouchTimer","mouseDown","mouseUp","offsetX","sorting","offsetY","borderTop","borderBottom","tabs","allowCreate","oncreate","animation","autoName","prefixName","hideHeaders","setBorder","headers","prompt","lastChild","headersItem","contentItem","tags","limit","limitMessage","validation","onbeforechange","searchContainer","searchTerms","searchIndex","searchTimer","getSelectionStart","caret","filter","extractTags","isValid","terms","nodeValue","tagsMouseUp","tagsKeyDown","tagsKeyUp","tagsPaste","tagsFocus","tagsBlur","collapse","nodeType","word","anchorOffset","tracker","ignore","currentHash","submitButton","onbeforesave","onsave","load","save","validate","getElements","validateElement","emailChecker","addError","delError","getError","setHash","getHash","isChanged","resetTracker","setIgnore","ignoreFlag","confirmationMessage","returnValue","module","exports","jexcel","Element","HTMLDocument","copyCompatibility","rows","columns","colHeaders","colWidths","colAlignments","nestedHeaders","defaultColWidth","defaultColAlign","minSpareRows","minSpareCols","minDimensions","allowExport","includeHeadersOnDownload","columnSorting","columnDrag","columnResize","rowResize","rowDrag","editable","allowInsertRow","allowManualInsertRow","allowInsertColumn","allowManualInsertColumn","allowDeleteRow","allowDeletingAllRows","allowDeleteColumn","allowRenameColumn","allowComments","wordWrap","imageOptions","csv","csvFileName","csvHeaders","csvDelimiter","selectionCopy","mergeCells","pagination","paginationOptions","lazyLoading","loadingSpin","tableOverflow","tableHeight","tableWidth","meta","parseFormulas","autoIncrement","autoCasting","onundo","onredo","onafterchanges","onbeforeinsertrow","oninsertrow","onbeforeinsertcolumn","oninsertcolumn","onbeforedeleterow","ondeleterow","onbeforedeletecolumn","ondeletecolumn","onmoverow","onmovecolumn","onresizerow","onresizecolumn","onsort","onselection","onpaste","onbeforepaste","onmerge","onchangeheader","oneditionstart","oneditionend","onchangestyle","onchangemeta","onchangepage","updateTable","detachForUpdates","noRecordsFound","showingPage","entries","columnName","insertANewColumnBefore","insertANewColumnAfter","deleteSelectedColumns","renameThisColumn","orderAscending","orderDescending","insertANewRowBefore","insertANewRowAfter","deleteSelectedRows","editComments","addComments","comments","clearComments","copy","paste","saveAs","about","areYouSureToDeleteTheSelectedRows","areYouSureToDeleteTheSelectedColumns","thisActionWillDestroyAnyExistingMergedCellsAreYouSure","thisActionWillClearYourSearchResultsAreYouSure","thereIsAConflictWithAnotherMergedCell","invalidMergeProperties","cellAlreadyMerged","noCellsSelected","textKey","corner","contextMenu","textarea","ads","thead","tbody","results","searchInput","pageNumber","headerContainer","colgroupContainer","records","formula","colgroup","highlighted","selectedCell","selectedContainer","historyIndex","edition","hashString","resizing","dragging","activate","prepareTable","source","allowEmpty","align","createTable","searchText","createTextNode","resetSelection","tempCol","paginationUpdateContainer","paginationDropdown","createNestedHeader","createCellHeader","tabIndex","sessionStorage","span","paginationInfo","paginationPages","createToolbar","setStyle","size_i","size_j","min_i","min_j","max_i","max_j","startNumber","finalNumber","createRow","updatePagination","num","setMerge","dataOnly","dataset","px","py","getJson","getRowData","rowNumber","setRowData","getColumnNameFromId","getColumnData","columnNumber","setColumnData","colNumber","createCell","checked","readOnly","formatted","getDropDownValue","render","executeFormula","colAlign","textAlign","whiteSpace","overflow","colWidth","getColumnName","nestedInformation","headerIndex","colspan","numberOfColumns","column","k","toolbarDropdownOption","cellName","rowspan","ignoreHistoryAndEvents","x1","y1","x2","y2","getIdFromColumnName","updateCell","updateSelection","setHistory","getMerge","removeMerge","keepOptions","info","destroyMerged","isColMerged","cols","isRowMerged","openEditor","createEditor","minHeight","closeEditor","getCell","getCellFromCoords","getLabel","getLabelFromCoords","processedValue","getValueFromCoords","force","columnId","updateFormulaChain","setValueFromCoords","setCheckRadioValue","record","copyData","breakControl","posx","posy","tokens","affectedTokens","updateFormula","setDate","doubleDigitFormat","refreshSelection","updateSelectionFromCoords","conditionalSelectionUpdate","previousStatus","ux","uy","el1","el2","origin","previousState","borderLeft","borderRight","updateCornerPosition","removeCopySelection","updateCopySelection","x3","y3","contentRect","lastRect","w2","h2","updateScroll","w1","h1","referenceRect","getWidth","$","setWidth","oldWidth","setHeight","oldHeight","getHeight","getHeader","setHeader","getHeaders","getMeta","setMeta","updateMeta","affectedCells","newMeta","getStyle","resetStyle","applyStyle","cellId","oneApplication","getComments","withAuthor","setComments","author","getConfig","orderBy","order","slice","sort","valueA","valueB","updateOrderArrow","updateOrder","updateTableReferences","loadPage","moveRow","ignoreDom","resetSearch","insertRow","numOfRows","lastRow","rowIndex","currentRecords","currentData","currentRows","rowRecords","rowData","rowNode","deleteRow","getSelectedRows","mergeExists","moveColumn","insertColumn","properties","numOfColumns","lastColumn","columnIndex","injectArray","currentHeaders","currentColgroup","historyHeaders","historyColgroup","historyRecords","historyData","currentRecord","deleteColumn","getSelectedColumns","asIds","getHighlighted","mergeCellUpdates","updatePosition","columnIdFrom","columnIdTo","totalX","totalY","updateFormulas","numBlankRows","numBlankCols","showColumn","hideColumn","showIndex","hideIndex","chainLoopProtection","referencesToUpdate","newFormula","letter","testLetter","testNumber","exec","expression","formulaResults","formulaLoopProtection","parentId","tokensUpdate","e1","e2","evalstring","parseNumber","res","up","ctrlKey","visible","loadValidation","loadUp","whichPage","down","loadDown","right","selectAll","quantityPerPage","ceil","startRow","finalRow","currentPage","selectedPage","totalPages","query","addToResult","oldPage","quantyOfPages","paginationItem","args","arguments","download","includeHeaders","Blob","navigator","msSaveOrOpenBlob","pom","changes","delimiter","returnData","colLabel","rowLabel","tmp","label","strLabel","parseCSV","newStyle","oldStyle","styleIndex","colIndex","historyProcessRow","historyRecord","historyProcessColumn","undo","redo","combo","arr","quote","cc","nc","build","newData","shift","comment","clipboard","readText","then","scrollControls","timeControlLoading","scrollHeight","timeControl","destroyEventHandlers","mouseOverControls","doubleClickControls","pasteControls","contextMenuControls","touchStartControls","touchEndControls","altKey","editorTextarea","editorValue","editorIndexOf","selectedRow","selectedHeader","metaKey","rowId","validLetter","cutControls","copyControls","isMouseAction","buttons","mouseButton","button","jexcelTable","selectedCorner","mousePosition","destination","c1","c2","getCellCoords","newWidth","tempWidth","tempHeight","enabled","tmpElement","createTabs","spreadsheet","sheetName","fromSpreadsheet","oReq","convert","workbook","spreadsheets","SheetNames","forEach","Sheets","wpx","hpx","r","max_x","max_y","fgColor","rgb","numColumns","Uint8Array","responseType","arraybuffer","wb","XLSX","read","cellFormula","cellStyles","onreadystatechange","readyState","ff","convertResponseBodyToText","responseBody","idx","concat","code","pow","jexcelSection","jexcelElement","fn","spreadsheetContainer","jQuery","nil","Error","div0","ref","na","utils","array","reduce","aIsArray","bIsArray","argsToArray","isFlat","flattenShallow","arrayEach","flatten","power","bool","isNaN","string","parseFloat","parsed","matrix","pnarr","parseNumberArray","d1900","UTC","parseDate","getTime","parseDateArray","anyIsError","arrayValuesToNumbers","rest","initial","iteratee","transpose","map","methods","datetime","WEEK_TYPES","serial","DATE","DATEVALUE","date_text","DAY","serial_number","DAYS","end_date","start_date","DAYS360","EDATE","setMonth","EOMONTH","HOUR","INTERVAL","second","sec","ISOWEEKNUM","setHours","yearStart","MINUTE","MONTH","NETWORKDAYS","holidays","INTL","weekend","NOW","SECOND","TIME","minute","TIMEVALUE","time_text","TODAY","WEEKDAY","return_type","WEEKNUM","WORKDAY","days","YEAR","YEARFRAC","basis","database","compact","findResultIndex","criterias","matches","maxCriteriaLength","l","currentCriteriaResult","hasMatchingCriteria","criteria","criteriaField","FINDFIELD","DAVERAGE","field","resultIndexes","targetFields","sum","DCOUNT","DCOUNTA","DGET","DMAX","maxValue","DMIN","minValue","DPRODUCT","targetValues","DSTDEV","DSTDEVP","DSUM","DVAR","DVARP","MATCH","lookupValue","lookupArray","matchType","indexValue","engineering","isValidBinaryNumber","BESSELI","BESSELJ","BESSELK","BESSELY","BIN2DEC","stringified","BIN2HEX","places","REPT","BIN2OCT","BITAND","number1","number2","BITLSHIFT","abs","BITOR","BITRSHIFT","BITXOR","COMPLEX","real","imaginary","suffix","sign","CONVERT","from_unit","to_unit","alt","units","binary_prefixes","Yi","Zi","Ei","Pi","Ti","Gi","Mi","ki","unit_prefixes","Y","Z","E","P","T","G","M","from","to","base_from_unit","base_to_unit","from_multiplier","to_multiplier","from_binary_prefix","from_unit_prefix","to_binary_prefix","to_unit_prefix","DEC2BIN","DEC2HEX","DEC2OCT","DELTA","ERF","lower_bound","upper_bound","PRECISE","ERFC","GESTEP","step","HEX2BIN","negative","HEX2DEC","HEX2OCT","IMABS","inumber","IMREAL","IMAGINARY","sqrt","plus","minus","unit","IMARGUMENT","PI","atan","IMCONJUGATE","IMCOS","cos","exp","sin","IMCOSH","IMCOT","IMDIV","IMSIN","inumber1","inumber2","unit1","unit2","den","IMEXP","IMLN","IMLOG10","IMLOG2","IMPOWER","IMPRODUCT","IMSEC","IMSECH","IMSINH","IMSQRT","IMCSC","IMCSCH","IMSUB","IMSUM","IMTAN","OCT2BIN","OCT2DEC","OCT2HEX","financial","validDate","ensureDate","ACCRINT","issue","settlement","rate","par","frequency","ACCRINTM","AMORDEGRC","AMORLINC","COUPDAYBS","COUPDAYS","COUPDAYSNC","COUPNCD","COUPNUM","COUPPCD","CUMIPMT","periods","start","end","payment","PMT","interest","FV","CUMPRINC","principal","DB","cost","salvage","life","period","toFixed","ceiling","DDB","factor","DISC","DOLLARDE","dollar","fraction","LN10","LN2","DOLLARFR","DURATION","EFFECT","term","FVSCHEDULE","schedule","future","INTRATE","IPMT","present","IRR","guess","irrResult","dates","irrResultDeriv","frac","positive","newRate","epsRate","resultValue","resultRate","contLoop","ISPMT","MDURATION","MIRR","finance_rate","reinvest_rate","payments","incomes","NPV","NOMINAL","NPER","ODDFPRICE","ODDFYIELD","ODDLPRICE","ODDLYIELD","PDURATION","PPMT","PRICE","PRICEDISC","PRICEMAT","PV","RATE","iter","t1","t2","NaN","RECEIVED","RRI","SLN","SYD","TBILLEQ","maturity","discount","TBILLPRICE","TBILLYIELD","price","VDB","XIRR","XNPV","YIELD","YIELDDISC","YIELDMAT","information","ERROR","TYPE","error_val","INFO","ISBLANK","ISBINARY","ISERR","isFinite","ISERROR","ISEVEN","ISFORMULA","ISLOGICAL","ISNA","ISNONTEXT","ISNUMBER","ISODD","ISREF","ISTEXT","N","NA","SHEET","SHEETS","logical","then_value","otherwise_value","valueIfError","value_if_na","targetValue","argc","switchCount","switchSatisfied","defaultClause","math","acos","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I","asin","number_x","number_y","atan2","radix","min_length","max","significance","CEILING","MATH","COMBIN","number_chosen","FACT","COMBINA","COS","COSH","COT","tan","COTH","CSC","CSCH","DECIMAL","DEGREES","EVEN","EXP","MEMOIZED_FACT","FACTDOUBLE","FLOOR","GCD","INT","LCM","pop","LN","LOG","base","LOG10","MDETERM","MINVERSE","MMULT","MOD","dividend","divisor","modulus","MROUND","MULTINOMIAL","MUNIT","ODD","POWER","PRODUCT","QUOTIENT","numerator","denominator","RADIANS","RAND","RANDBETWEEN","ROMAN","ROUND","digits","ROUNDDOWN","ROUNDUP","SEC","SECH","SERIESSUM","coefficients","SIGN","SIN","SINH","SQRT","SQRTPI","SUBTOTAL","ADD","num1","num2","MINUS","DIVIDE","MULTIPLY","factor1","factor2","GTE","LT","LTE","EQ","value1","value2","NE","POW","exponent","SUM","argsKeys","elt","SUMIF","SUMIFS","n_range_elements","n_criterias","condition","SUMPRODUCT","SUMSQ","numbers","SUMX2MY2","array_x","array_y","SUMX2PY2","SUMXMY2","TAN","TANH","TRUNC","misc","hasElement","FLATTEN","ARGS2ARRAY","REFERENCE","context","reference","opening","JOIN","NUMBERS","NUMERAL","trueFound","falseFound","text1","text2","find_text","within_text","line","begin","txt","regular_expression","full","replacement","new_text","foundAt","old_text","occurrence","UNICHAR","CHAR","UNICODE","CODE","UPPER","VALUE","stats","SQRT2PI","AVEDEV","AVERAGE","count","AVERAGEA","AVERAGEIF","average_range","average_count","AVERAGEIFS","COUNT","COUNTA","COUNTBLANK","COUNTIN","blanks","COUNTIF","COUNTIFS","COUNTUNIQUE","UNIQUE","FISHER","FISHERINV","e2y","FREQUENCY","bins","LARGE","MAX","MAXA","MIN","MINA","MODE","MULT","currentItem","maxItems","SNGL","PERCENTILE","EXC","fl","cleanFloat","INC","PERCENTRANK","uniques","PERMUT","PERMUTATIONA","PHI","PROB","probability","lower","upper","sorted","QUARTILE","quart","RANK","AVG","RSQ","data_x","data_y","PEARSON","SMALL","STANDARDIZE","mean","sd","STDEV","VAR","S","STDEVA","VARA","STDEVPA","VARPA","sigma","WEIBULL","DIST","alpha","beta","cumulative","TEST","NORM"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/131.ee437eeefadd750d.js.map.gz b/_static/131.ee437eeefadd750d.js.map.gz new file mode 100644 index 0000000..36006be Binary files /dev/null and b/_static/131.ee437eeefadd750d.js.map.gz differ diff --git a/_static/168.fe63e6dec2d06468.js b/_static/168.fe63e6dec2d06468.js new file mode 100644 index 0000000..5d9bfd6 --- /dev/null +++ b/_static/168.fe63e6dec2d06468.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[168],{11168:(e,t,i)=>{i.r(t),i.d(t,{default:()=>o});var s=i(78673);class o extends s.A{constructor(e){super(e);var t=e.orig;this.origElem=t,this.divid=t.id,this.children=this.origElem.childNodes,this.optionList=[],this.optsArray=[],this.comment=!1,this.origElem.hasAttribute("data-comment")&&(this.comment=!0),this.resultsViewer=this.origElem.getAttribute("data-results"),this.getQuestionText(),this.getOptionText(),this.renderPoll(),this.checkPollStorage(),this.caption="Poll",this.addCaption("runestone")}getQuestionText(){for(var e,t=0;t${this.question}`,this.pollForm.id=this.divid+"_form",this.pollForm.method="get",this.pollForm.action="",this.pollForm.onsubmit=function(){return!1},this.pollFieldset=document.createElement("fieldset"),this.pollForm.appendChild(this.pollFieldset);for(var t=0;t${eBookConfig.useRunestoneServices?"Only Your last reponse is recorded":"Thanks, your answers are not recorded"}`;else{const e=document.createElement("span");e.id=`${this.divid}_sent`,e.innerHTML=`${eBookConfig.useRunestoneServices?"Thanks, your response has been recorded":"Thanks, your answers are not recorded"}`,this.pollForm.appendChild(e)}if("all"===this.resultsViewer){var o={};o.div_id=this.divid,o.course=eBookConfig.course;try{const e=new URLSearchParams(o),t=await fetch(`${eBookConfig.new_server_prefix}/assessment/getpollresults?${e.toString()}`),i=await t.json();this.showPollResults(i)}catch(e){this.indicate_component_ready()}}}}showPollResults(e){var t=(e=e.detail).total,i=e.opt_counts,s=(e.div_id,e.my_vote);if(s>-1&&(this.optsArray[s].checked=!0),"all"===this.resultsViewer&&"true"===localStorage.getItem(this.divid)||eBookConfig.isInstructor){this.resultsDiv.innerHTML=`Results: ${t} responses

`;var o=document.createElement("div");o.classList.add("results-container");for(var n=0;n0?l=(r=i[n])/t*100:(r=0,l=0);var d=r+" ("+Math.round(10*l)/10+"%)";let e=document.createElement("div");e.className="progresscounter",e.innerText=`${n+1}. `;let s=document.createElement("div"),a="";a=l>10?`
`+d+"
":`
`+d+"
",s.innerHTML=a,o.appendChild(e),o.appendChild(s)}this.resultsDiv.appendChild(o)}this.indicate_component_ready()}disableOptions(){}async checkPollStorage(){if(localStorage.length>0){var e={};e.div_id=this.divid,e.course=eBookConfig.course;try{const t=new URLSearchParams(e),i=await fetch(`${eBookConfig.new_server_prefix}/assessment/getpollresults?${t.toString()}`),s=await i.json();this.showPollResults(s)}catch(e){this.indicate_component_ready()}}else this.indicate_component_ready()}}document.addEventListener("runestone:login-complete",(function(){document.querySelectorAll("[data-component=poll]").forEach((function(e,t){try{window.componentMap[e.id]=new o({orig:e})}catch(t){console.log(`Error rendering Poll Problem ${e.id}\n Details: ${t}`),console.log(t.stack)}}))})),void 0===window.component_factory&&(window.component_factory={}),window.component_factory.poll=function(e){return new o(e)}}}]); +//# sourceMappingURL=168.fe63e6dec2d06468.js.map \ No newline at end of file diff --git a/_static/168.fe63e6dec2d06468.js.gz b/_static/168.fe63e6dec2d06468.js.gz new file mode 100644 index 0000000..edcf3fe Binary files /dev/null and b/_static/168.fe63e6dec2d06468.js.gz differ diff --git a/_static/168.fe63e6dec2d06468.js.map b/_static/168.fe63e6dec2d06468.js.map new file mode 100644 index 0000000..838ae43 --- /dev/null +++ b/_static/168.fe63e6dec2d06468.js.map @@ -0,0 +1 @@ +{"version":3,"file":"168.fe63e6dec2d06468.js","mappings":"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","sources":["webpack://WebComponents/./runestone/poll/js/poll.js"],"sourcesContent":["/*\n__author__ = Kirby Olson\n__date__ = 6/12/2015 */\n\"use strict\";\n\nimport RunestoneBase from \"../../common/js/runestonebase.js\";\nimport \"../css/poll.css\";\n\n\nexport default class Poll extends RunestoneBase {\n constructor(opts) {\n super(opts);\n var orig = opts.orig; //entire

element\n this.origElem = orig;\n this.divid = orig.id;\n this.children = this.origElem.childNodes;\n this.optionList = [];\n this.optsArray = [];\n this.comment = false;\n if (this.origElem.hasAttribute(\"data-comment\")) {\n this.comment = true;\n }\n this.resultsViewer = this.origElem.getAttribute(\"data-results\");\n this.getQuestionText();\n this.getOptionText(); //populates optionList\n this.renderPoll(); //generates HTML\n // Checks localStorage to see if this poll has already been completed by this user.\n this.checkPollStorage();\n this.caption = \"Poll\";\n this.addCaption(\"runestone\");\n }\n getQuestionText() {\n //finds the text inside the parent tag, but before the first

  • tag and sets it as the question\n var _this = this;\n var firstAnswer;\n for (var i = 0; i < this.children.length; i++) {\n if (this.children[i].tagName == \"LI\") {\n firstAnswer = _this.children[i];\n break;\n }\n }\n var delimiter = firstAnswer.outerHTML;\n var fulltext = this.origElem.innerHTML;\n var temp = fulltext.split(delimiter);\n this.question = temp[0];\n }\n getOptionText() {\n //Gets the text from each
  • tag and places it in this.optionList\n var _this = this;\n for (var i = 0; i < this.children.length; i++) {\n if (_this.children[i].tagName == \"LI\") {\n _this.optionList.push(_this.children[i].innerHTML);\n }\n }\n }\n renderPoll() {\n //generates the HTML that the user interacts with\n var _this = this;\n this.containerDiv = document.createElement(\"div\");\n this.pollForm = document.createElement(\"form\");\n this.resultsDiv = document.createElement(\"div\");\n this.resultsDiv.classList.add(\"poll-results\");\n this.containerDiv.id = this.divid;\n const origClass = this.origElem.getAttribute(\"class\");\n if (origClass) {\n this.containerDiv.classList.add(...origClass.split(\" \").filter(Boolean));\n }\n this.pollForm.innerHTML = `
    ${this.question}
    `;\n this.pollForm.id = this.divid + \"_form\";\n this.pollForm.method = \"get\";\n this.pollForm.action = \"\";\n this.pollForm.onsubmit = function () { return false; };\n this.pollFieldset = document.createElement(\"fieldset\");\n this.pollForm.appendChild(this.pollFieldset);\n for (var i = 0; i < this.optionList.length; i++) {\n let label = document.createElement(\"label\");\n label.classList.add(\"poll-option\");\n label.innerHTML += this.optionList[i]; // text content\n var radio = document.createElement(\"input\");\n var tmpid = _this.divid + \"_opt_\" + i;\n radio.id = tmpid;\n radio.name = this.divid + \"_group1\";\n radio.type = \"radio\";\n radio.value = i;\n radio.classList.add(\"poll-choice-input\");\n radio.addEventListener(\"click\", this.submitPoll.bind(this));\n label.prepend(radio);\n this.pollFieldset.appendChild(label);\n this.optsArray.push(radio);\n }\n\n if (this.comment) {\n this.renderTextField();\n }\n this.resultsDiv.id = this.divid + \"_results\";\n this.containerDiv.appendChild(this.pollForm);\n this.containerDiv.appendChild(this.resultsDiv);\n this.origElem.replaceWith(this.containerDiv);\n this.queueMathJax(this.containerDiv);\n }\n renderTextField() {\n this.textfield = document.createElement(\"input\");\n this.textfield.type = \"text\";\n this.textfield.classList.add(\"form-control\");\n this.textfield.style.width = \"300px\";\n this.textfield.name = this.divid + \"_comment\";\n this.textfield.placeholder = \"Any comments?\";\n this.pollForm.appendChild(this.textfield);\n this.pollForm.appendChild(document.createElement(\"br\"));\n }\n async submitPoll() {\n //checks the poll, sets localstorage and submits to the server\n var poll_val = null;\n for (var i = 0; i < this.optsArray.length; i++) {\n if (this.optsArray[i].checked) {\n poll_val = this.optsArray[i].value;\n break;\n }\n }\n if (poll_val === null) return;\n var comment_val = \"\";\n if (this.comment) {\n comment_val = this.textfield.value;\n }\n var act = \"\";\n if (comment_val !== \"\") {\n act = poll_val + \":\" + comment_val;\n } else {\n act = poll_val;\n }\n var eventInfo = { event: \"poll\", act: act, div_id: this.divid };\n // log the response to the database\n this.logBookEvent(eventInfo); // in bookfuncs.js\n // log the fact that the user has answered the poll to local storage\n let onlineResponse = \"Thanks, your response has been recorded\";\n let offlineResponse = \"Thanks, your answers are not recorded\";\n let onlineUpdate = \"Only Your last reponse is recorded\";\n let offlineUpdate = \"Thanks, your answers are not recorded\";\n localStorage.setItem(this.divid, \"true\");\n if (!document.getElementById(`${this.divid}_sent`)) {\n const span = document.createElement(\"span\");\n span.id = `${this.divid}_sent`;\n span.innerHTML = `${eBookConfig.useRunestoneServices ? onlineResponse : offlineResponse}`;\n this.pollForm.appendChild(span);\n } else {\n const sentEl = document.getElementById(`${this.divid}_sent`);\n sentEl.innerHTML = `${eBookConfig.useRunestoneServices ? onlineUpdate : offlineUpdate}`;\n }\n // show the results of the poll\n if (this.resultsViewer === \"all\") {\n var data = {};\n data.div_id = this.divid;\n data.course = eBookConfig.course;\n try {\n const params = new URLSearchParams(data);\n const resp = await fetch(`${eBookConfig.new_server_prefix}/assessment/getpollresults?${params.toString()}`);\n const json = await resp.json();\n this.showPollResults(json);\n } catch (e) {\n this.indicate_component_ready();\n }\n }\n }\n showPollResults(results) {\n //displays the results returned by the server\n results = results.detail;\n var total = results[\"total\"];\n var optCounts = results[\"opt_counts\"];\n var div_id = results[\"div_id\"];\n var my_vote = results[\"my_vote\"];\n // restore current users vote\n if (my_vote > -1) {\n this.optsArray[my_vote].checked = true;\n }\n // show results summary if appropriate\n if (\n (this.resultsViewer === \"all\" &&\n localStorage.getItem(this.divid) === \"true\") ||\n eBookConfig.isInstructor\n ) {\n this.resultsDiv.innerHTML = `Results: ${total} responses

    `;\n var list = document.createElement(\"div\");\n list.classList.add(\"results-container\");\n for (var i = 0; i < this.optionList.length; i++) {\n var count;\n var percent;\n if (optCounts[i] > 0) {\n count = optCounts[i];\n percent = (count / total) * 100;\n } else {\n count = 0;\n percent = 0;\n }\n var text = count + \" (\" + Math.round(10 * percent) / 10 + \"%)\"; // round percent to 10ths\n let progressCounterEl = document.createElement(\"div\");\n progressCounterEl.className = \"progresscounter\";\n progressCounterEl.innerText = `${i + 1}. `;\n let progressBarEl = document.createElement(\"div\");\n let progressBarHTML = \"\";\n if (percent > 10) {\n progressBarHTML =\n \"
    \" +\n \"
    ` +\n \"\" +\n text +\n \"
    \";\n } else {\n progressBarHTML =\n \"
    \" +\n \"
    ` +\n \"\" +\n text +\n \"
    \";\n }\n progressBarEl.innerHTML = progressBarHTML;\n list.appendChild(progressCounterEl);\n list.appendChild(progressBarEl);\n }\n this.resultsDiv.appendChild(list);\n }\n this.indicate_component_ready();\n }\n disableOptions() { }\n async checkPollStorage() {\n //checks the localstorage to see if the poll has been completed already\n var _this = this;\n var len = localStorage.length;\n if (len > 0) {\n //If the poll has already been completed, show the results\n var data = {};\n data.div_id = this.divid;\n data.course = eBookConfig.course;\n try {\n const params = new URLSearchParams(data);\n const resp = await fetch(`${eBookConfig.new_server_prefix}/assessment/getpollresults?${params.toString()}`);\n const json = await resp.json();\n this.showPollResults(json);\n } catch (e) {\n this.indicate_component_ready();\n }\n } else {\n this.indicate_component_ready();\n }\n }\n}\n\n// Do not render poll data until login-complete event so we know instructor status\ndocument.addEventListener(\"runestone:login-complete\", function () {\n document.querySelectorAll(\"[data-component=poll]\").forEach(function (el, index) {\n try {\n window.componentMap[el.id] = new Poll({ orig: el });\n } catch (err) {\n console.log(`Error rendering Poll Problem ${el.id}\n Details: ${err}`);\n console.log(err.stack);\n }\n });\n});\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\nwindow.component_factory.poll = function (opts) {\n return new Poll(opts);\n};\n"],"names":["Poll","constructor","opts","super","orig","this","origElem","divid","id","children","childNodes","optionList","optsArray","comment","hasAttribute","resultsViewer","getAttribute","getQuestionText","getOptionText","renderPoll","checkPollStorage","caption","addCaption","firstAnswer","i","length","tagName","delimiter","outerHTML","temp","innerHTML","split","question","_this","push","containerDiv","document","createElement","pollForm","resultsDiv","classList","add","origClass","filter","Boolean","method","action","onsubmit","pollFieldset","appendChild","label","radio","tmpid","name","type","value","addEventListener","submitPoll","bind","prepend","renderTextField","replaceWith","queueMathJax","textfield","style","width","placeholder","poll_val","checked","comment_val","eventInfo","event","act","div_id","logBookEvent","localStorage","setItem","getElementById","eBookConfig","useRunestoneServices","span","data","course","params","URLSearchParams","resp","fetch","new_server_prefix","toString","json","showPollResults","e","indicate_component_ready","results","total","detail","optCounts","my_vote","getItem","isInstructor","list","count","percent","text","Math","round","progressCounterEl","className","innerText","progressBarEl","progressBarHTML","disableOptions","querySelectorAll","forEach","el","index","window","componentMap","err","console","log","stack","component_factory","poll"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/168.fe63e6dec2d06468.js.map.gz b/_static/168.fe63e6dec2d06468.js.map.gz new file mode 100644 index 0000000..b5ac8d9 Binary files /dev/null and b/_static/168.fe63e6dec2d06468.js.map.gz differ diff --git a/_static/186.be52164d57f4b7e4.js b/_static/186.be52164d57f4b7e4.js new file mode 100644 index 0000000..5317e52 --- /dev/null +++ b/_static/186.be52164d57f4b7e4.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[186],{97186:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__);var _common_js_runestonebase__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(78673),jexcel__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(69424),jexcel__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(jexcel__WEBPACK_IMPORTED_MODULE_1__);class SpreadSheet extends _common_js_runestonebase__WEBPACK_IMPORTED_MODULE_0__.A{constructor(opts){super(opts);let orig=opts.orig;this.div_id=orig.id,this.sheet_id=`${this.div_id}_sheet`,this.data=eval(`${this.div_id}_data`),this.autograde=$(orig).data("autograde"),this.suffix=window[`${this.div_id}_asserts`],this.mindimensions=$(orig).data("mindimensions"),this.colwidths=$(orig).data("colwidths"),this.coltitles=eval($(orig).data("coltitles")),this.maxHeight=50,this.renderSheet(),this.autograde&&(this.addAutoGradeButton(),this.addOutput()),this.caption="Spreadsheet",this.divid=this.div_id,this.containerDiv=document.getElementById(this.div_id),this.addCaption("runestone"),this.indicate_component_ready()}renderSheet(){let t=document.getElementById(this.sheet_id),e={data:this.data,tableHeight:this.maxHeight};if(this.mindimensions&&(e.minDimensions=this.mindimensions),e.columns=[],this.colwidths)for(let t of this.colwidths)e.columns.push({width:t});if(this.coltitles)for(let t in this.coltitles)e.columns[t]?e.columns[t].title=unescape(this.coltitles[t]):e.columns.push({title:this.coltitles[t]});if(this.table=jexcel__WEBPACK_IMPORTED_MODULE_1___default()(t,e),this.suffix)for(let t of this.suffix){let e,i,s,o;[e,i,s,o]=t.split(/\s+/),$(`#${this.div_id}_sheet`).find(this.getCellSelector(i)).css("background-color","#d4e3ff")}}addAutoGradeButton(){let t=document.getElementById(this.div_id);var e=document.createElement("button");$(e).text("Check"),$(e).addClass("btn btn-success run-button"),t.appendChild(e),this.gradeButton=e,$(e).click(this.doAutoGrade.bind(this)),$(e).attr("type","button"),$(e).css("display","block")}addOutput(){this.output=document.createElement("pre"),this.output.id=`${this.div_id}_stdout`,$(this.output).css("visibility","hidden"),document.getElementById(this.div_id).appendChild(this.output)}doAutoGrade(){let t=this.suffix;this.passed=0,this.failed=0;let e="";t=t.filter((function(t){return t.indexOf("assert")>-1}));for(let i of t){let t,s,o,n;[t,s,o,n]=i.split(/\s+/),e+=this.testOneAssert(s,o,n),e+="\n"}let i=100*this.passed/(this.passed+this.failed);i=i.toLocaleString(void 0,{maximumFractionDigits:2}),e+=`You passed ${this.passed} out of ${this.passed+this.failed} tests for ${i}%`,this.logBookEvent({event:"unittest",div_id:this.div_id,course:eBookConfig.course,act:`percent:${i}:passed:${this.passed}:failed:${this.failed}`}),$(this.output).css("visibility","visible"),$(this.output).text(e)}testOneAssert(t,e,i){let s=this.getCellDisplayValue(t),o="";return{"==":function(t,e){return t==e},"!=":function(t,e){return t!=e},">":function(t,e){return t>e},"<":function(t,e){return t>e}}[e](s,i)?(o=`Pass: ${s} ${e} ${i} in ${t}`,$(`#${this.div_id}_sheet`).find(this.getCellSelector(t)).css("background-color","#ccffcc"),this.passed++):(o=`Failed ${s} ${e} ${i} in cell ${t}`,$(`#${this.div_id}_sheet`).find(this.getCellSelector(t)).css("background-color","#ff9980"),this.failed++),o}getCellSource(t){return this.table.getValue(t)}getCellDisplayValue(t){return this.table.el.querySelector(this.getCellSelector(t)).innerText}getCellSelector(t){let e=t.match(/\$?([A-Z]+)\$?([0-9]+)/);return`[data-x="${this.columnToIndex(e[1])}"][data-y="${e[2]-1}"]`}columnToIndex(t){let e=0;for(let i=0,s=t.length-1;i -1;\n });\n for (let test of tests) {\n let assert, loc, oper, expected;\n [assert, loc, oper, expected] = test.split(/\\s+/);\n result += this.testOneAssert(loc, oper, expected);\n result += \"\\n\";\n }\n let pct = (100 * this.passed) / (this.passed + this.failed);\n pct = pct.toLocaleString(undefined, { maximumFractionDigits: 2 });\n result += `You passed ${this.passed} out of ${\n this.passed + this.failed\n } tests for ${pct}%`;\n this.logBookEvent({\n event: \"unittest\",\n div_id: this.div_id,\n course: eBookConfig.course,\n act: `percent:${pct}:passed:${this.passed}:failed:${this.failed}`,\n });\n $(this.output).css(\"visibility\", \"visible\");\n $(this.output).text(result);\n }\n\n testOneAssert(cell, oper, expected) {\n let actual = this.getCellDisplayValue(cell);\n const operators = {\n \"==\": function (operand1, operand2) {\n return operand1 == operand2;\n },\n \"!=\": function (operand1, operand2) {\n return operand1 != operand2;\n },\n \">\": function (operand1, operand2) {\n return operand1 > operand2;\n },\n \"<\": function (operand1, operand2) {\n return operand1 > operand2;\n },\n };\n\n let res = operators[oper](actual, expected);\n let output = \"\";\n if (res) {\n output = `Pass: ${actual} ${oper} ${expected} in ${cell}`;\n $(`#${this.div_id}_sheet`)\n .find(this.getCellSelector(cell))\n .css(\"background-color\", \"#ccffcc\");\n this.passed++;\n } else {\n output = `Failed ${actual} ${oper} ${expected} in cell ${cell}`;\n $(`#${this.div_id}_sheet`)\n .find(this.getCellSelector(cell))\n .css(\"background-color\", \"#ff9980\");\n this.failed++;\n }\n return output;\n }\n\n // If the cell contains a formula, this call will return the formula not the computed value\n getCellSource(cell) {\n return this.table.getValue(cell);\n }\n\n // If the cell contains a formula this call will return the computed value\n getCellDisplayValue(cell) {\n let res = this.table.el.querySelector(this.getCellSelector(cell));\n return res.innerText;\n }\n\n getCellSelector(cell) {\n let parts = cell.match(/\\$?([A-Z]+)\\$?([0-9]+)/);\n let x = this.columnToIndex(parts[1]);\n let y = parts[2] - 1;\n return `[data-x=\"${x}\"][data-y=\"${y}\"]`;\n }\n columnToIndex(colName) {\n // Convert the column name to a number A = 0 AA = 26 BA = 52, etc\n let base = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n let result = 0;\n\n for (\n let i = 0, j = colName.length - 1;\n i < colName.length;\n i += 1, j -= 1\n ) {\n result += Math.pow(base.length, j) * (base.indexOf(colName[i]) + 1);\n }\n\n return result - 1;\n }\n}\n\n$(document).on(\"runestone:login-complete\", function () {\n $(\"[data-component=spreadsheet]\").each(function (index) {\n // MC\n var opts = {\n orig: this,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n };\n try {\n window.componentMap[this.id] = new SpreadSheet(opts);\n } catch (err) {\n console.log(`Error rendering SpreadSheet Problem ${this.id}\n Details: ${err}`);\n console.log(err.stack);\n }\n });\n});\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\nwindow.component_factory.spreadsheet = function (opts) {\n return new SpreadSheet(opts);\n};\n"],"names":["SpreadSheet","constructor","opts","super","orig","this","div_id","id","sheet_id","data","eval","autograde","$","suffix","window","mindimensions","colwidths","coltitles","maxHeight","renderSheet","addAutoGradeButton","addOutput","caption","divid","containerDiv","document","getElementById","addCaption","indicate_component_ready","div","tableHeight","minDimensions","columns","w","push","width","i","title","unescape","table","test","assert","loc","oper","expected","split","find","getCellSelector","css","butt","createElement","text","addClass","appendChild","gradeButton","click","doAutoGrade","bind","attr","output","tests","passed","failed","result","filter","s","indexOf","testOneAssert","pct","toLocaleString","undefined","maximumFractionDigits","logBookEvent","event","course","eBookConfig","act","cell","actual","getCellDisplayValue","operand1","operand2","getCellSource","getValue","el","querySelector","innerText","parts","match","columnToIndex","colName","j","length","Math","pow","base","on","each","index","useRunestoneServices","componentMap","err","console","log","stack","component_factory","spreadsheet"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/186.be52164d57f4b7e4.js.map.gz b/_static/186.be52164d57f4b7e4.js.map.gz new file mode 100644 index 0000000..9e5d7d5 Binary files /dev/null and b/_static/186.be52164d57f4b7e4.js.map.gz differ diff --git a/_static/249.7ec032cf0b3ede9a.js b/_static/249.7ec032cf0b3ede9a.js new file mode 100644 index 0000000..e6d8edb --- /dev/null +++ b/_static/249.7ec032cf0b3ede9a.js @@ -0,0 +1,3 @@ +/*! For license information please see 249.7ec032cf0b3ede9a.js.LICENSE.txt */ +(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[249],{17:(e,t,n)=>{"use strict";var r=n(51605),o=n(91344).filter;r({target:"Array",proto:!0,forced:!n(45634)("filter")},{filter:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},119:function(e,t,n){!function(e){"use strict";var t={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},n={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};e.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,t,n){return e<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"ثانیه d%",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(e){return e.replace(/[۰-۹]/g,(function(e){return n[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})}(n(95093))},1221:function(e,t,n){!function(e){"use strict";var t=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],n=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"];e.defineLocale("sd",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,t,n){return e<12?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",ss:"%d سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(95093))},1466:(e,t,n)=>{var r=n(30281),o=n(92074),i=n(78420),a=n(83062),s=n(56492),l=n(69965),u=function(){},c=[],h=s("Reflect","construct"),f=/^\s*(?:class|function)\b/,d=r(f.exec),m=!f.exec(u),p=function(e){if(!i(e))return!1;try{return h(u,c,e),!0}catch(e){return!1}},y=function(e){if(!i(e))return!1;switch(a(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return m||!!d(f,l(e))}catch(e){return!0}};y.sham=!0,e.exports=!h||o((function(){var e;return p(p.call)||!p(Object)||!p((function(){e=!0}))||e}))?y:p},1632:function(e,t,n){!function(e){"use strict";e.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(95093))},3035:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var o={s:["mõne sekundi","mõni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["ühe minuti","üks minut"],mm:[e+" minuti",e+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[e+" tunni",e+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[e+" kuu",e+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[e+" aasta",e+" aastat"]};return t?o[n][2]?o[n][2]:o[n][1]:r?o[n][0]:o[n][1]}e.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:"%d päeva",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},3101:(e,t,n)=>{var r=n(51605),o=n(65077),i=n(15816),a=n(5476),s=n(97632),l=n(52057);r({target:"Object",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(e){for(var t,n,r=a(e),o=s.f,u=i(r),c={},h=0;u.length>h;)void 0!==(n=o(r,t=u[h++]))&&l(c,t,n);return c}})},3322:function(e,t,n){!function(e){"use strict";var t={words:{ss:["секунда","секунде","секунди"],m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,n,r){var o=t.words[r];return 1===r.length?n?o[0]:o[1]:e+" "+t.correctGrammaticalCase(e,o)}};e.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"дан",dd:t.translate,M:"месец",MM:t.translate,y:"годину",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},3508:function(e,t,n){!function(e){"use strict";e.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},3727:(e,t,n)=>{var r=n(47061).match(/firefox\/(\d+)/i);e.exports=!!r&&+r[1]},3883:(e,t,n)=>{var r=n(51605),o=n(56492),i=n(36490),a=n(95362),s=n(50002),l=n(14569),u=s("string-to-symbol-registry"),c=s("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!l},{for:function(e){var t=a(e);if(i(u,t))return u[t];var n=o("Symbol")(t);return u[t]=n,c[n]=t,n}})},4038:(e,t,n)=>{n(51605)({target:"Number",stat:!0},{isInteger:n(83496)})},4632:(e,t,n)=>{n(51605)({target:"Object",stat:!0},{setPrototypeOf:n(39686)})},4657:(e,t,n)=>{"use strict";var r=n(51605),o=n(77804).codeAt;r({target:"String",proto:!0},{codePointAt:function(e){return o(this,e)}})},5086:(e,t,n)=>{var r=n(43129),o=n(7485),i=n(94972);r||o(Object.prototype,"toString",i,{unsafe:!0})},5225:(e,t,n)=>{var r=n(82072);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},5476:(e,t,n)=>{var r=n(48664),o=n(71229);e.exports=function(e){return r(o(e))}},5549:e=>{e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},5784:function(e,t,n){!function(e){"use strict";var t="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),n="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");function r(e){return e>1&&e<5}function o(e,t,n,o){var i=e+" ";switch(n){case"s":return t||o?"pár sekúnd":"pár sekundami";case"ss":return t||o?i+(r(e)?"sekundy":"sekúnd"):i+"sekundami";case"m":return t?"minúta":o?"minútu":"minútou";case"mm":return t||o?i+(r(e)?"minúty":"minút"):i+"minútami";case"h":return t?"hodina":o?"hodinu":"hodinou";case"hh":return t||o?i+(r(e)?"hodiny":"hodín"):i+"hodinami";case"d":return t||o?"deň":"dňom";case"dd":return t||o?i+(r(e)?"dni":"dní"):i+"dňami";case"M":return t||o?"mesiac":"mesiacom";case"MM":return t||o?i+(r(e)?"mesiace":"mesiacov"):i+"mesiacmi";case"y":return t||o?"rok":"rokom";case"yy":return t||o?i+(r(e)?"roky":"rokov"):i+"rokmi"}}e.defineLocale("sk",{months:t,monthsShort:n,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:case 4:case 5:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:o,ss:o,m:o,mm:o,h:o,hh:o,d:o,dd:o,M:o,MM:o,y:o,yy:o},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},5959:(e,t,n)=>{"use strict";var r=n(43610).f,o=n(53105),i=n(92760),a=n(46885),s=n(65190),l=n(88406),u=n(52929),c=n(56409),h=n(48296),f=n(93524),d=n(65077),m=n(82014).fastKey,p=n(99206),y=p.set,v=p.getterFor;e.exports={getConstructor:function(e,t,n,c){var h=e((function(e,r){s(e,f),y(e,{type:t,index:o(null),first:void 0,last:void 0,size:0}),d||(e.size=0),l(r)||u(r,e[c],{that:e,AS_ENTRIES:n})})),f=h.prototype,p=v(t),g=function(e,t,n){var r,o,i=p(e),a=w(e,t);return a?a.value=n:(i.last=a={index:o=m(t,!0),key:t,value:n,previous:r=i.last,next:void 0,removed:!1},i.first||(i.first=a),r&&(r.next=a),d?i.size++:e.size++,"F"!==o&&(i.index[o]=a)),e},w=function(e,t){var n,r=p(e),o=m(t);if("F"!==o)return r.index[o];for(n=r.first;n;n=n.next)if(n.key==t)return n};return i(f,{clear:function(){for(var e=p(this),t=e.index,n=e.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete t[n.index],n=n.next;e.first=e.last=void 0,d?e.size=0:this.size=0},delete:function(e){var t=this,n=p(t),r=w(t,e);if(r){var o=r.next,i=r.previous;delete n.index[r.index],r.removed=!0,i&&(i.next=o),o&&(o.previous=i),n.first==r&&(n.first=o),n.last==r&&(n.last=i),d?n.size--:t.size--}return!!r},forEach:function(e){for(var t,n=p(this),r=a(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:n.first;)for(r(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!w(this,e)}}),i(f,n?{get:function(e){var t=w(this,e);return t&&t.value},set:function(e,t){return g(this,0===e?0:e,t)}}:{add:function(e){return g(this,e=0===e?0:e,e)}}),d&&r(f,"size",{get:function(){return p(this).size}}),h},setStrong:function(e,t,n){var r=t+" Iterator",o=v(t),i=v(r);c(e,t,(function(e,t){y(this,{type:r,target:e,state:o(e),kind:t,last:void 0})}),(function(){for(var e=i(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?h("keys"==t?n.key:"values"==t?n.value:[n.key,n.value],!1):(e.target=void 0,h(void 0,!0))}),n?"entries":"values",!n,!0),f(t)}}},6048:(e,t,n)=>{"use strict";var r=n(12071).PROPER,o=n(7485),i=n(73938),a=n(95362),s=n(92074),l=n(10353),u="toString",c=RegExp.prototype[u],h=s((function(){return"/a/b"!=c.call({source:"a",flags:"b"})})),f=r&&c.name!=u;(h||f)&&o(RegExp.prototype,u,(function(){var e=i(this);return"/"+a(e.source)+"/"+a(l(e))}),{unsafe:!0})},6539:(e,t,n)=>{var r=n(79328),o=Math.max,i=Math.min;e.exports=function(e,t){var n=r(e);return n<0?o(n+t,0):i(n,t)}},6648:(e,t,n)=>{"use strict";var r=n(65077),o=n(18679),i=TypeError,a=Object.getOwnPropertyDescriptor,s=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=s?function(e,t){if(o(e)&&!a(e,"length").writable)throw i("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},6845:(e,t,n)=>{var r,o,i=n(30200),a=n(47061),s=i.process,l=i.Deno,u=s&&s.versions||l&&l.version,c=u&&u.v8;c&&(o=(r=c.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),e.exports=o},6926:e=>{e.exports=!1},7168:(e,t,n)=>{var r=n(92074);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},7306:function(e,t,n){!function(e){"use strict";e.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,t){var n=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"è";return"w"!==t&&"W"!==t||(n="a"),e+n},week:{dow:1,doy:4}})}(n(95093))},7473:(e,t,n)=>{var r=n(78420),o=String,i=TypeError;e.exports=function(e){if("object"==typeof e||r(e))return e;throw i("Can't set "+o(e)+" as a prototype")}},7485:(e,t,n)=>{var r=n(78420),o=n(43610),i=n(48218),a=n(59430);e.exports=function(e,t,n,s){s||(s={});var l=s.enumerable,u=void 0!==s.name?s.name:t;if(r(n)&&i(n,u,s),s.global)l?e[t]=n:a(t,n);else{try{s.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=n:o.f(e,t,{value:n,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return e}},7809:(e,t,n)=>{var r=n(30281);e.exports=r(1..valueOf)},7899:(e,t,n)=>{var r=n(51605),o=n(92612),i=n(91641);r({target:"Object",stat:!0,forced:n(92074)((function(){i(1)}))},{keys:function(e){return i(o(e))}})},7918:(e,t,n)=>{n(53656)},8235:function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};e.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(e,t){return 12===e&&(e=0),"राति"===t?e<4?e:e+12:"बिहान"===t?e:"दिउँसो"===t?e>=10?e:e+12:"साँझ"===t?e+12:void 0},meridiem:function(e,t,n){return e<3?"राति":e<12?"बिहान":e<16?"दिउँसो":e<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",ss:"%d सेकेण्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})}(n(95093))},8369:(e,t,n)=>{var r=n(30200),o=n(78420),i=r.WeakMap;e.exports=o(i)&&/native code/.test(String(i))},9304:(e,t)=>{"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,o=r&&!n.call({1:2},1);t.f=o?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},10121:(e,t,n)=>{n(13811)},10140:(e,t,n)=>{"use strict";var r=n(79328),o=n(95362),i=n(71229),a=RangeError;e.exports=function(e){var t=o(i(this)),n="",s=r(e);if(s<0||s==1/0)throw a("Wrong number of repetitions");for(;s>0;(s>>>=1)&&(t+=t))1&s&&(n+=t);return n}},10353:(e,t,n)=>{var r=n(72368),o=n(36490),i=n(47658),a=n(16844),s=RegExp.prototype;e.exports=function(e){var t=e.flags;return void 0!==t||"flags"in s||o(e,"flags")||!i(s,e)?t:r(a,e)}},10516:(e,t,n)=>{"use strict";var r=n(91344).forEach,o=n(92349)("forEach");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},10557:(e,t,n)=>{"use strict";var r=n(51605),o=n(30281),i=n(18679),a=o([].reverse),s=[1,2];r({target:"Array",proto:!0,forced:String(s)===String(s.reverse())},{reverse:function(){return i(this)&&(this.length=this.length),a(this)}})},10678:(e,t,n)=>{var r=n(51605),o=n(92074),i=n(5476),a=n(97632).f,s=n(65077),l=o((function(){a(1)}));r({target:"Object",stat:!0,forced:!s||l,sham:!s},{getOwnPropertyDescriptor:function(e,t){return a(i(e),t)}})},11025:function(e,t,n){!function(e){"use strict";var t={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},n={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};e.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",ss:"%d விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(e){return e+"வது"},preparse:function(e){return e.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(e,t,n){return e<2?" யாமம்":e<6?" வைகறை":e<10?" காலை":e<14?" நண்பகல்":e<18?" எற்பாடு":e<22?" மாலை":" யாமம்"},meridiemHour:function(e,t){return 12===e&&(e=0),"யாமம்"===t?e<2?e:e+12:"வைகறை"===t||"காலை"===t||"நண்பகல்"===t&&e>=10?e:e+12},week:{dow:0,doy:6}})}(n(95093))},11470:function(e,t,n){!function(e){"use strict";function t(e,t,n){return e+" "+function(e,t){return 2===t?function(e){var t={m:"v",b:"v",d:"z"};return void 0===t[e.charAt(0)]?e:t[e.charAt(0)]+e.substring(1)}(e):e}({mm:"munutenn",MM:"miz",dd:"devezh"}[n],e)}function n(e){return e>9?n(e%10):e}e.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",ss:"%d eilenn",m:"ur vunutenn",mm:t,h:"un eur",hh:"%d eur",d:"un devezh",dd:t,M:"ur miz",MM:t,y:"ur bloaz",yy:function(e){switch(n(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(e){return e+(1===e?"añ":"vet")},week:{dow:1,doy:4}})}(n(95093))},11713:function(e,t,n){!function(e){"use strict";e.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(e){return 2===e?"שעתיים":e+" שעות"},d:"יום",dd:function(e){return 2===e?"יומיים":e+" ימים"},M:"חודש",MM:function(e){return 2===e?"חודשיים":e+" חודשים"},y:"שנה",yy:function(e){return 2===e?"שנתיים":e%10==0&&10!==e?e+" שנה":e+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,t,n){return e<5?"לפנות בוקר":e<10?"בבוקר":e<12?n?'לפנה"צ':"לפני הצהריים":e<18?n?'אחה"צ':"אחרי הצהריים":"בערב"}})}(n(95093))},11885:function(e,t,n){!function(e){"use strict";e.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",ss:"%d సెకన్లు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(e,t){return 12===e&&(e=0),"రాత్రి"===t?e<4?e:e+12:"ఉదయం"===t?e:"మధ్యాహ్నం"===t?e>=10?e:e+12:"సాయంత్రం"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"రాత్రి":e<10?"ఉదయం":e<17?"మధ్యాహ్నం":e<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}})}(n(95093))},12071:(e,t,n)=>{var r=n(65077),o=n(36490),i=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,s=o(i,"name"),l=s&&"something"===function(){}.name,u=s&&(!r||r&&a(i,"name").configurable);e.exports={EXISTS:s,PROPER:l,CONFIGURABLE:u}},12091:(e,t,n)=>{var r=n(51605),o=n(72368),i=n(65335),a=n(73938),s=n(66060),l=n(97632),u=n(97970);r({target:"Reflect",stat:!0},{get:function e(t,n){var r,c,h=arguments.length<3?t:arguments[2];return a(t)===h?t[n]:(r=l.f(t,n))?s(r)?r.value:void 0===r.get?void 0:o(r.get,h):i(c=u(t))?e(c,n,h):void 0}})},12192:(e,t,n)=>{var r=n(92074),o=n(30200).RegExp,i=r((function(){var e=o("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),a=i||r((function(){return!o("a","y").sticky})),s=i||r((function(){var e=o("^r","gy");return e.lastIndex=2,null!=e.exec("str")}));e.exports={BROKEN_CARET:s,MISSED_STICKY:a,UNSUPPORTED_Y:i}},12307:(e,t,n)=>{"use strict";n.d(t,{A:()=>pE});var r={};n.r(r),n.d(r,{arrayAvg:()=>j,arrayEach:()=>P,arrayFilter:()=>H,arrayFlatten:()=>F,arrayMap:()=>N,arrayMax:()=>Y,arrayMin:()=>I,arrayReduce:()=>A,arraySum:()=>x,arrayUnique:()=>W,extendArray:()=>L,pivot:()=>D,to2dArray:()=>R});var o={};n.r(o),n.d(o,{clone:()=>K,createObjectPropListener:()=>re,deepClone:()=>X,deepExtend:()=>q,deepObjectSize:()=>ne,defineGetter:()=>Z,duckSchema:()=>U,extend:()=>G,getProperty:()=>te,hasOwnProperty:()=>oe,inherit:()=>z,isObject:()=>Q,isObjectEqual:()=>$,mixin:()=>J,objectEach:()=>ee});var i={};n.r(i),n.d(i,{isChrome:()=>Re,isEdge:()=>Le,isIE:()=>De,isIE8:()=>Ae,isIE9:()=>He,isMSBrowser:()=>Ne,isMobileBrowser:()=>Pe,isSafari:()=>xe,setBrowserMeta:()=>Oe});var a={};n.r(a),n.d(a,{cancelAnimationFrame:()=>Ze,getComparisonFunction:()=>rt,hasCaptionProblem:()=>nt,isClassListSupported:()=>Je,isGetComputedStyleSupported:()=>Qe,isPassiveEventSupported:()=>ot,isTextContentSupported:()=>$e,isTouchSupported:()=>et,isWebComponentSupportedNatively:()=>tt,requestAnimationFrame:()=>Ke});var s={};n.r(s),n.d(s,{HTML_CHARACTERS:()=>St,addClass:()=>wt,addEvent:()=>Wt,clearTextSelection:()=>Gt,closest:()=>st,closestDown:()=>lt,empty:()=>Mt,fastInnerHTML:()=>Ct,fastInnerText:()=>Tt,getCaretPosition:()=>Vt,getComputedStyle:()=>xt,getCssTransform:()=>Qt,getParent:()=>at,getScrollLeft:()=>At,getScrollTop:()=>Dt,getScrollableElement:()=>Ht,getScrollbarWidth:()=>Xt,getSelectionEndPosition:()=>Ut,getSelectionText:()=>zt,getStyle:()=>Pt,getTrimmingContainer:()=>Nt,getWindowScrollLeft:()=>Lt,getWindowScrollTop:()=>Rt,hasClass:()=>gt,hasHorizontalScrollbar:()=>Jt,hasVerticalScrollbar:()=>Kt,index:()=>dt,innerHeight:()=>jt,innerWidth:()=>Ft,isChildOf:()=>ut,isChildOfWebComponentTable:()=>ct,isInput:()=>en,isOutsideInput:()=>tn,isVisible:()=>Et,offset:()=>Ot,outerHeight:()=>It,outerWidth:()=>Yt,overlayContainsElement:()=>mt,polymerUnwrap:()=>ft,polymerWrap:()=>ht,removeClass:()=>bt,removeEvent:()=>Bt,removeTextNodes:()=>_t,resetCssTransform:()=>Zt,selectElementIfAllowed:()=>nn,setCaretPosition:()=>qt,setOverlayPosition:()=>$t});var l={};n.r(l),n.d(l,{curry:()=>cn,curryRight:()=>hn,debounce:()=>sn,isFunction:()=>rn,partial:()=>un,pipe:()=>ln,throttle:()=>on,throttleAfterHits:()=>an});var u={};n.r(u),n.d(u,{_injectProductInfo:()=>_r,isDefined:()=>ar,isEmpty:()=>lr,isRegExp:()=>ur,isUndefined:()=>sr,stringify:()=>ir});var c={};n.r(c),n.d(c,{isImmediatePropagationStopped:()=>Fr,isLeftClick:()=>zr,isRightClick:()=>Ur,pageX:()=>Br,pageY:()=>Vr,stopImmediatePropagation:()=>jr,stopPropagation:()=>Wr});var h={};n.r(h),n.d(h,{equalsIgnoreCase:()=>Qr,isPercentValue:()=>eo,randomString:()=>Zr,stripTags:()=>ro,substitute:()=>to,toUpperCaseFirst:()=>$r});var f={};n.r(f),n.d(f,{KEY_CODES:()=>lo,isCtrlKey:()=>ho,isCtrlMetaKey:()=>fo,isKey:()=>mo,isMetaKey:()=>co,isPrintableChar:()=>uo});var d={};n.r(d),n.d(d,{isNumeric:()=>Oa,rangeEach:()=>Ra,rangeEachReverse:()=>La,valueAccordingPercent:()=>Da});var m={};n.r(m),n.d(m,{getNormalizedDate:()=>fl});var p={};n.r(p),n.d(p,{columnFactory:()=>Bl});var y={};n.r(y),n.d(y,{cellMethodLookupFactory:()=>Ql,createEmptySpreadsheetData:()=>Jl,createSpreadsheetData:()=>Xl,createSpreadsheetObjectData:()=>Kl,spreadsheetColumnIndex:()=>ql,spreadsheetColumnLabel:()=>Gl,translateRowsToColumns:()=>$l});var v={};n.r(v),n.d(v,{_dataToHTML:()=>mu,htmlToGridSettings:()=>yu,instanceToHTML:()=>du});var g={};n.r(g),n.d(g,{CONTEXTMENU_ITEMS_ADD_COMMENT:()=>uc,CONTEXTMENU_ITEMS_ALIGNMENT:()=>dc,CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM:()=>bc,CONTEXTMENU_ITEMS_ALIGNMENT_CENTER:()=>pc,CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY:()=>vc,CONTEXTMENU_ITEMS_ALIGNMENT_LEFT:()=>mc,CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE:()=>wc,CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT:()=>yc,CONTEXTMENU_ITEMS_ALIGNMENT_TOP:()=>gc,CONTEXTMENU_ITEMS_BORDERS:()=>_c,CONTEXTMENU_ITEMS_BORDERS_BOTTOM:()=>Sc,CONTEXTMENU_ITEMS_BORDERS_LEFT:()=>Cc,CONTEXTMENU_ITEMS_BORDERS_RIGHT:()=>kc,CONTEXTMENU_ITEMS_BORDERS_TOP:()=>Mc,CONTEXTMENU_ITEMS_CLEAR_COLUMN:()=>nc,CONTEXTMENU_ITEMS_COPY:()=>rc,CONTEXTMENU_ITEMS_CUT:()=>oc,CONTEXTMENU_ITEMS_EDIT_COMMENT:()=>cc,CONTEXTMENU_ITEMS_FREEZE_COLUMN:()=>ic,CONTEXTMENU_ITEMS_HIDE_COLUMN:()=>Rc,CONTEXTMENU_ITEMS_HIDE_ROW:()=>Dc,CONTEXTMENU_ITEMS_INSERT_LEFT:()=>Ku,CONTEXTMENU_ITEMS_INSERT_RIGHT:()=>Ju,CONTEXTMENU_ITEMS_MERGE_CELLS:()=>sc,CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD:()=>Oc,CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD:()=>Ec,CONTEXTMENU_ITEMS_NO_ITEMS:()=>Gu,CONTEXTMENU_ITEMS_READ_ONLY:()=>tc,CONTEXTMENU_ITEMS_READ_ONLY_COMMENT:()=>fc,CONTEXTMENU_ITEMS_REDO:()=>ec,CONTEXTMENU_ITEMS_REMOVE_BORDERS:()=>Tc,CONTEXTMENU_ITEMS_REMOVE_COLUMN:()=>Qu,CONTEXTMENU_ITEMS_REMOVE_COMMENT:()=>hc,CONTEXTMENU_ITEMS_REMOVE_ROW:()=>$u,CONTEXTMENU_ITEMS_ROW_ABOVE:()=>qu,CONTEXTMENU_ITEMS_ROW_BELOW:()=>Xu,CONTEXTMENU_ITEMS_SHOW_COLUMN:()=>Lc,CONTEXTMENU_ITEMS_SHOW_ROW:()=>Ac,CONTEXTMENU_ITEMS_UNDO:()=>Zu,CONTEXTMENU_ITEMS_UNFREEZE_COLUMN:()=>ac,CONTEXTMENU_ITEMS_UNMERGE_CELLS:()=>lc,CONTEXT_MENU_ITEMS_NAMESPACE:()=>zu,FILTERS_BUTTONS_CANCEL:()=>ch,FILTERS_BUTTONS_CLEAR:()=>lh,FILTERS_BUTTONS_OK:()=>uh,FILTERS_BUTTONS_PLACEHOLDER_SEARCH:()=>hh,FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE:()=>dh,FILTERS_BUTTONS_PLACEHOLDER_VALUE:()=>fh,FILTERS_BUTTONS_SELECT_ALL:()=>sh,FILTERS_CONDITIONS_AFTER:()=>$c,FILTERS_CONDITIONS_BEFORE:()=>Qc,FILTERS_CONDITIONS_BEGINS_WITH:()=>Fc,FILTERS_CONDITIONS_BETWEEN:()=>Kc,FILTERS_CONDITIONS_BY_VALUE:()=>Uc,FILTERS_CONDITIONS_CONTAINS:()=>Bc,FILTERS_CONDITIONS_EMPTY:()=>xc,FILTERS_CONDITIONS_ENDS_WITH:()=>Wc,FILTERS_CONDITIONS_EQUAL:()=>Ic,FILTERS_CONDITIONS_GREATER_THAN:()=>zc,FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL:()=>Gc,FILTERS_CONDITIONS_LESS_THAN:()=>qc,FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL:()=>Xc,FILTERS_CONDITIONS_NAMESPACE:()=>Nc,FILTERS_CONDITIONS_NONE:()=>Pc,FILTERS_CONDITIONS_NOT_BETWEEN:()=>Jc,FILTERS_CONDITIONS_NOT_CONTAIN:()=>Vc,FILTERS_CONDITIONS_NOT_EMPTY:()=>Yc,FILTERS_CONDITIONS_NOT_EQUAL:()=>jc,FILTERS_CONDITIONS_TODAY:()=>Zc,FILTERS_CONDITIONS_TOMORROW:()=>eh,FILTERS_CONDITIONS_YESTERDAY:()=>th,FILTERS_DIVS_FILTER_BY_CONDITION:()=>nh,FILTERS_DIVS_FILTER_BY_VALUE:()=>rh,FILTERS_LABELS_CONJUNCTION:()=>oh,FILTERS_LABELS_DISJUNCTION:()=>ih,FILTERS_NAMESPACE:()=>Hc,FILTERS_VALUES_BLANK_CELLS:()=>ah});var w={};n.r(w),n.d(w,{Loose:()=>Yw,Strict:()=>Fw});var b={};n.r(b),n.d(b,{OPERATION_NAME:()=>RS,operate:()=>DS,prepare:()=>LS});var _={};n.r(_),n.d(_,{OPERATION_NAME:()=>AS,operate:()=>HS});var M={};n.r(M),n.d(M,{OPERATION_NAME:()=>PS,operate:()=>xS});var k={};n.r(k),n.d(k,{OPERATION_NAME:()=>IS,operate:()=>jS});var S={};n.r(S),n.d(S,{OPERATION_NAME:()=>WS,operate:()=>BS});var C={};function T(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);ted,AutoFill:()=>ud,AutoRowSize:()=>vd,Base:()=>Rf,BindRowsWithHeaders:()=>Jw,CollapsibleColumns:()=>rb,ColumnSorting:()=>vm,ColumnSummary:()=>db,Comments:()=>Jm,ContextMenu:()=>Hp,CopyPaste:()=>Zp,CustomBorders:()=>py,DragToScroll:()=>ky,DropdownMenu:()=>kb,ExportFile:()=>zb,Filters:()=>Xk,Formulas:()=>pC,GanttChart:()=>PC,HeaderTooltips:()=>BC,HiddenColumns:()=>qT,HiddenRows:()=>eE,ManualColumnFreeze:()=>Ay,ManualColumnMove:()=>cv,ManualColumnResize:()=>gv,ManualRowMove:()=>Jv,ManualRowResize:()=>og,MergeCells:()=>Pg,MultiColumnSorting:()=>o_,MultipleSelectionHandles:()=>Bg,NestedHeaders:()=>nT,NestedRows:()=>jT,ObserveChanges:()=>tw,PersistentState:()=>jf,Search:()=>cw,TouchScroll:()=>vw,TrimRows:()=>hE,UndoRedo:()=>Nw}),n(67579),n(18665),n(5086),n(29979),n(10121),n(14602),n(63534),n(40590),n(64216),n(15195),n(7918),n(6048);var E=new Map;function O(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"common";E.has(e)||E.set(e,new Map);var t=E.get(e);return{register:function(e,n){t.set(e,n)},getItem:function(e){return t.get(e)},hasItem:function(e){return t.has(e)},getNames:function(){return T(t.keys())},getValues:function(){return T(t.values())}}}function R(e){for(var t=e.length,n=0;nt?e:t}),Array.isArray(e)?e[0]:void 0)}function I(e){return A(e,(function(e,t){return e1?t-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:"value",r="_".concat(n),o=(B(t={_touched:!1},r,e),B(t,"isTouched",(function(){return this._touched})),t);return Object.defineProperty(o,n,{get:function(){return this[r]},set:function(e){this._touched=!0,this[r]=e},enumerable:!0,configurable:!0}),o}function oe(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function ie(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:null;return e?(e.pluginHookBucket||(e.pluginHookBucket=this.createEmptyBucket()),e.pluginHookBucket):this.globalBucket}},{key:"add",value:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(Array.isArray(t))P(t,(function(t){return n.add(e,t,r)}));else{var o=this.getBucket(r);if(void 0===o[e]&&(this.register(e),o[e]=[]),t.skip=!1,-1===o[e].indexOf(t)){var i=!1;t.initialHook&&P(o[e],(function(n,r){if(n.initialHook)return o[e][r]=t,i=!0,!1})),i||o[e].push(t)}}return this}},{key:"once",value:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;Array.isArray(t)?P(t,(function(t){return n.once(e,t,r)})):(t.runOnce=!0,this.add(e,t,r))}},{key:"remove",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=this.getBucket(n);return void 0!==r[e]&&r[e].indexOf(t)>=0&&(t.skip=!0,!0)}},{key:"has",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=this.getBucket(t);return!(void 0===n[e]||!n[e].length)}},{key:"run",value:function(e,t,n,r,o,i,a,s){var l=this.globalBucket[t],u=l?l.length:0,c=0;if(u)for(;c0&&void 0!==arguments[0]?arguments[0]:null;ee(this.getBucket(e),(function(e,t,n){return n[t].length=0}))}},{key:"register",value:function(e){this.isRegistered(e)||se.push(e)}},{key:"deregister",value:function(e){this.isRegistered(e)&&se.splice(se.indexOf(e),1)}},{key:"isRegistered",value:function(e){return se.indexOf(e)>=0}},{key:"getRegistered",value:function(){return se}}]),e}(),ue=new le;const ce=le;function he(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},n=t.viewportSize,r=t.scrollOffset,o=t.totalItems,i=t.itemSizeFn,a=t.overrideFn,s=t.calculationType,l=t.stretchMode,u=t.stretchingItemWidthFn,c=void 0===u?function(e){return e}:u;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),de.set(this,{viewportWidth:n,scrollOffset:r,totalColumns:o,columnWidthFn:i,overrideFn:a,calculationType:s,stretchingColumnWidthFn:c}),this.count=0,this.startColumn=null,this.endColumn=null,this.startPosition=null,this.stretchAllRatio=0,this.stretchLastWidth=0,this.stretch=l,this.totalTargetWidth=0,this.needVerifyLastColumnWidth=!0,this.stretchAllColumnsWidth=[],this.calculate()}return fe(e,null,[{key:"DEFAULT_WIDTH",get:function(){return 50}}]),fe(e,[{key:"calculate",value:function(){for(var e,t=0,n=!0,r=[],o=de.get(this),i=o.calculationType,a=o.overrideFn,s=o.scrollOffset,l=o.totalColumns,u=o.viewportWidth,c=0;c=s&&t+(2===i?e:0)<=s+(s>0?u+1:u)&&(null!==this.startColumn&&void 0!==this.startColumn||(this.startColumn=c),this.endColumn=c),r.push(t),t+=e,2!==i&&(this.endColumn=c),t>=s+u){n=!1;break}if(this.endColumn===l-1&&n)for(this.startColumn=this.endColumn;this.startColumn>0;){var h=r[this.endColumn]+e-r[this.startColumn-1];if((h<=u||2!==i)&&(this.startColumn-=1),h>u)break}1===i&&null!==this.startColumn&&a&&a(this),this.startPosition=r[this.startColumn],void 0===this.startPosition&&(this.startPosition=null),l0)this.stretchAllRatio=t/o,this.stretchAllColumnsWidth=[],this.needVerifyLastColumnWidth=!0;else if("last"===this.stretch&&t!==1/0){var u=this._getColumnWidth(r-1),c=l+u;this.stretchLastWidth=c>=0?c:u}}}},{key:"getStretchedColumnWidth",value:function(e,t){var n=null;return"all"===this.stretch&&0!==this.stretchAllRatio?n=this._getStretchedAllColumnWidth(e,t):"last"===this.stretch&&0!==this.stretchLastWidth&&(n=this._getStretchedLastColumnWidth(e)),n}},{key:"_getStretchedAllColumnWidth",value:function(e,t){var n=0,r=de.get(this),o=r.totalColumns;if(!this.stretchAllColumnsWidth[e]){var i=Math.round(t*this.stretchAllRatio),a=r.stretchingColumnWidthFn(i,e);this.stretchAllColumnsWidth[e]=void 0===a?i:isNaN(a)?this._getColumnWidth(e):a}if(this.stretchAllColumnsWidth.length===o&&this.needVerifyLastColumnWidth){this.needVerifyLastColumnWidth=!1;for(var s=0;s0&&void 0!==arguments[0]?arguments[0]:{},n=t.viewportSize,r=t.scrollOffset,o=t.totalItems,i=t.itemSizeFn,a=t.overrideFn,s=t.calculationType,l=t.scrollbarHeight;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),ge.set(this,{viewportHeight:n,scrollOffset:r,totalRows:o,rowHeightFn:i,overrideFn:a,calculationType:s,horizontalScrollbarHeight:l}),this.count=0,this.startRow=null,this.endRow=null,this.startPosition=null,this.calculate()}return ve(e,null,[{key:"DEFAULT_HEIGHT",get:function(){return 23}}]),ve(e,[{key:"calculate",value:function(){for(var t,n=0,r=!0,o=[],i=ge.get(this),a=i.calculationType,s=i.overrideFn,l=i.rowHeightFn,u=i.scrollOffset,c=i.totalRows,h=i.viewportHeight,f=i.horizontalScrollbarHeight||0,d=0;d=u&&n+(2===a?t:0)<=u+h-f&&(null===this.startRow&&(this.startRow=d),this.endRow=d),o.push(n),n+=t,2!==a&&(this.endRow=d),n>=u+h-f){r=!1;break}if(this.endRow===c-1&&r)for(this.startRow=this.endRow;this.startRow>0;){var m=o[this.endRow]+t-o[this.startRow-1];if((m<=h-f||2!==a)&&(this.startRow-=1),m>=h-f)break}1===a&&null!==this.startRow&&s&&s(this),this.startPosition=o[this.startRow],void 0===this.startPosition&&(this.startPosition=null),c=e.getSetting("totalRows")||this.col>=e.getSetting("totalColumns"))}},{key:"isEqual",value:function(e){return e===this||this.row===e.row&&this.col===e.col}},{key:"isSouthEastOf",value:function(e){return this.row>=e.row&&this.col>=e.col}},{key:"isNorthWestOf",value:function(e){return this.row<=e.row&&this.col<=e.col}},{key:"isSouthWestOf",value:function(e){return this.row>=e.row&&this.col<=e.col}},{key:"isNorthEastOf",value:function(e){return this.row<=e.row&&this.col>=e.col}},{key:"toObject",value:function(){return{row:this.row,col:this.col}}}],n&&be(t.prototype,n),e}();const Me=_e;function ke(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:t,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.highlight=t,this.from=n,this.to=r}var t,n;return t=e,n=[{key:"setHighlight",value:function(e){return this.highlight=e,this}},{key:"setFrom",value:function(e){return this.from=e,this}},{key:"setTo",value:function(e){return this.to=e,this}},{key:"isValid",value:function(e){return this.from.isValid(e)&&this.to.isValid(e)}},{key:"isSingle",value:function(){return this.from.row===this.to.row&&this.from.col===this.to.col}},{key:"getHeight",value:function(){return Math.max(this.from.row,this.to.row)-Math.min(this.from.row,this.to.row)+1}},{key:"getWidth",value:function(){return Math.max(this.from.col,this.to.col)-Math.min(this.from.col,this.to.col)+1}},{key:"includes",value:function(e){var t=e.row,n=e.col,r=this.getTopLeftCorner(),o=this.getBottomRightCorner();return r.row<=t&&o.row>=t&&r.col<=n&&o.col>=n}},{key:"includesRange",value:function(e){return this.includes(e.getTopLeftCorner())&&this.includes(e.getBottomRightCorner())}},{key:"isEqual",value:function(e){return Math.min(this.from.row,this.to.row)===Math.min(e.from.row,e.to.row)&&Math.max(this.from.row,this.to.row)===Math.max(e.from.row,e.to.row)&&Math.min(this.from.col,this.to.col)===Math.min(e.from.col,e.to.col)&&Math.max(this.from.col,this.to.col)===Math.max(e.from.col,e.to.col)}},{key:"overlaps",value:function(e){return e.isSouthEastOf(this.getTopLeftCorner())&&e.isNorthWestOf(this.getBottomRightCorner())}},{key:"isSouthEastOf",value:function(e){return this.getTopLeftCorner().isSouthEastOf(e)||this.getBottomRightCorner().isSouthEastOf(e)}},{key:"isNorthWestOf",value:function(e){return this.getTopLeftCorner().isNorthWestOf(e)||this.getBottomRightCorner().isNorthWestOf(e)}},{key:"isOverlappingHorizontally",value:function(e){return this.getTopRightCorner().col>=e.getTopLeftCorner().col&&this.getTopRightCorner().col<=e.getTopRightCorner().col||this.getTopLeftCorner().col<=e.getTopRightCorner().col&&this.getTopLeftCorner().col>=e.getTopLeftCorner().col}},{key:"isOverlappingVertically",value:function(e){return this.getBottomRightCorner().row>=e.getTopRightCorner().row&&this.getBottomRightCorner().row<=e.getBottomRightCorner().row||this.getTopRightCorner().row<=e.getBottomRightCorner().row&&this.getTopRightCorner().row>=e.getTopRightCorner().row}},{key:"expand",value:function(e){var t=this.getTopLeftCorner(),n=this.getBottomRightCorner();return(e.rown.row||e.col>n.col)&&(this.from=new Me(Math.min(t.row,e.row),Math.min(t.col,e.col)),this.to=new Me(Math.max(n.row,e.row),Math.max(n.col,e.col)),!0)}},{key:"expandByRange",value:function(e){if(this.includesRange(e)||!this.overlaps(e))return!1;var t=this.getTopLeftCorner(),n=this.getBottomRightCorner(),r=this.getDirection(),o=e.getTopLeftCorner(),i=e.getBottomRightCorner(),a=Math.min(t.row,o.row),s=Math.min(t.col,o.col),l=Math.max(n.row,i.row),u=Math.max(n.col,i.col),c=new Me(a,s),h=new Me(l,u);return this.from=c,this.to=h,this.setDirection(r),this.highlight.row===this.getBottomRightCorner().row&&"N-S"===this.getVerticalDirection()&&this.flipDirectionVertically(),this.highlight.col===this.getTopRightCorner().col&&"W-E"===this.getHorizontalDirection()&&this.flipDirectionHorizontally(),!0}},{key:"getDirection",value:function(){return this.from.isNorthWestOf(this.to)?"NW-SE":this.from.isNorthEastOf(this.to)?"NE-SW":this.from.isSouthEastOf(this.to)?"SE-NW":this.from.isSouthWestOf(this.to)?"SW-NE":void 0}},{key:"setDirection",value:function(e){switch(e){case"NW-SE":var t=[this.getTopLeftCorner(),this.getBottomRightCorner()];this.from=t[0],this.to=t[1];break;case"NE-SW":var n=[this.getTopRightCorner(),this.getBottomLeftCorner()];this.from=n[0],this.to=n[1];break;case"SE-NW":var r=[this.getBottomRightCorner(),this.getTopLeftCorner()];this.from=r[0],this.to=r[1];break;case"SW-NE":var o=[this.getBottomLeftCorner(),this.getTopRightCorner()];this.from=o[0],this.to=o[1]}}},{key:"getVerticalDirection",value:function(){return["NE-SW","NW-SE"].indexOf(this.getDirection())>-1?"N-S":"S-N"}},{key:"getHorizontalDirection",value:function(){return["NW-SE","SW-NE"].indexOf(this.getDirection())>-1?"W-E":"E-W"}},{key:"flipDirectionVertically",value:function(){switch(this.getDirection()){case"NW-SE":this.setDirection("SW-NE");break;case"NE-SW":this.setDirection("SE-NW");break;case"SE-NW":this.setDirection("NE-SW");break;case"SW-NE":this.setDirection("NW-SE")}}},{key:"flipDirectionHorizontally",value:function(){switch(this.getDirection()){case"NW-SE":this.setDirection("NE-SW");break;case"NE-SW":this.setDirection("NW-SE");break;case"SE-NW":this.setDirection("SW-NE");break;case"SW-NE":this.setDirection("SE-NW")}}},{key:"getTopLeftCorner",value:function(){return new Me(Math.min(this.from.row,this.to.row),Math.min(this.from.col,this.to.col))}},{key:"getBottomRightCorner",value:function(){return new Me(Math.max(this.from.row,this.to.row),Math.max(this.from.col,this.to.col))}},{key:"getTopRightCorner",value:function(){return new Me(Math.min(this.from.row,this.to.row),Math.max(this.from.col,this.to.col))}},{key:"getBottomLeftCorner",value:function(){return new Me(Math.max(this.from.row,this.to.row),Math.min(this.from.col,this.to.col))}},{key:"isCorner",value:function(e,t){return!!(t&&t.includes(e)&&(this.getTopLeftCorner().isEqual(new Me(t.from.row,t.from.col))||this.getTopRightCorner().isEqual(new Me(t.from.row,t.to.col))||this.getBottomLeftCorner().isEqual(new Me(t.to.row,t.from.col))||this.getBottomRightCorner().isEqual(new Me(t.to.row,t.to.col))))||e.isEqual(this.getTopLeftCorner())||e.isEqual(this.getTopRightCorner())||e.isEqual(this.getBottomLeftCorner())||e.isEqual(this.getBottomRightCorner())}},{key:"getOppositeCorner",value:function(e,t){if(!(e instanceof Me))return!1;if(t&&t.includes(e)){if(this.getTopLeftCorner().isEqual(new Me(t.from.row,t.from.col)))return this.getBottomRightCorner();if(this.getTopRightCorner().isEqual(new Me(t.from.row,t.to.col)))return this.getBottomLeftCorner();if(this.getBottomLeftCorner().isEqual(new Me(t.to.row,t.from.col)))return this.getTopRightCorner();if(this.getBottomRightCorner().isEqual(new Me(t.to.row,t.to.col)))return this.getTopLeftCorner()}return e.isEqual(this.getBottomRightCorner())?this.getTopLeftCorner():e.isEqual(this.getTopLeftCorner())?this.getBottomRightCorner():e.isEqual(this.getTopRightCorner())?this.getBottomLeftCorner():e.isEqual(this.getBottomLeftCorner())?this.getTopRightCorner():void 0}},{key:"getBordersSharedWith",value:function(e){if(!this.includesRange(e))return[];var t=Math.min(this.from.row,this.to.row),n=Math.max(this.from.row,this.to.row),r=Math.min(this.from.col,this.to.col),o=Math.max(this.from.col,this.to.col),i=Math.min(e.from.row,e.to.row),a=Math.max(e.from.row,e.to.row),s=Math.min(e.from.col,e.to.col),l=Math.max(e.from.col,e.to.col),u=[];return t===i&&u.push("top"),o===l&&u.push("right"),n===a&&u.push("bottom"),r===s&&u.push("left"),u}},{key:"getInner",value:function(){for(var e=this.getTopLeftCorner(),t=this.getBottomRightCorner(),n=[],r=e.row;r<=t.row;r++)for(var o=e.col;o<=t.col;o++)this.from.row===r&&this.from.col===o||this.to.row===r&&this.to.col===o||n.push(new Me(r,o));return n}},{key:"getAll",value:function(){for(var e=this.getTopLeftCorner(),t=this.getBottomRightCorner(),n=[],r=e.row;r<=t.row;r++)for(var o=e.col;o<=t.col;o++)e.row===r&&e.col===o?n.push(e):t.row===r&&t.col===o?n.push(t):n.push(new Me(r,o));return n}},{key:"forAll",value:function(e){for(var t=this.getTopLeftCorner(),n=this.getBottomRightCorner(),r=t.row;r<=n.row;r++)for(var o=t.col;o<=n.col;o++)if(!1===e(r,o))return}},{key:"toObject",value:function(){return{from:this.from.toObject(),to:this.to.toObject()}}}],n&&ke(t.prototype,n),e}();const Ce=Se;n(80475),n(14913),n(79073),n(40173);var Te=function(e){var t={value:!1,test:function(n,r){t.value=e(n,r)}};return t},Ee={chrome:Te((function(e,t){return/Chrome/.test(e)&&/Google/.test(t)})),edge:Te((function(e){return/Edge/.test(e)})),ie:Te((function(e){return/Trident/.test(e)})),ie8:Te((function(){return!document.createTextNode("test").textContent})),ie9:Te((function(){return!!document.documentMode})),mobile:Te((function(e){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(e)})),safari:Te((function(e,t){return/Safari/.test(e)&&/Apple Computer/.test(t)}))};function Oe(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.userAgent,n=void 0===t?navigator.userAgent:t,r=e.vendor,o=void 0===r?navigator.vendor:r;ee(Ee,(function(e){(0,e.test)(n,o)}))}function Re(){return Ee.chrome.value}function Le(){return Ee.edge.value}function De(){return Ee.ie.value}function Ae(){return Ee.ie8.value}function He(){return Ee.ie9.value}function Ne(){return Ee.ie.value||Ee.edge.value}function Pe(){return Ee.mobile.value}function xe(){return Ee.safari.value}function Ye(e){return Ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ye(e)}Oe(),n(78636),n(18772);for(var Ie,je,Fe,We,Be,Ve,Ue=0,ze=["ms","moz","webkit","o"],Ge=window.requestAnimationFrame,qe=window.cancelAnimationFrame,Xe=0;Xet
    t";var n=document.createElement("CAPTION");n.innerHTML="c
    c
    c
    c",n.style.padding="0",n.style.margin="0",e.insertBefore(n,t),document.body.appendChild(e),Ie=e.offsetHeight<2*e.lastChild.offsetHeight,document.body.removeChild(e)}(),Ie}function rt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return je||(je="object"===("undefined"==typeof Intl?"undefined":Ye(Intl))?new Intl.Collator(e,t).compare:"function"==typeof String.prototype.localeCompare?function(e,t){return"".concat(e).localeCompare(t)}:function(e,t){return e===t?0:e>t?-1:1})}function ot(){if(void 0!==Fe)return Fe;try{var e={get passive(){Fe=!0}};window.addEventListener("test",e,e),window.removeEventListener("test",e,e)}catch(e){Fe=!1}return Fe}function it(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:0,n=-1,r=null,o=e;null!==o;){if(n===t){r=o;break}o.host&&o.nodeType===Node.DOCUMENT_FRAGMENT_NODE?o=o.host:(n+=1,o=o.parentNode)}return r}function st(e,t,n){for(var r=e;null!==r&&r!==n;){if(r.nodeType===Node.ELEMENT_NODE&&(t.indexOf(r.nodeName)>-1||t.indexOf(r)>-1))return r;r=r.host&&r.nodeType===Node.DOCUMENT_FRAGMENT_NODE?r.host:r.parentNode}return null}function lt(e,t,n){for(var r=[],o=e;o&&(o=st(o,t,n))&&(!n||n.contains(o));)r.push(o),o=o.host&&o.nodeType===Node.DOCUMENT_FRAGMENT_NODE?o.host:o.parentNode;var i=r.length;return i?r[i-1]:null}function ut(e,t){var n=e.parentNode,r=[];for("string"==typeof t?r=Array.prototype.slice.call(e.ownerDocument.querySelectorAll(t),0):r.push(t);null!==n;){if(r.indexOf(n)>-1)return!0;n=n.parentNode}return!1}function ct(e){var t=!1,n=ht(e);function r(e){return e.nodeType===Node.ELEMENT_NODE&&e.nodeName==="hot-table".toUpperCase()}for(;null!==n;){if(r(n)){t=!0;break}if(n.host&&n.nodeType===Node.DOCUMENT_FRAGMENT_NODE){if(t=r(n.host))break;n=n.host}n=n.parentNode}return t}function ht(e){return"undefined"!=typeof Polymer&&"function"==typeof wrap?wrap(e):e}function ft(e){return"undefined"!=typeof Polymer&&"function"==typeof unwrap?unwrap(e):e}function dt(e){var t=0,n=e;if(n.previousSibling)for(;n=n.previousSibling;)t+=1;return t}function mt(e,t,n){var r=n.parentElement.querySelector(".ht_clone_".concat(e));return r?r.contains(t):null}function pt(e){var t=[];if(!e||!e.length)return t;for(var n=0;e[n];)t.push(e[n]),n+=1;return t}if(Ge||(Ge=function(e){var t=(new Date).getTime(),n=Math.max(0,16-(t-Ue)),r=window.setTimeout((function(){e(t+n)}),n);return Ue=t+n,r}),qe||(qe=function(e){clearTimeout(e)}),Je()){var yt=function(e){var t=e.createElement("div");return t.classList.add("test","test2"),t.classList.contains("test2")};We=function(e,t){return void 0!==e.classList&&"string"==typeof t&&""!==t&&e.classList.contains(t)},Be=function(e,t){var n,r=e.ownerDocument,o=t;if("string"==typeof o&&(o=o.split(" ")),(o=pt(o)).length>0)if(yt(r))(n=e.classList).add.apply(n,it(o));else for(var i=0;o&&o[i];)e.classList.add(o[i]),i+=1},Ve=function(e,t){var n,r=t;if("string"==typeof r&&(r=r.split(" ")),(r=pt(r)).length>0)if(yt)(n=e.classList).remove.apply(n,it(r));else for(var o=0;r&&r[o];)e.classList.remove(r[o]),o+=1}}else{var vt=function(e){return new RegExp("(\\s|^)".concat(e,"(\\s|$)"))};We=function(e,t){return void 0!==e.className&&vt(t).test(e.className)},Be=function(e,t){var n=0,r=e.className,o=t;if("string"==typeof o&&(o=o.split(" ")),""===r)r=o.join(" ");else for(;o&&o[n];)vt(o[n]).test(r)||(r+=" ".concat(o[n])),n+=1;e.className=r},Ve=function(e,t){var n=0,r=e.className,o=t;for("string"==typeof o&&(o=o.split(" "));o&&o[n];)r=r.replace(vt(o[n])," ").trim(),n+=1;e.className!==r&&(e.className=r)}}function gt(e,t){return We(e,t)}function wt(e,t){return Be(e,t)}function bt(e,t){return Ve(e,t)}function _t(e,t){if(3===e.nodeType)t.removeChild(e);else if(["TABLE","THEAD","TBODY","TFOOT","TR"].indexOf(e.nodeName)>-1)for(var n=e.childNodes,r=n.length-1;r>=0;r--)_t(n[r],e)}function Mt(e){for(var t;t=e.lastChild;)e.removeChild(t)}var kt,St=/(<(.*)>|&(.*);)/;function Ct(e,t){St.test(t)?e.innerHTML=t:Tt(e,t)}function Tt(e,t){var n=e.firstChild;n&&3===n.nodeType&&null===n.nextSibling?$e?n.textContent=t:n.data=t:(Mt(e),e.appendChild(e.ownerDocument.createTextNode(t)))}function Et(e){for(var t=e.ownerDocument.documentElement,n=e;ft(n)!==t;){if(null===n)return!1;if(n.nodeType===Node.DOCUMENT_FRAGMENT_NODE){if(n.host){if(n.host.impl)return Et(n.host.impl);if(n.host)return Et(n.host);throw new Error("Lost in Web Components world")}return!1}if(n.style&&"none"===n.style.display)return!1;n=n.parentNode}return!0}function Ot(e){var t,n,r,o,i=e.ownerDocument,a=i.defaultView,s=i.documentElement,l=e;if(nt()&&l.firstChild&&"CAPTION"===l.firstChild.nodeName)return{top:(o=l.getBoundingClientRect()).top+(a.pageYOffset||s.scrollTop)-(s.clientTop||0),left:o.left+(a.pageXOffset||s.scrollLeft)-(s.clientLeft||0)};for(t=l.offsetLeft,n=l.offsetTop,r=l;(l=l.offsetParent)&&l!==i.body;)t+=l.offsetLeft,n+=l.offsetTop,r=l;return r&&"fixed"===r.style.position&&(t+=a.pageXOffset||s.scrollLeft,n+=a.pageYOffset||s.scrollTop),{left:t,top:n}}function Rt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window,t=e.scrollY;return void 0===t&&(t=e.document.documentElement.scrollTop),t}function Lt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window,t=e.scrollX;return void 0===t&&(t=e.document.documentElement.scrollLeft),t}function Dt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;return e===t?Rt(t):e.scrollTop}function At(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;return e===t?Lt(t):e.scrollLeft}function Ht(e){var t=e.ownerDocument,n=t?t.defaultView:void 0;t||(n=(t=e.document?e.document:e).defaultView);for(var r=["auto","scroll"],o=Qe(),i=e.parentNode;i&&i.style&&t.body!==i;){var a=i.style,s=a.overflow,l=a.overflowX,u=a.overflowY;if([s,l,u].includes("scroll"))return i;if(o){var c=n.getComputedStyle(i);if(s=c.overflow,l=c.overflowX,u=c.overflowY,r.includes(s)||r.includes(l)||r.includes(u))return i}if(i.clientHeight<=i.scrollHeight+1&&(r.includes(u)||r.includes(s)))return i;if(i.clientWidth<=i.scrollWidth+1&&(r.includes(l)||r.includes(s)))return i;i=i.parentNode}return n}function Nt(e){for(var t=e.ownerDocument,n=t.defaultView,r=e.parentNode;r&&r.style&&t.body!==r;){if("visible"!==r.style.overflow&&""!==r.style.overflow)return r;var o=xt(r,n),i=["scroll","hidden","auto"],a=o.getPropertyValue("overflow"),s=o.getPropertyValue("overflow-y"),l=o.getPropertyValue("overflow-x");if(i.includes(a)||i.includes(s)||i.includes(l))return r;r=r.parentNode}return n}function Pt(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:window;if(e){if(e===n)return"width"===t?"".concat(n.innerWidth,"px"):"height"===t?"".concat(n.innerHeight,"px"):void 0;var r=e.style[t];if(""!==r&&void 0!==r)return r;var o=xt(e,n);return""!==o[t]&&void 0!==o[t]?o[t]:void 0}}function xt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;return e.currentStyle||t.getComputedStyle(e)}function Yt(e){return e.offsetWidth}function It(e){return nt()&&e.firstChild&&"CAPTION"===e.firstChild.nodeName?e.offsetHeight+e.firstChild.offsetHeight:e.offsetHeight}function jt(e){return e.clientHeight||e.innerHeight}function Ft(e){return e.clientWidth||e.innerWidth}function Wt(e,t,n){var r=e.defaultView;r||(r=e.document?e:e.ownerDocument.defaultView),r.addEventListener?e.addEventListener(t,n,!1):e.attachEvent("on".concat(t),n)}function Bt(e,t,n){var r=e.defaultView;r||(r=e.document?e:e.ownerDocument.defaultView),r.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent("on".concat(t),n)}function Vt(e){var t=e.ownerDocument;if(e.selectionStart)return e.selectionStart;if(t.selection){e.focus();var n=t.selection.createRange();if(null===n)return 0;var r=e.createTextRange(),o=r.duplicate();return r.moveToBookmark(n.getBookmark()),o.setEndPoint("EndToStart",r),o.text.length}return 0}function Ut(e){var t=e.ownerDocument;if(e.selectionEnd)return e.selectionEnd;if(t.selection){var n=t.selection.createRange();return null===n?0:e.createTextRange().text.indexOf(n.text)+n.text.length}return 0}function zt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window,t=e.document,n="";return e.getSelection?n=e.getSelection().toString():t.selection&&"Control"!==t.selection.type&&(n=t.selection.createRange().text),n}function Gt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window,t=e.document;e.getSelection?e.getSelection().empty?e.getSelection().empty():e.getSelection().removeAllRanges&&e.getSelection().removeAllRanges():t.selection&&t.selection.empty()}function qt(e,t,n){if(void 0===n&&(n=t),e.setSelectionRange){e.focus();try{e.setSelectionRange(t,n)}catch(i){var r=e.parentNode,o=r.style.display;r.style.display="block",e.setSelectionRange(t,n),r.style.display=o}}else if(e.createTextRange){var i=e.createTextRange();i.collapse(!0),i.moveEnd("character",n),i.moveStart("character",t),i.select()}}function Xt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;return void 0===kt&&(kt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document,t=e.createElement("div");t.style.height="200px",t.style.width="100%";var n=e.createElement("div");n.style.boxSizing="content-box",n.style.height="150px",n.style.left="0px",n.style.overflow="hidden",n.style.position="absolute",n.style.top="0px",n.style.width="200px",n.style.visibility="hidden",n.appendChild(t),(e.body||e.documentElement).appendChild(n);var r=t.offsetWidth;n.style.overflow="scroll";var o=t.offsetWidth;return r===o&&(o=n.clientWidth),(e.body||e.documentElement).removeChild(n),r-o}(e)),kt}function Kt(e){return e.offsetWidth!==e.clientWidth}function Jt(e){return e.offsetHeight!==e.clientHeight}function $t(e,t,n){Ae()||He()?(e.style.top=n,e.style.left=t):xe()?(e.style["-webkit-transform"]="translate3d(".concat(t,",").concat(n,",0)"),e.style["-webkit-transform"]="translate3d(".concat(t,",").concat(n,",0)")):e.style.transform="translate3d(".concat(t,",").concat(n,",0)")}function Qt(e){var t;return e.style.transform&&""!==(t=e.style.transform)?["transform",t]:e.style["-webkit-transform"]&&""!==(t=e.style["-webkit-transform"])?["-webkit-transform",t]:-1}function Zt(e){e.style.transform&&""!==e.style.transform?e.style.transform="":e.style["-webkit-transform"]&&""!==e.style["-webkit-transform"]&&(e.style["-webkit-transform"]="")}function en(e){return e&&(["INPUT","SELECT","TEXTAREA"].indexOf(e.nodeName)>-1||"true"===e.contentEditable)}function tn(e){return en(e)&&-1===e.className.indexOf("handsontableInput")&&-1===e.className.indexOf("copyPaste")}function nn(e){tn(e.ownerDocument.activeElement)||e.select()}function rn(e){return"function"==typeof e}function on(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,n=0,r={lastCallThrottled:!0},o=null;return function(){for(var i=this,a=arguments.length,s=new Array(a),l=0;l2&&void 0!==arguments[2]?arguments[2]:10,n=on(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:200),r=t;function o(){for(var t=arguments.length,o=new Array(t),i=0;i1&&void 0!==arguments[1]?arguments[1]:200,r=null;return function(){for(var o=this,i=arguments.length,a=new Array(i),s=0;s1?t-1:0),r=1;r=t?e.apply(this,s):n(s)}}([])}function hn(e){var t=e.length;return function n(r){return function(){for(var o=arguments.length,i=new Array(o),a=0;a=t?e.apply(this,s):n(s)}}([])}function fn(e,t){for(var n=0;n0?this.collectedNodes[e-1]:null}},{key:"getRenderedChildCount",value:function(){var e=this.rootNode,t=this.sizeSet,n=0;if(this.isSharedViewSet())for(var r=e.firstElementChild;r;){if(r.tagName===this.childNodeType)n+=1;else if(t.isPlaceOn(1))break;r=r.nextElementSibling}else n=e.childElementCount;return n}},{key:"start",value:function(){this.collectedNodes.length=0,this.visualIndex=0;for(var e=this.rootNode,t=this.sizeSet,n=this.isSharedViewSet(),r=t.getViewSize().nextSize,o=this.getRenderedChildCount();or;)e.removeChild(a?e.firstChild:e.lastChild),o-=1}},{key:"render",value:function(){var e=this.rootNode,t=this.sizeSet,n=this.visualIndex;this.isSharedViewSet()&&t.isPlaceOn(2)&&(n+=t.sharedSize.nextSize);var r=e.childNodes[n];if(r.tagName!==this.childNodeType){var o=this.nodesPool();e.replaceChild(o,r),r=o}this.collectedNodes.push(r),this.visualIndex+=1}},{key:"end",value:function(){}}],n&&Mn(t.prototype,n),e}();function Sn(e){return Sn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Sn(e)}function Cn(e,t){for(var n=0;no;)r.removeChild(r.lastChild),this.renderedNodes-=1}var s=this.rootNode.childNodes.length;if(s>t)for(var l=t;lt;)this.rootNode.removeChild(this.rootNode.lastChild),this.renderedNodes-=1}},{key:"render",value:function(){this.adjust();for(var e=this.table,t=e.columnsToRender,n=e.rowHeadersCount,r=0;r1?t-1:0),r=1;rRead more about it in \n the documentation or contact us at support@handsontable.com.'],['\n The license key for Handsontable is missing. Use your purchased key to activate the product.\\x20\n Alternatively, you can activate Handsontable to use for non-commercial purposes by\\x20\n passing the key: \'non-commercial-and-evaluation\'.\\x20\n Read more about it in\\x20\n the documentation or contact us at support@handsontable.com.']);return $n=function(){return e},e}function Qn(){var e=rr(["\n The license key for Handsontable expired on ",", and is not valid for the installed \n version ",'. Renew your \n license key or downgrade to a version released prior to ','. If you need any \n help, contact us at sales@handsontable.com.'],["\n The license key for Handsontable expired on ",", and is not valid for the installed\\x20\n version ",'. Renew your\\x20\n license key or downgrade to a version released prior to ','. If you need any\\x20\n help, contact us at sales@handsontable.com.']);return Qn=function(){return e},e}function Zn(){var e=rr(['\n The license key for Handsontable is invalid. \n Read more on how to \n install it properly or contact us at support@handsontable.com.'],['\n The license key for Handsontable is invalid.\\x20\n Read more on how to\\x20\n install it properly or contact us at support@handsontable.com.']);return Zn=function(){return e},e}function er(){var e=rr(["\n The license key for Handsontable is missing. Use your purchased key to activate the product. \n Alternatively, you can activate Handsontable to use for non-commercial purposes by \n passing the key: 'non-commercial-and-evaluation'. If you need any help, contact \n us at support@handsontable.com."],["\n The license key for Handsontable is missing. Use your purchased key to activate the product.\\x20\n Alternatively, you can activate Handsontable to use for non-commercial purposes by\\x20\n passing the key: 'non-commercial-and-evaluation'. If you need any help, contact\\x20\n us at support@handsontable.com."]);return er=function(){return e},e}function tr(){var e=rr(["\n The license key for Handsontable expired on ",", and is not valid for the installed \n version ",". Renew your license key at handsontable.com or downgrade to a version released prior \n to ",". If you need any help, contact us at sales@handsontable.com."],["\n The license key for Handsontable expired on ",", and is not valid for the installed\\x20\n version ",". Renew your license key at handsontable.com or downgrade to a version released prior\\x20\n to ",". If you need any help, contact us at sales@handsontable.com."]);return tr=function(){return e},e}function nr(){var e=rr(["\n The license key for Handsontable is invalid. \n If you need any help, contact us at support@handsontable.com."],["\n The license key for Handsontable is invalid.\\x20\n If you need any help, contact us at support@handsontable.com."]);return nr=function(){return e},e}function rr(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function or(e){return or="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},or(e)}function ir(e){var t;switch(or(e)){case"string":case"number":t="".concat(e);break;case"object":t=null===e?"":e.toString();break;case"undefined":t="";break;default:t=e.toString()}return t}function ar(e){return void 0!==e}function sr(e){return void 0===e}function lr(e){return null===e||""===e||sr(e)}function ur(e){return"[object RegExp]"===Object.prototype.toString.call(e)}var cr="length",hr=function(e){return parseInt(e,16)},fr=function(e){return parseInt(e,10)},dr=function(e,t,n){return e.substr(t,n)},mr=function(e){return e.codePointAt(0)-65},pr=function(e){return"".concat(e).replace(/\-/g,"")},yr=function(e){return hr(dr(pr(e),hr("12"),mr("F")))/(hr(dr(pr(e),mr("B"),~~![][cr]))||9)},vr=function(){return"undefined"!=typeof location&&/^([a-z0-9\-]+\.)?\x68\x61\x6E\x64\x73\x6F\x6E\x74\x61\x62\x6C\x65\x2E\x63\x6F\x6D$/i.test(location.host)},gr=!1,wr={invalid:function(){return Jn(nr())},expired:function(e){var t=e.keyValidityDate,n=e.hotVersion;return Jn(tr(),t,n,t)},missing:function(){return Jn(er())},non_commercial:function(){return""}},br={invalid:function(){return Jn(Zn())},expired:function(e){var t=e.keyValidityDate,n=e.hotVersion;return Jn(Qn(),t,n,t)},missing:function(){return Jn($n())},non_commercial:function(){return""}};function _r(e,t){var n,r=!lr(e),o="string"==typeof e&&"non-commercial-and-evaluation"===e.toLowerCase(),i="7.2.2",a="invalid",s="invalid",l=function(e){var t=[][cr],n=t;if(e[cr]!==mr("Z"))return!1;for(var r="",o="B>1:r=dr(e,i,i?1===o[cr]?9:8:6);return n===t}(e=pr(e||""));if(r||o||l)if(l){var u=Kn()("23/10/2019","DD/MM/YYYY"),c=Math.floor(u.toDate().getTime()/864e5),h=yr(e);if(n=Kn()(864e5*(h+1),"x").format("MMMM DD, YYYY"),c>h){var f=Kn()().diff(u,"days");a=f<=1?"valid":"expired",s=f<=15?"valid":"expired"}else a="valid",s="valid"}else o?(a="non_commercial",s="valid"):(a="invalid",s="invalid");else a="missing",s="missing";if(vr()&&(a="valid",s="valid"),gr||"valid"===a||(wr[a]({keyValidityDate:n,hotVersion:i})&&console["non_commercial"===a?"info":"warn"](wr[a]({keyValidityDate:n,hotVersion:i})),gr=!0),"valid"!==s&&t.parentNode&&br[s]({keyValidityDate:n,hotVersion:i})){var d=document.createElement("div");d.id="hot-display-license-info",d.innerHTML=br[s]({keyValidityDate:n,hotVersion:i}),t.parentNode.insertBefore(d,t.nextSibling)}}function Mr(){var e;ar(console)&&(e=console).warn.apply(e,arguments)}function kr(e){return kr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},kr(e)}function Sr(){var e,t,n=(e=['Performance tip: Handsontable rendered more than 1000 visible rows. Consider limiting the number \n of rendered rows by specifying the table height and/or turning off the "renderAllRows" option.'],(t=['Performance tip: Handsontable rendered more than 1000 visible rows. Consider limiting the number\\x20\n of rendered rows by specifying the table height and/or turning off the "renderAllRows" option.'])||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return Sr=function(){return n},n}function Cr(e,t){for(var n=0;n1e3&&(Or=!0,Mr(Jn(Sr()))),this.orderView.setSize(e).setOffset(this.table.renderedRowToSource(0)).start();for(var t=0;t1&&void 0!==arguments[1]?arguments[1]:{}).cellRenderer;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.rootNode=t,this.rootDocument=this.rootNode.ownerDocument,this.rowHeaders=null,this.columnHeaders=null,this.colGroup=null,this.rows=null,this.cells=null,this.rowFilter=null,this.columnFilter=null,this.rowUtils=null,this.columnUtils=null,this.rowsToRender=0,this.columnsToRender=0,this.rowHeaderFunctions=[],this.rowHeadersCount=0,this.columnHeaderFunctions=[],this.columnHeadersCount=0,this.cellRenderer=n}var t,n;return t=e,n=[{key:"setAxisUtils",value:function(e,t){this.rowUtils=e,this.columnUtils=t}},{key:"setViewportSize",value:function(e,t){this.rowsToRender=e,this.columnsToRender=t}},{key:"setFilters",value:function(e,t){this.rowFilter=e,this.columnFilter=t}},{key:"setHeaderContentRenderers",value:function(e,t){this.rowHeaderFunctions=e,this.rowHeadersCount=e.length,this.columnHeaderFunctions=t,this.columnHeadersCount=t.length}},{key:"setRenderers",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.rowHeaders,n=e.columnHeaders,r=e.colGroup,o=e.rows,i=e.cells;t.setTable(this),n.setTable(this),r.setTable(this),o.setTable(this),i.setTable(this),this.rowHeaders=t,this.columnHeaders=n,this.colGroup=r,this.rows=o,this.cells=i}},{key:"renderedRowToSource",value:function(e){return this.rowFilter.renderedToSource(e)}},{key:"renderedColumnToSource",value:function(e){return this.columnFilter.renderedToSource(e)}},{key:"render",value:function(){this.colGroup.adjust(),this.columnHeaders.adjust(),this.rows.adjust(),this.rowHeaders.adjust(),this.columnHeaders.render(),this.rows.render(),this.rowHeaders.render(),this.cells.render(),this.columnUtils.calculateWidths(),this.colGroup.render();for(var e=this.rowsToRender,t=this.rows,n=0;n0&&void 0!==arguments[0]?arguments[0]:{},n=t.TABLE,r=t.THEAD,o=t.COLGROUP,i=t.TBODY,a=t.rowUtils,s=t.columnUtils,l=t.cellRenderer;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.renderer=new xr(n,{cellRenderer:l}),this.renderer.setRenderers({rowHeaders:new Yn,columnHeaders:new Bn(r),colGroup:new qn(o),rows:new Rr(i),cells:new Nr}),this.renderer.setAxisUtils(a,s)}var t,n;return t=e,(n=[{key:"setFilters",value:function(e,t){return this.renderer.setFilters(e,t),this}},{key:"setViewportSize",value:function(e,t){return this.renderer.setViewportSize(e,t),this}},{key:"setHeaderContentRenderers",value:function(e,t){return this.renderer.setHeaderContentRenderers(e,t),this}},{key:"adjust",value:function(){this.renderer.adjust()}},{key:"render",value:function(){this.renderer.render()}}])&&Yr(t.prototype,n),e}();function jr(e){e.isImmediatePropagationEnabled=!1,e.cancelBubble=!0}function Fr(e){return!1===e.isImmediatePropagationEnabled}function Wr(e){"function"==typeof e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Br(e){if(e.pageX)return e.pageX;var t=e.target.ownerDocument.defaultView;return e.clientX+Lt(t)}function Vr(e){if(e.pageY)return e.pageY;var t=e.target.ownerDocument.defaultView;return e.clientY+Rt(t)}function Ur(e){return 2===e.button}function zr(e){return 0===e.button}function Gr(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:null;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.context=t||this,this.context.eventListeners||(this.context.eventListeners=[])}var t,n;return t=e,n=[{key:"addEventListener",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=this.context;function a(e){n.call(this,Kr(i,e))}return"boolean"==typeof o||ot()||(o=!1),this.context.eventListeners.push({element:e,event:t,callback:n,callbackProxy:a,options:o,eventManager:this}),e.addEventListener(t,a,o),qr+=1,function(){r.removeEventListener(e,t,n)}}},{key:"removeEventListener",value:function(e,t,n){for(var r,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=this.context.eventListeners.length;i;)if(i-=1,(r=this.context.eventListeners[i]).event===t&&r.element===e){if(n&&n!==r.callback)continue;if(o&&r.eventManager!==this)continue;this.context.eventListeners.splice(i,1),r.element.removeEventListener(r.event,r.callbackProxy,r.options),qr-=1}}},{key:"clearEvents",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.context)for(var t=this.context.eventListeners.length;t;){t-=1;var n=this.context.eventListeners[t];n&&this.removeEventListener(n.element,n.event,n.callback,e)}}},{key:"clear",value:function(){this.clearEvents()}},{key:"destroy",value:function(){this.clearEvents(),this.context=null}},{key:"destroyWithOwnEventsOnly",value:function(){this.clearEvents(!0),this.context=null}},{key:"fireEvent",value:function(e,t){var n=e.document,r=e;n||(r=(n=e.ownerDocument?e.ownerDocument:e).defaultView);var o,i={bubbles:!0,cancelable:"mousemove"!==t,view:r,detail:0,screenX:0,screenY:0,clientX:1,clientY:1,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:void 0};n.createEvent?(o=n.createEvent("MouseEvents")).initMouseEvent(t,i.bubbles,i.cancelable,i.view,i.detail,i.screenX,i.screenY,i.clientX,i.clientY,i.ctrlKey,i.altKey,i.shiftKey,i.metaKey,i.button,i.relatedTarget||n.body.parentNode):o=n.createEventObject(),e.dispatchEvent?e.dispatchEvent(o):e.fireEvent("on".concat(t),o)}}],n&&Gr(t.prototype,n),e}();function Kr(e,t){var n,r,o,i,a,s="HOT-TABLE";t.isTargetWebComponent=!1,t.realTarget=t.target;var l=t.stopImmediatePropagation;if(t.stopImmediatePropagation=function(){l.apply(this),jr(this)},!Xr.isHotTableEnv)return t;for(a=(t=ht(t)).path?t.path.length:0;a;){if(a-=1,t.path[a].nodeName===s)n=!0;else if(n&&t.path[a].shadowRoot){i=t.path[a];break}0!==a||i||(i=t.path[a])}return i||(i=t.target),t.isTargetWebComponent=!0,tt()?t.realTarget=t.srcElement||t.toElement:(oe(e,"hot")||e.isHotTableEnv||e.wtTable)&&(oe(e,"hot")?r=e.hot?e.hot.view.wt.wtTable.TABLE:null:e.isHotTableEnv?r=e.view.activeWt.wtTable.TABLE.parentNode.parentNode:e.wtTable&&(r=e.wtTable.TABLE.parentNode.parentNode),o=st(t.target,[s],r),t.realTarget=o&&r.querySelector(s)||t.target),Object.defineProperty(t,"target",{get:function(){return ht(i)},enumerable:!0,configurable:!0}),t}const Jr=Xr;function $r(e){return e[0].toUpperCase()+e.substr(1)}function Qr(){for(var e=[],t=arguments.length,n=new Array(t),r=0;r1&&void 0!==arguments[1]?arguments[1]:{};return"".concat(e).replace(/(?:\\)?\[([^[\]]+)]/g,(function(e,n){return"\\"===e.charAt(0)?e.substr(1,e.length-1):void 0===t[n]?"":t[n]}))}var no=/<\/?\w+\/?>|<\w+[\s|/][^>]*>/gi;function ro(e){return"".concat(e).replace(no,"")}function oo(e,t){for(var n=0;n=48&&e<=57||e>=96&&e<=111||e>=186&&e<=192||e>=219&&e<=222||e>=226||e>=65&&e<=90}function co(e){return-1!==[lo.ARROW_DOWN,lo.ARROW_UP,lo.ARROW_LEFT,lo.ARROW_RIGHT,lo.HOME,lo.END,lo.DELETE,lo.BACKSPACE,lo.F1,lo.F2,lo.F3,lo.F4,lo.F5,lo.F6,lo.F7,lo.F8,lo.F9,lo.F10,lo.F11,lo.F12,lo.TAB,lo.PAGE_DOWN,lo.PAGE_UP,lo.ENTER,lo.ESCAPE,lo.SHIFT,lo.CAPS_LOCK,lo.ALT].indexOf(e)}function ho(e){var t=[];return navigator.platform.includes("Mac")?t.push(lo.COMMAND_LEFT,lo.COMMAND_RIGHT,lo.COMMAND_FIREFOX):t.push(lo.CONTROL),t.includes(e)}function fo(e){return[lo.CONTROL,lo.COMMAND_LEFT,lo.COMMAND_RIGHT,lo.COMMAND_FIREFOX].includes(e)}function mo(e,t){var n=t.split("|"),r=!1;return P(n,(function(t){if(e===lo[t])return r=!0,!1})),r}function po(e,t){for(var n=0;n1,l=this.scrollableElement===r,u=this.wot.wtSettings.getSetting("preventWheel"),c={passive:l};(u||s||!Re())&&this.eventManager.addEventListener(this.wot.wtTable.wtRootElement,"wheel",(function(t){return e.onCloneWheel(t,u)}),c),[this.topOverlay,this.bottomOverlay,this.leftOverlay,this.topLeftCornerOverlay,this.bottomLeftCornerOverlay].forEach((function(t){if(t&&t.needFullRender){var n=t.clone.wtTable.holder;e.eventManager.addEventListener(n,"wheel",(function(t){return e.onCloneWheel(t,u)}),c)}})),this.eventManager.addEventListener(r,"resize",(function(){clearTimeout(a),a=setTimeout((function(){e.wot.getSetting("onWindowResize")}),200)}))}},{key:"deregisterListeners",value:function(){this.eventManager.clearEvents(!0)}},{key:"onTableScroll",value:function(e){var t=this.wot.rootWindow,n=this.leftOverlay.mainTableScrollableElement,r=this.topOverlay.mainTableScrollableElement,o=e.target;this.keyPressed&&(r!==t&&o!==t&&!e.target.contains(r)||n!==t&&o!==t&&!e.target.contains(n))||this.syncScrollPositions(e)}},{key:"onCloneWheel",value:function(e,t){var n=this.wot.rootWindow,r=this.leftOverlay.mainTableScrollableElement,o=this.topOverlay.mainTableScrollableElement,i=e.target,a=o!==n&&i!==n&&!i.contains(o),s=r!==n&&i!==n&&!i.contains(r);if(!this.keyPressed||!a&&!s){var l=this.translateMouseWheelToScroll(e);(t||this.scrollableElement!==n&&l)&&e.preventDefault()}}},{key:"onKeyDown",value:function(e){this.keyPressed=mo(e.keyCode,"ARROW_UP|ARROW_RIGHT|ARROW_DOWN|ARROW_LEFT")}},{key:"onKeyUp",value:function(){this.keyPressed=!1}},{key:"translateMouseWheelToScroll",value:function(e){var t=this.browserLineHeight,n=isNaN(e.deltaY)?-1*e.wheelDeltaY:e.deltaY,r=isNaN(e.deltaX)?-1*e.wheelDeltaX:e.deltaX;1===e.deltaMode&&(r+=r*t,n+=n*t);var o=this.scrollVertically(n),i=this.scrollHorizontally(r);return o||i}},{key:"scrollVertically",value:function(e){var t=this.scrollableElement.scrollTop;return this.scrollableElement.scrollTop+=e,t!==this.scrollableElement.scrollTop}},{key:"scrollHorizontally",value:function(e){var t=this.scrollableElement.scrollLeft;return this.scrollableElement.scrollLeft+=e,t!==this.scrollableElement.scrollLeft}},{key:"syncScrollPositions",value:function(){if(!this.destroyed){var e=this.wot.rootWindow,t=this.topOverlay.clone.wtTable.holder,n=this.leftOverlay.clone.wtTable.holder,r=[this.scrollableElement.scrollLeft,this.scrollableElement.scrollTop],o=r[0],i=r[1];if(this.horizontalScrolling=t.scrollLeft!==o||this.lastScrollX!==e.scrollX,this.verticalScrolling=n.scrollTop!==i||this.lastScrollY!==e.scrollY,this.lastScrollX=e.scrollX,this.lastScrollY=e.scrollY,this.horizontalScrolling){t.scrollLeft=o;var a=this.bottomOverlay.needFullRender?this.bottomOverlay.clone.wtTable.holder:null;a&&(a.scrollLeft=o)}this.verticalScrolling&&(n.scrollTop=i),this.refreshAll()}}},{key:"syncScrollWithMaster",value:function(){var e=this.topOverlay.mainTableScrollableElement,t=e.scrollLeft,n=e.scrollTop;this.topOverlay.needFullRender&&(this.topOverlay.clone.wtTable.holder.scrollLeft=t),this.bottomOverlay.needFullRender&&(this.bottomOverlay.clone.wtTable.holder.scrollLeft=t),this.leftOverlay.needFullRender&&(this.leftOverlay.clone.wtTable.holder.scrollTop=n)}},{key:"updateMainScrollableElements",value:function(){this.deregisterListeners(),this.leftOverlay.updateMainScrollableElement(),this.topOverlay.updateMainScrollableElement(),this.bottomOverlay.needFullRender&&this.bottomOverlay.updateMainScrollableElement();var e=this.wot,t=e.rootWindow,n=e.wtTable;"hidden"===t.getComputedStyle(n.wtRootElement.parentNode).getPropertyValue("overflow")?this.scrollableElement=n.holder:this.scrollableElement=Ht(n.TABLE),this.registerListeners()}},{key:"destroy",value:function(){this.eventManager.destroy(),this.topOverlay.destroy(),this.bottomOverlay.clone&&this.bottomOverlay.destroy(),this.leftOverlay.destroy(),this.topLeftCornerOverlay&&this.topLeftCornerOverlay.destroy(),this.bottomLeftCornerOverlay&&this.bottomLeftCornerOverlay.clone&&this.bottomLeftCornerOverlay.destroy(),this.debug&&this.debug.destroy(),this.destroyed=!0}},{key:"refresh",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.topOverlay.areElementSizesAdjusted&&this.leftOverlay.areElementSizesAdjusted){var t=this.wot.wtTable.wtRootElement.parentNode||this.wot.wtTable.wtRootElement,n=t.clientWidth,r=t.clientHeight;n===this.spreaderLastSize.width&&r===this.spreaderLastSize.height||(this.spreaderLastSize.width=n,this.spreaderLastSize.height=r,this.adjustElementsSize())}this.bottomOverlay.clone&&this.bottomOverlay.refresh(e),this.leftOverlay.refresh(e),this.topOverlay.refresh(e),this.topLeftCornerOverlay&&this.topLeftCornerOverlay.refresh(e),this.bottomLeftCornerOverlay&&this.bottomLeftCornerOverlay.clone&&this.bottomLeftCornerOverlay.refresh(e),this.debug&&this.debug.refresh(e)}},{key:"adjustElementsSize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.wot,n=t.wtViewport,r=t.wtTable,o=this.wot.getSetting("totalColumns"),i=this.wot.getSetting("totalRows"),a=n.getRowHeaderWidth(),s=n.getColumnHeaderHeight(),l=r.hider.style;if(l.width="".concat(a+this.leftOverlay.sumCellSizes(0,o),"px"),l.height="".concat(s+this.topOverlay.sumCellSizes(0,i)+1,"px"),this.scrollbarSize>0){var u=r.wtRootElement,c=u.scrollHeight,h=u.scrollWidth,f=r.holder,d=f.scrollHeight,m=f.scrollWidth;this.hasScrollbarRight=ch?this.hasScrollbarBottom=!0:this.hasScrollbarBottom&&r.hider.scrollHeight+this.scrollbarSize>c&&(this.hasScrollbarRight=!0)}this.topOverlay.adjustElementsSize(e),this.leftOverlay.adjustElementsSize(e),this.bottomOverlay.adjustElementsSize(e)}},{key:"applyToDOM",value:function(){this.wot.wtTable.isVisible()&&(this.topOverlay.areElementSizesAdjusted&&this.leftOverlay.areElementSizesAdjusted||this.adjustElementsSize(),this.topOverlay.applyToDOM(),this.bottomOverlay.clone&&this.bottomOverlay.applyToDOM(),this.leftOverlay.applyToDOM())}},{key:"getParentOverlay",value:function(e){if(!e)return null;var t=[this.topOverlay,this.leftOverlay,this.bottomOverlay,this.topLeftCornerOverlay,this.bottomLeftCornerOverlay],n=null;return P(t,(function(t){t&&t.clone&&t.clone.wtTable.TABLE.contains(e)&&(n=t.clone)})),n}}],n&&po(t.prototype,n),e}();const vo=yo;function go(e,t){for(var n=0;n=0&&e<=Math.max(a-1,0)){var l=this.getFirstVisibleColumn(),u=this.getLastVisibleColumn();e>=o&&l>-1&&(e-1&&(e>u||t))&&(s=i.scrollTo(e,!0))}return s}},{key:"scrollViewportVertically",value:function(e,t,n){if(!this.wot.drawn)return!1;var r=this._getVariables(),o=r.fixedRowsBottom,i=r.fixedRowsTop,a=r.topOverlay,s=r.totalRows,l=!1;if(e>=0&&e<=Math.max(s-1,0)){var u=this.getFirstVisibleRow(),c=this.getLastVisibleRow();e>=i&&u>-1&&(e-1&&(e>c&&e0;d--)if(f+=t.sumCellSizes(d-1,d),l.top+u-f<=h){s=d;break}}}return s}},{key:"getLastVisibleRow",value:function(){var e=this._getVariables(),t=e.topOverlay,n=e.wtTable,r=e.wtViewport,o=e.totalRows,i=this.wot.rootWindow,a=n.getLastVisibleRow();if(t.mainTableScrollableElement===i){var s=Ot(n.wtRootElement),l=Dt(i,i);if(s.top>l)for(var u=jt(i),c=r.getColumnHeaderHeight(),h=1;h<=o;h++)if(c+=t.sumCellSizes(h-1,h),s.top+c-l>=u){a=h-2;break}}return a}},{key:"getFirstVisibleColumn",value:function(){var e=this._getVariables(),t=e.leftOverlay,n=e.wtTable,r=e.wtViewport,o=e.totalColumns,i=this.wot.rootWindow,a=n.getFirstVisibleColumn();if(t.mainTableScrollableElement===i){var s=Ot(n.wtRootElement),l=Ft(n.hider),u=Ft(i),c=At(i,i);if(s.left+l-u<=c)for(var h=r.getRowHeaderWidth(),f=o;f>0;f--)if(h+=t.sumCellSizes(f-1,f),s.left+l-h<=c){a=f;break}}return a}},{key:"getLastVisibleColumn",value:function(){var e=this._getVariables(),t=e.leftOverlay,n=e.wtTable,r=e.wtViewport,o=e.totalColumns,i=this.wot.rootWindow,a=n.getLastVisibleColumn();if(t.mainTableScrollableElement===i){var s=Ot(n.wtRootElement),l=At(i,i);if(s.left>l)for(var u=Ft(i),c=r.getRowHeaderWidth(),h=1;h<=o;h++)if(c+=t.sumCellSizes(h-1,h),s.left+c-l>=u){a=h-2;break}}return a}},{key:"_getVariables",value:function(){var e=this.wot;return{topOverlay:e.wtOverlays.topOverlay,leftOverlay:e.wtOverlays.leftOverlay,wtTable:e.wtTable,wtViewport:e.wtViewport,totalRows:e.getSetting("totalRows"),totalColumns:e.getSetting("totalColumns"),fixedRowsTop:e.getSetting("fixedRowsTop"),fixedRowsBottom:e.getSetting("fixedRowsBottom"),fixedColumnsLeft:e.getSetting("fixedColumnsLeft")}}}],n&&go(t.prototype,n),e}();const bo=wo;function _o(e,t){for(var n=0;n0&&t.clientHeight>0?t.clientHeight:1/0}},{key:"getWorkspaceWidth",value:function(){var e,t,n=this.wot,r=n.rootDocument,o=n.rootWindow,i=this.instance.wtOverlays.leftOverlay.trimmingContainer,a=r.documentElement.offsetWidth,s=n.getSetting("totalColumns");if(n.getSetting("preventOverflow"))return Yt(this.instance.wtTable.wtRootElement);if(e=n.getSetting("freezeOverlays")?Math.min(a-this.getWorkspaceOffset().left,a):Math.min(this.getContainerFillWidth(),a-this.getWorkspaceOffset().left,a),i===o&&s>0&&this.sumColumnWidths(0,s-1)>e)return r.documentElement.clientWidth;if(i!==o&&("scroll"===(t=Pt(this.instance.wtOverlays.leftOverlay.trimmingContainer,"overflow",o))||"hidden"===t||"auto"===t))return Math.max(e,i.clientWidth);var l=n.getSetting("stretchH");return"none"!==l&&l?e:Math.max(e,Yt(this.instance.wtTable.TABLE))}},{key:"hasVerticalScroll",value:function(){return this.getWorkspaceActualHeight()>this.getWorkspaceHeight()}},{key:"hasHorizontalScroll",value:function(){return this.getWorkspaceActualWidth()>this.getWorkspaceWidth()}},{key:"sumColumnWidths",value:function(e,t){for(var n=this.wot.wtTable,r=0,o=e;o0&&(e-=t),e}},{key:"getRowHeaderWidth",value:function(){var e=this.instance.getSetting("rowHeaderWidth"),t=this.instance.getSetting("rowHeaders");if(e){this.rowHeaderWidth=0;for(var n=0,r=t.length;n0?e-t:e}},{key:"createRowsCalculator",value:function(){var e,t,n,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,o=this.wot,i=o.wtSettings,a=o.wtOverlays,s=o.wtTable,l=o.rootDocument;this.rowHeaderWidth=NaN,e=i.settings.renderAllRows&&1===r?1/0:this.getViewportHeight();var u=a.topOverlay.getScrollPosition()-a.topOverlay.getTableParentOffset();u<0&&(u=0);var c=o.getSetting("fixedRowsTop"),h=o.getSetting("fixedRowsBottom"),f=o.getSetting("totalRows");return c&&(u+=n=a.topOverlay.sumCellSizes(0,c),e-=n),h&&a.bottomOverlay.clone&&(e-=n=a.bottomOverlay.sumCellSizes(f-h,f)),t=s.holder.clientHeight===s.holder.offsetHeight?0:Xt(l),new we({viewportSize:e,scrollOffset:u,totalItems:o.getSetting("totalRows"),itemSizeFn:function(e){return s.getRowHeight(e)},overrideFn:i.settings.viewportRowCalculatorOverride,calculationType:r,scrollbarHeight:t})}},{key:"createColumnsCalculator",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=this.wot,n=t.wtSettings,r=t.wtOverlays,o=t.wtTable,i=t.rootDocument,a=this.getViewportWidth(),s=r.leftOverlay.getScrollPosition()-r.leftOverlay.getTableParentOffset();this.columnHeaderHeight=NaN,s<0&&(s=0);var l=t.getSetting("fixedColumnsLeft");if(l){var u=r.leftOverlay.sumCellSizes(0,l);s+=u,a-=u}return o.holder.clientWidth!==o.holder.offsetWidth&&(a-=Xt(i)),new pe({viewportSize:a,scrollOffset:s,totalItems:t.getSetting("totalColumns"),itemSizeFn:function(e){return t.wtTable.getColumnWidth(e)},overrideFn:n.settings.viewportColumnCalculatorOverride,calculationType:e,stretchMode:t.getSetting("stretchH"),stretchingItemWidthFn:function(e,n){return t.getSetting("onBeforeStretchingColumnWidth",e,n)}})}},{key:"createRenderCalculators",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(e){var t=this.createRowsCalculator(2),n=this.createColumnsCalculator(2);this.areAllProposedVisibleRowsAlreadyRendered(t)&&this.areAllProposedVisibleColumnsAlreadyRendered(n)||(e=!1)}return e||(this.rowsRenderCalculator=this.createRowsCalculator(1),this.columnsRenderCalculator=this.createColumnsCalculator(1)),this.rowsVisibleCalculator=null,this.columnsVisibleCalculator=null,e}},{key:"createVisibleCalculators",value:function(){this.rowsVisibleCalculator=this.createRowsCalculator(2),this.columnsVisibleCalculator=this.createColumnsCalculator(2)}},{key:"areAllProposedVisibleRowsAlreadyRendered",value:function(e){if(!this.rowsVisibleCalculator)return!1;var t=e.startRow,n=e.endRow,r=this.rowsRenderCalculator,o=r.startRow,i=r.endRow;return!(t0||n>i||n===i&&n0||n>i||n===i&&n0&&void 0!==arguments[0]&&arguments[0];return this.drawInterrupted=!1,e||this.wtTable.isVisible()?this.wtTable.draw(e):this.drawInterrupted=!0,this}},{key:"getCell",value:function(e){if(!(arguments.length>1&&void 0!==arguments[1]&&arguments[1]))return this.wtTable.getCell(e);var t=this.wtSettings.getSetting("totalRows"),n=this.wtSettings.getSetting("fixedRowsTop"),r=this.wtSettings.getSetting("fixedRowsBottom"),o=this.wtSettings.getSetting("fixedColumnsLeft");if(e.row=t-r){if(this.wtOverlays.bottomLeftCornerOverlay&&this.wtOverlays.bottomLeftCornerOverlay.clone)return this.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.getCell(e)}else{if(e.col=t-r&&this.wtOverlays.bottomOverlay&&this.wtOverlays.bottomOverlay.clone)return this.wtOverlays.bottomOverlay.clone.wtTable.getCell(e)}return this.wtTable.getCell(e)}},{key:"update",value:function(e,t){return this.wtSettings.update(e,t)}},{key:"scrollViewport",value:function(e,t,n,r,o){return!(e.col<0||e.row<0)&&this.wtScroll.scrollViewport(e,t,n,r,o)}},{key:"scrollViewportHorizontally",value:function(e,t,n){return!(e<0)&&this.wtScroll.scrollViewportHorizontally(e,t,n)}},{key:"scrollViewportVertically",value:function(e,t,n){return!(e<0)&&this.wtScroll.scrollViewportVertically(e,t,n)}},{key:"getViewport",value:function(){return[this.wtTable.getFirstVisibleRow(),this.wtTable.getFirstVisibleColumn(),this.wtTable.getLastVisibleRow(),this.wtTable.getLastVisibleColumn()]}},{key:"getOverlayName",value:function(){return this.cloneOverlay?this.cloneOverlay.type:"master"}},{key:"exportSettingsAsClassNames",value:function(){var e=this,t=[],n=[];ee({rowHeaders:["array"],columnHeaders:["array"]},(function(r,o){r.indexOf("array")>-1&&e.getSetting(o).length&&n.push("ht".concat($r(o))),t.push("ht".concat($r(o)))})),bt(this.wtTable.wtRootElement.parentNode,t),wt(this.wtTable.wtRootElement.parentNode,n)}},{key:"getSetting",value:function(e,t,n,r,o){return this.wtSettings.getSetting(e,t,n,r,o)}},{key:"hasSetting",value:function(e){return this.wtSettings.has(e)}},{key:"destroy",value:function(){this.wtOverlays.destroy(),this.wtEvent.destroy()}}],n&&Eo(t.prototype,n),e}();const Ro=Oo;function Lo(e,t){for(var n=0;n=this.wot.getSetting("totalRows")-this.wot.getSetting("fixedRowsBottom"),s={left:this.clone.wtTable.spreader.offsetLeft,top:this.clone.wtTable.spreader.offsetTop},l={left:e.offsetLeft,top:e.offsetTop};return r?this.getRelativeCellPositionWithinWindow(i,o,l,s):this.getRelativeCellPositionWithinHolder(i,a,o,l,s)}Mr("The provided element is not a child of the ".concat(this.type," overlay"))}},{key:"getRelativeCellPositionWithinWindow",value:function(e,t,n,r){var o,i=this.wot.wtTable.wtRootElement.getBoundingClientRect(),a=0;return o=t?i.left<=0?-1*i.left:0:r.left,a=e?this.clone.wtTable.TABLE.getBoundingClientRect().top-i.top:r.top,{left:n.left+o,top:n.top+a}}},{key:"getRelativeCellPositionWithinHolder",value:function(e,t,n,r,o){var i=this.clone.cloneSource.wtOverlays.leftOverlay.getScrollPosition(),a=this.clone.cloneSource.wtOverlays.topOverlay.getScrollPosition(),s=0,l=0;if(n||(s=i-o.left),t){var u=this.wot.wtTable.wtRootElement.getBoundingClientRect();l=-1*this.clone.wtTable.TABLE.getBoundingClientRect().top+u.top}else e||(l=a-o.top);return{left:r.left-s,top:r.top-l}}},{key:"makeClone",value:function(t){if(-1===e.CLONE_TYPES.indexOf(t))throw new Error('Clone type "'.concat(t,'" is not supported.'));var n=this.wot,r=n.wtTable,o=n.rootDocument,i=n.rootWindow,a=o.createElement("DIV"),s=o.createElement("TABLE");a.className="ht_clone_".concat(t," handsontable"),a.style.position="absolute",a.style.top=0,a.style.left=0,a.style.overflow="hidden",s.className=r.TABLE.className,a.appendChild(s),this.type=t,r.wtRootElement.parentNode.appendChild(a);var l=this.wot.getSetting("preventOverflow");return!0===l||"horizontal"===l&&this.type===e.CLONE_TOP||"vertical"===l&&this.type===e.CLONE_LEFT?this.mainTableScrollableElement=i:"hidden"===i.getComputedStyle(r.wtRootElement.parentNode).getPropertyValue("overflow")?this.mainTableScrollableElement=r.holder:this.mainTableScrollableElement=Ht(r.TABLE),new Ro({cloneSource:this.wot,cloneOverlay:this,table:s})}},{key:"refresh",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.shouldBeRendered();this.clone&&(this.needFullRender||t)&&this.clone.draw(e),this.needFullRender=t}},{key:"reset",value:function(){if(this.clone){var e=this.clone.wtTable.holder,t=this.clone.wtTable.hider;P([e.style,t.style,e.parentNode.style],(function(e){e.width="",e.height=""}))}}},{key:"destroy",value:function(){new Jr(this.clone).destroy()}}]),e}();const No=Ho;function Po(e){return Po="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Po(e)}function xo(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0],t=this.wot,n=t.wtOverlays,r=t.wtViewport,o=t.getSetting("totalRows"),i=t.getSetting("totalColumns"),a=t.getSetting("rowHeaders"),s=a.length,l=t.getSetting("columnHeaders"),u=l.length,c=!1,h=e;if(this.isMaster&&(this.holderOffset=Ot(this.holder),h=r.createRenderCalculators(h),s&&!t.getSetting("fixedColumnsLeft"))){var f=n.leftOverlay.getScrollPosition(),d=this.correctHeaderWidth;this.correctHeaderWidth=f>0,d!==this.correctHeaderWidth&&(h=!1)}if(this.isMaster&&(c=n.prepareOverlays()),h)this.isMaster&&r.createVisibleCalculators(),n&&n.refresh(!0);else{this.isMaster?this.tableOffset=Ot(this.TABLE):this.tableOffset=this.wot.cloneSource.wtTable.tableOffset;var m=o>0?this.getFirstRenderedRow():0,p=i>0?this.getFirstRenderedColumn():0;this.rowFilter=new vn(m,o,u),this.columnFilter=new mn(p,i,s);var y,v=!0;if(this.isMaster){this.alignOverlaysWithTrimmingContainer();var g={};this.wot.getSetting("beforeDraw",!0,g),v=!0!==g.skipRender}if(v)if(this.tableRenderer.setHeaderContentRenderers(a,l),(this.is(No.CLONE_BOTTOM)||this.is(No.CLONE_BOTTOM_LEFT_CORNER))&&this.tableRenderer.setHeaderContentRenderers(a,[]),this.resetOversizedRows(),this.tableRenderer.setViewportSize(this.getRenderedRowsCount(),this.getRenderedColumnsCount()).setFilters(this.rowFilter,this.columnFilter).render(),this.isMaster&&(y=this.wot.wtViewport.getWorkspaceWidth(),this.wot.wtViewport.containerWidth=null,this.markOversizedColumnHeaders()),this.adjustColumnHeaderHeights(),(this.isMaster||this.is(No.CLONE_BOTTOM))&&this.markOversizedRows(),this.isMaster){this.wot.wtViewport.createVisibleCalculators(),this.wot.wtOverlays.refresh(!1),this.wot.wtOverlays.applyToDOM();var w=Yt(this.hider),b=Yt(this.TABLE);0!==w&&b!==w&&(this.columnUtils.calculateWidths(),this.tableRenderer.renderer.colGroup.render()),y!==this.wot.wtViewport.getWorkspaceWidth()&&(this.wot.wtViewport.containerWidth=null,this.columnUtils.calculateWidths(),this.tableRenderer.renderer.colGroup.render()),this.wot.getSetting("onDraw",!0)}else this.is(No.CLONE_BOTTOM)&&this.wot.cloneSource.wtOverlays.adjustElementsSize()}return this.refreshSelections(h),this.isMaster&&(n.topOverlay.resetFixedPosition(),n.bottomOverlay.clone&&n.bottomOverlay.resetFixedPosition(),n.leftOverlay.resetFixedPosition(),n.topLeftCornerOverlay&&n.topLeftCornerOverlay.resetFixedPosition(),n.bottomLeftCornerOverlay&&n.bottomLeftCornerOverlay.clone&&n.bottomLeftCornerOverlay.resetFixedPosition()),c&&n.syncScrollWithMaster(),t.drawn=!0,this}},{key:"markIfOversizedColumnHeader",value:function(e){for(var t,n,r,o=this.wot.wtTable.columnFilter.renderedToSource(e),i=this.wot.getSetting("columnHeaders").length,a=this.wot.wtSettings.settings.defaultRowHeight,s=this.wot.getSetting("columnHeaderHeight")||[];i;)i-=1,t=this.wot.wtTable.getColumnHeaderHeight(i),(n=this.wot.wtTable.getColumnHeader(o,i))&&(r=jt(n),(!t&&a=0)throw new Error("TR was expected to be rendered but is not");var u=l.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(o)];if(!u&&o>=0)throw new Error("TD or TH was expected to be rendered but is not");return u}},{key:"getColumnHeader",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=this.THEAD.childNodes[t];if(n)return n.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(e)]}},{key:"getRowHeader",value:function(e){if(0===this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0))return null;var t=this.TBODY.childNodes[this.rowFilter.sourceToRendered(e)];return t?t.childNodes[0]:void 0}},{key:"getCoords",value:function(e){var t=e;if("TD"!==t.nodeName&&"TH"!==t.nodeName&&(t=st(t,["TD","TH"])),null===t)return null;var n=t.parentNode,r=n.parentNode,o=dt(n),i=t.cellIndex;return mt(No.CLONE_TOP_LEFT_CORNER,t,this.wtRootElement)||mt(No.CLONE_TOP,t,this.wtRootElement)?"THEAD"===r.nodeName&&(o-=r.childNodes.length):o=mt(No.CLONE_BOTTOM_LEFT_CORNER,t,this.wtRootElement)||mt(No.CLONE_BOTTOM,t,this.wtRootElement)?this.wot.getSetting("totalRows")-r.childNodes.length+o:r===this.THEAD?this.rowFilter.visibleColHeadedRowToSourceRow(o):this.rowFilter.renderedToSource(o),i=mt(No.CLONE_TOP_LEFT_CORNER,t,this.wtRootElement)||mt(No.CLONE_LEFT,t,this.wtRootElement)||mt(No.CLONE_BOTTOM_LEFT_CORNER,t,this.wtRootElement)?this.columnFilter.offsettedTH(i):this.columnFilter.visibleRowHeadedColumnToSourceColumn(i),new Me(o,i)}},{key:"markOversizedRows",value:function(){if(!this.wot.getSetting("externalRowCalculator")){var e,t,n,r,o,i=this.TBODY.childNodes.length;if(i*this.wot.wtSettings.settings.defaultRowHeight!=jt(this.TBODY)-1||this.wot.getSetting("fixedRowsBottom"))for(;i;)i-=1,n=this.rowFilter.renderedToSource(i),e=this.getRowHeight(n),t=(o=(r=this.getTrForRow(n)).querySelector("th"))?jt(o):jt(r)-1,(!e&&this.wot.wtSettings.settings.defaultRowHeightthis.wot.getSetting("columnHeaders").length-1}},{key:"isRowHeaderLevelRendered",value:function(e){return e>this.wot.getSetting("rowHeaders").length-1}},{key:"isRowBeforeRenderedRows",value:function(e){var t=this.getFirstRenderedRow();return e<0&&(e=0),-1===t||ethis.getLastVisibleRow()}},{key:"isRowAfterRenderedRows",value:function(e){if(e<0){var t=this.wot.getSetting("columnHeaders").length+e;return this.isColumnHeaderLevelRendered(t)}return e>this.getLastRenderedRow()}},{key:"isColumnBeforeViewport",value:function(e){return this.columnFilter&&this.columnFilter.sourceToRendered(e)<0&&e>=0}},{key:"isColumnBeforeRenderedColumns",value:function(e){var t=this.getFirstRenderedColumn();return e<0&&(e=0),-1===t||ethis.getLastVisibleColumn()}},{key:"isColumnAfterRenderedColumns",value:function(e){if(e<0){var t=this.wot.getSetting("rowHeaders").length+e;return this.isRowHeaderLevelRendered(t)}return this.columnFilter&&e>this.getLastRenderedColumn()}},{key:"isLastRowFullyVisible",value:function(){return this.getLastVisibleRow()===this.getLastRenderedRow()}},{key:"isLastColumnFullyVisible",value:function(){return this.getLastVisibleColumn()===this.getLastRenderedColumn()}},{key:"allRowsInViewport",value:function(){return this.wot.getSetting("totalRows")===this.getVisibleRowsCount()}},{key:"allColumnsInViewport",value:function(){return this.wot.getSetting("totalColumns")===this.getVisibleColumnsCount()}},{key:"getRowHeight",value:function(e){return this.rowUtils.getHeight(e)}},{key:"getColumnHeaderHeight",value:function(e){return this.columnUtils.getHeaderHeight(e)}},{key:"getColumnWidth",value:function(e){return this.columnUtils.getWidth(e)}},{key:"getStretchedColumnWidth",value:function(e){return this.columnUtils.getStretchedColumnWidth(e)}},{key:"hasDefinedSize",value:function(){return this.hasTableHeight&&this.hasTableWidth}},{key:"isVisible",value:function(){return Et(this.TABLE)}},{key:"_modifyRowHeaderWidth",value:function(e){var t,n=rn(e)?e():null;return Array.isArray(n)?(t=n,n=function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t0,this.hasTableWidth=u>0}this.isTableVisible=Et(this.TABLE)}},{key:"markOversizedColumnHeaders",value:function(){var e=this.wot,t=e.getOverlayName(),n=e.getSetting("columnHeaders").length;if(n&&!e.wtViewport.hasOversizedColumnHeadersMarked[t]){for(var r=e.getSetting("rowHeaders").length,o=this.getRenderedColumnsCount(),i=0;i0?-s:0,$t(t,o+="px",i)}this.adjustHeaderBordersPosition(n),this.adjustElementsSize()}}},{key:"setScrollPosition",value:function(e){var t=this.wot.rootWindow,n=!1;return this.mainTableScrollableElement===t&&t.scrollX!==e?(t.scrollTo(e,Rt(t)),n=!0):this.mainTableScrollableElement.scrollLeft!==e&&(this.mainTableScrollableElement.scrollLeft=e,n=!0),n}},{key:"onScroll",value:function(){this.wot.getSetting("onScrollVertically")}},{key:"sumCellSizes",value:function(e,t){for(var n=this.wot.wtSettings.defaultColumnWidth,r=e,o=0;r0&&void 0!==arguments[0]&&arguments[0];this.updateTrimmingContainer(),(this.needFullRender||e)&&(this.adjustRootElementSize(),this.adjustRootChildrenSize(),e||(this.areElementSizesAdjusted=!0))}},{key:"adjustRootElementSize",value:function(){var e=this.wot,t=e.wtTable,n=e.rootDocument,r=e.rootWindow,o=Xt(n),i=this.clone.wtTable.holder.parentNode.style,a=this.wot.getSetting("preventOverflow");if(this.trimmingContainer!==r||"vertical"===a){var s=this.wot.wtViewport.getWorkspaceHeight();this.wot.wtOverlays.hasScrollbarBottom&&(s-=o),s=Math.min(s,t.wtRootElement.scrollHeight),i.height="".concat(s,"px")}else i.height="";this.clone.wtTable.holder.style.height=i.height;var l=Yt(this.clone.wtTable.TABLE);i.width="".concat(0===l?l:l+4,"px")}},{key:"adjustRootChildrenSize",value:function(){var e=Xt(this.wot.rootDocument);this.clone.wtTable.hider.style.height=this.hider.style.height,this.clone.wtTable.holder.style.height=this.clone.wtTable.holder.parentNode.style.height,0===e&&(e=30),this.clone.wtTable.holder.style.width="".concat(parseInt(this.clone.wtTable.holder.parentNode.style.width,10)+e,"px")}},{key:"applyToDOM",value:function(){var e=this.wot.getSetting("totalColumns");if(this.areElementSizesAdjusted||this.adjustElementsSize(),"number"==typeof this.wot.wtViewport.columnsRenderCalculator.startPosition)this.spreader.style.left="".concat(this.wot.wtViewport.columnsRenderCalculator.startPosition,"px");else{if(0!==e)throw new Error("Incorrect value of the columnsRenderCalculator");this.spreader.style.left="0"}this.spreader.style.right="",this.needFullRender&&this.syncOverlayOffset()}},{key:"syncOverlayOffset",value:function(){"number"==typeof this.wot.wtViewport.rowsRenderCalculator.startPosition?this.clone.wtTable.spreader.style.top="".concat(this.wot.wtViewport.rowsRenderCalculator.startPosition,"px"):this.clone.wtTable.spreader.style.top=""}},{key:"scrollTo",value:function(e,t){var n=this.getTableParentOffset(),r=(this.wot.cloneSource?this.wot.cloneSource:this.wot).wtTable.holder,o=0;return t&&r.offsetWidth!==r.clientWidth&&(o=Xt(this.wot.rootDocument)),t?(n+=this.sumCellSizes(0,e+1),n-=this.wot.wtViewport.getViewportWidth()):n+=this.sumCellSizes(this.wot.getSetting("fixedColumnsLeft"),e),n+=o,this.setScrollPosition(n)}},{key:"getTableParentOffset",value:function(){var e=0;return this.wot.getSetting("preventOverflow")||this.trimmingContainer!==this.wot.rootWindow||(e=this.wot.wtTable.holderOffset.left),e}},{key:"getScrollPosition",value:function(){return At(this.mainTableScrollableElement,this.wot.rootWindow)}},{key:"adjustHeaderBordersPosition",value:function(e){var t=this.wot.wtTable.holder.parentNode,n=this.wot.getSetting("rowHeaders"),r=this.wot.getSetting("fixedColumnsLeft");if(this.wot.getSetting("totalRows")?bt(t,"emptyRows"):wt(t,"emptyRows"),r&&!n.length)wt(t,"innerBorderLeft");else if(!r&&n.length){var o=gt(t,"innerBorderLeft");e?wt(t,"innerBorderLeft"):bt(t,"innerBorderLeft"),(!o&&e||o&&!e)&&this.wot.wtOverlays.adjustElementsSize()}}}],r&&li(n.prototype,r),t}(No);No.registerOverlay(No.CLONE_LEFT,hi);var fi={getFirstRenderedRow:function(){return 0===this.wot.getSetting("totalRows")?-1:0},getFirstVisibleRow:function(){return this.getFirstRenderedRow()},getLastRenderedRow:function(){return this.getRenderedRowsCount()-1},getLastVisibleRow:function(){return this.getLastRenderedRow()},getRenderedRowsCount:function(){var e=this.wot.getSetting("totalRows");return Math.min(this.wot.getSetting("fixedRowsTop"),e)},getVisibleRowsCount:function(){return this.getRenderedRowsCount()}};Z(fi,"MIXIN_NAME","stickyRowsTop",{writable:!1,enumerable:!1});const di=fi;function mi(e){return mi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},mi(e)}function pi(e){return pi=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},pi(e)}function yi(e,t){return yi=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},yi(e,t)}var vi=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){return!t||"object"!==mi(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}(this,pi(t).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&yi(e,t)}(t,e),t}(Bo);J(vi,di),J(vi,Go);const gi=vi;function wi(e){return wi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},wi(e)}function bi(e,t,n){return bi=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&ki(o,n.prototype),o},bi.apply(null,arguments)}function _i(e,t){for(var n=0;n0?-s:0,$t(e,r,o+="px")}this.adjustHeaderBordersPosition(t),this.adjustElementsSize()}}},{key:"setScrollPosition",value:function(e){var t=this.wot.rootWindow,n=!1;return this.mainTableScrollableElement===t&&t.scrollY!==e?(t.scrollTo(Lt(t),e),n=!0):this.mainTableScrollableElement.scrollTop!==e&&(this.mainTableScrollableElement.scrollTop=e,n=!0),n}},{key:"onScroll",value:function(){this.wot.getSetting("onScrollHorizontally")}},{key:"sumCellSizes",value:function(e,t){for(var n=this.wot.wtSettings.settings.defaultRowHeight,r=e,o=0;r0&&void 0!==arguments[0]&&arguments[0];this.updateTrimmingContainer(),(this.needFullRender||e)&&(this.adjustRootElementSize(),this.adjustRootChildrenSize(),e||(this.areElementSizesAdjusted=!0))}},{key:"adjustRootElementSize",value:function(){var e=this.wot,t=e.wtTable,n=e.rootDocument,r=e.rootWindow,o=Xt(n),i=this.clone.wtTable.holder.parentNode.style,a=this.wot.getSetting("preventOverflow");if(this.trimmingContainer!==r||"horizontal"===a){var s=this.wot.wtViewport.getWorkspaceWidth();this.wot.wtOverlays.hasScrollbarRight&&(s-=o),s=Math.min(s,t.wtRootElement.scrollWidth),i.width="".concat(s,"px")}else i.width="";this.clone.wtTable.holder.style.width=i.width;var l=It(this.clone.wtTable.TABLE);this.wot.wtTable.hasDefinedSize()||(l=0),i.height="".concat(0===l?l:l+4,"px")}},{key:"adjustRootChildrenSize",value:function(){var e=Xt(this.wot.rootDocument);this.clone.wtTable.hider.style.width=this.hider.style.width,this.clone.wtTable.holder.style.width=this.clone.wtTable.holder.parentNode.style.width,0===e&&(e=30),this.clone.wtTable.holder.style.height="".concat(parseInt(this.clone.wtTable.holder.parentNode.style.height,10)+e,"px")}},{key:"applyToDOM",value:function(){var e=this.wot.getSetting("totalRows");if(this.areElementSizesAdjusted||this.adjustElementsSize(),"number"==typeof this.wot.wtViewport.rowsRenderCalculator.startPosition)this.spreader.style.top="".concat(this.wot.wtViewport.rowsRenderCalculator.startPosition,"px");else{if(0!==e)throw new Error("Incorrect value of the rowsRenderCalculator");this.spreader.style.top="0"}this.spreader.style.bottom="",this.needFullRender&&this.syncOverlayOffset()}},{key:"syncOverlayOffset",value:function(){"number"==typeof this.wot.wtViewport.columnsRenderCalculator.startPosition?this.clone.wtTable.spreader.style.left="".concat(this.wot.wtViewport.columnsRenderCalculator.startPosition,"px"):this.clone.wtTable.spreader.style.left=""}},{key:"scrollTo",value:function(e,t){var n=this.wot,r=(n.cloneSource?n.cloneSource:n).wtTable.holder,o=this.getTableParentOffset(),i=0;if(t&&r.offsetHeight!==r.clientHeight&&(i=Xt(n.rootDocument)),t){var a=n.getSetting("fixedRowsBottom"),s=n.getSetting("totalRows");o+=this.sumCellSizes(0,e+1),o-=n.wtViewport.getViewportHeight()-this.sumCellSizes(s-a,s),o+=1}else o+=this.sumCellSizes(n.getSetting("fixedRowsTop"),e);return o+=i,this.setScrollPosition(o)}},{key:"getTableParentOffset",value:function(){return this.mainTableScrollableElement===this.wot.rootWindow?this.wot.wtTable.holderOffset.top:0}},{key:"getScrollPosition",value:function(){return Dt(this.mainTableScrollableElement,this.wot.rootWindow)}},{key:"redrawSelectionBorders",value:function(e){if(e&&e.cellRange){var t=e.getBorder(this.wot),n=e.getCorners();t.disappear(),t.appear(n)}}},{key:"redrawAllSelectionsBorders",value:function(){var e=this,t=this.wot.selections;this.redrawSelectionBorders(t.getCell()),P(t.getAreas(),(function(t){e.redrawSelectionBorders(t)})),this.redrawSelectionBorders(t.getFill()),this.wot.wtTable.wot.wtOverlays.leftOverlay.refresh()}},{key:"adjustHeaderBordersPosition",value:function(e){var t=this.wot.wtTable.holder.parentNode;if(this.wot.getSetting("totalColumns")?bt(t,"emptyColumns"):wt(t,"emptyColumns"),0===this.wot.getSetting("fixedRowsTop")&&this.wot.getSetting("columnHeaders").length>0){var n=gt(t,"innerBorderTop");e||0===this.wot.getSetting("totalRows")?wt(t,"innerBorderTop"):bt(t,"innerBorderTop"),(!n&&e||n&&!e)&&(this.wot.wtOverlays.adjustElementsSize(),this.redrawAllSelectionsBorders())}if(0===this.wot.getSetting("rowHeaders").length){var r=this.clone.wtTable.THEAD.querySelectorAll("th:nth-of-type(2)");if(r)for(var o=0;o0&&(s="".concat(-o,"px")),t&&"horizontal"!==t||r<0&&i-e.offsetHeight>0&&(l="".concat(-r,"px")),$t(e,s,l)}else Zt(e);var u=It(this.clone.wtTable.TABLE),c=Yt(this.clone.wtTable.TABLE);this.wot.wtTable.hasDefinedSize()||(u=0),e.style.height="".concat(0===u?u:u+4,"px"),e.style.width="".concat(0===c?c:c+4,"px")}}}],r&&Ai(n.prototype,r),t}(No);No.registerOverlay(No.CLONE_TOP_LEFT_CORNER,Pi);var xi={getFirstRenderedRow:function(){var e=this.wot.getSetting("totalRows")-this.wot.getSetting("fixedRowsBottom");return e<0?-1:e},getFirstVisibleRow:function(){return this.getFirstRenderedRow()},getLastRenderedRow:function(){return this.wot.getSetting("totalRows")-1},getLastVisibleRow:function(){return this.getLastRenderedRow()},getRenderedRowsCount:function(){var e=this.wot.getSetting("totalRows");return Math.min(this.wot.getSetting("fixedRowsBottom"),e)},getVisibleRowsCount:function(){return this.getRenderedRowsCount()}};Z(xi,"MIXIN_NAME","stickyRowsBottom",{writable:!1,enumerable:!1});const Yi=xi;function Ii(e){return Ii="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ii(e)}function ji(e){return ji=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},ji(e)}function Fi(e,t){return Fi=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},Fi(e,t)}var Wi=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){return!t||"object"!==Ii(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}(this,ji(t).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&Fi(e,t)}(t,e),t}(Bo);J(Wi,Yi),J(Wi,Go);const Bi=Wi;function Vi(e){return Vi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vi(e)}function Ui(e,t,n){return Ui=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&qi(o,n.prototype),o},Ui.apply(null,arguments)}function zi(e,t){for(var n=0;nc?u-c:0,o+="px",e.style.top="",e.style.left=r,e.style.bottom=o}this.adjustHeaderBordersPosition(t),this.adjustElementsSize()}}},{key:"setScrollPosition",value:function(e){var t=this.wot.rootWindow,n=!1;return this.mainTableScrollableElement===t?(t.scrollTo(Lt(t),e),n=!0):this.mainTableScrollableElement.scrollTop!==e&&(this.mainTableScrollableElement.scrollTop=e,n=!0),n}},{key:"onScroll",value:function(){this.wot.getSetting("onScrollHorizontally")}},{key:"sumCellSizes",value:function(e,t){for(var n=this.wot,r=n.wtTable,o=n.wtSettings.settings.defaultRowHeight,i=e,a=0;i0&&void 0!==arguments[0]&&arguments[0];this.updateTrimmingContainer(),(this.needFullRender||e)&&(this.adjustRootElementSize(),this.adjustRootChildrenSize(),e||(this.areElementSizesAdjusted=!0))}},{key:"adjustRootElementSize",value:function(){var e=this.wot,t=e.wtTable,n=e.wtViewport,r=e.rootWindow,o=Xt(this.wot.rootDocument),i=this.clone.wtTable.holder.parentNode.style,a=this.wot.getSetting("preventOverflow");if(this.trimmingContainer!==r||"horizontal"===a){var s=n.getWorkspaceWidth();this.wot.wtOverlays.hasScrollbarRight&&(s-=o),s=Math.min(s,t.wtRootElement.scrollWidth),i.width="".concat(s,"px")}else i.width="";this.clone.wtTable.holder.style.width=i.width;var l=It(this.clone.wtTable.TABLE);this.wot.wtTable.hasDefinedSize()||(l=0),i.height="".concat(l,"px")}},{key:"adjustRootChildrenSize",value:function(){var e=Xt(this.wot.rootDocument);this.clone.wtTable.hider.style.width=this.hider.style.width,this.clone.wtTable.holder.style.width=this.clone.wtTable.holder.parentNode.style.width,0===e&&(e=30),this.clone.wtTable.holder.style.height="".concat(parseInt(this.clone.wtTable.holder.parentNode.style.height,10)+e,"px")}},{key:"applyToDOM",value:function(){var e=this.wot.getSetting("totalRows");if(this.areElementSizesAdjusted||this.adjustElementsSize(),"number"==typeof this.wot.wtViewport.rowsRenderCalculator.startPosition)this.spreader.style.top="".concat(this.wot.wtViewport.rowsRenderCalculator.startPosition,"px");else{if(0!==e)throw new Error("Incorrect value of the rowsRenderCalculator");this.spreader.style.top="0"}this.spreader.style.bottom="",this.needFullRender&&this.syncOverlayOffset()}},{key:"syncOverlayOffset",value:function(){"number"==typeof this.wot.wtViewport.columnsRenderCalculator.startPosition?this.clone.wtTable.spreader.style.left="".concat(this.wot.wtViewport.columnsRenderCalculator.startPosition,"px"):this.clone.wtTable.spreader.style.left=""}},{key:"scrollTo",value:function(e,t){var n=this.getTableParentOffset(),r=(this.wot.cloneSource?this.wot.cloneSource:this.wot).wtTable.holder,o=0;t&&r.offsetHeight!==r.clientHeight&&(o=Xt(this.wot.rootDocument)),t?(n+=this.sumCellSizes(0,e+1),n-=this.wot.wtViewport.getViewportHeight(),n+=1):n+=this.sumCellSizes(this.wot.getSetting("fixedRowsBottom"),e),n+=o,this.setScrollPosition(n)}},{key:"getTableParentOffset",value:function(){return this.mainTableScrollableElement===this.wot.rootWindow?this.wot.wtTable.holderOffset.top:0}},{key:"getScrollPosition",value:function(){return Dt(this.mainTableScrollableElement,this.wot.rootWindow)}},{key:"adjustHeaderBordersPosition",value:function(e){if(0===this.wot.getSetting("fixedRowsBottom")&&this.wot.getSetting("columnHeaders").length>0){var t=this.wot.wtTable.holder.parentNode,n=gt(t,"innerBorderTop");e?wt(t,"innerBorderTop"):bt(t,"innerBorderTop"),(!n&&e||n&&!e)&&this.wot.wtOverlays.adjustElementsSize()}if(0===this.wot.getSetting("rowHeaders").length){var r=this.clone.wtTable.THEAD.querySelector("th:nth-of-type(2)");r&&(r.style["border-left-width"]=0)}}}],r&&zi(n.prototype,r),t}(No);function Ki(e){return Ki="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ki(e)}function Ji(e){return Ji=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},Ji(e)}function $i(e,t){return $i=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},$i(e,t)}No.registerOverlay(No.CLONE_BOTTOM,Xi);var Qi=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){return!t||"object"!==Ki(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}(this,Ji(t).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&$i(e,t)}(t,e),t}(Bo);J(Qi,Yi),J(Qi,ei);const Zi=Qi;function ea(e){return ea="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ea(e)}function ta(e,t,n){return ta=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&oa(o,n.prototype),o},ta.apply(null,arguments)}function na(e,t){for(var n=0;ns?i-s:0,r+="px",n+="px",t.style.top="",t.style.left=n,t.style.bottom=r}else Zt(t),this.repositionOverlay();var l=It(this.clone.wtTable.TABLE),u=Yt(this.clone.wtTable.TABLE);this.wot.wtTable.hasDefinedSize()||(l=0),t.style.height="".concat(l,"px"),t.style.width="".concat(u,"px")}}}],r&&na(n.prototype,r),t}(No);function aa(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function sa(e,t){for(var n=0;nMath.ceil(o.top+o.height)||a.clientXMath.ceil(o.left+o.width))&&(n.eventManager.removeEventListener(r,"mousemove",e),t.style.display="block")}))}}},{key:"createBorders",value:function(e){var t=this.wot.rootDocument;this.main=t.createElement("div");var n=["top","left","bottom","right","corner"],r=this.main.style;r.position="absolute",r.top=0,r.left=0;for(var o=0;o<5;o++){var i=n[o],a=t.createElement("div");a.className="wtBorder ".concat(this.settings.className||""),this.settings[i]&&this.settings[i].hide&&(a.className+=" hidden"),(r=a.style).backgroundColor=this.settings[i]&&this.settings[i].color?this.settings[i].color:e.border.color,r.height=this.settings[i]&&this.settings[i].width?"".concat(this.settings[i].width,"px"):"".concat(e.border.width,"px"),r.width=this.settings[i]&&this.settings[i].width?"".concat(this.settings[i].width,"px"):"".concat(e.border.width,"px"),this.main.appendChild(a)}this.top=this.main.childNodes[0],this.left=this.main.childNodes[1],this.bottom=this.main.childNodes[2],this.right=this.main.childNodes[3],this.topStyle=this.top.style,this.leftStyle=this.left.style,this.bottomStyle=this.bottom.style,this.rightStyle=this.right.style,this.corner=this.main.childNodes[4],this.corner.className+=" corner",this.cornerStyle=this.corner.style,this.cornerStyle.width=this.cornerDefaultStyle.width,this.cornerStyle.height=this.cornerDefaultStyle.height,this.cornerStyle.border=[this.cornerDefaultStyle.borderWidth,this.cornerDefaultStyle.borderStyle,this.cornerDefaultStyle.borderColor].join(" "),Pe()&&this.createMultipleSelectorHandles(),this.disappear();var s=this.wot.wtTable,l=s.bordersHolder;l||((l=t.createElement("div")).className="htBorders",s.bordersHolder=l,s.spreader.appendChild(l)),l.appendChild(this.main)}},{key:"createMultipleSelectorHandles",value:function(){var e=this,t=this.wot.rootDocument;this.selectionHandles={topLeft:t.createElement("DIV"),topLeftHitArea:t.createElement("DIV"),bottomRight:t.createElement("DIV"),bottomRightHitArea:t.createElement("DIV")},this.selectionHandles.topLeft.className="topLeftSelectionHandle",this.selectionHandles.topLeftHitArea.className="topLeftSelectionHandle-HitArea",this.selectionHandles.bottomRight.className="bottomRightSelectionHandle",this.selectionHandles.bottomRightHitArea.className="bottomRightSelectionHandle-HitArea",this.selectionHandles.styles={topLeft:this.selectionHandles.topLeft.style,topLeftHitArea:this.selectionHandles.topLeftHitArea.style,bottomRight:this.selectionHandles.bottomRight.style,bottomRightHitArea:this.selectionHandles.bottomRightHitArea.style},ee({position:"absolute",height:"".concat(40,"px"),width:"".concat(40,"px"),"border-radius":"".concat(parseInt(40/1.5,10),"px")},(function(t,n){e.selectionHandles.styles.bottomRightHitArea[n]=t,e.selectionHandles.styles.topLeftHitArea[n]=t})),ee({position:"absolute",height:"".concat(10,"px"),width:"".concat(10,"px"),"border-radius":"".concat(parseInt(10/1.5,10),"px"),background:"#F5F5FF",border:"1px solid #4285c8"},(function(t,n){e.selectionHandles.styles.bottomRight[n]=t,e.selectionHandles.styles.topLeft[n]=t})),this.main.appendChild(this.selectionHandles.topLeft),this.main.appendChild(this.selectionHandles.bottomRight),this.main.appendChild(this.selectionHandles.topLeftHitArea),this.main.appendChild(this.selectionHandles.bottomRightHitArea)}},{key:"isPartRange",value:function(e,t){var n=this.wot.selections.createOrGetArea();return!(!n.cellRange||e===n.cellRange.to.row&&t===n.cellRange.to.col)}},{key:"updateMultipleSelectionHandlesPosition",value:function(e,t,n,r,o,i){var a=parseInt(this.selectionHandles.styles.topLeft.width,10),s=parseInt(this.selectionHandles.styles.topLeftHitArea.width,10);this.selectionHandles.styles.topLeft.top="".concat(parseInt(n-a,10),"px"),this.selectionHandles.styles.topLeft.left="".concat(parseInt(r-a,10),"px"),this.selectionHandles.styles.topLeftHitArea.top="".concat(parseInt(n-s/4*3,10),"px"),this.selectionHandles.styles.topLeftHitArea.left="".concat(parseInt(r-s/4*3,10),"px"),this.selectionHandles.styles.bottomRight.top="".concat(parseInt(n+i,10),"px"),this.selectionHandles.styles.bottomRight.left="".concat(parseInt(r+o,10),"px"),this.selectionHandles.styles.bottomRightHitArea.top="".concat(parseInt(n+i-s/4,10),"px"),this.selectionHandles.styles.bottomRightHitArea.left="".concat(parseInt(r+o-s/4,10),"px"),this.settings.border.cornerVisible&&this.settings.border.cornerVisible()?(this.selectionHandles.styles.topLeft.display="block",this.selectionHandles.styles.topLeftHitArea.display="block",this.isPartRange(e,t)?(this.selectionHandles.styles.bottomRight.display="none",this.selectionHandles.styles.bottomRightHitArea.display="none"):(this.selectionHandles.styles.bottomRight.display="block",this.selectionHandles.styles.bottomRightHitArea.display="block")):(this.selectionHandles.styles.topLeft.display="none",this.selectionHandles.styles.bottomRight.display="none",this.selectionHandles.styles.topLeftHitArea.display="none",this.selectionHandles.styles.bottomRightHitArea.display="none"),e===this.wot.wtSettings.getSetting("fixedRowsTop")||t===this.wot.wtSettings.getSetting("fixedColumnsLeft")?(this.selectionHandles.styles.topLeft.zIndex="9999",this.selectionHandles.styles.topLeftHitArea.zIndex="9999"):(this.selectionHandles.styles.topLeft.zIndex="",this.selectionHandles.styles.topLeftHitArea.zIndex="")}},{key:"appear",value:function(e){if(!this.disabled){for(var t,n,r,o,i=this.wot,a=i.wtTable,s=i.rootDocument,l=i.rootWindow,u=a.getRenderedRowsCount(),c=0;c=e[0]&&h<=e[2]){t=h;break}}for(var f=u-1;f>=0;f-=1){var d=a.rowFilter.renderedToSource(f);if(d>=e[0]&&d<=e[2]){n=d;break}}for(var m=a.getRenderedColumnsCount(),p=0;p=e[1]&&y<=e[3]){r=y;break}}for(var v=m-1;v>=0;v-=1){var g=a.columnFilter.renderedToSource(v);if(g>=e[1]&&g<=e[3]){o=g;break}}if(void 0!==t&&void 0!==r){var w=a.getCell(new Me(t,r)),b=t!==n||r!==o,_=b?a.getCell(new Me(n,o)):w,M=Ot(w),k=b?Ot(_):M,S=Ot(a.TABLE),C=M.top,T=M.left,E=T-S.left-1,O=k.left+Yt(_)-T;if(this.isEntireColumnSelected(t,n)){var R=this.getDimensionsFromHeader("columns",r,o,S),L=null;if(R){var D=aa(R,3);L=D[0],E=D[1],O=D[2]}L&&(w=L)}var A=C-S.top-1,H=k.top+It(_)-C;if(this.isEntireRowSelected(r,o)){var N=this.getDimensionsFromHeader("rows",t,n,S),P=null;if(N){var x=aa(N,3);P=x[0],A=x[1],H=x[2]}P&&(w=P)}var Y=xt(w,l);parseInt(Y.borderTopWidth,10)>0&&(A+=1,H=H>0?H-1:0),parseInt(Y.borderLeftWidth,10)>0&&(E+=1,O=O>0?O-1:0),this.topStyle.top="".concat(A,"px"),this.topStyle.left="".concat(E,"px"),this.topStyle.width="".concat(O,"px"),this.topStyle.display="block",this.leftStyle.top="".concat(A,"px"),this.leftStyle.left="".concat(E,"px"),this.leftStyle.height="".concat(H,"px"),this.leftStyle.display="block";var I=Math.floor(this.settings.border.width/2);this.bottomStyle.top="".concat(A+H-I,"px"),this.bottomStyle.left="".concat(E,"px"),this.bottomStyle.width="".concat(O,"px"),this.bottomStyle.display="block",this.rightStyle.top="".concat(A,"px"),this.rightStyle.left="".concat(E+O-I,"px"),this.rightStyle.height="".concat(H+1,"px"),this.rightStyle.display="block";var j=this.settings.border.cornerVisible;j="function"==typeof j?j(this.settings.layerLevel):j;var F=this.wot.getSetting("onModifyGetCellCoords",n,o),W=n,B=o;if(F&&Array.isArray(F)){var V=aa(F,4);W=V[2],B=V[3]}if(Pe()||!j||this.isPartRange(W,B))this.cornerStyle.display="none";else{this.cornerStyle.top="".concat(A+H-4,"px"),this.cornerStyle.left="".concat(E+O-4,"px"),this.cornerStyle.borderRightWidth=this.cornerDefaultStyle.borderWidth,this.cornerStyle.width=this.cornerDefaultStyle.width,this.cornerStyle.display="none";var U=Nt(a.TABLE),z=U===l;z&&(U=s.documentElement),o===this.wot.getSetting("totalColumns")-1&&(z?_.getBoundingClientRect().left:_.offsetLeft)+Yt(_)+parseInt(this.cornerDefaultStyle.width,10)/2>=Ft(U)&&(this.cornerStyle.left="".concat(Math.floor(E+O-3-parseInt(this.cornerDefaultStyle.width,10)/2),"px"),this.cornerStyle.borderRightWidth=0),n===this.wot.getSetting("totalRows")-1&&(z?_.getBoundingClientRect().top:_.offsetTop)+It(_)+parseInt(this.cornerDefaultStyle.height,10)/2>=jt(U)&&(this.cornerStyle.top="".concat(Math.floor(A+H-3-parseInt(this.cornerDefaultStyle.height,10)/2),"px"),this.cornerStyle.borderBottomWidth=0),this.cornerStyle.display="block"}Pe()&&this.updateMultipleSelectionHandlesPosition(n,o,A,E,O,H)}else this.disappear()}}},{key:"isEntireColumnSelected",value:function(e,t){return e===this.wot.wtTable.getFirstRenderedRow()&&t===this.wot.wtTable.getLastRenderedRow()}},{key:"isEntireRowSelected",value:function(e,t){return e===this.wot.wtTable.getFirstRenderedColumn()&&t===this.wot.wtTable.getLastRenderedColumn()}},{key:"getDimensionsFromHeader",value:function(e,t,n,r){var o=this.wot.wtTable,i=o.wtRootElement.parentNode,a=null,s=null,l=null,u=null,c=null,h=null,f=null,d=null;switch(e){case"rows":a=function(){return o.getRowHeader.apply(o,arguments)},s=function(){return It.apply(void 0,arguments)},l="ht__selection--rows",h="top";break;case"columns":a=function(){return o.getColumnHeader.apply(o,arguments)},s=function(){return Yt.apply(void 0,arguments)},l="ht__selection--columns",h="left"}if(i.className.includes(l)){var m=this.wot.getSetting("columnHeaders").length;if(f=a(t,m-1),d=a(n,m-1),!f||!d)return!1;var p=Ot(f),y=Ot(d);return f&&d&&(u=p[h]-r[h]-1,c=y[h]+s(d)-p[h]),[f,u,c]}return!1}},{key:"changeBorderStyle",value:function(e,t){var n=this[e].style,r=t[e];!r||r.hide?wt(this[e],"hidden"):(gt(this[e],"hidden")&&bt(this[e],"hidden"),n.backgroundColor=r.color,"top"!==e&&"bottom"!==e||(n.height="".concat(r.width,"px")),"right"!==e&&"left"!==e||(n.width="".concat(r.width,"px")))}},{key:"changeBorderToDefaultStyle",value:function(e){var t=this[e].style;t.backgroundColor="#000",t.width="".concat(1,"px"),t.height="".concat(1,"px")}},{key:"toggleHiddenClass",value:function(e,t){this.changeBorderToDefaultStyle(e),t?wt(this[e],"hidden"):bt(this[e],"hidden")}},{key:"disappear",value:function(){this.topStyle.display="none",this.leftStyle.display="none",this.bottomStyle.display="none",this.rightStyle.display="none",this.cornerStyle.display="none",Pe()&&(this.selectionHandles.styles.topLeft.display="none",this.selectionHandles.styles.bottomRight.display="none")}},{key:"destroy",value:function(){this.eventManager.destroyWithOwnEventsOnly(),this.main.parentNode.removeChild(this.main)}}],n&&sa(t.prototype,n),e}();const ua=la;function ca(e){return ca="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ca(e)}function ha(e,t){for(var n=0;n4&&void 0!==arguments[4]&&arguments[4],i=e.wtTable.getCell(new Me(t,n));if("object"===ca(i)){var a=r;o&&(a=this.classNameGenerator(i),this.classNames.includes(a)||this.classNames.push(a)),wt(i,a)}return this}},{key:"linearClassNameGenerator",value:function(e,t){return function n(r){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;if(0===t||0===o)return e;var i=o>=0?o:t,a=e;if(gt(r,0==(i-=1)?e:"".concat(e,"-").concat(i))){var s=i+1;a="".concat(e,"-").concat(s)}else a=n(r,i);return a}}},{key:"draw",value:function(e){if(this.isEmpty())this.settings.border&&this.getBorder(e).disappear();else{for(var t=e.wtTable.getRenderedRowsCount(),n=e.wtTable.getRenderedColumnsCount(),r=this.getCorners(),o=(_=4,function(e){if(Array.isArray(e))return e}(b=r)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(b,_)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()),i=o[0],a=o[1],s=o[2],l=o[3],u=0;u=a&&c<=l){var h=e.wtTable.getColumnHeader(c);if(h){var f=[];this.settings.highlightHeaderClassName&&f.push(this.settings.highlightHeaderClassName),this.settings.highlightColumnClassName&&f.push(this.settings.highlightColumnClassName),wt(h,f)}}}for(var d=0;d=i&&m<=s){var p=e.wtTable.getRowHeader(m);if(p){var y=[];this.settings.highlightHeaderClassName&&y.push(this.settings.highlightHeaderClassName),this.settings.highlightRowClassName&&y.push(this.settings.highlightRowClassName),wt(p,y)}}for(var v=0;v=i&&m<=s&&g>=a&&g<=l?this.settings.className&&this.addClassAtCoords(e,m,g,this.settings.className,this.settings.markIntersections):m>=i&&m<=s?this.settings.highlightRowClassName&&this.addClassAtCoords(e,m,g,this.settings.highlightRowClassName):g>=a&&g<=l&&this.settings.highlightColumnClassName&&this.addClassAtCoords(e,m,g,this.settings.highlightColumnClassName);var w=e.getSetting("onAfterDrawSelection",m,g,r,this.settings.layerLevel);"string"==typeof w&&this.addClassAtCoords(e,m,g,w)}}e.getSetting("onBeforeDrawBorders",r,this.settings.className),this.settings.border&&this.getBorder(e).appear(r)}var b,_}},{key:"destroy",value:function(){Object.values(this.instanceBorders).forEach((function(e){return e.destroy()}))}}],n&&ha(t.prototype,n),e}();const da=fa;var ma={_hooksStorage:Object.create(null),addHook:function(e,t){return this._hooksStorage[e]||(this._hooksStorage[e]=[]),this.hot.addHook(e,t),this._hooksStorage[e].push(t),this},removeHooksByKey:function(e){var t=this;P(this._hooksStorage[e]||[],(function(n){t.hot.removeHook(e,n)}))},clearHooks:function(){var e=this;ee(this._hooksStorage,(function(t,n){return e.removeHooksByKey(n)})),this._hooksStorage={}}};Z(ma,"MIXIN_NAME","hooksRefRegisterer",{writable:!1,enumerable:!1});const pa=ma;function ya(e){return ya="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ya(e)}function va(e){return va=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},va(e)}function ga(e,t){return ga=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},ga(e,t)}function wa(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ba(e,t){for(var n=0;nn[2]&&(r=n[0],n[0]=n[2],n[2]=r),n[1]>n[3]&&(r=n[1],n[1]=n[3],n[3]=r)):n=[this.row,this.col,null,null],this.hot.populateFromArray(n[0],n[1],e,n[2],n[3],"edit")}},{key:"beginEditing",value:function(e,t){if(this.state===_a){if(this.hot.view.scrollViewport(new Me(this.row,this.col)),this.state=Ma,this.isInFullEditMode()){var n="string"==typeof e?e:ir(this.originalValue);this.setValue(n)}this.open(t),this._opened=!0,this.focus(),this.hot.view.render(),this.hot.runHooks("afterBeginEditing",this.row,this.col)}}},{key:"finishEditing",value:function(e,t,n){var r,o=this;if(n){var i=this._closeCallback;this._closeCallback=function(e){i&&i(e),n(e),o.hot.view.render()}}if(!this.isWaiting())if(this.state!==_a){if(this.state===Ma){if(e)return this.cancelChanges(),void this.hot.view.render();var a=this.getValue();r=this.hot.getSettings().trimWhitespace?[["string"==typeof a?String.prototype.trim.call(a||""):a]]:[[a]],this.state=ka,this.saveValue(r,t),this.hot.getCellValidator(this.cellProperties)?this.hot.addHookOnce("postAfterValidate",(function(e){o.state=Sa,o.discardEditor(e)})):(this.state=Sa,this.discardEditor(!0))}}else this.hot._registerTimeout((function(){o._fireCallbacks(!0)}))}},{key:"cancelChanges",value:function(){this.state=Sa,this.discardEditor()}},{key:"discardEditor",value:function(e){this.state===Sa&&(!1===e&&!0!==this.cellProperties.allowInvalid?(this.hot.selectCell(this.row,this.col),this.focus(),this.state=Ma,this._fireCallbacks(!1)):(this.close(),this._opened=!1,this._fullEditMode=!1,this.state=_a,this._fireCallbacks(!0)))}},{key:"enableFullEditMode",value:function(){this._fullEditMode=!0}},{key:"isInFullEditMode",value:function(){return this._fullEditMode}},{key:"isOpened",value:function(){return this._opened}},{key:"isWaiting",value:function(){return this.state===ka}},{key:"getEditedCellsLayerClass",value:function(){switch(this.checkEditorSection()){case"right":return"ht_clone_right";case"left":return"ht_clone_left";case"bottom":return"ht_clone_bottom";case"bottom-right-corner":return"ht_clone_bottom_right_corner";case"bottom-left-corner":return"ht_clone_bottom_left_corner";case"top":return"ht_clone_top";case"top-right-corner":return"ht_clone_top_right_corner";case"top-left-corner":return"ht_clone_top_left_corner";default:return"ht_clone_master"}}},{key:"getEditedCell",value:function(){return this.hot.getCell(this.row,this.col,!0)}},{key:"checkEditorSection",value:function(){var e=this.hot.countRows(),t="";return this.row=e-this.hot.getSettings().fixedRowsBottom?t=this.col=t&&!1!==n(r););}function Da(e,t){return t=parseInt(t.toString().replace("%",""),10),parseInt(e*t/100,10)}n(17),n(18636),n(35231),n(10678),n(12091);var Aa=n(27367),Ha=n.n(Aa);function Na(e){return Na="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Na(e)}function Pa(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0]?nn(this.TEXTAREA):(this.TEXTAREA.select(),qt(this.TEXTAREA,this.TEXTAREA.value.length))}},{key:"createElements",value:function(){var e=this.hot.rootDocument;this.TEXTAREA=e.createElement("TEXTAREA"),this.TEXTAREA.tabIndex=-1,wt(this.TEXTAREA,"handsontableInput"),this.textareaStyle=this.TEXTAREA.style,this.textareaStyle.width=0,this.textareaStyle.height=0,this.textareaStyle.overflowY="visible",this.TEXTAREA_PARENT=e.createElement("DIV"),wt(this.TEXTAREA_PARENT,"handsontableInputHolder"),gt(this.TEXTAREA_PARENT,this.layerClass)&&bt(this.TEXTAREA_PARENT,this.layerClass),wt(this.TEXTAREA_PARENT,Fa),this.textareaParentStyle=this.TEXTAREA_PARENT.style,this.TEXTAREA_PARENT.appendChild(this.TEXTAREA),this.hot.rootElement.appendChild(this.TEXTAREA_PARENT)}},{key:"hideEditableElement",value:function(){(De()||Le())&&(this.textareaStyle.textIndent="-99999px"),this.textareaStyle.overflowY="visible",this.textareaParentStyle.opacity="0",this.textareaParentStyle.height="1px",gt(this.TEXTAREA_PARENT,this.layerClass)&&bt(this.TEXTAREA_PARENT,this.layerClass),wt(this.TEXTAREA_PARENT,Fa)}},{key:"showEditableElement",value:function(){this.textareaParentStyle.height="",this.textareaParentStyle.overflow="",this.textareaParentStyle.position="",this.textareaParentStyle.right="auto",this.textareaParentStyle.opacity="1",this.textareaStyle.textIndent="",this.textareaStyle.overflowY="hidden";var e=this.TEXTAREA_PARENT.childNodes,t=!1;Ra(e.length-1,(function(n){if(gt(e[n],"handsontableEditor"))return t=!0,!1})),gt(this.TEXTAREA_PARENT,Fa)&&bt(this.TEXTAREA_PARENT,Fa),t?(this.layerClass="ht_editor_visible",wt(this.TEXTAREA_PARENT,this.layerClass)):(this.layerClass=this.getEditedCellsLayerClass(),wt(this.TEXTAREA_PARENT,this.layerClass))}},{key:"refreshValue",value:function(){var e=this.hot.toPhysicalRow(this.row),t=this.hot.getSourceDataAtCell(e,this.col);this.originalValue=t,this.setValue(t),this.refreshDimensions()}},{key:"refreshDimensions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.state===Ma||e)if(this.TD=this.getEditedCell(),this.TD){var t,n=this.hot.view.wt,r=n.wtOverlays,o=n.wtViewport,i=Ot(this.TD),a=Ot(this.hot.rootElement),s=r.topOverlay.holder,l=r.leftOverlay.holder,u=this.hot.countRows(),c=s!==this.hot.rootWindow?s.scrollTop:0,h=l!==this.hot.rootWindow?l.scrollLeft:0,f=this.checkEditorSection(),d=["","left"].includes(f)?c:0,m=["","top","bottom"].includes(f)?h:0,p=i.top===a.top?0:1,y=this.hot.getSettings(),v=this.hot.hasColHeaders(),g=this.TD.style.backgroundColor,w=i.top-a.top-p-d,b=i.left-a.left-1-m;switch(f){case"top":t=Qt(r.topOverlay.clone.wtTable.holder.parentNode);break;case"left":t=Qt(r.leftOverlay.clone.wtTable.holder.parentNode);break;case"top-left-corner":t=Qt(r.topLeftCornerOverlay.clone.wtTable.holder.parentNode);break;case"bottom-left-corner":t=Qt(r.bottomLeftCornerOverlay.clone.wtTable.holder.parentNode);break;case"bottom":t=Qt(r.bottomOverlay.clone.wtTable.holder.parentNode)}(v&&0===this.hot.getSelectedLast()[0]||y.fixedRowsBottom&&this.hot.getSelectedLast()[0]===u-y.fixedRowsBottom)&&(w+=1),0===this.hot.getSelectedLast()[1]&&(b+=1),t&&-1!==t?this.textareaParentStyle[t[0]]=t[1]:Zt(this.TEXTAREA_PARENT),this.textareaParentStyle.top="".concat(w,"px"),this.textareaParentStyle.left="".concat(b,"px"),this.showEditableElement();var _=o.rowsRenderCalculator.startPosition,M=o.columnsRenderCalculator.startPosition,k=r.leftOverlay.getScrollPosition(),S=r.topOverlay.getScrollPosition(),C=Xt(this.hot.rootDocument),T=this.TD.offsetTop+_-S,E=this.TD.offsetLeft+M-k,O=Ft(this.TD)-8,R=Kt(s)?C:0,L=Jt(l)?C:0,D=this.hot.view.maximumVisibleElementWidth(E)-9-R,A=this.TD.scrollHeight+1,H=Math.max(this.hot.view.maximumVisibleElementHeight(T)-L,23),N=xt(this.TD,this.hot.rootWindow);this.TEXTAREA.style.fontSize=N.fontSize,this.TEXTAREA.style.fontFamily=N.fontFamily,this.TEXTAREA.style.backgroundColor=g,this.autoResize.init(this.TEXTAREA,{minHeight:Math.min(A,H),maxHeight:H,minWidth:Math.min(O,D),maxWidth:D},!0)}else e||this.close()}},{key:"bindEvents",value:function(){var e=this;this.eventManager.addEventListener(this.TEXTAREA,"cut",(function(e){return Wr(e)})),this.eventManager.addEventListener(this.TEXTAREA,"paste",(function(e){return Wr(e)})),this.addHook("afterScrollHorizontally",(function(){return e.refreshDimensions()})),this.addHook("afterScrollVertically",(function(){return e.refreshDimensions()})),this.addHook("afterColumnResize",(function(){e.refreshDimensions(),e.focus()})),this.addHook("afterRowResize",(function(){e.refreshDimensions(),e.focus()}))}},{key:"allowKeyEventPropagation",value:function(){}},{key:"destroy",value:function(){this.eventManager.destroy(),this.clearHooks()}},{key:"onBeforeKeyDown",value:function(e){var t=(e.ctrlKey||e.metaKey)&&!e.altKey;if(e.target===this.TEXTAREA&&!Fr(e)){switch(e.keyCode){case lo.ARROW_RIGHT:case lo.ARROW_LEFT:case lo.ARROW_UP:case lo.ARROW_DOWN:this.isInFullEditMode()&&(this.isWaiting()||this.allowKeyEventPropagation(e.keyCode)||jr(e));break;case lo.ENTER:var n=this.hot.selection.isMultiple();if(t&&!n||e.altKey){if(this.isOpened()){var r=Vt(this.TEXTAREA),o=this.getValue(),i="".concat(o.slice(0,r),"\n").concat(o.slice(r));this.setValue(i),qt(this.TEXTAREA,r+1)}else this.beginEditing("".concat(this.originalValue,"\n"));jr(e)}e.preventDefault();break;case lo.BACKSPACE:case lo.DELETE:case lo.HOME:case lo.END:jr(e)}-1===[lo.ARROW_UP,lo.ARROW_RIGHT,lo.ARROW_DOWN,lo.ARROW_LEFT].indexOf(e.keyCode)&&this.autoResize.resize(String.fromCharCode(e.keyCode))}}}],r&&Pa(n.prototype,r),t}(Ta);const Ba=Wa;function Va(e){return Va="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Va(e)}function Ua(e,t){for(var n=0;no.countRows()-1?o.deselectCell():o.selectCell(n,0),o.getData().length&&(e.preventDefault(),jr(e),this.hot.listen(),this.TEXTAREA.focus())),za(Ga(t.prototype),"onBeforeKeyDown",this).call(this,e)}}}],r&&Ua(n.prototype,r),t}(Ba);const Ka=Xa;function Ja(e){return Ja="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ja(e)}function $a(e,t){for(var n=0;n".concat(s,""))),t.innerHTML=f},autoColumnSize:!0,modifyColWidth:function(e,t){var n=this.getPlugin("autoColumnSize"),r=e;if(n){var i=n.widths;i[t]&&(r=i[t])}return o?r:r+15}}),this.htEditor.view.wt.wtTable.holder.parentNode.style["padding-right"]="".concat(i+2,"px"),n.skipOne&&(n.skipOne=!1),this.hot._registerTimeout((function(){e.queryChoices(e.TEXTAREA.value)}))}},{key:"close",value:function(){this.removeHooksByKey("beforeKeyDown"),Za(es(t.prototype),"close",this).call(this)}},{key:"discardEditor",value:function(e){Za(es(t.prototype),"discardEditor",this).call(this,e),this.hot.view.render()}},{key:"queryChoices",value:function(e){var t=this,n=this.cellProperties.source;this.query=e,"function"==typeof n?n.call(this.cellProperties,e,(function(e){t.rawChoices=e,t.updateChoicesList(t.stripValuesIfNeeded(e))})):Array.isArray(n)?(this.rawChoices=n,this.updateChoicesList(this.stripValuesIfNeeded(n))):this.updateChoicesList([])}},{key:"updateChoicesList",value:function(e){var n=Vt(this.TEXTAREA),r=Ut(this.TEXTAREA),o=this.cellProperties.sortByRelevance,i=this.cellProperties.filter,a=null,s=null,l=e;o&&(a=t.sortByRelevance(this.stripValueIfNeeded(this.getValue()),l,this.cellProperties.filteringCaseSensitive));var u=Array.isArray(a)?a.length:0;if(!1===i)u&&(s=a[0]);else{for(var c=[],h=0,f=l.length;hl&&s>l;return u?this.flipDropdown(n):this.unflipDropdown(),this.limitDropdownIfNeeded(u?s:l,n),u}},{key:"limitDropdownIfNeeded",value:function(e,t){if(t>e){var n,r=0,o=0,i=0;do{r+=i=this.htEditor.getRowHeight(o)||this.htEditor.view.wt.wtSettings.settings.defaultRowHeight,o+=1}while(r=t?t*e:this.strippedChoices.length*e+8}},{key:"stripValueIfNeeded",value:function(e){return this.stripValuesIfNeeded([e])[0]}},{key:"stripValuesIfNeeded",value:function(e){var t=this.cellProperties.allowHtml,n=N(e,(function(e){return ir(e)})),r=N(n,(function(e){return t?e:ro(e)}));return r}},{key:"allowKeyEventPropagation",value:function(e){var t=this.htEditor.getSelectedRangeLast(),n=t?t.from.row:-1,r=!1;return e===lo.ARROW_DOWN&&n>0&&n-1&&(r=!0),r}},{key:"onBeforeKeyDown",value:function(e){var n=this,r=ns.get(this);if(r.skipOne=!1,uo(e.keyCode)||e.keyCode===lo.BACKSPACE||e.keyCode===lo.DELETE||e.keyCode===lo.INSERT){var o=0;if(e.keyCode===lo.C&&(e.ctrlKey||e.metaKey))return;this.isOpened()||(o+=10),this.htEditor&&this.hot._registerTimeout((function(){n.queryChoices(n.TEXTAREA.value),r.skipOne=!0}),o)}Za(es(t.prototype),"onBeforeKeyDown",this).call(this,e)}}],r&&$a(n.prototype,r),t}(Ka);rs.sortByRelevance=function(e,t,n){var r,o,i,a,s=[],l=e.length,u=[],c=t.length;if(0===l){for(a=0;at.charsLeft)return 1}return 0})),a=0,c=s.length;a0&&void 0!==arguments[0]?arguments[0]:null;ms(ps(t.prototype),"open",this).call(this),this.showDatepicker(e)}},{key:"close",value:function(){var e=this;this._opened=!1,this.instance._registerTimeout((function(){e.instance._refreshBorders()})),ms(ps(t.prototype),"close",this).call(this)}},{key:"finishEditing",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(e){var r=this.originalValue;void 0!==r&&this.setValue(r)}this.hideDatepicker(),ms(ps(t.prototype),"finishEditing",this).call(this,e,n)}},{key:"showDatepicker",value:function(e){this.$datePicker.config(this.getDatePickerConfig());var t,n=this.TD.getBoundingClientRect(),r=this.cellProperties.dateFormat||this.defaultDateFormat,o=this.$datePicker.config(),i=this.instance.view.isMouseDown(),a=!!e&&co(e.keyCode);this.datePickerStyle.top="".concat(this.hot.rootWindow.pageYOffset+n.top+It(this.TD),"px"),this.datePickerStyle.left="".concat(this.hot.rootWindow.pageXOffset+n.left,"px"),this.$datePicker._onInputFocus=function(){},o.format=r,this.originalValue?(t=this.originalValue,Kn()(t,r,!0).isValid()&&this.$datePicker.setMoment(Kn()(t,r),!0),this.getValue()!==this.originalValue&&this.setValue(this.originalValue),a||i||this.setValue("")):this.cellProperties.defaultDate?(t=this.cellProperties.defaultDate,o.defaultDate=t,Kn()(t,r,!0).isValid()&&this.$datePicker.setMoment(Kn()(t,r),!0),a||i||this.setValue("")):this.$datePicker.gotoToday(),this.datePickerStyle.display="block",this.$datePicker.show()}},{key:"hideDatepicker",value:function(){this.datePickerStyle.display="none",this.$datePicker.hide()}},{key:"getDatePickerConfig",value:function(){var e=this,t=this.TEXTAREA,n={};this.cellProperties&&this.cellProperties.datePickerConfig&&q(n,this.cellProperties.datePickerConfig);var r=n.onSelect,o=n.onClose;return n.field=t,n.trigger=t,n.container=this.datePicker,n.bound=!1,n.format=n.format||this.defaultDateFormat,n.reposition=n.reposition||!1,n.onSelect=function(t){var n=t;isNaN(n.getTime())||(n=Kn()(n).format(e.cellProperties.dateFormat||e.defaultDateFormat)),e.setValue(n),e.hideDatepicker(),r&&r()},n.onClose=function(){e.parentDestroyed||e.finishEditing(!1),o&&o()},n}}],r&&ds(n.prototype,r),t}(Ba);const gs=vs;function ws(e){return ws="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ws(e)}function bs(e,t){for(var n=0;n0&&(s-=1),parseInt(h.borderLeftWidth,10)>0&&(a-=1),c.height="".concat(s,"px"),c.minWidth="".concat(a,"px"),c.top="".concat(l,"px"),c.left="".concat(u,"px"),c.margin="0px",wt(this.select,Ws)}else this.close()}},{key:"onBeforeKeyDown",value:function(){var e=this.select.selectedIndex-1,t=this.select.selectedIndex+1;switch(event.keyCode){case lo.ARROW_UP:e>=0&&(this.select[e].selected=!0),jr(event),event.preventDefault();break;case lo.ARROW_DOWN:t<=this.select.length-1&&(this.select[t].selected=!0),jr(event),event.preventDefault()}}}],r&&Ys(n.prototype,r),t}(Ta);const Vs=Bs;var Us=new WeakMap,zs=O("editors"),Gs=zs.register,qs=zs.getItem,Xs=zs.hasItem,Ks=zs.getNames;function Js(e){var t={},n=e;this.getConstructor=function(){return e},this.getInstance=function(e){return e.guid in t||(t[e.guid]=new n(e)),t[e.guid]},ce.getSingleton().add("afterDestroy",(function(){t[this.guid]=null}))}function $s(e,t){var n;if("function"==typeof e)Us.get(e)||Zs(null,e),n=Us.get(e);else{if("string"!=typeof e)throw Error('Only strings and functions can be passed as "editor" parameter');n=qs(e)}if(!n)throw Error('No editor registered under name "'.concat(e,'"'));return n.getInstance(t)}function Qs(e){if(!Xs(e))throw Error('No registered editor found under "'.concat(e,'" name'));return qs(e).getConstructor()}function Zs(e,t){var n=new Js(t);"string"==typeof e&&Gs(e,n),Us.set(t,n)}zs.getValues,Zs("base",Ta),Zs("autocomplete",os),Zs("checkbox",us),Zs("date",gs),Zs("dropdown",Cs),Zs("handsontable",Ka),Zs("numeric",Rs),Zs("password",Ps),Zs("select",Vs),Zs("text",Ba);var el=new WeakMap,tl=new WeakMap;function nl(e){return"INPUT"===e.tagName&&"checkbox"===e.getAttribute("type")}var rl=n(28646),ol=n.n(rl);var il=O("renderers"),al=il.register,sl=il.getItem,ll=il.hasItem,ul=il.getNames;function cl(e){if("function"==typeof e)return e;if(!ll(e))throw Error('No registered renderer found under "'.concat(e,'" name'));return sl(e)}function hl(e,t){var n=e;return function(e){for(var r=!1,o=0,i=e.length;o7?c-7:0),f=7;f7?l-7:0),c=7;c0&&void 0!==arguments[0]&&arguments[0],n=e.getSelectedRangeLast();if(n){for(var r=n.getTopLeftCorner(),o=r.row,i=r.col,a=n.getBottomRightCorner(),s=a.row,l=a.col,u=[],c=o;c<=s;c+=1)for(var h=i;h<=l;h+=1){var f=e.getCellMeta(c,h);if("checkbox"!==f.type)return;if(!0!==f.readOnly){void 0===f.checkedTemplate&&(f.checkedTemplate=!0),void 0===f.uncheckedTemplate&&(f.uncheckedTemplate=!1);var d=e.getDataAtCell(c,h);!1===t?[f.checkedTemplate,f.checkedTemplate.toString()].includes(d)?u.push([c,h,f.uncheckedTemplate]):[f.uncheckedTemplate,f.uncheckedTemplate.toString(),null,void 0].includes(d)&&u.push([c,h,f.checkedTemplate]):u.push([c,h,f.uncheckedTemplate])}}u.length>0&&e.setDataAtCell(u)}}t.appendChild(h),d&&t.appendChild(s.createTextNode("#bad-value#")),el.has(e)||(el.set(e,!0),e.addHook("beforeKeyDown",(function(t){var n="SPACE|ENTER",r="DELETE|BACKSPACE",o=un(mo,t.keyCode);!e.getSettings().enterBeginsEditing&&o("ENTER")||(o("".concat(n,"|").concat(r))&&!Fr(t)&&function(t){var n=e.getSelectedRangeLast();if(n)for(var r=n.getTopLeftCorner(),o=n.getBottomRightCorner(),i=r.row;i<=o.row;i++)for(var a=r.col;a<=o.col;a++){var s=e.getCellMeta(i,a);if("checkbox"!==s.type)return;var l=e.getCell(i,a);if(null==l)t();else{var u=l.querySelectorAll("input[type=checkbox]");u.length>0&&!s.readOnly&&t()}}}((function(){jr(t),t.preventDefault()})),o(n)&&v(),o(r)&&v(!0))})))})),al("html",(function(e,t,n,r,o,i){for(var a=arguments.length,s=new Array(a>6?a-6:0),l=6;l7?s-7:0),u=7;u7?s-7:0),u=7;u-1;return(n.isValid()&&n.format("x")===r.format("x")||!r.isValid()||o?n:r).format(t)}(r,this.dateFormat),l=this.instance.runHooks("unmodifyRow",this.row),u=this.instance.runHooks("unmodifyCol",this.col);this.instance.setDataAtCell(l,u,s,"dateValidator"),o=!0}else o=!1;t(o)})),pl("numeric",(function(e,t){var n=e;null==n&&(n=""),this.allowEmpty&&""===n?t(!0):t(""!==n&&Oa(e))})),pl("time",(function(e,t){var n=this.timeFormat||"h:mm:ss a",r=!0,o=e;null===o&&(o=""),o=/^\d{3,}$/.test(o)?parseInt(o,10):o;var i=/^\d{1,2}$/.test(o);i&&(o+=":00");var a=Kn()(o,dl,!0).isValid()?Kn()(o):Kn()(o,n),s=a.isValid(),l=Kn()(o,n,!0).isValid()&&!i;if(this.allowEmpty&&""===o&&(s=!0,l=!0),s||(r=!1),!s&&l&&(r=!0),s&&!l)if(!0===this.correctFormat){var u=a.format(n),c=this.instance.runHooks("unmodifyRow",this.row),h=this.instance.runHooks("unmodifyCol",this.col);this.instance.setDataAtCell(c,h,u,"timeValidator"),r=!0}else r=!1;t(r)}));var bl="autocomplete";const _l={editor:Qs(bl),renderer:cl(bl),validator:wl(bl)};var Ml="checkbox";const kl={editor:Qs(Ml),renderer:cl(Ml)};var Sl="date";const Cl={editor:Qs(Sl),renderer:cl("autocomplete"),validator:wl(Sl)},Tl={editor:Qs("dropdown"),renderer:cl("autocomplete"),validator:wl("autocomplete")},El={editor:Qs("handsontable"),renderer:cl("autocomplete")};var Ol="numeric";const Rl={editor:Qs(Ol),renderer:cl(Ol),validator:wl(Ol),dataType:"number"};var Ll="password";const Dl={editor:Qs(Ll),renderer:cl(Ll),copyable:!1};var Al="text";const Hl={editor:Qs(Al),renderer:cl(Al)},Nl={editor:Qs("text"),renderer:cl("text"),validator:wl("time")};var Pl=O("cellTypes"),xl=Pl.register,Yl=Pl.getItem,Il=Pl.hasItem,jl=Pl.getNames;function Fl(e){if(!Il(e))throw Error('You declared cell type "'.concat(e,'" as a string that is not mapped to a known object.\n Cell type must be an object or a string mapped to an object registered by "Handsontable.cellTypes.registerCellType" method'));return Yl(e)}function Wl(e,t){var n=t.editor,r=t.renderer,o=t.validator;n&&Zs(e,n),r&&al(e,r),o&&pl(e,o),xl(e,t)}function Bl(e,t){function n(){}z(n,e);for(var r=0,o=t.length;r0;)t=(n-1)%zl,r=String.fromCharCode(65+t)+r,n=parseInt((n-t)/zl,10);return r}function ql(e){var t=0;if(e)for(var n=0,r=e.length-1;n0&&void 0!==arguments[0]?arguments[0]:100,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4,o=[];for(e=0;e0&&void 0!==arguments[0]?arguments[0]:100,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4,o=[];for(e=0;ethis.delay&&(this._then=e-t%this.delay,this.func())}else this.func()}}]),e}();function nu(e){return nu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},nu(e)}function ru(e,t){for(var n=0;n0?s:this.instance.countSourceCols(),a=!0),e=0;e1&&void 0!==arguments[1]?arguments[1]:1,r=arguments.length>2?arguments[2]:void 0,o=0,i=e;if(("number"!=typeof i||i>=this.instance.countSourceRows())&&(i=this.instance.countSourceRows()),!1===this.instance.runHooks("beforeCreateRow",i,n,r))return 0;for(var a=this.instance.getSettings().maxRows,s=this.instance.countCols(),l=function(){var e=null;"array"===t.instance.dataType?t.instance.getSettings().dataSchema?e=X(t.getSchema()):(e=[],Ra(s-1,(function(){return e.push(null)}))):"function"===t.instance.dataType?e=t.instance.getSettings().dataSchema(i):q(e={},t.getSchema()),i===t.instance.countSourceRows()?t.dataSource.push(e):t.spliceData(i,0,e),o+=1};o1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2?arguments[2]:void 0;if(!this.instance.isColumnModificationAllowed())throw new Error("Cannot create new column. When data source in an object, you can only have as much columns as defined in first data row, data schema or in the 'columns' setting.If you want to be able to add new columns, you have to use array datasource.");var r,o=this.instance.countSourceRows(),i=this.dataSource,a=this.instance.countCols(),s="number"!=typeof e||e>=a?a:e,l=0;if(!1===this.instance.runHooks("beforeCreateCol",s,t,n))return 0;r=s;for(var u=this.instance.getSettings().maxCols;l=this.instance.countCols()){if(o>0)for(var h=0;h1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2?arguments[2]:void 0,r="number"!=typeof e?-t:e,o=this.instance.runHooks("modifyRemovedAmount",t,r),i=this.instance.countSourceRows();r=(i+r)%i;var a=this.visualRowsToPhysical(r,o);if(!1!==this.instance.runHooks("beforeRemoveRow",r,o,a,n)){var s=this.dataSource,l=this.filterData(r,o);l&&(s.length=0,Array.prototype.push.apply(s,l)),this.instance.runHooks("afterRemoveRow",r,o,a,n),this.instance.forceFullRender=!0}}},{key:"removeCol",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2?arguments[2]:void 0;if("object"===this.instance.dataType||this.instance.getSettings().columns)throw new Error("cannot remove column with object data source or columns option specified");var r="number"!=typeof e?-t:e;r=(this.instance.countCols()+r)%this.instance.countCols();var o=this.visualColumnsToPhysical(r,t),i=o.slice(0).sort((function(e,t){return t-e}));if(!1!==this.instance.runHooks("beforeRemoveCol",r,t,o,n)){for(var a=!0,s=i.length,l=this.dataSource,u=0;u3?a-3:0),l=3;l3?a-3:0),l=3;l-1){var a=t.split("."),s=r;if(!s)return null;for(var l=0,u=a.length;l-1){var u,c=t.split("."),h=a,f=0;for(f=0,u=c.length-1;f0?o[0].length:0,s=["","
    "],l=t?["",""]:[],u=["",""],c=n?1:0,h=t?1:0,f=0;f".concat(e.getColHeader(p-c),"");else if(y)v="".concat(e.getRowHeader(f-h),"");else{var g=o[f][p],w=e.getCellMeta(f-c,p-h),b=w.hidden,_=w.rowspan,M=w.colspan;if(!b){var k=[];if(_&&k.push('rowspan="'.concat(_,'"')),M&&k.push('colspan="'.concat(M,'"')),lr(g))v="");else{var S=g.toString().replace(/((\r\n|\n)?|\r\n|\n)/g,"
    \r\n").replace(/\x20/gi," ").replace(/\t/gi," ");v="").concat(S,"")}}}m.push(v)}var C=[""].concat(m,[""]).join("");d?l.splice(1,0,C):u.splice(-1,0,C)}return s.splice(1,0,l.join(""),u.join("")),s.join("")}function mu(e){for(var t=e.length,n=[""],r=0;r");for(var s=0;s(\r\n|\n)?|\r\n|\n)/g,"
    \r\n").replace(/\x20/gi," ").replace(/\t/gi," ");a.push("
    "))}n.push.apply(n,[""].concat(a,[""])),r+1===t&&n.push("")}return n.push("
    ".concat(u,"
    "),n.join("")}function pu(e,t){var n;return e.msMatchesSelector?n=e.msMatchesSelector(t):e.matches&&(n=e.matches(t)),n}function yu(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document,n={},r=t.createDocumentFragment(),o=t.createElement("div");r.appendChild(o);var i=e;if("string"==typeof i&&(o.insertAdjacentHTML("afterbegin","".concat(i)),i=o.querySelector("table")),i&&function(e){return"TABLE"===(e&&e.nodeName||"")}(i)){var a=o.querySelector("style"),s=null,l=[];a&&(t.body.appendChild(a),a.disabled=!0,s=a.sheet,l=s?Array.from(s.cssRules):[],t.body.removeChild(a));var u,c=o.querySelector('meta[name$="enerator"]'),h=null!==i.querySelector("tbody th"),f=Array.from(i.querySelector("tr").cells).reduce((function(e,t){return e+t.colSpan}),0)-(h?1:0),d=i.tFoot&&Array.from(i.tFoot.rows)||[],m=[],p=!1,y=0;if(i.tHead){var v=Array.from(i.tHead.rows).filter((function(e){var t=null!==e.querySelector("td");return t&&m.push(e),!t}));p=(y=v.length)>0,y>1?n.nestedHeaders=Array.from(v).reduce((function(e,t){var n=Array.from(t.cells).reduce((function(e,t,n){if(h&&0===n)return e;var r=t.colSpan,o=t.innerHTML,i=r>1?{label:o,colspan:r}:o;return e.push(i),e}),[]);return e.push(n),e}),[]):p&&(n.colHeaders=Array.from(v[0].children).reduce((function(e,t,n){return h&&0===n||e.push(t.innerHTML),e}),[]))}m.length&&(n.fixedRowsTop=m.length),d.length&&(n.fixedRowsBottom=d.length);var g=[].concat(m,fu(Array.from(i.tBodies).reduce((function(e,t){return e.push.apply(e,fu(Array.from(t.rows))),e}),[])),fu(d));u=g.length;for(var w=new Array(u),b=0;b1||i>1){for(var s=k;s/gim,"\r\n").replace(/(<([^>]+)>)/gi,"").replace(/ /gi," "):c&&/excel/gi.test(c.content)?w[k][a]=r.replace(/[\r\n]?[\x20]{0,2}/gim,"\r\n").replace(/(<([^>]+)>)/gi,"").replace(/ /gi," "):w[k][a]=r.replace(/[\r\n]?/gim,"\r\n").replace(/(<([^>]+)>)/gi,"").replace(/ /gi," ")}else M.push(r)},O=0;O=0&&o.col>=0&&!a.cells?i.setRangeEnd(o):(l||u)&&o.row>=0&&o.col>=0&&!a.cells?i.setRangeEnd(new Me(o.row,o.col)):l&&o.row<0&&!a.column?i.setRangeEnd(new Me(s.to.row,o.col)):u&&o.col<0&&!a.row?i.setRangeEnd(new Me(o.row,s.to.col)):(!l&&!u&&o.col<0||l&&o.col<0)&&!a.row?i.selectRows(s.from.row,o.row):(!l&&!u&&o.row<0||u&&o.row<0)&&!a.column&&i.selectColumns(s.from.col,o.col);else{var c=new Me(o.row,o.col);c.row<0&&(c.row=0),c.col<0&&(c.col=0);var h=!i.inInSelection(c),f=n||r&&h;o.row<0&&o.col>=0&&!a.column?f&&i.selectColumns(o.col):o.col<0&&o.row>=0&&!a.row?f&&i.selectRows(o.row):o.col>=0&&o.row>=0&&!a.cells?f&&i.setRangeStart(o):o.col<0&&o.row<0&&i.setRangeStart(o)}}var bu=new Map([["mousedown",wu],["mouseover",function(e){var t=e.isLeftClick,n=e.coords,r=e.selection,o=e.controller;if(t){var i=r.isSelectedByRowHeader(),a=r.isSelectedByColumnHeader(),s=r.tableProps.countCols(),l=r.tableProps.countRows();a&&!o.column?r.setRangeEnd(new Me(l-1,n.col)):i&&!o.row?r.setRangeEnd(new Me(n.row,s-1)):o.cell||r.setRangeEnd(n)}}],["touchstart",wu]]);function _u(e,t){var n=t.coords,r=t.selection,o=t.controller;bu.get(e.type)({coords:n,selection:r,controller:o,isShiftKey:e.shiftKey,isLeftClick:zr(e)||"touchstart"===e.type,isRightClick:Ur(e)})}function Mu(e,t){for(var n=0;n0||"auto"===n){var r=e.instance.countRows();if("number"==typeof n)t.startRow=Math.max(t.startRow-n,0),t.endRow=Math.min(t.endRow+n,r-1);else if("auto"===n){var o=t.startRow+t.endRow-t.startRow,i=Math.ceil(o/r*12);t.startRow=Math.max(t.startRow-i,0),t.endRow=Math.min(t.endRow+i,r-1)}}e.instance.runHooks("afterViewportRowCalculatorOverride",t)},viewportColumnCalculatorOverride:function(t){var n=e.settings.viewportColumnRenderingOffset;if("auto"===n&&e.settings.fixedColumnsLeft&&(n=10),n>0||"auto"===n){var r=e.instance.countCols();if("number"==typeof n&&(t.startColumn=Math.max(t.startColumn-n,0),t.endColumn=Math.min(t.endColumn+n,r-1)),"auto"===n){var o=t.startColumn+t.endColumn-t.startColumn,i=Math.ceil(o/r*12);t.startRow=Math.max(t.startColumn-i,0),t.endColumn=Math.min(t.endColumn+i,r-1)}}e.instance.runHooks("afterViewportColumnCalculatorOverride",t)},rowHeaderWidth:function(){return e.settings.rowHeaderWidth},columnHeaderHeight:function(){var t=e.instance.runHooks("modifyColumnHeaderHeight");return e.settings.columnHeaderHeight||t}};this.instance.runHooks("beforeInitWalkontable",n),this.wt=new Ro(n),this.activeWt=this.wt;var r=this.wt.wtTable.spreader,o=this.instance.rootElement.getBoundingClientRect(),i=o.width,a=o.height;this.setLastSize(i,a),this.eventManager.addEventListener(r,"mousedown",(function(e){e.target===r&&3===e.which&&Wr(e)})),this.eventManager.addEventListener(r,"contextmenu",(function(e){e.target===r&&3===e.which&&Wr(e)})),this.eventManager.addEventListener(this.instance.rootDocument.documentElement,"click",(function(){e.settings.observeDOMVisibility&&e.wt.drawInterrupted&&(e.instance.forceFullRender=!0,e.render())}))}},{key:"isTextSelectionAllowed",value:function(e){if(en(e))return!0;var t=ut(e,this.instance.view.wt.wtTable.spreader);return!(!0!==this.settings.fragmentSelection||!t)||!("cell"!==this.settings.fragmentSelection||!this.isSelectedOnlyCell()||!t)||!(this.settings.fragmentSelection||!this.isCellEdited()||!this.isSelectedOnlyCell())}},{key:"isMouseDown",value:function(){return ku.get(this).mouseDown}},{key:"isSelectedOnlyCell",value:function(){var e,t,n=(e=this.instance.getSelectedLast()||[],t=4,function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()),r=n[0],o=n[1],i=n[2],a=n[3];return void 0!==r&&r===i&&o===a}},{key:"isCellEdited",value:function(){var e=this.instance.getActiveEditor();return e&&e.isOpened()}},{key:"beforeRender",value:function(e,t){e&&this.instance.runHooks("beforeRender",this.instance.forceFullRender,t)}},{key:"onDraw",value:function(e){e&&this.instance.runHooks("afterRender",this.instance.forceFullRender)}},{key:"appendRowHeader",value:function(e,t){if(t.firstChild){var n=t.firstChild;if(!gt(n,"relative"))return Mt(t),void this.appendRowHeader(e,t);this.updateCellHeader(n.querySelector(".rowHeader"),e,this.instance.getRowHeader)}else{var r=this.instance,o=r.rootDocument,i=r.getRowHeader,a=o.createElement("div"),s=o.createElement("span");a.className="relative",s.className="rowHeader",this.updateCellHeader(s,e,i),a.appendChild(s),t.appendChild(a)}this.instance.runHooks("afterGetRowHeader",e,t)}},{key:"appendColHeader",value:function(e,t){if(t.firstChild){var n=t.firstChild;gt(n,"relative")?this.updateCellHeader(n.querySelector(".colHeader"),e,this.instance.getColHeader):(Mt(t),this.appendColHeader(e,t))}else{var r=this.instance.rootDocument,o=r.createElement("div"),i=r.createElement("span");o.className="relative",i.className="colHeader",this.updateCellHeader(i,e,this.instance.getColHeader),o.appendChild(i),t.appendChild(o)}this.instance.runHooks("afterGetColHeader",e,t)}},{key:"updateCellHeader",value:function(e,t,n){var r=t,o=this.wt.wtOverlays.getParentOverlay(e)||this.wt;e.parentNode&&(gt(e,"colHeader")?r=o.wtTable.columnFilter.sourceToRendered(t):gt(e,"rowHeader")&&(r=o.wtTable.rowFilter.sourceToRendered(t))),r>-1?Ct(e,n(t)):(Tt(e,String.fromCharCode(160)),wt(e,"cornerHeader"))}},{key:"maximumVisibleElementWidth",value:function(e){var t=this.wt.wtViewport.getWorkspaceWidth()-e;return t>0?t:0}},{key:"maximumVisibleElementHeight",value:function(e){var t=this.wt.wtViewport.getWorkspaceHeight()-e;return t>0?t:0}},{key:"setLastSize",value:function(e,t){var n=ku.get(this),r=[e,t];n.lastWidth=r[0],n.lastHeight=r[1]}},{key:"getLastSize",value:function(){var e=ku.get(this);return{width:e.lastWidth,height:e.lastHeight}}},{key:"mainViewIsActive",value:function(){return this.wt===this.activeWt}},{key:"destroy",value:function(){this.wt.destroy(),this.eventManager.destroy()}}],n&&Mu(t.prototype,n),e}();const Cu=Su;function Tu(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:[];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.hot=t,this.data=n,this.dataType="array",this.colToProp=function(){},this.propToCol=function(){}}var t,n;return t=e,n=[{key:"getData",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.data;return e&&(t=this.getByRange({row:0,col:0},{row:Math.max(this.countRows()-1,0),col:Math.max(this.countColumns()-1,0)},!0)),t}},{key:"setData",value:function(e){this.data=e}},{key:"getAtColumn",value:function(e){var t=this,n=[];return P(this.data,(function(r){var o,i=t.colToProp(e);o="string"==typeof i?te(r,i):"function"==typeof i?i(r):r[i],n.push(o)})),n}},{key:"getAtRow",value:function(e){return this.data[e]}},{key:"getAtCell",value:function(e,t){var n=null,r=this.hot.runHooks("modifyRowData",e),o=isNaN(r)?r:this.data[e];if(o){var i=this.colToProp(t);n="string"==typeof i?te(o,i):"function"==typeof i?i(this.data.slice(e,e+1)[0]):o[i]}return n}},{key:"getByRange",value:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=Math.min(e.row,t.row),i=Math.min(e.col,t.col),a=Math.max(e.row,t.row),s=Math.max(e.col,t.col),l=[];return Ra(o,a,(function(e){var t,o=n.getAtRow(e);"array"===n.dataType?t=o.slice(i,s+1):"object"===n.dataType&&(t=r?[]:{},Ra(i,s,(function(e){var i=n.colToProp(e);r?t.push(o[i]):t[i]=o[i]}))),l.push(t)})),l}},{key:"countRows",value:function(){return Array.isArray(this.data)?this.data.length:0}},{key:"countColumns",value:function(){var e=0;return Array.isArray(this.data)&&("array"===this.dataType?e=this.data[0].length:"object"===this.dataType&&(e=Object.keys(this.data[0]).length)),e}},{key:"destroy",value:function(){this.data=null,this.hot=null}}],n&&Tu(t.prototype,n),e}();const Ou=Eu;function Ru(e,t){for(var n=0;n0&&(Dh-=1),0===Dh&&(Rh.clearEvents(),Lh.clear(),Dh=0)}function Nh(){return Array.from(Lh.values()).some((function(e){return fo(e)}))}n(32982),n(3101);var Ph=O("highlight/types"),xh=Ph.register,Yh=Ph.getItem;function Ih(e,t){return Yh(e)(t)}function jh(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:0;return this.layerLevel=e,this}},{key:"getCell",value:function(){return this.cell}},{key:"getFill",value:function(){return this.fill}},{key:"createOrGetArea",value:function(){var e,t=this.layerLevel;return this.areas.has(t)?e=this.areas.get(t):(e=Ih(Uh,Wh({layerLevel:t},this.options)),this.areas.set(t,e)),e}},{key:"getAreas",value:function(){return jh(this.areas.values())}},{key:"createOrGetHeader",value:function(){var e,t=this.layerLevel;return this.headers.has(t)?e=this.headers.get(t):(e=Ih(Gh,Wh({},this.options)),this.headers.set(t,e)),e}},{key:"getHeaders",value:function(){return jh(this.headers.values())}},{key:"createOrGetActiveHeader",value:function(){var e,t=this.layerLevel;return this.activeHeaders.has(t)?e=this.activeHeaders.get(t):(e=Ih("active-header",Wh({},this.options)),this.activeHeaders.set(t,e)),e}},{key:"getActiveHeaders",value:function(){return jh(this.activeHeaders.values())}},{key:"getCustomSelections",value:function(){return jh(this.customSelections.values())}},{key:"addCustomSelection",value:function(e){this.customSelections.push(Ih("custom-selection",Wh({},e)))}},{key:"clear",value:function(){this.cell.clear(),this.fill.clear(),P(this.areas.values(),(function(e){e.clear()})),P(this.headers.values(),(function(e){e.clear()})),P(this.activeHeaders.values(),(function(e){e.clear()}))}},{key:Symbol.iterator,value:function(){return[this.cell,this.fill].concat(jh(this.areas.values()),jh(this.headers.values()),jh(this.activeHeaders.values()),jh(this.customSelections))[Symbol.iterator]()}}],n&&Vh(t.prototype,n),e}();const Xh=qh;function Kh(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,n=this.size()+t-1;return n>=0&&(e=this.ranges[n]),e}},{key:Symbol.iterator,value:function(){return this.ranges[Symbol.iterator]()}}],n&&Kh(t.prototype,n),e}();const $h=Jh;var Qh={_localHooks:Object.create(null),addLocalHook:function(e,t){return this._localHooks[e]||(this._localHooks[e]=[]),this._localHooks[e].push(t),this},runLocalHooks:function(e){for(var t=this,n=arguments.length,r=new Array(n>1?n-1:0),o=1;oo-1?n&&s>0&&!(a&&h.row>=o-a-1)?(this.runLocalHooks("insertRowRequire",o),o=this.options.countRows()):c&&(r.row=1-o,r.col=h.col+r.col===i-1?1-i:1):c&&h.row+r.row<0&&h.col+r.col>=0&&(r.row=o-1,r.col=h.col+r.col===0?i-1:-1),h.col+r.col>i-1?n&&l>0?(this.runLocalHooks("insertColRequire",i),i=this.options.countCols()):u&&(r.row=h.row+r.row===o-1?1-o:1,r.col=1-i):u&&h.col+r.col<0&&h.row+r.row>=0&&(r.row=h.row+r.row===0?o-1:-1,r.col=i-1);var f=new Me(h.row+r.row,h.col+r.col),d=0,m=0;return f.row<0?(d=-1,f.row=0):f.row>0&&f.row>=o&&(d=1,f.row=o-1),f.col<0?(m=-1,f.col=0):f.col>0&&f.col>=i&&(m=1,f.col=i-1),this.runLocalHooks("afterTransformStart",f,d,m),f}},{key:"transformEnd",value:function(e,t){var n=new Me(e,t);this.runLocalHooks("beforeTransformEnd",n);var r=this.options.countRows(),o=this.options.countCols(),i=this.range.current(),a=new Me(i.to.row+n.row,i.to.col+n.col),s=0,l=0;return a.row<0?(s=-1,a.row=0):a.row>0&&a.row>=r&&(s=1,a.row=r-1),a.col<0?(l=-1,a.col=0):a.col>0&&a.col>=o&&(l=1,a.col=o-1),this.runLocalHooks("afterTransformEnd",a,s,l),a}}])&&ef(t.prototype,n),e}();J(tf,Zh);const nf=tf;function rf(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function of(e){return of="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},of(e)}var af=[3,2],sf=[["number"],["number","string"],["number","undefined"],["number","string","undefined"]],lf=Symbol("root"),uf=Symbol("child");function cf(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:lf;if(t!==lf&&t!==uf)throw new Error("The second argument is used internally only and cannot be overwritten.");var n=Array.isArray(e),r=t===lf,o=0;if(n){var i=e[0];if(0===e.length)o=1;else if(r&&i instanceof Ce)o=3;else if(r&&Array.isArray(i))o=cf(i,uf);else if(e.length>=2&&e.length<=4){var a=!e.some((function(e,t){return!sf[t].includes(of(e))}));a&&(o=2)}}return o}function hf(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.keepDirection,r=void 0!==n&&n,o=t.propToCol;if(!af.includes(e))throw new Error("Unsupported selection ranges schema type was provided.");return function(t){var n=3===e,i=n?t.from.row:t[0],a=n?t.from.col:t[1],s=n?t.to.row:t[2],l=n?t.to.col:t[3];if("function"==typeof o&&("string"==typeof a&&(a=o(a)),"string"==typeof l&&(l=o(l))),sr(s)&&(s=i),sr(l)&&(l=a),!r){var u=i,c=a,h=s,f=l;i=Math.min(u,h),a=Math.min(c,f),s=Math.max(u,h),l=Math.max(c,f)}return[i,a,s,l]}}function ff(e){return"number"==typeof e&&e>=0&&e<(arguments.length>1&&void 0!==arguments[1]?arguments[1]:1/0)}function df(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function mf(){var e,t,n=(e=["Unsupported format of the selection ranges was passed. To select cells pass \n the coordinates as an array of arrays ([[rowStart, columnStart/columnPropStart, rowEnd, columnEnd/columnPropEnd]]) \n or as an array of CellRange objects."],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return mf=function(){return n},n}function pf(e,t){for(var n=0;n2&&void 0!==arguments[2]&&arguments[2],r="multiple"===this.settings.selectionMode,o=sr(t)?Nh():t,i=e.row<0,a=e.col<0,s=i&&a;i&&(e.row=0),a&&(e.col=0),this.selectedByCorner=s,this.runLocalHooks("beforeSetRangeStart".concat(n?"Only":""),e),(!r||r&&!o&&sr(t))&&this.selectedRange.clear(),this.selectedRange.add(e),0===this.getLayerLevel()&&(this.selectedByRowHeader.clear(),this.selectedByColumnHeader.clear()),!s&&a&&this.selectedByRowHeader.add(this.getLayerLevel()),!s&&i&&this.selectedByColumnHeader.add(this.getLayerLevel()),n||this.setRangeEnd(e)}},{key:"setRangeStartOnly",value:function(e,t){this.setRangeStart(e,t,!0)}},{key:"setRangeEnd",value:function(e){if(!this.selectedRange.isEmpty()){this.runLocalHooks("beforeSetRangeEnd",e),this.begin();var t=this.selectedRange.current();"single"!==this.settings.selectionMode&&t.setTo(new Me(e.row,e.col)),this.highlight.getCell().clear(),this.highlight.isEnabledFor(zh)&&this.highlight.getCell().add(this.selectedRange.current().highlight);var n=this.getLayerLevel();n=1)&&(r.add(t.from).add(t.to),1===n&&(this.highlight.useLayerLevel(n-1).createOrGetArea().add(this.selectedRange.previous().from),this.highlight.useLayerLevel(n))),this.highlight.isEnabledFor(Gh)&&("single"===this.settings.selectionMode?o.add(t.highlight):o.add(t.from).add(t.to)),this.isSelectedByRowHeader()&&this.tableProps.countCols()===t.getWidth()&&i.add(new Me(t.from.row,-1)).add(new Me(t.to.row,-1)),this.isSelectedByColumnHeader()&&this.tableProps.countRows()===t.getHeight()&&i.add(new Me(-1,t.from.col)).add(new Me(-1,t.to.col)),this.runLocalHooks("afterSetRangeEnd",e)}}},{key:"isMultiple",value:function(){var e=re(!this.selectedRange.current().isSingle());return this.runLocalHooks("afterIsMultipleSelection",e),e.value}},{key:"transformStart",value:function(e,t,n){this.setRangeStart(this.transformation.transformStart(e,t,n))}},{key:"transformEnd",value:function(e,t){this.setRangeEnd(this.transformation.transformEnd(e,t))}},{key:"getLayerLevel",value:function(){return this.selectedRange.size()-1}},{key:"isSelected",value:function(){return!this.selectedRange.isEmpty()}},{key:"isSelectedByRowHeader",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.getLayerLevel();return-1===e?this.selectedByRowHeader.size>0:this.selectedByRowHeader.has(e)}},{key:"isSelectedByColumnHeader",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.getLayerLevel();return-1===e?this.selectedByColumnHeader.size>0:this.selectedByColumnHeader.has(e)}},{key:"isSelectedByAnyHeader",value:function(){return this.isSelectedByRowHeader(-1)||this.isSelectedByColumnHeader(-1)}},{key:"isSelectedByCorner",value:function(){return this.selectedByCorner}},{key:"inInSelection",value:function(e){return this.selectedRange.includes(e)}},{key:"isCellCornerVisible",value:function(){return this.settings.fillHandle&&!this.tableProps.isEditorOpened()&&!this.isMultiple()}},{key:"isAreaCornerVisible",value:function(e){return(!Number.isInteger(e)||e===this.getLayerLevel())&&this.settings.fillHandle&&!this.tableProps.isEditorOpened()&&this.isMultiple()}},{key:"clear",value:function(){this.selectedRange.clear(),this.highlight.clear()}},{key:"deselect",value:function(){this.isSelected()&&(this.inProgress=!1,this.clear(),this.runLocalHooks("afterDeselect"))}},{key:"selectAll",value:function(){this.clear(),this.setRangeStart(new Me(-1,-1)),this.selectedByRowHeader.add(this.getLayerLevel()),this.selectedByColumnHeader.add(this.getLayerLevel()),this.setRangeEnd(new Me(this.tableProps.countRows()-1,this.tableProps.countCols()-1))}},{key:"selectCells",value:function(e){var t=this,n=cf(e);if(1===n)return!1;if(0===n)throw new Error(Jn(mf()));var r=hf(n,{propToCol:function(e){return t.tableProps.propToCol(e)},keepDirection:!0}),o=this.tableProps.countRows(),i=this.tableProps.countCols(),a=!e.some((function(e){var t=df(r(e),4),n=t[0],a=t[1],s=t[2],l=t[3];return!(ff(n,o)&&ff(a,i)&&ff(s,o)&&ff(l,i))}));return a&&(this.clear(),P(e,(function(e){var n=df(r(e),4),o=n[0],i=n[1],a=n[2],s=n[3];t.setRangeStartOnly(new Me(o,i),!1),t.setRangeEnd(new Me(a,s)),t.finish()}))),a}},{key:"selectColumns",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n="string"==typeof e?this.tableProps.propToCol(e):e,r="string"==typeof t?this.tableProps.propToCol(t):t,o=this.tableProps.countCols(),i=ff(n,o)&&ff(r,o);return i&&(this.setRangeStartOnly(new Me(-1,n)),this.setRangeEnd(new Me(this.tableProps.countRows()-1,r)),this.finish()),i}},{key:"selectRows",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=this.tableProps.countRows(),r=ff(e,n)&&ff(t,n);return r&&(this.setRangeStartOnly(new Me(e,-1)),this.setRangeEnd(new Me(t,this.tableProps.countCols()-1)),this.finish()),r}}],n&&pf(t.prototype,n),e}();J(yf,Zh);const vf=yf;function gf(e){return gf="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},gf(e)}function wf(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function bf(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t2&&void 0!==arguments[2]&&arguments[2],f=!1,d=this,m=function(){},p=new Jr(d);G(m.prototype,Fu.prototype),G(m.prototype,t),G(m.prototype,k(t)),s=m.prototype,Sh(u=Bu(l=t.language))?s.language=u:(s.language=yh,Vu(l)),xu(h)&&Nu.set(this,!0),this.rootElement=e,this.rootDocument=e.ownerDocument,this.rootWindow=this.rootDocument.defaultView,Ah(this.rootDocument),this.isDestroyed=!1,this.isHotTableEnv=ct(this.rootElement),Jr.isHotTableEnv=this.isHotTableEnv,this.container=this.rootDocument.createElement("div"),this.renderCall=!1,e.insertBefore(this.container,e.firstChild),Yu(this)&&_r(t.licenseKey,e),this.guid="ht_".concat(Zr());var y=Hu(d);o=new Ou(d),this.rootElement.id&&"ht_"!==this.rootElement.id.substring(0,3)||(this.rootElement.id=this.guid),n={cellSettings:[],columnSettings:[],columnsSettingConflicts:["data","width","language"],settings:new m,selRange:null,isPopulated:null,scrollable:null,firstRun:!0};var v=new vf(n.settings,{countCols:function(){return d.countCols()},countRows:function(){return d.countRows()},propToCol:function(e){return r.propToCol(e)},isEditorOpened:function(){return!!d.getActiveEditor()&&d.getActiveEditor().isOpened()}});function g(e){var t=Bu(e);Sh(t)?(d.runHooks("beforeLanguageChange",t),m.prototype.language=t,d.runHooks("afterLanguageChange",t)):Vu(e)}function w(){var e=!1;return{validatorsInQueue:0,valid:!0,addValidatorToQueue:function(){this.validatorsInQueue+=1,e=!1},removeValidatorFormQueue:function(){this.validatorsInQueue=this.validatorsInQueue-1<0?0:this.validatorsInQueue-1,this.checkIfQueueIsEmpty()},onQueueEmpty:function(){},checkIfQueueIsEmpty:function(){0===this.validatorsInQueue&&!1===e&&(e=!0,this.onQueueEmpty(this.valid))}}}function b(e,t,n){if(e.length){var o=d.getActiveEditor(),i=d.runHooks("beforeChange",e,t||"edit"),a=!0;if(rn(i))Mr("Your beforeChange callback returns a function. It's not supported since Handsontable 0.12.1 (and the returned function will not be executed).");else if(!1===i)return void(o&&o.cancelChanges());var s,l,u=new w,c=function(e){return e.length>0&&/^\s*[+-.]?\s*(?:(?:\d+(?:(\.|,)\d+)?(?:e[+-]?\d+)?)|(?:0x[a-f\d]+))\s*$/.test(e)};u.onQueueEmpty=function(e){o&&a&&o.cancelChanges(),n(e)};for(var h=e.length-1;h>=0;h--)if(null===e[h])e.splice(h,1);else{var f=wf(e[h],4),m=f[0],p=f[1],y=f[3],v=r.propToCol(p),g=d.getCellMeta(m,v);"numeric"===g.type&&"string"==typeof y&&c(y)&&(e[h][3]=(void 0,l=(s=y).replace(",","."),!1===isNaN(parseFloat(l))?parseFloat(l):s)),d.getCellValidator(g)&&(u.addValidatorToQueue(),d.validateCell(e[h][3],g,function(t,n){return function(r){if("boolean"!=typeof r)throw new Error("Validation error: result is not boolean");if(!1===r&&!1===n.allowInvalid){a=!1,e.splice(t,1),n.valid=!0;var o=d.getCell(n.visualRow,n.visualCol);null!==o&&bt(o,d.getSettings().invalidCellClassName)}u.removeValidatorFormQueue()}}(h,g),t))}u.checkIfQueueIsEmpty()}}function _(e,t){var o=e.length-1;if(!(o<0)){for(;o>=0;o--){var s=!1;if(null!==e[o]){if(null!==e[o][2]&&void 0!==e[o][2]||null!==e[o][3]&&void 0!==e[o][3]){if(n.settings.allowInsertRow)for(;e[o][0]>d.countRows()-1;)if(0===r.createRow(void 0,void 0,t)){s=!0;break}if("array"===d.dataType&&(!n.settings.columns||0===n.settings.columns.length)&&n.settings.allowInsertColumn)for(;r.propToCol(e[o][1])>d.countCols()-1;)if(0===r.createCol(void 0,void 0,t)){s=!0;break}s||r.set(e[o][0],e[o][1],e[o][3])}}else e.splice(o,1)}d.forceFullRender=!0,i.adjustRowsAndCols(),d.runHooks("beforeChangeRender",e,t),a.lockEditor(),d._refreshBorders(null),a.unlockEditor(),d.view.wt.wtOverlays.adjustElementsSize(),d.runHooks("afterChange",e,t||"edit");var l=d.getActiveEditor();l&&ar(l.refreshValue)&&l.refreshValue()}}function M(e,t,n){return"object"===gf(e)?e:[[e,t,n]]}function k(e){if(oe(e,"type")){var t,n={};for(var r in"object"===gf(e.type)?t=e.type:"string"==typeof e.type&&(t=Fl(e.type)),t)oe(t,r)&&!oe(e,r)&&(n[r]=t[r]);return n}}this.selection=v,this.selection.addLocalHook("beforeSetRangeStart",(function(e){c.runHooks("beforeSetRangeStart",e)})),this.selection.addLocalHook("beforeSetRangeStartOnly",(function(e){c.runHooks("beforeSetRangeStartOnly",e)})),this.selection.addLocalHook("beforeSetRangeEnd",(function(e){c.runHooks("beforeSetRangeEnd",e),e.row<0&&(e.row=c.view.wt.wtTable.getFirstVisibleRow()),e.col<0&&(e.col=c.view.wt.wtTable.getFirstVisibleColumn())})),this.selection.addLocalHook("afterSetRangeEnd",(function(e){var t=re(!1),n=c.selection.getSelectedRange(),r=n.current(),o=r.from,i=r.to,a=n.size()-1;c.runHooks("afterSelection",o.row,o.col,i.row,i.col,t,a),c.runHooks("afterSelectionByProp",o.row,d.colToProp(o.col),i.row,d.colToProp(i.col),t,a);var s=c.selection.isSelectedByAnyHeader(),l=c.selection.selectedRange.current(),u=!0;f&&(u=!1),t.isTouched()&&(u=!t.value);var h=c.selection.isSelectedByRowHeader(),m=c.selection.isSelectedByColumnHeader();!1!==u&&(s?h?c.view.scrollViewportVertically(e.row):m&&c.view.scrollViewportHorizontally(e.col):l&&!c.selection.isMultiple()?c.view.scrollViewport(l.from):c.view.scrollViewport(e)),h&&m?wt(c.rootElement,["ht__selection--rows","ht__selection--columns"]):h?(bt(c.rootElement,"ht__selection--columns"),wt(c.rootElement,"ht__selection--rows")):m?(bt(c.rootElement,"ht__selection--rows"),wt(c.rootElement,"ht__selection--columns")):bt(c.rootElement,["ht__selection--rows","ht__selection--columns"]),c._refreshBorders(null)})),this.selection.addLocalHook("afterSelectionFinished",(function(e){var t=e.length-1,n=e[t],r=n.from,o=n.to;c.runHooks("afterSelectionEnd",r.row,r.col,o.row,o.col,t),c.runHooks("afterSelectionEndByProp",r.row,d.colToProp(r.col),o.row,d.colToProp(o.col),t)})),this.selection.addLocalHook("afterIsMultipleSelection",(function(e){var t=c.runHooks("afterIsMultipleSelection",e.value);e.value&&(e.value=t)})),this.selection.addLocalHook("beforeModifyTransformStart",(function(e){c.runHooks("modifyTransformStart",e)})),this.selection.addLocalHook("afterModifyTransformStart",(function(e,t,n){c.runHooks("afterModifyTransformStart",e,t,n)})),this.selection.addLocalHook("beforeModifyTransformEnd",(function(e){c.runHooks("modifyTransformEnd",e)})),this.selection.addLocalHook("afterModifyTransformEnd",(function(e,t,n){c.runHooks("afterModifyTransformEnd",e,t,n)})),this.selection.addLocalHook("afterDeselect",(function(){a.destroyEditor(),c._refreshBorders(),bt(c.rootElement,["ht__selection--rows","ht__selection--columns"]),c.runHooks("afterDeselect")})),this.selection.addLocalHook("insertRowRequire",(function(e){c.alter("insert_row",e,1,"auto")})),this.selection.addLocalHook("insertColRequire",(function(e){c.alter("insert_col",e,1,"auto")})),i={alter:function(e,t){var o,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,s=arguments.length>3?arguments[3]:void 0,l=arguments.length>4?arguments[4]:void 0;function u(e,t,n,r){var o=N(new Array(n),(function(){return"array"===r?e=[]:"object"===r&&(e={}),e;var e}));o.unshift(t,0),e.splice.apply(e,bf(o))}var c=function(e){if(0===e.length)return[];var t=bf(e);return t.sort((function(e,t){var n=wf(e,1)[0],r=wf(t,1)[0];return n===r?0:n>r?1:-1})),A(t,(function(e,t){var n=wf(t,2),r=n[0],o=n[1],i=e[e.length-1],a=wf(i,2),s=a[0]+a[1];if(r<=s){var l=Math.max(o-(s-r),0);i[1]+=l}else e.push([r,o]);return e}),[t[0]])};switch(e){case"insert_row":var h=d.countSourceRows();if(d.getSettings().maxRows===h)return;t=ar(t)?t:h,o=r.createRow(t,a,s),u(n.cellSettings,t,a,"array"),o&&(v.isSelected()&&v.selectedRange.current().from.row>=t?(v.selectedRange.current().from.row+=o,v.transformEnd(o,0)):d._refreshBorders());break;case"insert_col":o=r.createCol(t,a,s);for(var f=0,m=d.countSourceRows();f=t?(v.selectedRange.current().from.col+=o,v.transformEnd(0,o)):d._refreshBorders()}break;case"remove_row":var g=function(e){var t=0;P(e,(function(e){var o=wf(e,2),i=o[0],l=o[1],u=lr(i)?d.countRows()-1:Math.max(i-t,0);Number.isInteger(i)&&(i=Math.max(i-t,0)),r.removeRow(i,l,s),n.cellSettings.splice(u,a);var c=d.countRows(),h=d.getSettings().fixedRowsTop;h>=u+1&&(d.getSettings().fixedRowsTop-=Math.min(l,h-u));var f=d.getSettings().fixedRowsBottom;f&&u>=c-f&&(d.getSettings().fixedRowsBottom-=Math.min(l,f)),t+=l}))};Array.isArray(t)?g(c(t)):g([[t,a]]),i.adjustRowsAndCols(),d._refreshBorders();break;case"remove_col":var w=function(e){var t=0;P(e,(function(e){var o=wf(e,2),i=o[0],a=o[1],l=lr(i)?d.countCols()-1:Math.max(i-t,0),u=y.toPhysicalColumn(l);Number.isInteger(i)&&(i=Math.max(i-t,0)),r.removeCol(i,a,s);for(var c=0,h=d.countSourceRows();c=l+1&&(d.getSettings().fixedColumnsLeft-=Math.min(a,f-l)),Array.isArray(d.getSettings().colHeaders)&&(void 0===u&&(u=-1),d.getSettings().colHeaders.splice(u,a)),t+=a}))};Array.isArray(t)?w(c(t)):w([[t,a]]),i.adjustRowsAndCols(),d._refreshBorders();break;default:throw new Error('There is no such action "'.concat(e,'"'))}l||i.adjustRowsAndCols()},adjustRowsAndCols:function(){if(n.settings.minRows){var e=d.countRows();if(es-1?(t=!0,o>(n=s-1)&&(o=n)):o>s-1&&(t=!0,n>(o=s-1)&&(n=o)),r>l-1?(t=!0,i>(r=l-1)&&(i=r)):i>l-1&&(t=!0,r>(i=l-1)&&(r=i)),t&&d.selectCell(n,r,o,i)})),d.view&&d.view.wt.wtOverlays.adjustElementsSize()},populateFromArray:function(e,t,r,o,i,a,s){var l,u,c,h,f,m,p,y,v=[],g={};if(0===(u=t.length))return!1;switch(i){case"shift_down":for(f=r?r.col-e.col+1:0,m=r?r.row-e.row+1:0,c=0,h=(t=$l(t)).length,p=Math.max(h,f);c1&&void 0!==arguments[1]?arguments[1]:null,r=t[e%t.length];return null!==n?r[n%r.length]:r},R=t.length,L=r?r.row-e.row+1:0;for(u=r?L:Math.max(R,L),l=0;lr.row&&L>R||!n.settings.allowInsertRow&&g.row>d.countRows()-1||g.row>=n.settings.maxRows);l++){var D=l-C,A=O(D).length,H=r?r.col-e.col+1:0;if(h=r?H:Math.max(A,H),g.col=e.col,k=d.getCellMeta(g.row,g.col),"CopyPaste.paste"!==o&&"Autofill.fill"!==o||!k.skipRowOnPaste){for(T=0,c=0;cr.col&&H>A||!n.settings.allowInsertColumn&&g.col>d.countCols()-1||g.col>=n.settings.maxCols);c++)if(k=d.getCellMeta(g.row,g.col),"CopyPaste.paste"!==o&&"Autofill.fill"!==o||!k.skipColumnOnPaste)if(k.readOnly)g.col+=1;else{var N=c-T,P=O(D,N),x=d.getDataAtCell(g.row,g.col),Y={row:D,col:N};if("Autofill.fill"===o){var I=d.runHooks("beforeAutofillInsidePopulate",Y,a,t,s,{},S);I&&(P=sr(I.value)?P:I.value)}null!==P&&"object"===gf(P)?(Array.isArray(P)&&null===x&&(x=[]),null===x||"object"!==gf(x)?E=!1:$(U(Array.isArray(x)?x:x[0]||x),U(Array.isArray(P)?P:P[0]||P))?P=X(P):E=!1):null!==x&&"object"===gf(x)&&(E=!1),E&&v.push([g.row,g.col,P]),E=!0,g.col+=1}else T+=1,g.col+=1,h+=1;g.row+=1}else C+=1,g.row+=1,u+=1}d.setDataAtCell(v,null,null,o||"populateFromArray")}}},this.init=function(){o.setData(n.settings.data),d.runHooks("beforeInit"),Pe()&&wt(d.rootElement,"mobile"),this.updateSettings(n.settings,!0),this.view=new Cu(this),a=hu.getInstance(d,n,v,r),this.forceFullRender=!0,d.runHooks("init"),this.view.render(),"object"===gf(n.firstRun)&&(d.runHooks("afterChange",n.firstRun[0],n.firstRun[1]),n.firstRun=!1),d.runHooks("afterInit")},this.validateCell=function(e,t,n,r){var o,i=d.getCellValidator(t);function a(e){if(arguments.length>1&&void 0!==arguments[1]&&!arguments[1]||!0===t.hidden)n(e);else{var r=t.visualCol,o=t.visualRow,i=d.getCell(o,r,!0);i&&"TH"!==i.nodeName&&d.view.wt.wtSettings.settings.cellRenderer(o,r,i),n(e)}}ur(i)&&(o=i,i=function(e,t){t(o.test(e))}),rn(i)?(e=d.runHooks("beforeValidate",e,t.visualRow,t.prop,r),d._registerImmediate((function(){i.call(t,e,(function(n){d&&(n=d.runHooks("afterValidate",n,e,t.visualRow,t.prop,r),t.valid=n,a(n),d.runHooks("postAfterValidate",n,e,t.visualRow,t.prop,r))}))}))):d._registerImmediate((function(){t.valid=!0,a(t.valid,!1)}))},this.setDataAtCell=function(e,t,n,i){var a,s,l,u=M(e,t,n),c=[],h=i;for(a=0,s=u.length;a0&&void 0!==arguments[0])||arguments[0],t=d.rootDocument;if(e){var n=!t.activeElement||t.activeElement&&void 0===t.activeElement.nodeName;t.activeElement&&t.activeElement!==t.body&&!n?t.activeElement.blur():n&&t.body.focus()}d&&!d.isListening()&&(_f=d.guid,d.runHooks("afterListen"))},this.unlisten=function(){this.isListening()&&(_f=null,d.runHooks("afterUnlisten"))},this.isListening=function(){return _f===d.guid},this.destroyEditor=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];d._refreshBorders(e,t)},this.populateFromArray=function(e,t,n,r,o,a,s,l,u){if("object"!==gf(n)||"object"!==gf(n[0]))throw new Error("populateFromArray parameter `input` must be an array of arrays");var c="number"==typeof r?new Me(r,o):null;return i.populateFromArray(new Me(e,t),n,c,a,s,l,u)},this.spliceCol=function(e,t,n){for(var o,i=arguments.length,a=new Array(i>3?i-3:0),s=3;s3?i-3:0),s=3;s0&&(e=t[t.length-1]),e},this.getSelectedRange=function(){if(v.isSelected())return Array.from(v.getSelectedRange())},this.getSelectedRangeLast=function(){var e,t=this.getSelectedRange();return t&&t.length>0&&(e=t[t.length-1]),e},this.emptySelectedCells=function(e){var t=this;if(v.isSelected()){var n=[];P(v.getSelectedRange(),(function(e){var r=e.getTopLeftCorner(),o=e.getBottomRightCorner();Ra(r.row,o.row,(function(e){Ra(r.col,o.col,(function(r){t.getCellMeta(e,r).readOnly||n.push([e,r,null])}))}))})),n.length>0&&this.setDataAtCell(n,e)}},this.render=function(){d.view&&(d.renderCall=!0,d.forceFullRender=!0,a.lockEditor(),d._refreshBorders(null),a.unlockEditor())},this.refreshDimensions=function(){if(d.view){var e=d.view.getLastSize(),t=e.width,n=e.height,r=d.rootElement.getBoundingClientRect(),o=r.width,i=r.height,a=o!==t||i!==n;!1===d.runHooks("beforeRefreshDimensions",{width:t,height:n},{width:o,height:i},a)||((a||d.view.wt.wtOverlays.scrollableElement===d.rootWindow)&&(d.view.setLastSize(o,i),d.render()),d.runHooks("afterRefreshDimensions",{width:t,height:n},{width:o,height:i},a))}},this.loadData=function(e){if(Array.isArray(n.settings.dataSchema)?d.dataType="array":rn(n.settings.dataSchema)?d.dataType="function":d.dataType="object",r&&r.destroy(),r=new su(d,n,m),"object"===gf(e)&&null!==e)e.push&&e.splice||(e=[e]);else{if(null!==e)throw new Error("loadData only accepts array of objects or array of arrays (".concat(gf(e)," given)"));var t,a=r.getSchema();e=[];var s,l=0;for(l=0,s=n.settings.startRows;l1&&void 0!==arguments[1]&&arguments[1],u=!1;if(ar(e.rows))throw new Error('"rows" setting is no longer supported. do you mean startRows, minRows or maxRows?');if(ar(e.cols))throw new Error('"cols" setting is no longer supported. do you mean startCols, minCols or maxCols?');for(t in e)"data"!==t&&("language"!==t?ce.getSingleton().getRegistered().indexOf(t)>-1?(rn(e[t])||Array.isArray(e[t]))&&(e[t].initialHook=!0,d.addHook(t,e[t])):!l&&oe(e,t)&&(m.prototype[t]=e[t]):g(e.language));void 0===e.data&&void 0===n.settings.data?d.loadData(null):void 0!==e.data?d.loadData(e.data):void 0!==e.columns&&r.createMap(),s=d.countCols();var c,h,f=e.columns||m.prototype.columns;if(f&&rn(f)&&(s=d.countSourceCols(),u=!0),void 0===e.cell&&void 0===e.cells&&void 0===e.columns||(n.cellSettings.length=0),s>0)for(t=0,o=0;t-1||v.indexOf("overflow")>-1)?d.rootElement.setAttribute("style",v):(d.rootElement.style.height="",d.rootElement.style.overflow="")}else void 0!==y&&(d.rootElement.style.height=isNaN(y)?"".concat(y):"".concat(y,"px"),d.rootElement.style.overflow="hidden");if(void 0!==e.width){var w=e.width;rn(w)&&(w=w()),d.rootElement.style.width=isNaN(w)?"".concat(w):"".concat(w,"px")}l||(r.clearLengthCache(),d.view&&d.view.wt.wtViewport.resetHasOversizedColumnHeadersMarked(),d.runHooks("afterUpdateSettings",e)),i.adjustRowsAndCols(),d.view&&!n.firstRun&&(d.forceFullRender=!0,a.lockEditor(),d._refreshBorders(null),a.unlockEditor()),l||!d.view||""!==p&&""!==y&&void 0!==y||p===y||d.view.wt.wtOverlays.updateMainScrollableElements()},this.getValue=function(){var e=d.getSelectedLast();if(m.prototype.getValue){if(rn(m.prototype.getValue))return m.prototype.getValue.call(d);if(e)return d.getData()[e[0][0]][m.prototype.getValue]}else if(e)return d.getDataAtCell(e[0],e[1])},this.getSettings=function(){return n.settings},this.clear=function(){this.selectAll(),this.emptySelectedCells()},this.alter=function(e,t,n,r,o){i.alter(e,t,n,r,o)},this.getCell=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return d.view.getCellAtCoords(new Me(e,t),n)},this.getCoords=function(e){return this.view.wt.wtTable.getCoords.call(this.view.wt.wtTable,e)},this.colToProp=function(e){return r.colToProp(e)},this.propToCol=function(e){return r.propToCol(e)},this.toVisualRow=function(e){return y.toVisualRow(e)},this.toVisualColumn=function(e){return y.toVisualColumn(e)},this.toPhysicalRow=function(e){return y.toPhysicalRow(e)},this.toPhysicalColumn=function(e){return y.toPhysicalColumn(e)},this.getDataAtCell=function(e,t){return r.get(e,r.colToProp(t))},this.getDataAtRowProp=function(e,t){return r.get(e,t)},this.getDataAtCol=function(e){var t;return(t=[]).concat.apply(t,bf(r.getRange(new Me(0,e),new Me(n.settings.data.length-1,e),r.DESTINATION_RENDERER)))},this.getDataAtProp=function(e){var t,o=r.getRange(new Me(0,r.propToCol(e)),new Me(n.settings.data.length-1,r.propToCol(e)),r.DESTINATION_RENDERER);return(t=[]).concat.apply(t,bf(o))},this.getSourceData=function(e,t,n,r){return void 0===e?o.getData():o.getByRange(new Me(e,t),new Me(n,r))},this.getSourceDataArray=function(e,t,n,r){return void 0===e?o.getData(!0):o.getByRange(new Me(e,t),new Me(n,r),!0)},this.getSourceDataAtCol=function(e){return o.getAtColumn(e)},this.getSourceDataAtRow=function(e){return o.getAtRow(e)},this.getSourceDataAtCell=function(e,t){return o.getAtCell(e,t)},this.getDataAtRow=function(e){return r.getRange(new Me(e,0),new Me(e,this.countCols()-1),r.DESTINATION_RENDERER)[0]||[]},this.getDataType=function(e,t,n,r){var o=this,i=void 0===e?[0,0,this.countRows(),this.countCols()]:[e,t,n,r],a=i[0],s=i[1],l=i[2],u=i[3],c=null,h=null;void 0===l&&(l=a),void 0===u&&(u=s);var f="mixed";return Ra(Math.min(a,l),Math.max(a,l),(function(e){var t=!0;return Ra(Math.min(s,u),Math.max(s,u),(function(n){var r=o.getCellMeta(e,n);return h=r.type,c?t=c===h:c=h,t})),f=t?h:"mixed",t})),f},this.removeCellMeta=function(e,t,r){var o=wf(y.toPhysical(e,t),2),i=o[0],a=o[1],s=n.cellSettings[i][a][r];!1!==d.runHooks("beforeRemoveCellMeta",e,t,r,s)&&(delete n.cellSettings[i][a][r],d.runHooks("afterRemoveCellMeta",e,t,r,s)),s=null},this.spliceCellsMeta=function(e,t){for(var r,o=arguments.length,i=new Array(o>2?o-2:0),a=2;a=0;)if(void 0===t||-1!==t.indexOf(o)){for(var i=d.countCols()-1;i>=0;)void 0===n||-1!==n.indexOf(i)?(r.addValidatorToQueue(),d.validateCell(d.getDataAtCell(o,i),d.getCellMeta(o,i),(function(e){if("boolean"!=typeof e)throw new Error("Validation error: result is not boolean");!1===e&&(r.valid=!1),r.removeValidatorFormQueue()}),"validateCells"),i-=1):i-=1;o-=1}else o-=1;r.checkIfQueueIsEmpty()},this.getRowHeader=function(e){var t=n.settings.rowHeaders,r=e;return void 0!==r&&(r=d.runHooks("modifyRowHeader",r)),void 0===r?(t=[],Ra(d.countRows()-1,(function(e){t.push(d.getRowHeader(e))}))):Array.isArray(t)&&void 0!==t[r]?t=t[r]:rn(t)?t=t(r):t&&"string"!=typeof t&&"number"!=typeof t&&(t=r+1),t},this.hasRowHeaders=function(){return!!n.settings.rowHeaders},this.hasColHeaders=function(){if(void 0!==n.settings.colHeaders&&null!==n.settings.colHeaders)return!!n.settings.colHeaders;for(var e=0,t=d.countCols();e0&&void 0!==arguments[0]&&arguments[0],t=0;return La(d.countRows()-1,(function(n){if(d.isEmptyRow(n))t+=1;else if(!0===e)return!1})),t},this.countEmptyCols=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(d.countRows()<1)return 0;var t=0;return La(d.countCols()-1,(function(n){if(d.isEmptyCol(n))t+=1;else if(!0===e)return!1})),t},this.isEmptyRow=function(e){return n.settings.isEmptyRow.call(d,e)},this.isEmptyCol=function(e){return n.settings.isEmptyCol.call(d,e)},this.selectCell=function(e,t,n,r){var o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];return!sr(e)&&!sr(t)&&this.selectCells([[e,t,n,r]],o,i)},this.selectCells=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[[]],t=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&(f=!0);var n=v.selectCells(e);return n&&t&&d.listen(),f=!1,n},this.selectColumns=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;return v.selectColumns(e,t)},this.selectRows=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;return v.selectRows(e,t)},this.deselectCell=function(){v.deselect()},this.selectAll=function(){f=!0,v.selectAll(),f=!1},this.scrollViewportTo=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=!n,i=!r,a=!1;return void 0!==e&&void 0!==t&&(a=d.view.scrollViewport(new Me(e,t),o,r,n,i)),"number"==typeof e&&"number"!=typeof t&&(a=d.view.scrollViewportVertically(e,o,n)),"number"==typeof t&&"number"!=typeof e&&(a=d.view.scrollViewportHorizontally(t,r,i)),a},this.destroy=function(){if(d._clearTimeouts(),d._clearImmediates(),d.view&&d.view.destroy(),o&&o.destroy(),o=null,Hh(),Yu(d)){var e=this.rootDocument.querySelector("#hot-display-license-info");e&&e.parentNode.removeChild(e)}Mt(d.rootElement),p.destroy(),a&&a.destroy(),d.runHooks("afterDestroy"),ce.getSingleton().destroy(d),ee(d,(function(e,t,n){var r;rn(e)?n[t]=(r=t,function(){throw new Error('The "'.concat(r,'" method cannot be called because this Handsontable instance has been destroyed'))}):"guid"!==t&&(n[t]=null)})),d.isDestroyed=!0,r&&r.destroy(),r=null,n=null,i=null,v=null,a=null,d=null,m=null},this.getActiveEditor=function(){return a.getActiveEditor()},this.getPlugin=function(e){return function(e,t){if("string"!=typeof t)throw Error('Only strings can be passed as "plugin" parameter');var n=$r(t);if(vu.has(e)&&vu.get(e)[n])return vu.get(e)[n]}(this,e)},this.getInstance=function(){return d},this.addHook=function(e,t){ce.getSingleton().add(e,t,d)},this.hasHook=function(e){return ce.getSingleton().has(e,d)},this.addHookOnce=function(e,t){ce.getSingleton().once(e,t,d)},this.removeHook=function(e,t){ce.getSingleton().remove(e,t,d)},this.runHooks=function(e,t,n,r,o,i,a){return ce.getSingleton().run(d,e,t,n,r,o,i,a)},this.getTranslatedPhrase=function(e,t){return Oh(n.settings.language,e,t)},this.toHTML=function(){return du(c)},this.toTableElement=function(){var e=c.rootDocument.createElement("div");return e.insertAdjacentHTML("afterbegin",du(c)),e.firstElementChild},this.timeouts=[],this._registerTimeout=function(e){var t=e;"function"==typeof t&&(t=setTimeout(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0)),this.timeouts.push(t)},this._clearTimeouts=function(){P(this.timeouts,(function(e){clearTimeout(e)}))},this.immediates=[],this._registerImmediate=function(e){this.immediates.push(setImmediate(e))},this._clearImmediates=function(){P(this.immediates,(function(e){clearImmediate(e)}))},this._refreshBorders=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];a.destroyEditor(e),d.view.render(),t&&v.isSelected()&&a.prepareEditor()},ce.getSingleton().run(d,"construct")}function kf(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:null;this.injected||((e||this.hot.rootElement).appendChild(this.container.fragment),this.injected=!0)}},{key:"removeTable",value:function(){this.injected&&this.container.container.parentNode&&(this.container.container.parentNode.removeChild(this.container.container),this.container=null,this.injected=!1)}},{key:"createColElement",value:function(e){var t=this.hot.rootDocument.createElement("col");return t.style.width="".concat(this.hot.view.wt.wtTable.getStretchedColumnWidth(e),"px"),t}},{key:"createTable",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.hot.rootDocument,n=t.createDocumentFragment(),r=t.createElement("table"),o=t.createElement("thead"),i=t.createElement("tbody"),a=t.createElement("colgroup"),s=t.createElement("tr"),l=t.createElement("th");return this.isVertical()&&r.appendChild(a),this.isHorizontal()&&(s.appendChild(l),o.appendChild(s),r.style.tableLayout="auto",r.style.width="auto"),r.appendChild(o),this.isVertical()&&i.appendChild(s),r.appendChild(i),wt(r,e),n.appendChild(r),{fragment:n,table:r,tHead:o,tBody:i,colGroup:a,tr:s,th:l}}},{key:"createContainer",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.hot.rootDocument,n=t.createDocumentFragment(),r=t.createElement("div");return wt(r,"htGhostTable htAutoSize ".concat(e.trim())),n.appendChild(r),{fragment:n,container:r}}},{key:"isVertical",value:function(){return!(!this.rows.length||this.columns.length)}},{key:"isHorizontal",value:function(){return!(!this.columns.length||this.rows.length)}}],n&&kf(t.prototype,n),e}();const Cf=Sf;function Tf(e,t){for(var n=0;n=0&&Of.splice(Of.indexOf(this.pluginName),1),Of.length||this.hot.runHooks("afterPluginsInitialized"),this.initialized=!0}},{key:"enablePlugin",value:function(){this.enabled=!0}},{key:"disablePlugin",value:function(){this.eventManager&&this.eventManager.clear(),this.clearHooks(),this.enabled=!1}},{key:"addHook",value:function(e,t){Ef.get(this).hooks[e]=Ef.get(this).hooks[e]||[];var n=Ef.get(this).hooks[e];this.hot.addHook(e,t),n.push(t),Ef.get(this).hooks[e]=n}},{key:"removeHooks",value:function(e){var t=this;P(Ef.get(this).hooks[e]||[],(function(n){t.hot.removeHook(e,n)}))}},{key:"clearHooks",value:function(){var e=this,t=Ef.get(this).hooks;ee(t,(function(t,n){return e.removeHooks(n)})),t.length=0}},{key:"callOnPluginsReady",value:function(e){this.isPluginsReady?e():this.pluginsInitializedCallbacks.push(e)}},{key:"onAfterPluginsInitialized",value:function(){P(this.pluginsInitializedCallbacks,(function(e){return e()})),this.pluginsInitializedCallbacks.length=0,this.isPluginsReady=!0}},{key:"onUpdateSettings",value:function(){this.isEnabled&&(this.enabled&&!this.isEnabled()&&this.disablePlugin(),!this.enabled&&this.isEnabled()&&this.enablePlugin(),this.enabled&&this.isEnabled()&&this.updatePlugin())}},{key:"updatePlugin",value:function(){}},{key:"destroy",value:function(){var e=this;this.eventManager&&this.eventManager.destroy(),this.clearHooks(),ee(this,(function(t,n){"hot"!==n&&"t"!==n&&(e[n]=null)})),delete this.t,delete this.hot}}])&&Tf(t.prototype,n),e}();function Lf(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:window;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.rootWindow=n,this.prefix=t,this.savedKeys=[],this.loadSavedKeys()}var t,n;return t=e,n=[{key:"saveValue",value:function(e,t){this.rootWindow.localStorage.setItem("".concat(this.prefix,"_").concat(e),JSON.stringify(t)),-1===this.savedKeys.indexOf(e)&&(this.savedKeys.push(e),this.saveSavedKeys())}},{key:"loadValue",value:function(e,t){var n=void 0===e?t:e,r=this.rootWindow.localStorage.getItem("".concat(this.prefix,"_").concat(n));return null===r?void 0:JSON.parse(r)}},{key:"reset",value:function(e){this.rootWindow.localStorage.removeItem("".concat(this.prefix,"_").concat(e))}},{key:"resetAll",value:function(){var e=this;P(this.savedKeys,(function(t,n){e.rootWindow.localStorage.removeItem("".concat(e.prefix,"_").concat(e.savedKeys[n]))})),this.clearSavedKeys()}},{key:"loadSavedKeys",value:function(){var e=this.rootWindow.localStorage.getItem("".concat(this.prefix,"__persistentStateKeys")),t="string"==typeof e?JSON.parse(e):void 0;this.savedKeys=t||[]}},{key:"saveSavedKeys",value:function(){this.rootWindow.localStorage.setItem("".concat(this.prefix,"__persistentStateKeys"),JSON.stringify(this.savedKeys))}},{key:"clearSavedKeys",value:function(){this.savedKeys.length=0,this.saveSavedKeys()}}],n&&Lf(t.prototype,n),e}();const Af=Df;function Hf(e){return Hf="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Hf(e)}function Nf(e,t){for(var n=0;n0;s=Q(u)?Object.keys(u).length:Array.isArray(u)?u.length:ir(u).length,h&&(s+=c),o.has(s)||o.set(s,{needed:r.getSampleCount(),strings:[]});var f=o.get(s);f.needed&&(!(a.indexOf(u)>-1)||r.allowDuplicates||h)&&(f.strings.push(function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({value:u},i,t)),a.push(u),f.needed-=1)})),o}}]),e}();const Vf=Bf;function Uf(e){return Uf="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Uf(e)}function zf(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function Gf(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function qf(e,t,n){return qf="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,n){var r=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=Xf(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(n):o.value}},qf(e,t,n||e)}function Xf(e){return Xf=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},Xf(e)}function Kf(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{from:0,to:this.hot.countCols()-1},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{from:0,to:this.hot.countRows()-1},r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o="number"==typeof t?{from:t,to:t}:t,i="number"==typeof n?{from:n,to:n}:n;Ra(o.from,o.to,(function(t){(r||void 0===e.widths[t]&&!e.hot._getColWidthFromSettings(t))&&P(e.samplesGenerator.generateColumnSamples(t,i),(function(t){var n=zf(t,2),r=n[0],o=n[1];return e.ghostTable.addColumn(r,o)}))})),this.ghostTable.columns.length&&(this.ghostTable.getWidths((function(t,n){e.widths[t]=n})),this.ghostTable.clean())}},{key:"calculateAllColumnsWidth",value:function(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{from:0,to:this.hot.countRows()-1},r=0,o=this.hot.countCols()-1,i=null;this.inProgress=!0;var a=this.getSyncCalculationLimit();this.firstCalculation&&a>=0&&(this.calculateColumnsWidth({from:0,to:a},n),this.firstCalculation=!1,r=a+1),r>=0),Math.min(e,n)}},{key:"getColumnWidth",value:function(e){var t=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;return void 0===n&&(n=this.widths[e],t&&"number"==typeof n&&(n=Math.max(n,pe.DEFAULT_WIDTH))),n}},{key:"getFirstVisibleColumn",value:function(){var e=this.hot.view.wt;return e.wtViewport.columnsVisibleCalculator?e.wtTable.getFirstVisibleColumn():e.wtViewport.columnsRenderCalculator?e.wtTable.getFirstRenderedColumn():-1}},{key:"getLastVisibleColumn",value:function(){var e=this.hot.view.wt;return e.wtViewport.columnsVisibleCalculator?e.wtTable.getLastVisibleColumn():e.wtViewport.columnsRenderCalculator?e.wtTable.getLastRenderedColumn():-1}},{key:"findColumnsWhereHeaderWasChanged",value:function(){var e=this.hot.getColHeader(),t=Qf.get(this).cachedColumnHeaders;return A(e,(function(e,n,r){var o=t.length;return(o-10&&void 0!==arguments[0]?arguments[0]:[];t.length?P(t,(function(t){e.widths[t]=void 0})):this.widths.length=0}},{key:"isNeedRecalculate",value:function(){return!!H(this.widths,(function(e){return void 0===e})).length}},{key:"onBeforeRender",value:function(){var e=this.hot.renderCall,t=this.hot.countRows(),n=this.getFirstVisibleColumn(),r=this.getLastVisibleColumn();-1!==n&&-1!==r&&t&&(this.calculateColumnsWidth({from:n,to:r},void 0,e),this.isNeedRecalculate()&&!this.inProgress&&this.calculateAllColumnsWidth())}},{key:"onAfterLoadData",value:function(){var e=this;this.hot.view?this.recalculateAllColumnsWidth():setTimeout((function(){e.hot&&e.recalculateAllColumnsWidth()}),0)}},{key:"onBeforeChange",value:function(e){var t=this,n=N(e,(function(e){var n=zf(e,2)[1];return t.hot.propToCol(n)}));this.clearCache(n)}},{key:"onBeforeColumnResize",value:function(e,t,n){var r=t;return n&&(this.calculateColumnsWidth(e,void 0,!0),r=this.getColumnWidth(e,void 0,!1)),r}},{key:"onAfterInit",value:function(){Qf.get(this).cachedColumnHeaders=this.hot.getColHeader()}},{key:"destroy",value:function(){this.ghostTable.clean(),qf(Xf(t.prototype),"destroy",this).call(this)}}]),t}(Rf);gu("autoColumnSize",Zf);const ed=Zf;var td={horizontal:"horizontal",vertical:"vertical"};function nd(e){return nd="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},nd(e)}function rd(e,t){for(var n=0;ne[3]?(o="right",n=new Me(t[0],e[3]+1),r=new Me(t[2],t[3])):t[0]e[2]&&t[1]===e[1]&&(o="down",n=new Me(e[2]+1,t[1]),r=new Me(t[2],t[3])),{directionOfDrag:o,startOfDragCoords:n,endOfDragCoords:r}}(t,e=this.hot.runHooks("modifyAutofillRange",e,t)),r=n.directionOfDrag,o=n.startOfDragCoords,i=n.endOfDragCoords;if(o&&o.row>-1&&o.col>-1){var a=this.getSelectionData();this.hot.runHooks("beforeAutofill",o,i,a);var s=function(e,t,n,r){var o=n.length,i=n?n[0].length:0,a=[],s=t.row-e.row,l=t.col-e.col;if(-1!==["down","up"].indexOf(r)){for(var u=[],c=0;c-1){l=[];var u=null,c=null;if("up"===r){c=(u=i.row-o.row+1)%a.length;for(var h=0;he.row))t=new Me(e.row,r.col);else{if(!this.directions.includes(td.horizontal))return;t=new Me(r.row,e.col)}return this.reduceSelectionAreaIfNeeded(t)}},{key:"showBorder",value:function(e){var t=this.getCoordsOfDragAndDropBorders(e);t&&this.redrawBorders(t)}},{key:"addRow",value:function(){var e=this;this.hot._registerTimeout(setTimeout((function(){e.hot.alter("insert_row",void 0,1,"".concat(e.pluginName,".fill")),e.addingStarted=!1}),200))}},{key:"addNewRowIfNeeded",value:function(){if(this.hot.selection.highlight.getFill().cellRange&&!1===this.addingStarted&&this.autoInsertRow){var e=this.hot.getSelectedLast(),t=this.hot.selection.highlight.getFill().getCorners(),n=this.hot.countRows();e[2]n&&e.clientX<=r}},{key:"registerEvents",value:function(){var e=this,t=this.hot.rootDocument.documentElement;this.eventManager.addEventListener(t,"mouseup",(function(){return e.onMouseUp()})),this.eventManager.addEventListener(t,"mousemove",(function(t){return e.onMouseMove(t)}))}},{key:"onCellCornerDblClick",value:function(){this.selectAdjacent()&&this.fillIn()}},{key:"onAfterCellCornerMouseDown",value:function(){this.handleDraggedCells=1,this.mouseDownOnCellCorner=!0}},{key:"onBeforeCellMouseOver",value:function(e){this.mouseDownOnCellCorner&&!this.hot.view.isMouseDown()&&this.handleDraggedCells&&(this.handleDraggedCells+=1,this.showBorder(e),this.addNewRowIfNeeded())}},{key:"onMouseUp",value:function(){this.handleDraggedCells&&(this.handleDraggedCells>1&&this.fillIn(),this.handleDraggedCells=0,this.mouseDownOnCellCorner=!1)}},{key:"onMouseMove",value:function(e){var t=this.getIfMouseWasDraggedOutside(e);!1===this.addingStarted&&this.handleDraggedCells>0&&t?(this.mouseDragOutside=!0,this.addingStarted=!0):this.mouseDragOutside=!1,this.mouseDragOutside&&this.autoInsertRow&&this.addRow()}},{key:"clearMappedSettings",value:function(){this.directions.length=0,this.autoInsertRow=!1}},{key:"mapSettings",value:function(){var e=function(e){var t={};return!0===e?(t.directions=Object.keys(td),t.autoInsertRow=!0):Q(e)?(ar(e.autoInsertRow)?e.direction===td.horizontal?t.autoInsertRow=!1:t.autoInsertRow=e.autoInsertRow:t.autoInsertRow=!1,ar(e.direction)?t.directions=[e.direction]:t.directions=Object.keys(td)):"string"==typeof e?(t.directions=[e],t.autoInsertRow=!0):(t.directions=[],t.autoInsertRow=!1),t}(this.hot.getSettings().fillHandle);this.directions=e.directions,this.autoInsertRow=e.autoInsertRow}},{key:"destroy",value:function(){id(ad(t.prototype),"destroy",this).call(this)}}],r&&rd(n.prototype,r),t}(Rf);gu("autofill",ld);const ud=ld;function cd(e){return cd="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},cd(e)}function hd(e,t,n){return hd="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,n){var r=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=fd(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(n):o.value}},hd(e,t,n||e)}function fd(e){return fd=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},fd(e)}function dd(e,t){for(var n=0;n=0?r=n.hot.getDataAtCell(e,t):-1===e&&(r=n.hot.getColHeader(t)),{value:r}})),n.firstCalculation=!0,n.inProgress=!1,n.addHook("beforeRowResize",(function(e,t,r){return n.onBeforeRowResize(e,t,r)})),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&pd(e,t)}(t,e),md(t,null,[{key:"CALCULATION_STEP",get:function(){return 50}},{key:"SYNC_CALCULATION_LIMIT",get:function(){return 500}}]),md(t,[{key:"isEnabled",value:function(){return!0===this.hot.getSettings().autoRowSize||Q(this.hot.getSettings().autoRowSize)}},{key:"enablePlugin",value:function(){var e=this;this.enabled||(this.setSamplingOptions(),this.addHook("afterLoadData",(function(){return e.onAfterLoadData()})),this.addHook("beforeChange",(function(t){return e.onBeforeChange(t)})),this.addHook("beforeColumnMove",(function(){return e.recalculateAllRowsHeight()})),this.addHook("beforeColumnResize",(function(){return e.recalculateAllRowsHeight()})),this.addHook("beforeColumnSort",(function(){return e.clearCache()})),this.addHook("beforeRender",(function(t){return e.onBeforeRender(t)})),this.addHook("beforeRowMove",(function(t,n){return e.onBeforeRowMove(t,n)})),this.addHook("modifyRowHeight",(function(t,n){return e.getRowHeight(n,t)})),this.addHook("modifyColumnHeaderHeight",(function(){return e.getColumnHeaderHeight()})),hd(fd(t.prototype),"enablePlugin",this).call(this))}},{key:"disablePlugin",value:function(){hd(fd(t.prototype),"disablePlugin",this).call(this)}},{key:"calculateRowsHeight",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{from:0,to:this.hot.countRows()-1},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{from:0,to:this.hot.countCols()-1},r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o="number"==typeof t?{from:t,to:t}:t,i="number"==typeof n?{from:n,to:n}:n;if(null!==this.hot.getColHeader(0)){var a=this.samplesGenerator.generateRowSamples(-1,i);this.ghostTable.addColumnHeadersRow(a.get(-1))}Ra(o.from,o.to,(function(t){(r||void 0===e.heights[t])&&P(e.samplesGenerator.generateRowSamples(t,i),(function(t){var n,r,o=(r=2,function(e){if(Array.isArray(e))return e}(n=t)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()),i=o[0],a=o[1];return e.ghostTable.addRow(i,a)}))})),this.ghostTable.rows.length&&(this.ghostTable.getHeights((function(t,n){e.heights[t]=n})),this.ghostTable.clean())}},{key:"calculateAllRowsHeight",value:function(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{from:0,to:this.hot.countCols()-1},r=0,o=this.hot.countRows()-1,i=null;this.inProgress=!0;var a=this.getSyncCalculationLimit();this.firstCalculation&&a>=0&&(this.calculateRowsHeight({from:0,to:a},n),this.firstCalculation=!1,r=a+1),r>=0),Math.min(e,n)}},{key:"getRowHeight",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n=t;return void 0!==this.heights[e]&&this.heights[e]>(t||0)&&(n=this.heights[e]),n}},{key:"getColumnHeaderHeight",value:function(){return this.heights[-1]}},{key:"getFirstVisibleRow",value:function(){var e=this.hot.view.wt;return e.wtViewport.rowsVisibleCalculator?e.wtTable.getFirstVisibleRow():e.wtViewport.rowsRenderCalculator?e.wtTable.getFirstRenderedRow():-1}},{key:"getLastVisibleRow",value:function(){var e=this.hot.view.wt;return e.wtViewport.rowsVisibleCalculator?e.wtTable.getLastVisibleRow():e.wtViewport.rowsRenderCalculator?e.wtTable.getLastRenderedRow():-1}},{key:"clearCache",value:function(){this.heights.length=0,this.heights[-1]=void 0}},{key:"clearCacheByRange",value:function(e){var t=this,n="number"==typeof e?{from:e,to:e}:e,r=n.from,o=n.to;Ra(Math.min(r,o),Math.max(r,o),(function(e){t.heights[e]=void 0}))}},{key:"isNeedRecalculate",value:function(){return!!H(this.heights,(function(e){return void 0===e})).length}},{key:"onBeforeRender",value:function(){var e=this.hot.renderCall,t=this.hot.getSettings().fixedRowsBottom,n=this.getFirstVisibleRow(),r=this.getLastVisibleRow();if(-1!==n&&-1!==r){if(this.calculateRowsHeight({from:n,to:r},void 0,e),t){var o=this.hot.countRows()-1;this.calculateRowsHeight({from:o-t,to:o})}this.isNeedRecalculate()&&!this.inProgress&&this.calculateAllRowsHeight()}}},{key:"onBeforeRowMove",value:function(e,t){this.clearCacheByRange({from:e,to:t}),this.calculateAllRowsHeight()}},{key:"onBeforeRowResize",value:function(e,t,n){var r=t;return n&&(this.calculateRowsHeight(e,void 0,!0),r=this.getRowHeight(e)),r}},{key:"onAfterLoadData",value:function(){var e=this;this.hot.view?this.recalculateAllRowsHeight():setTimeout((function(){e.hot&&e.recalculateAllRowsHeight()}),0)}},{key:"onBeforeChange",value:function(e){var t=null;1===e.length?t=e[0][0]:e.length>1&&(t={from:e[0][0],to:e[e.length-1][0]}),null!==t&&this.clearCacheByRange(t)}},{key:"destroy",value:function(){this.ghostTable.clean(),hd(fd(t.prototype),"destroy",this).call(this)}}]),t}(Rf);gu("autoRowSize",yd);const vd=yd;function gd(e,t){for(var n=0;n0&&(e=this.sortedColumnsStates[0].column),e}},{key:"getSortOrderOfColumn",value:function(e){var t,n=this.sortedColumnsStates.find((function(t){var n=t.column;return e===n}));return Q(n)&&(t=n.sortOrder),t}},{key:"getSortedColumns",value:function(){return N(this.sortedColumnsStates,(function(e){return e.column}))}},{key:"getIndexOfColumnInSortQueue",value:function(e){return this.getSortedColumns().indexOf(e)}},{key:"getNumberOfSortedColumns",value:function(){return this.sortedColumnsStates.length}},{key:"isListOfSortedColumnsEmpty",value:function(){return 0===this.getNumberOfSortedColumns()}},{key:"isColumnSorted",value:function(e){return this.getSortedColumns().includes(e)}},{key:"getSortStates",value:function(){return X(this.sortedColumnsStates)}},{key:"getColumnSortState",value:function(e){if(this.isColumnSorted(e))return X(this.sortedColumnsStates[this.getIndexOfColumnInSortQueue(e)])}},{key:"setSortStates",value:function(e){this.sortedColumnsStates=e}},{key:"destroy",value:function(){this.sortedColumnsStates.length=0,this.sortedColumnsStates=null}}],n&&gd(t.prototype,n),e}(),_d="asc",Md="desc";function kd(e){if(sr(e))return!1;var t=e.column,n=e.sortOrder;return Number.isInteger(t)&&[_d,Md].includes(n)}function Sd(e){if(e!==Md)return e===_d?Md:_d}function Cd(e){return e.querySelector(".".concat("colHeader"))}function Td(e,t){if(e<0||!t.parentNode)return!1;var n=t.parentNode.parentNode.childNodes;return-1==Array.from(n).indexOf(t.parentNode)-n.length}function Ed(e,t,n){return-1===e&&t>=0&&!1===Ur(n)}var Od="indicatorDisabled",Rd="columnSorting",Ld="sortAction",Dd=new Map([[_d,"ascending"],[Md,"descending"]]);function Ad(e,t,n,r){var o=[Rd];if(r&&o.push(Ld),!1===n)o.push(Od);else if(e.isColumnSorted(t)){var i=e.getSortOrderOfColumn(t);o.push(Dd.get(i))}return o}var Hd={_arrayMap:[],getValueByIndex:function(e){var t=null;return e1&&void 0!==arguments[1]?arguments[1]:1,r=Y(this._arrayMap)+1,o=[];return Ra(n-1,(function(n){o.push(t._arrayMap.splice(e+n,0,r+n))})),o},removeItems:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=[];if(Array.isArray(e)){var r=[].concat(this._arrayMap);e.sort((function(e,t){return t-e}));for(var o=0,i=e.length;o1&&void 0!==arguments[1]?arguments[1]:1,n=this.removeItems(e,t);this._arrayMap=N(this._arrayMap,(function(e){var t=e,r=function(e){return A(n,(function(t,n){var r=t;return e>n&&(r+=1),r}),0)}(t);return r&&(t-=r),t}))},shiftItems:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this._arrayMap=N(this._arrayMap,(function(t){var r=t;return r>=e&&(r+=n),r})),Ra(n-1,(function(n){t._arrayMap.splice(e+n,0,e+n)}))},swapIndexes:function(e,t){var n,r;(n=this._arrayMap).splice.apply(n,[t,0].concat(function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);ti?"asc"===e?tm:em:Zd}})),Fd("date",(function(e,t,n){return function(r,o){var i=n.sortEmptyCells;if(r===o)return Zd;if(lr(r))return lr(o)?Zd:i&&"asc"===e?em:tm;if(lr(o))return i&&"asc"===e?tm:em;var a=t.dateFormat,s=Kn()(r,a),l=Kn()(o,a);return s.isValid()?l.isValid()?l.isAfter(s)?"asc"===e?em:tm:l.isBefore(s)?"asc"===e?tm:em:Zd:em:tm}})),Fd(Id,(function(e,t,n){return function(t,r){var o=n.sortEmptyCells;return"string"==typeof t&&(t=t.toLowerCase()),"string"==typeof r&&(r=r.toLowerCase()),t===r?Zd:lr(t)?lr(r)?Zd:o&&"asc"===e?em:tm:lr(r)?o&&"asc"===e?tm:em:isNaN(t)&&!isNaN(r)?"asc"===e?tm:em:!isNaN(t)&&isNaN(r)?"asc"===e?em:tm:(isNaN(t)||isNaN(r)||(t=parseFloat(t),r=parseFloat(r)),tr?"asc"===e?tm:em:Zd)}}));var Kd=function e(t){Xd(this,e),this.data=t,this.next=null,this.prev=null};const Jd=function(){function e(){Xd(this,e),this.first=null,this.last=null}var t,n;return t=e,(n=[{key:"push",value:function(e){var t=new Kd(e);if(null===this.first)this.first=t,this.last=t;else{var n=this.last;this.last=t,t.prev=n,n.next=t}}},{key:"unshift",value:function(e){var t=new Kd(e);if(null===this.first)this.first=t,this.last=t;else{var n=this.first;this.first=t,t.next=n,n.prev=t}}},{key:"inorder",value:function(e){for(var t=this.first;t;)e(t),t=t.next}},{key:"remove",value:function(e){if(null===this.first)return!1;for(var t,n,r=this.first;r;){if(r.data===e)return t=r.next,n=r.prev,t&&(t.prev=n),n&&(n.next=t),r===this.first&&(this.first=t),r===this.last&&(this.last=n),!0;r=r.next}return!1}},{key:"hasCycle",value:function(){for(var e=this.first,t=this.first;;){if(null===e)return!1;if(null===(e=e.next))return!1;if((e=e.next)===(t=t.next))return!0}}},{key:"pop",value:function(){if(null===this.last)return null;var e=this.last;return this.last=this.last.prev,e}},{key:"shift",value:function(){if(null===this.first)return null;var e=this.first;return this.first=this.first.next,e}},{key:"recursiveReverse",value:function(){if(this.first){!function e(t,n){n&&(e(n,n.next),n.next=t)}(this.first,this.first.next),this.first.next=null;var e=this.first;this.first=this.last,this.last=e}}},{key:"reverse",value:function(){if(this.first&&this.first.next){for(var e,t=this.first.next,n=this.first;t;)e=t.next,t.next=n,n.prev=t,n=t,t=e;this.first.next=null,this.last.prev=null,e=this.first,this.first=n,this.last=e}}}])&&qd(t.prototype,n),e}();var $d=function(e,t){var n=e.toString(),r=t.toString();return n===r?0:n1&&void 0!==arguments[1]?arguments[1]:$d,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:e.length;if(Math.abs(r-n)<=1)return[];var o=Math.ceil((n+r)/2);return Qd(e,t,n,o),Qd(e,t,o,r),function(e,t,n,r,o){for(var i=new Jd,a=new Jd,s=r-n,l=o-r,u=Math.max(s,l),c=o-n,h=0;h0?e[n+f]=a.shift().data:e[n+f]=i.shift().data:i.first?e[n+f]=i.shift().data:e[n+f]=a.shift().data,f+=1;return e}(e,t,n,o,r)}var Zd=0,em=-1,tm=1;function nm(e){return function(e){if(Array.isArray(e))return e}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function rm(e){return rm="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},rm(e)}function om(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function um(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return Array.isArray(e)?e.slice(0,1):[e].slice(0,1)}},{key:"areValidSortConfigs",value:function(e){if(!1===Array.isArray(e))return!1;var t=e.map((function(e){return e.column})),n=this.hot.countCols(),r=t.every((function(e){return e<=n&&e>=0}));return function(e){if(!1===Array.isArray(e)||!1===e.every((function(e){return Q(e)})))return!1;var t=e.map((function(e){return e.column}));return new Set(t).size===t.length&&e.every(kd)}(e)&&r}},{key:"saveAllSortSettings",value:function(){var e=this.columnStatesManager.getAllColumnsProperties();e.initialConfig=this.columnStatesManager.getSortStates(),this.hot.runHooks("persistentStateSave","columnSorting",e)}},{key:"getAllSavedSortSettings",value:function(){var e=this,t={};this.hot.runHooks("persistentStateLoad","columnSorting",t);var n=t.value;return ar(n)&&Array.isArray(n.initialConfig)&&(n.initialConfig=N(n.initialConfig,(function(t){var n=t.column,r=lm(t,["column"]);return am({column:e.hot.toVisualColumn(n)},r)}))),n}},{key:"getColumnNextConfig",value:function(e){var t=this.hot.toPhysicalColumn(e);if(this.columnStatesManager.isColumnSorted(t)){var n=this.getSortConfig(e),r=Sd(n.sortOrder);return ar(r)?(n.sortOrder=r,n):void 0}var o=this.hot.countCols();if(Number.isInteger(e)&&e>=0&&e1&&void 0!==arguments[1]?arguments[1]:mm,n=this.hot.toPhysicalColumn(e),r=this.columnStatesManager.getIndexOfColumnInSortQueue(n),o=this.columnStatesManager.isColumnSorted(n),i=this.getSortConfig(),a=this.getColumnNextConfig(e);if(o){if(sr(a))return[].concat(om(i.slice(0,r)),om(i.slice(r+1)));if(t===mm)return[].concat(om(i.slice(0,r)),om(i.slice(r+1)),[a]);if("replace"===t)return[].concat(om(i.slice(0,r)),[a],om(i.slice(r+1)))}return ar(a)?i.concat(a):i}},{key:"setMergedPluginSettings",value:function(e){var t=this.hot.toPhysicalColumn(e),n=this.hot.getSettings()[this.pluginKey],r=this.columnStatesManager.getAllColumnsProperties(),o=this.hot.getCellMeta(0,e),i=Object.getPrototypeOf(o),a=Object.hasOwnProperty.call(i,this.pluginKey)?i[this.pluginKey]:{};this.columnMetaCache.set(t,Object.assign(r,n,a))}},{key:"getFirstCellSettings",value:function(e){var t=this.blockPluginTranslation;this.blockPluginTranslation=!0,(0===this.columnMetaCache.size||this.columnMetaCache.size2?r-2:0),i=2;i1?t-1:0),r=1;r0&&void 0!==arguments[0]?arguments[0]:"")||"";this.getInputElement().value=e}},{key:"getValue",value:function(){return this.getInputElement().value}},{key:"isFocused",value:function(){return this.rootDocument.activeElement===this.getInputElement()}},{key:"focus",value:function(){this.getInputElement().focus()}},{key:"createEditor",value:function(){var t=this.rootDocument.createElement("div"),n=this.rootDocument.createElement("textarea");return this.container=this.rootDocument.querySelector(".".concat(e.CLASS_EDITOR_CONTAINER)),this.container||(this.container=this.rootDocument.createElement("div"),wt(this.container,e.CLASS_EDITOR_CONTAINER),this.rootDocument.body.appendChild(this.container)),wt(t,e.CLASS_EDITOR),wt(n,e.CLASS_INPUT),t.appendChild(n),this.container.appendChild(t),t}},{key:"getInputElement",value:function(){return this.editor.querySelector(".".concat(e.CLASS_INPUT))}},{key:"destroy",value:function(){var e=this.container?this.container.parentNode:null;this.editor.parentNode.removeChild(this.editor),this.editor=null,this.editorStyle=null,e&&e.removeChild(this.container)}}]),e}();const _m=bm;n(98741);var Mm="---------";function km(e){return gt(e,"htSeparator")}function Sm(e){return gt(e,"htDisabled")}function Cm(e){return gt(e,"htSelectionDisabled")}function Tm(e){var t=e.getSelected();return t?t[0]<0?null:t:null}function Em(e,t){var n={};return P(e,(function(e){for(var r=e.from,o=e.to,i=r.row;i<=o.row;i++)for(var a=r.col;a<=o.col;a++)n[i]||(n[i]=[]),n[i][a]=t(i,a)})),n}function Om(e,t,n,r,o){P(e,(function(e){var i=e.from,a=e.to;if(i.row===a.row&&i.col===a.col)Rm(i.row,i.col,t,n,r,o);else for(var s=i.row;s<=a.row;s++)for(var l=i.col;l<=a.col;l++)Rm(s,l,t,n,r,o)}))}function Rm(e,t,n,r,o,i){var a=o(e,t),s=r;a.className&&(s="vertical"===n?function(e,t){if(-1!==e.indexOf(t))return e;var n=e.replace("htTop","").replace("htMiddle","").replace("htBottom","").replace(" ","");return"".concat(n," ").concat(t)}(a.className,r):function(e,t){if(-1!==e.indexOf(t))return e;var n=e.replace("htLeft","").replace("htCenter","").replace("htRight","").replace("htJustify","").replace(" ","");return"".concat(n," ").concat(t)}(a.className,r)),i(e,t,"className",s)}function Lm(e,t){var n=!1;return Array.isArray(e)&&P(e,(function(e){return e.forAll((function(e,r){if(t(e,r))return n=!0,!1})),n})),n}function Dm(e){return''.concat(String.fromCharCode(10003),"").concat(e)}function Am(e,t){for(var n=e.slice(0);01&&void 0!==arguments[1]?arguments[1]:Mm,n=e.slice(0);return n=function(e,t){var n=e.slice(0);return n.reverse(),(n=Am(n,t)).reverse(),n}(n=Am(n,t),t),n=function(e){var t=[];return P(e,(function(e,n){n>0?t[t.length-1].name!==e.name&&t.push(e):t.push(e)})),t}(n),n}function Nm(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:250;this.showDebounced=sn((function(t){e.wasLastActionShow&&e.runLocalHooks("show",t.from.row,t.from.col)}),t)}},{key:"destroy",value:function(){this.clearLocalHooks()}}],n&&Nm(t.prototype,n),e}();J(Pm,Zh);const xm=Pm;function Ym(e){return Ym="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ym(e)}function Im(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function jm(e,t){for(var n=0;n0&&void 0!==arguments[0])||arguments[0];if(!this.range.from)throw new Error('Before using this method, first set cell range (hot.getPlugin("comment").setRange())');this.hot.setCellMeta(this.range.from.row,this.range.from.col,zm,void 0),e&&this.hot.render(),this.hide()}},{key:"removeCommentAtCell",value:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];this.setRange({from:new Me(e,t)}),this.removeComment(n)}},{key:"getComment",value:function(){var e=this.range.from.row,t=this.range.from.col;return this.getCommentMeta(e,t,Gm)}},{key:"getCommentAtCell",value:function(e,t){return this.getCommentMeta(e,t,Gm)}},{key:"show",value:function(){if(!this.range.from)throw new Error('Before using this method, first set cell range (hot.getPlugin("comment").setRange())');var e=this.hot.getCellMeta(this.range.from.row,this.range.from.col);return this.refreshEditor(!0),this.editor.setValue(e[zm]?e[zm][Gm]:""),this.editor.hidden&&this.editor.show(),!0}},{key:"showAtCell",value:function(e,t){return this.setRange({from:new Me(e,t)}),this.show()}},{key:"hide",value:function(){this.editor.hidden||this.editor.hide()}},{key:"refreshEditor",value:function(){if(arguments.length>0&&void 0!==arguments[0]&&arguments[0]||this.range.from&&this.editor.isVisible()){var e=this.hot.rootWindow,t=this.hot.view.wt,n=t.wtTable,r=t.wtOverlays,o=t.wtViewport,i=r.scrollableElement,a=n.getCell(this.range.from),s=this.range.from.row,l=this.range.from.col,u=Ot(a),c=n.getStretchedColumnWidth(l),h=u.top<0?0:u.top,f=u.left;o.hasVerticalScroll()&&i!==e&&(h-=r.topOverlay.getScrollPosition()),o.hasHorizontalScroll()&&i!==e&&(f-=r.leftOverlay.getScrollPosition());var d=f+c,m=h,p=this.getCommentMeta(s,l,qm),y=this.getCommentMeta(s,l,Xm);p?this.editor.setSize(p.width,p.height):this.editor.resetSize(),this.editor.setReadOnlyState(y),this.editor.setPosition(d,m)}}},{key:"checkSelectionCommentsConsistency",value:function(){var e=this.hot.getSelectedRangeLast();if(!e)return!1;var t=!1,n=e.from;return this.getCommentMeta(n.row,n.col,Gm)&&(t=!0),t}},{key:"updateCommentMeta",value:function(e,t,n){var r,o=this.hot.getCellMeta(e,t)[zm];o?q(r=X(o),n):r=n,this.hot.setCellMeta(e,t,zm,r)}},{key:"getCommentMeta",value:function(e,t,n){var r=this.hot.getCellMeta(e,t);if(r[zm])return r[zm][n]}},{key:"onMouseDown",value:function(e){if(this.mouseDown=!0,this.hot.view&&this.hot.view.wt){if(!this.contextMenuEvent&&!this.targetIsCommentTextArea(e)){var t=st(e.target,"TD","TBODY"),n=null;t&&(n=this.hot.view.wt.wtTable.getCoords(t)),(!t||this.range.from&&n&&(this.range.from.row!==n.row||this.range.from.col!==n.col))&&this.hide()}this.contextMenuEvent=!1}}},{key:"onMouseOver",value:function(e){var t=Um.get(this),n=this.hot.rootDocument;if(t.cellBelowCursor=n.elementFromPoint(e.clientX,e.clientY),!(this.mouseDown||this.editor.isFocused()||gt(e.target,"wtBorder")||t.cellBelowCursor!==e.target)&&this.editor)if(this.targetIsCellWithComment(e)){var r=this.hot.view.wt.wtTable.getCoords(e.target),o={from:new Me(r.row,r.col)};this.displaySwitch.show(o)}else ut(e.target,n)&&!this.targetIsCommentTextArea(e)&&this.displaySwitch.hide()}},{key:"onMouseUp",value:function(){this.mouseDown=!1}},{key:"onAfterRenderer",value:function(e,t){t[zm]&&t[zm][Gm]&&wt(e,t.commentedCellClassName)}},{key:"onEditorBlur",value:function(){this.setComment()}},{key:"onEditorMouseDown",value:function(e){Um.get(this).tempEditorDimensions={width:Yt(e.target),height:It(e.target)}}},{key:"onEditorMouseUp",value:function(e){var t=Um.get(this),n=Yt(e.target),r=It(e.target);n===t.tempEditorDimensions.width+1&&r===t.tempEditorDimensions.height+2||this.updateCommentMeta(this.range.from.row,this.range.from.col,Im({},qm,{width:n,height:r}))}},{key:"onContextMenuAddComment",value:function(){var e=this;this.displaySwitch.cancelHiding();var t=this.hot.getSelectedRangeLast();this.contextMenuEvent=!0,this.setRange({from:t.from}),this.show(),setTimeout((function(){e.hot&&(e.hot.deselectCell(),e.editor.focus())}),10)}},{key:"onContextMenuRemoveComment",value:function(){var e=this.hot.getSelectedRangeLast(),t=e.from,n=e.to;this.contextMenuEvent=!0;for(var r=t.row;r<=n.row;r++)for(var o=t.col;o<=n.col;o++)this.removeCommentAtCell(r,o,!1);this.hot.render()}},{key:"onContextMenuMakeReadOnly",value:function(){var e=this.hot.getSelectedRangeLast(),t=e.from,n=e.to;this.contextMenuEvent=!0;for(var r=t.row;r<=n.row;r++)for(var o=t.col;o<=n.col;o++){var i=!!this.getCommentMeta(r,o,Xm);this.updateCommentMeta(r,o,Im({},Xm,!i))}}},{key:"addToContextMenu",value:function(e){var t=this;e.items.push({name:"---------"},{key:"commentsAddEdit",name:function(){return t.checkSelectionCommentsConsistency()?t.hot.getTranslatedPhrase(cc):t.hot.getTranslatedPhrase(uc)},callback:function(){return t.onContextMenuAddComment()},disabled:function(){return!(this.getSelectedLast()&&!this.selection.isSelectedByCorner())}},{key:"commentsRemove",name:function(){return this.getTranslatedPhrase(hc)},callback:function(){return t.onContextMenuRemoveComment()},disabled:function(){return t.hot.selection.isSelectedByCorner()}},{key:"commentsReadOnly",name:function(){var e=this,t=this.getTranslatedPhrase(fc),n=Lm(this.getSelectedRangeLast(),(function(t,n){var r=e.getCellMeta(t,n)[zm];if(r&&(r=r[Xm]),r)return!0}));return n&&(t=Dm(t)),t},callback:function(){return t.onContextMenuMakeReadOnly()},disabled:function(){return t.hot.selection.isSelectedByCorner()||!t.checkSelectionCommentsConsistency()}})}},{key:"getDisplayDelaySetting",value:function(){var e=this.hot.getSettings().comments;if(Q(e))return e.displayDelay}},{key:"onAfterBeginEditing",value:function(){this.hide()}},{key:"destroy",value:function(){this.editor&&this.editor.destroy(),this.displaySwitch&&this.displaySwitch.destroy(),Wm(Bm(t.prototype),"destroy",this).call(this)}}],r&&jm(n.prototype,r),t}(Rf);gu("comments",Km);const Jm=Km;function $m(e,t){for(var n=0;n1?n-1:0),o=1;o=this.getSettings().maxRows},hidden:function(){return!this.getSettings().allowInsertRow}}})),fp(ap,up,(function(){return{key:up,name:function(){return this.getTranslatedPhrase(Xu)},callback:function(e,t){var n=t[Math.max(t.length-1,0)];this.alter("insert_row",n.end.row+1,1,"ContextMenu.rowBelow")},disabled:function(){return!Tm(this)||this.selection.isSelectedByColumnHeader()||this.countRows()>=this.getSettings().maxRows},hidden:function(){return!this.getSettings().allowInsertRow}}})),fp(ap,tp,(function(){return{key:tp,name:function(){return this.getTranslatedPhrase(Ku)},callback:function(e,t){var n=t[Math.max(t.length-1,0)];this.alter("insert_col",n.start.col,1,"ContextMenu.columnLeft")},disabled:function(){var e=Tm(this);if(!e)return!0;if(!this.isColumnModificationAllowed())return!0;var t,n,r=(t=e[0],n=3,function(e){if(Array.isArray(e))return e}(t)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()),o=r[0],i=r[1],a=[o,0,r[2],this.countCols()-1].join(",")===e.join(","),s=1===this.countCols();return i<0||this.countCols()>=this.getSettings().maxCols||!s&&a},hidden:function(){return!this.getSettings().allowInsertColumn}}})),fp(ap,np,(function(){return{key:np,name:function(){return this.getTranslatedPhrase(Ju)},callback:function(e,t){var n=t[Math.max(t.length-1,0)];this.alter("insert_col",n.end.col+1,1,"ContextMenu.columnRight")},disabled:function(){var e=Tm(this);if(!e)return!0;if(!this.isColumnModificationAllowed())return!0;var t,n,r=(t=e[0],n=3,function(e){if(Array.isArray(e))return e}(t)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()),o=r[0],i=r[1],a=[o,0,r[2],this.countCols()-1].join(",")===e.join(","),s=1===this.countCols();return i<0||this.countCols()>=this.getSettings().maxCols||!s&&a},hidden:function(){return!this.getSettings().allowInsertColumn}}})),fp(ap,ep,(function(){return{key:ep,name:function(){return this.getTranslatedPhrase(nc)},callback:function(e,t){var n=t[0].start.col;this.countRows()&&this.populateFromArray(0,n,[[null]],Math.max(t[0].start.row,t[0].end.row),n,"ContextMenu.clearColumn")},disabled:function(){var e=Tm(this);if(!e)return!0;var t,n,r=(t=e[0],n=3,function(e){if(Array.isArray(e))return e}(t)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()),o=r[0],i=r[1],a=[o,0,r[2],this.countCols()-1].join(",")===e.join(",");return i<0||this.countCols()>=this.getSettings().maxCols||a}}})),fp(ap,sp,(function(){return{key:sp,name:function(){var e,t,n=this.getSelected(),r=0;if(n)if(n.length>1)r=1;else{var o=(e=n[0],t=3,function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}());o[0]-o[2]!=0&&(r=1)}return this.getTranslatedPhrase($u,r)},callback:function(){this.alter("remove_row",function(e){var t=cf(e);if(0===t||1===t)return[];var n=hf(t),r=new Set;P(e,(function(e){var t=rf(n(e),3),o=t[0],i=t[2]-o+1;P(Array.from(new Array(i),(function(e,t){return o+t})),(function(e){r.has(e)||r.add(e)}))}));var o=A(Array.from(r).sort((function(e,t){return e-t})),(function(e,t,n,r){return 0!==n&&t===r[n-1]+1?e[e.length-1][1]+=1:e.push([t,1]),e}),[]);return o}(this.getSelected()),1,"ContextMenu.removeRow")},disabled:function(){var e=Tm(this),t=this.countRows();return!e||this.selection.isSelectedByColumnHeader()||this.selection.isSelectedByCorner()||!t},hidden:function(){return!this.getSettings().allowRemoveRow}}})),fp(ap,ip,(function(){return{key:ip,name:function(){var e,t,n=this.getSelected(),r=0;if(n)if(n.length>1)r=1;else{var o=(e=n[0],t=4,function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}());o[1]-o[3]!=0&&(r=1)}return this.getTranslatedPhrase(Qu,r)},callback:function(){this.alter("remove_col",function(e){var t=cf(e);if(0===t||1===t)return[];var n=hf(t),r=new Set;P(e,(function(e){var t=rf(n(e),4),o=t[1],i=t[3]-o+1;P(Array.from(new Array(i),(function(e,t){return o+t})),(function(e){r.has(e)||r.add(e)}))}));var o=A(Array.from(r).sort((function(e,t){return e-t})),(function(e,t,n,r){return 0!==n&&t===r[n-1]+1?e[e.length-1][1]+=1:e.push([t,1]),e}),[]);return o}(this.getSelected()),null,"ContextMenu.removeColumn")},disabled:function(){var e=Tm(this),t=this.countCols();return!e||this.selection.isSelectedByRowHeader()||this.selection.isSelectedByCorner()||!this.isColumnModificationAllowed()||!t},hidden:function(){return!this.getSettings().allowRemoveColumn}}})),fp(ap,hp,(function(){return{key:hp,name:function(){return this.getTranslatedPhrase(Zu)},callback:function(){this.undo()},disabled:function(){return this.undoRedo&&!this.undoRedo.isUndoAvailable()}}})),fp(ap,op,(function(){return{key:op,name:function(){return this.getTranslatedPhrase(ec)},callback:function(){this.redo()},disabled:function(){return this.undoRedo&&!this.undoRedo.isRedoAvailable()}}})),fp(ap,rp,(function(){return{key:rp,name:function(){var e=this,t=this.getTranslatedPhrase(tc),n=Lm(this.getSelectedRange(),(function(t,n){return e.getCellMeta(t,n).readOnly}));return n&&(t=Dm(t)),t},callback:function(){var e=this,t=this.getSelectedRange(),n=Lm(t,(function(t,n){return e.getCellMeta(t,n).readOnly}));P(t,(function(t){t.forAll((function(t,r){e.setCellMeta(t,r,"readOnly",!n)}))})),this.render()},disabled:function(){return!(this.getSelectedRange()&&!this.selection.isSelectedByCorner())}}})),fp(ap,Zm,(function(){return{key:Zm,name:function(){return this.getTranslatedPhrase(dc)},disabled:function(){return!(this.getSelectedRange()&&!this.selection.isSelectedByCorner())},submenu:{items:[{key:"".concat(Zm,":left"),name:function(){var e=this,t=this.getTranslatedPhrase(mc),n=Lm(this.getSelectedRange(),(function(t,n){var r=e.getCellMeta(t,n).className;if(r&&-1!==r.indexOf("htLeft"))return!0}));return n&&(t=Dm(t)),t},callback:function(){var e=this,t=this.getSelectedRange(),n=Em(t,(function(t,n){return e.getCellMeta(t,n).className})),r="horizontal",o="htLeft";this.runHooks("beforeCellAlignment",n,t,r,o),Om(t,r,o,(function(t,n){return e.getCellMeta(t,n)}),(function(t,n,r,o){return e.setCellMeta(t,n,r,o)})),this.render()},disabled:!1},{key:"".concat(Zm,":center"),name:function(){var e=this,t=this.getTranslatedPhrase(pc),n=Lm(this.getSelectedRange(),(function(t,n){var r=e.getCellMeta(t,n).className;if(r&&-1!==r.indexOf("htCenter"))return!0}));return n&&(t=Dm(t)),t},callback:function(){var e=this,t=this.getSelectedRange(),n=Em(t,(function(t,n){return e.getCellMeta(t,n).className})),r="horizontal",o="htCenter";this.runHooks("beforeCellAlignment",n,t,r,o),Om(t,r,o,(function(t,n){return e.getCellMeta(t,n)}),(function(t,n,r,o){return e.setCellMeta(t,n,r,o)})),this.render()},disabled:!1},{key:"".concat(Zm,":right"),name:function(){var e=this,t=this.getTranslatedPhrase(yc),n=Lm(this.getSelectedRange(),(function(t,n){var r=e.getCellMeta(t,n).className;if(r&&-1!==r.indexOf("htRight"))return!0}));return n&&(t=Dm(t)),t},callback:function(){var e=this,t=this.getSelectedRange(),n=Em(t,(function(t,n){return e.getCellMeta(t,n).className})),r="horizontal",o="htRight";this.runHooks("beforeCellAlignment",n,t,r,o),Om(t,r,o,(function(t,n){return e.getCellMeta(t,n)}),(function(t,n,r,o){return e.setCellMeta(t,n,r,o)})),this.render()},disabled:!1},{key:"".concat(Zm,":justify"),name:function(){var e=this,t=this.getTranslatedPhrase(vc),n=Lm(this.getSelectedRange(),(function(t,n){var r=e.getCellMeta(t,n).className;if(r&&-1!==r.indexOf("htJustify"))return!0}));return n&&(t=Dm(t)),t},callback:function(){var e=this,t=this.getSelectedRange(),n=Em(t,(function(t,n){return e.getCellMeta(t,n).className})),r="horizontal",o="htJustify";this.runHooks("beforeCellAlignment",n,t,r,o),Om(t,r,o,(function(t,n){return e.getCellMeta(t,n)}),(function(t,n,r,o){return e.setCellMeta(t,n,r,o)})),this.render()},disabled:!1},{name:Mm},{key:"".concat(Zm,":top"),name:function(){var e=this,t=this.getTranslatedPhrase(gc),n=Lm(this.getSelectedRange(),(function(t,n){var r=e.getCellMeta(t,n).className;if(r&&-1!==r.indexOf("htTop"))return!0}));return n&&(t=Dm(t)),t},callback:function(){var e=this,t=this.getSelectedRange(),n=Em(t,(function(t,n){return e.getCellMeta(t,n).className})),r="vertical",o="htTop";this.runHooks("beforeCellAlignment",n,t,r,o),Om(t,r,o,(function(t,n){return e.getCellMeta(t,n)}),(function(t,n,r,o){return e.setCellMeta(t,n,r,o)})),this.render()},disabled:!1},{key:"".concat(Zm,":middle"),name:function(){var e=this,t=this.getTranslatedPhrase(wc),n=Lm(this.getSelectedRange(),(function(t,n){var r=e.getCellMeta(t,n).className;if(r&&-1!==r.indexOf("htMiddle"))return!0}));return n&&(t=Dm(t)),t},callback:function(){var e=this,t=this.getSelectedRange(),n=Em(t,(function(t,n){return e.getCellMeta(t,n).className})),r="vertical",o="htMiddle";this.runHooks("beforeCellAlignment",n,t,r,o),Om(t,r,o,(function(t,n){return e.getCellMeta(t,n)}),(function(t,n,r,o){return e.setCellMeta(t,n,r,o)})),this.render()},disabled:!1},{key:"".concat(Zm,":bottom"),name:function(){var e=this,t=this.getTranslatedPhrase(bc),n=Lm(this.getSelectedRange(),(function(t,n){var r=e.getCellMeta(t,n).className;if(r&&-1!==r.indexOf("htBottom"))return!0}));return n&&(t=Dm(t)),t},callback:function(){var e=this,t=this.getSelectedRange(),n=Em(t,(function(t,n){return e.getCellMeta(t,n).className})),r="vertical",o="htBottom";this.runHooks("beforeCellAlignment",n,t,r,o),Om(t,r,o,(function(t,n){return e.getCellMeta(t,n)}),(function(t,n,r,o){return e.setCellMeta(t,n,r,o)})),this.render()},disabled:!1}]}}})),ap);function pp(){var e={};return ee(mp,(function(t,n){e[n]=t()})),e}function yp(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:null;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.hot=t,this.predefinedItems=pp(),this.defaultOrderPattern=n}var t,n;return t=e,n=[{key:"setPredefinedItems",value:function(e){var t=this,n={};this.defaultOrderPattern.length=0,ee(e,(function(e,r){var o="";e.name===Mm?(n[Mm]=e,o=Mm):isNaN(parseInt(r,10))?(e.key=void 0===e.key?r:e.key,n[r]=e,o=e.key):(n[e.key]=e,o=e.key),t.defaultOrderPattern.push(o)})),this.predefinedItems=n}},{key:"getItems",value:function(){return function(){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=[],r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return r&&r.items?r=r.items:Array.isArray(r)||(r=e),Q(r)?ee(r,(function(e,r){var o=t["string"==typeof e?e:r];o||(o=e),Q(e)?G(o,e):"string"==typeof o&&(o={name:o}),void 0===o.key&&(o.key=r),n.push(o)})):P(r,(function(e,r){var o=t[e];!o&&dp.indexOf(e)>=0||(o||(o={name:e,key:"".concat(r)}),Q(e)&&G(o,e),void 0===o.key&&(o.key=r),n.push(o))})),n}(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,this.defaultOrderPattern,this.predefinedItems)}}],n&&yp(t.prototype,n),e}();const gp=vp;function wp(e,t){for(var n=0;n=e.offsetHeight}},{key:"fitsBelow",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.rootWindow.innerHeight;return this.topRelative+e.offsetHeight<=t}},{key:"fitsOnRight",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.rootWindow.innerWidth;return this.leftRelative+this.cellWidth+e.offsetWidth<=t}},{key:"fitsOnLeft",value:function(e){return this.leftRelative>=e.offsetWidth}}],n&&wp(t.prototype,n),e}();const _p=bp;function Mp(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:0;this.offset[e]=t}},{key:"isSubMenu",value:function(){return null!==this.parentMenu}},{key:"open",value:function(){var e=this;this.runLocalHooks("beforeOpen"),this.container.removeAttribute("style"),this.container.style.display="block";var t=sn((function(t){return e.openSubMenu(t)}),300),n=this.options.minWidth||215,r=!1,o=H(this.menuItems,(function(t){return t.key===cp&&(r=!0),function(e,t){return!e.hidden||!("function"==typeof e.hidden&&e.hidden.call(t))}(t,e.hot)}));if(o.length<1&&!r)o.push(pp()[cp]);else if(0===o.length)return;var i={data:o=Hm(o,Mm),colHeaders:!1,autoColumnSize:!0,modifyColWidth:function(e){return ar(e)&&e0&&void 0!==arguments[0]&&arguments[0];this.isOpened()&&(e&&this.parentMenu?this.parentMenu.close():(this.closeAllSubMenus(),this.container.style.display="none",this.releaseMainTableCallbacks(),this.hotMenu.destroy(),this.hotMenu=null,this.hot.getSettings().outsideClickDeselects=this.origOutsideClickDeselects,this.runLocalHooks("afterClose"),this.parentMenu&&this.parentMenu.hotMenu.listen()))}},{key:"openSubMenu",value:function(t){if(!this.hotMenu)return!1;var n=this.hotMenu.getCell(t,0);if(this.closeAllSubMenus(),!n||!function(e){return gt(e,"htSubmenu")}(n))return!1;var r=this.hotMenu.getSourceDataAtRow(t),o=new e(this.hot,{parent:this,name:r.name,className:this.options.className,keepInViewport:!0});return o.setMenuItems(r.submenu.items),o.open(),o.setPosition(n.getBoundingClientRect()),this.hotSubMenus[r.key]=o,o}},{key:"closeSubMenu",value:function(e){var t=this.hotMenu.getSourceDataAtRow(e),n=this.hotSubMenus[t.key];n&&(n.destroy(),delete this.hotSubMenus[t.key])}},{key:"closeAllSubMenus",value:function(){var e=this;P(this.hotMenu.getData(),(function(t,n){return e.closeSubMenu(n)}))}},{key:"isAllSubMenusClosed",value:function(){return 0===Object.keys(this.hotSubMenus).length}},{key:"destroy",value:function(){var e=this.container.parentNode;this.clearLocalHooks(),this.close(),this.parentMenu=null,this.eventManager.destroy(),e&&e.removeChild(this.container)}},{key:"isOpened",value:function(){return null!==this.hotMenu}},{key:"executeCommand",value:function(e){if(this.isOpened()&&this.hotMenu.getSelectedLast()){var t=this.hotMenu.getSourceDataAtRow(this.hotMenu.getSelectedLast()[0]);if(this.runLocalHooks("select",t,e),!1!==t.isCommand&&t.name!==Mm){var n=this.hot.getSelectedRange(),r=n?function(e){return N(e,(function(e){return{start:e.getTopLeftCorner(),end:e.getBottomRightCorner()}}))}(n):[],o=!0;(!0===t.disabled||"function"==typeof t.disabled&&!0===t.disabled.call(this.hot)||t.submenu)&&(o=!1),this.runLocalHooks("executeCommand",t.key,r,e),this.isSubMenu()&&this.parentMenu.runLocalHooks("executeCommand",t.key,r,e),o&&this.close(!0)}}}},{key:"setPosition",value:function(e){var t=new _p(e,this.hot.rootWindow);this.options.keepInViewport?(t.fitsBelow(this.container)?this.setPositionBelowCursor(t):t.fitsAbove(this.container)?this.setPositionAboveCursor(t):this.setPositionBelowCursor(t),t.fitsOnRight(this.container)?this.setPositionOnRightOfCursor(t):this.setPositionOnLeftOfCursor(t)):(this.setPositionBelowCursor(t),this.setPositionOnRightOfCursor(t))}},{key:"setPositionAboveCursor",value:function(e){var t=this.offset.above+e.top-this.container.offsetHeight;this.isSubMenu()&&(t=e.top+e.cellHeight-this.container.offsetHeight+3),this.container.style.top="".concat(t,"px")}},{key:"setPositionBelowCursor",value:function(e){var t=this.offset.below+e.top;this.isSubMenu()&&(t=e.top-1),this.container.style.top="".concat(t,"px")}},{key:"setPositionOnRightOfCursor",value:function(e){var t;t=this.isSubMenu()?1+e.left+e.cellWidth:this.offset.right+1+e.left,this.container.style.left="".concat(t,"px")}},{key:"setPositionOnLeftOfCursor",value:function(e){var t=this.offset.left+e.left-this.container.offsetWidth+Xt(this.hot.rootDocument)+4;this.container.style.left="".concat(t,"px")}},{key:"selectFirstCell",value:function(){var e=this.hotMenu.getCell(0,0);km(e)||Sm(e)||Cm(e)?this.selectNextCell(0,0):this.hotMenu.selectCell(0,0)}},{key:"selectLastCell",value:function(){var e=this.hotMenu.countRows()-1,t=this.hotMenu.getCell(e,0);km(t)||Sm(t)||Cm(t)?this.selectPrevCell(e,0):this.hotMenu.selectCell(e,0)}},{key:"selectNextCell",value:function(e,t){var n=e+1,r=n=0?this.hotMenu.getCell(n,t):null;r&&(km(r)||Sm(r)||Cm(r)?this.selectPrevCell(n,t):this.hotMenu.selectCell(n,t))}},{key:"menuItemRenderer",value:function(e,t,n,r,o,i){var a,s=this,l=e.getSourceDataAtRow(n),u=this.hot.rootDocument.createElement("div"),c=function(e){return e.disableSelection},h=i;"function"==typeof h&&(h=h.call(this.hot)),Mt(t),wt(u,"htItemWrapper"),t.appendChild(u),a=l,new RegExp(Mm,"i").test(a.name)?wt(t,"htSeparator"):"function"==typeof l.renderer?(wt(t,"htCustomMenuRenderer"),t.appendChild(l.renderer(e,u,n,r,o,h))):Ct(u,h),function(e){return!0===e.disabled||"function"==typeof e.disabled&&!0===e.disabled.call(s.hot)}(l)?(wt(t,"htDisabled"),this.eventManager.addEventListener(t,"mouseenter",(function(){return e.deselectCell()}))):c(l)?(wt(t,"htSelectionDisabled"),this.eventManager.addEventListener(t,"mouseenter",(function(){return e.deselectCell()}))):function(e){return oe(e,"submenu")}(l)?(wt(t,"htSubmenu"),c(l)?this.eventManager.addEventListener(t,"mouseenter",(function(){return e.deselectCell()})):this.eventManager.addEventListener(t,"mouseenter",(function(){return e.selectCell(n,r,void 0,void 0,!1,!1)}))):(bt(t,"htSubmenu"),bt(t,"htDisabled"),c(l)?this.eventManager.addEventListener(t,"mouseenter",(function(){return e.deselectCell()})):this.eventManager.addEventListener(t,"mouseenter",(function(){return e.selectCell(n,r,void 0,void 0,!1,!1)})))}},{key:"createContainer",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=this.hot.rootDocument,r=t;return r&&(rn(r)&&(r=null===(r=r.call(this.hot))||sr(r)?"":r.toString()),r=r.replace(/[^A-z0-9]/g,"_"),r="".concat(this.options.className,"Sub_").concat(r),e=n.querySelector(".".concat(this.options.className,".").concat(r))),e||(wt(e=n.createElement("div"),"htMenu ".concat(this.options.className)),r&&wt(e,r),n.getElementsByTagName("body")[0].appendChild(e)),e}},{key:"blockMainTableCallbacks",value:function(){this._afterScrollCallback=function(){},this.hot.addHook("afterScrollVertically",this._afterScrollCallback),this.hot.addHook("afterScrollHorizontally",this._afterScrollCallback)}},{key:"releaseMainTableCallbacks",value:function(){this._afterScrollCallback&&(this.hot.removeHook("afterScrollVertically",this._afterScrollCallback),this.hot.removeHook("afterScrollHorizontally",this._afterScrollCallback),this._afterScrollCallback=null)}},{key:"onBeforeKeyDown",value:function(e){var t=this.hotMenu.getSelectedLast(),n=!1;switch(this.keyEvent=!0,e.keyCode){case lo.ESCAPE:this.close(),n=!0;break;case lo.ENTER:t&&(this.hotMenu.getSourceDataAtRow(t[0]).submenu?n=!0:(this.executeCommand(e),this.close(!0)));break;case lo.ARROW_DOWN:t?this.selectNextCell(t[0],t[1]):this.selectFirstCell(),n=!0;break;case lo.ARROW_UP:t?this.selectPrevCell(t[0],t[1]):this.selectLastCell(),n=!0;break;case lo.ARROW_RIGHT:if(t){var r=this.openSubMenu(t[0]);r&&r.selectFirstCell()}n=!0;break;case lo.ARROW_LEFT:t&&this.isSubMenu()&&(this.close(),this.parentMenu&&this.parentMenu.hotMenu.listen(),n=!0)}n&&(e.preventDefault(),jr(e)),this.keyEvent=!1}},{key:"onAfterInit",value:function(){var e=this.hotMenu.view.wt.wtTable,t=this.hotMenu.getSettings().data,n=e.hider.style,r=e.holder.style,o=parseInt(n.width,10),i=A(t,(function(e,t){return e+(t.name===Mm?1:26)}),0);r.width="".concat(o+22,"px"),r.height="".concat(i+4,"px"),n.height=r.height}},{key:"onAfterSelection",value:function(e,t,n,r,o){!1===this.keyEvent&&(o.value=!0)}},{key:"onDocumentMouseDown",value:function(e){this.isOpened()&&(this.container&&ut(e.target,this.container)&&this.executeCommand(e),(this.options.standalone&&this.hotMenu&&!ut(e.target,this.hotMenu.rootElement)||(this.isAllSubMenusClosed()||this.isSubMenu())&&!ut(e.target,".htMenu")&&ut(e.target,this.hot.rootDocument))&&this.close(!0))}}],n&&Mp(t.prototype,n),e}();J(kp,Zh);const Sp=kp;function Cp(e){return Cp="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Cp(e)}function Tp(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Ep(e,t,n){return Ep="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,n){var r=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=Op(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(n):o.value}},Ep(e,t,n||e)}function Op(e){return Op=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},Op(e)}function Rp(e,t){for(var n=0;n1?n-1:0),o=1;o0&&(jp-=1),function(e){e.eventManager.clear()}(e),jp<=0)){jp=0;var t=Bp.get(e.rootDocument);t&&t.parentNode&&(t.parentNode.removeChild(t),Bp.delete(e.rootDocument)),e.mainElement=null}}function Up(e){return Up="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Up(e)}function zp(e,t){for(var n=0;n',''].join(""),Qp=function(e){function t(e){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(n=function(e,t){return!t||"object"!==Up(t)&&"function"!=typeof t?Gp(e):t}(this,Xp(t).call(this,e))).columnsLimit=1e3,n.copyableRanges=[],n.focusableElement=void 0,n.pasteMode="overwrite",n.rowsLimit=1e3,Jp.set(Gp(n),{isTriggeredByCopy:!1,isTriggeredByCut:!1,isBeginEditing:!1,isFragmentSelectionEnabled:!1}),n}var n,r;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&Kp(e,t)}(t,e),n=t,r=[{key:"isEnabled",value:function(){return!!this.hot.getSettings().copyPaste}},{key:"enablePlugin",value:function(){var e=this;if(!this.enabled){var n,r,o=this.hot.getSettings();Jp.get(this).isFragmentSelectionEnabled=o.fragmentSelection,"object"===Up(o.copyPaste)&&(this.pasteMode=o.copyPaste.pasteMode||this.pasteMode,this.rowsLimit=o.copyPaste.rowsLimit||this.rowsLimit,this.columnsLimit=o.copyPaste.columnsLimit||this.columnsLimit),this.addHook("afterContextMenuDefaultOptions",(function(t){return e.onAfterContextMenuDefaultOptions(t)})),this.addHook("afterOnCellMouseUp",(function(){return e.onAfterOnCellMouseUp()})),this.addHook("afterSelectionEnd",(function(){return e.onAfterSelectionEnd()})),this.addHook("beforeKeyDown",(function(){return e.onBeforeKeyDown()})),this.focusableElement=(n=this.hot.rootDocument,r=new Ip(n),jp+=1,r),this.focusableElement.addLocalHook("copy",(function(t){return e.onCopy(t)})).addLocalHook("cut",(function(t){return e.onCut(t)})).addLocalHook("paste",(function(t){return e.onPaste(t)})),qp(Xp(t.prototype),"enablePlugin",this).call(this)}}},{key:"updatePlugin",value:function(){this.disablePlugin(),this.enablePlugin(),this.getOrCreateFocusableElement(),qp(Xp(t.prototype),"updatePlugin",this).call(this)}},{key:"disablePlugin",value:function(){this.focusableElement&&Vp(this.focusableElement),qp(Xp(t.prototype),"disablePlugin",this).call(this)}},{key:"copy",value:function(){Jp.get(this).isTriggeredByCopy=!0,this.getOrCreateFocusableElement(),this.focusableElement.focus(),this.hot.rootDocument.execCommand("copy")}},{key:"cut",value:function(){Jp.get(this).isTriggeredByCut=!0,this.getOrCreateFocusableElement(),this.focusableElement.focus(),this.hot.rootDocument.execCommand("cut")}},{key:"getRangedCopyableData",value:function(e){var t=this,n=[],r=[],o=[];return P(e,(function(e){Ra(e.startRow,e.endRow,(function(e){-1===r.indexOf(e)&&r.push(e)})),Ra(e.startCol,e.endCol,(function(e){-1===o.indexOf(e)&&o.push(e)}))})),P(r,(function(e){var r=[];P(o,(function(n){r.push(t.hot.getCopyableData(e,n))})),n.push(r)})),Vl.stringify(n)}},{key:"getRangedData",value:function(e){var t=this,n=[],r=[],o=[];return P(e,(function(e){Ra(e.startRow,e.endRow,(function(e){-1===r.indexOf(e)&&r.push(e)})),Ra(e.startCol,e.endCol,(function(e){-1===o.indexOf(e)&&o.push(e)}))})),P(r,(function(e){var r=[];P(o,(function(n){r.push(t.hot.getCopyableData(e,n))})),n.push(r)})),n}},{key:"paste",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;if(e||t){var n=new xp;e&&n.clipboardData.setData("text/plain",e),t&&n.clipboardData.setData("text/html",t),this.getOrCreateFocusableElement(),this.onPaste(n)}}},{key:"setCopyableText",value:function(){var e=this.hot.getSelectedRangeLast();if(e){var t=e.getTopLeftCorner(),n=e.getBottomRightCorner(),r=t.row,o=t.col,i=n.row,a=n.col,s=Math.min(i,r+this.rowsLimit-1),l=Math.min(a,o+this.columnsLimit-1);this.copyableRanges.length=0,this.copyableRanges.push({startRow:r,startCol:o,endRow:s,endCol:l}),this.copyableRanges=this.hot.runHooks("modifyCopyableRange",this.copyableRanges),i===s&&a===l||this.hot.runHooks("afterCopyLimit",i-r+1,a-o+1,this.rowsLimit,this.columnsLimit)}}},{key:"getOrCreateFocusableElement",value:function(){var e=this.hot.getActiveEditor(),t=e?e.TEXTAREA:void 0;t?this.focusableElement.setFocusableElement(t):this.focusableElement.useSecondaryElement()}},{key:"isEditorOpened",value:function(){var e=this.hot.getActiveEditor();return e&&e.isOpened()}},{key:"populateValues",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.hot.getSelectedLast();if(e.length){for(var n=e.length-1,r=e[0].length-1,o=Math.min(t[0],t[2]),i=Math.max(t[0],t[2],n+o),a=Math.min(t[1],t[3]),s=Math.max(t[1],t[3],r+a),l=[],u=o,c=0;u<=i;u+=1){for(var h=[],f=a,d=0;f<=s;f+=1)h.push(e[c][d]),d=d===r?0:d+=1;l.push(h),c=c===n?0:c+=1}return this.hot.populateFromArray(o,a,l,void 0,void 0,"CopyPaste.paste",this.pasteMode),[o,a,i,s]}}},{key:"onCopy",value:function(e){var t=Jp.get(this);if((this.hot.isListening()||t.isTriggeredByCopy)&&!this.isEditorOpened()){this.setCopyableText(),t.isTriggeredByCopy=!1;var n=this.getRangedData(this.copyableRanges);if(this.hot.runHooks("beforeCopy",n,this.copyableRanges)){var r=Vl.stringify(n);if(e&&e.clipboardData){var o=mu(n,this.hot.rootDocument);e.clipboardData.setData("text/plain",r),e.clipboardData.setData("text/html",[$p,o].join(""))}else"undefined"==typeof ClipboardEvent&&this.hot.rootWindow.clipboardData.setData("Text",r);this.hot.runHooks("afterCopy",n,this.copyableRanges)}e.preventDefault()}}},{key:"onCut",value:function(e){var t=Jp.get(this);if((this.hot.isListening()||t.isTriggeredByCut)&&!this.isEditorOpened()){this.setCopyableText(),t.isTriggeredByCut=!1;var n=this.getRangedData(this.copyableRanges);if(this.hot.runHooks("beforeCut",n,this.copyableRanges)){var r=Vl.stringify(n);if(e&&e.clipboardData){var o=mu(n,this.hot.rootDocument);e.clipboardData.setData("text/plain",r),e.clipboardData.setData("text/html",[$p,o].join(""))}else"undefined"==typeof ClipboardEvent&&this.hot.rootWindow.clipboardData.setData("Text",r);this.hot.emptySelectedCells("CopyPaste.cut"),this.hot.runHooks("afterCut",n,this.copyableRanges)}e.preventDefault()}}},{key:"onPaste",value:function(e){if(this.hot.isListening()&&!this.isEditorOpened()){var t;if(e&&e.preventDefault&&e.preventDefault(),e&&void 0!==e.clipboardData){var n=e.clipboardData.getData("text/html");t=n&&/(1},hidden:!1}),function(e){return{key:"cut",name:function(){return this.getTranslatedPhrase(oc)},callback:function(){e.cut()},disabled:function(){var e=this.getSelected();return!e||e.length>1},hidden:!1}}(this))}},{key:"onAfterOnCellMouseUp",value:function(){this.hot.isListening()&&!this.isEditorOpened()&&(this.getOrCreateFocusableElement(),this.focusableElement.focus())}},{key:"onAfterSelectionEnd",value:function(){var e=Jp.get(this).isFragmentSelectionEnabled;this.isEditorOpened()||(this.getOrCreateFocusableElement(),e&&this.focusableElement.getFocusableElement()!==this.hot.rootDocument.activeElement&&zt()||(this.setCopyableText(),this.focusableElement.focus()))}},{key:"onBeforeKeyDown",value:function(){if(this.hot.isListening()&&!this.isEditorOpened()){var e=this.hot.rootDocument.activeElement,t=this.hot.getActiveEditor();!t||e!==this.focusableElement.getFocusableElement()&&e!==t.select||(this.getOrCreateFocusableElement(),this.focusableElement.focus())}}},{key:"destroy",value:function(){this.focusableElement&&(Vp(this.focusableElement),this.focusableElement=null),qp(Xp(t.prototype),"destroy",this).call(this)}}],r&&zp(n.prototype,r),t}(Rf);gu("CopyPaste",Qp);const Zp=Qp;function ey(e,t){return"border_row".concat(e,"col").concat(t)}function ty(e,t){return{id:ey(e,t),border:{width:1,color:"#000",cornerVisible:!1},row:e,col:t,top:{hide:!0},right:{hide:!0},bottom:{hide:!0},left:{hide:!0}}}function ny(e,t){var n=!1;return P(e.getSelectedRange(),(function(r){r.forAll((function(r,o){var i=e.getCellMeta(r,o).borders;if(i){if(!t)return n=!0,!1;if(!oe(i[t],"hide")||!1===i[t].hide)return n=!0,!1}}))})),n}function ry(e){return''.concat(String.fromCharCode(10003),"").concat(e)}function oy(e){return{key:"borders:bottom",name:function(){var e=this.getTranslatedPhrase(Sc);return ny(this,"bottom")&&(e=ry(e)),e},callback:function(t,n){var r=ny(this,"bottom");e.prepareBorder(n,"bottom",r)}}}function iy(e){return{key:"borders:left",name:function(){var e=this.getTranslatedPhrase(Cc);return ny(this,"left")&&(e=ry(e)),e},callback:function(t,n){var r=ny(this,"left");e.prepareBorder(n,"left",r)}}}function ay(e){return{key:"borders:no_borders",name:function(){return this.getTranslatedPhrase(Tc)},callback:function(t,n){e.prepareBorder(n,"noBorders")},disabled:function(){return!ny(this)}}}function sy(e){return{key:"borders:right",name:function(){var e=this.getTranslatedPhrase(kc);return ny(this,"right")&&(e=ry(e)),e},callback:function(t,n){var r=ny(this,"right");e.prepareBorder(n,"right",r)}}}function ly(e){return ly="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ly(e)}function uy(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function cy(e,t){for(var n=0;n0&&(t.hot.setCellMeta(r,o,"borders",i),t.insertBorderIntoSettings(i))}))}))}},{key:"removeAllBorders",value:function(e,t){var n=ey(e,t);this.spliceBorder(n),this.clearBordersFromSelectionSettings(n),this.clearNullCellRange(),this.hot.removeCellMeta(e,t,"borders")}},{key:"setBorder",value:function(e,t,n,r){var o=this.hot.getCellMeta(e,t).borders;o&&void 0!==o.border||(o=ty(e,t)),r?(o[n]={hide:!0},4===this.countHide(o)?this.removeAllBorders(e,t):(this.checkCustomSelectionsFromContextMenu(o,n,r)||this.insertBorderIntoSettings(o),this.hot.setCellMeta(e,t,"borders",o))):(o[n]={width:1,color:"#000"},this.checkCustomSelectionsFromContextMenu(o,n,r)||this.insertBorderIntoSettings(o),this.hot.setCellMeta(e,t,"borders",o))}},{key:"prepareBorder",value:function(e,t,n){var r=this;P(e,(function(e){var o=e.start,i=e.end;if(o.row===i.row&&o.col===i.col)"noBorders"===t?r.removeAllBorders(o.row,o.col):r.setBorder(o.row,o.col,t,n);else switch(t){case"noBorders":Ra(o.col,i.col,(function(e){Ra(o.row,i.row,(function(t){r.removeAllBorders(t,e)}))}));break;case"top":Ra(o.col,i.col,(function(e){r.setBorder(o.row,e,t,n)}));break;case"right":Ra(o.row,i.row,(function(e){r.setBorder(e,i.col,t,n)}));break;case"bottom":Ra(o.col,i.col,(function(e){r.setBorder(i.row,e,t,n)}));break;case"left":Ra(o.row,i.row,(function(e){r.setBorder(e,o.col,t,n)}))}}))}},{key:"createCustomBorders",value:function(e){var t=this;P(e,(function(e){e.range?t.prepareBorderFromCustomAddedRange(e):t.prepareBorderFromCustomAdded(e.row,e.col,e)}))}},{key:"countHide",value:function(e){return A(Object.values(e),(function(e,t){var n=e;return t.hide&&(n+=1),n}),0)}},{key:"clearBordersFromSelectionSettings",value:function(e){var t=N(this.hot.selection.highlight.customSelections,(function(e){return e.settings.id})).indexOf(e);t>-1&&this.hot.selection.highlight.customSelections[t].clear()}},{key:"clearNullCellRange",value:function(){var e=this;P(this.hot.selection.highlight.customSelections,(function(t,n){if(null===t.cellRange)return e.hot.selection.highlight.customSelections[n].destroy(),e.hot.selection.highlight.customSelections.splice(n,1),!1}))}},{key:"hideBorders",value:function(){var e=this;P(this.savedBorders,(function(t){e.clearBordersFromSelectionSettings(t.id),e.clearNullCellRange()}))}},{key:"spliceBorder",value:function(e){var t=N(this.savedBorders,(function(e){return e.id})).indexOf(e);t>-1&&this.savedBorders.splice(t,1)}},{key:"checkSavedBorders",value:function(e){var t=this,n=!1;return 4===this.countHide(e)?(this.spliceBorder(e.id),n=!0):P(this.savedBorders,(function(r,o){if(e.id===r.id)return t.savedBorders[o]=e,n=!0,!1})),n}},{key:"checkCustomSelectionsFromContextMenu",value:function(e,t,n){var r=!1;return P(this.hot.selection.highlight.customSelections,(function(o){if(e.id===o.settings.id)return ee(o.instanceBorders,(function(e){e.toggleHiddenClass(t,n)})),r=!0,!1})),r}},{key:"checkCustomSelections",value:function(e,t,n){var r=this.countHide(e),o=!1;return 4===r?(this.removeAllBorders(e.row,e.col),o=!0):P(this.hot.selection.highlight.customSelections,(function(r){if(e.id===r.settings.id)return r.cellRange=t,n&&ee(r.instanceBorders,(function(t){t.changeBorderStyle(n,e)})),o=!0,!1})),o}},{key:"changeBorderSettings",value:function(){var e=this.hot.getSettings().customBorders;Array.isArray(e)?(e.length||(this.savedBorders=e),this.createCustomBorders(e)):void 0!==e&&this.createCustomBorders(this.savedBorders)}},{key:"onAfterContextMenuDefaultOptions",value:function(e){var t;this.hot.getSettings().customBorders&&e.items.push({name:"---------"},{key:"borders",name:function(){return this.getTranslatedPhrase(_c)},disabled:function(){return this.selection.isSelectedByCorner()},submenu:{items:[(t=this,{key:"borders:top",name:function(){var e=this.getTranslatedPhrase(Mc);return ny(this,"top")&&(e=ry(e)),e},callback:function(e,n){var r=ny(this,"top");t.prepareBorder(n,"top",r)}}),sy(this),oy(this),iy(this),ay(this)]}})}},{key:"onAfterInit",value:function(){this.changeBorderSettings()}},{key:"destroy",value:function(){hy(fy(t.prototype),"destroy",this).call(this)}}],r&&cy(n.prototype,r),t}(Rf);gu("customBorders",my);const py=my;function yy(e){return yy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yy(e)}function vy(e,t){for(var n=0;nthis.boundaries.bottom&&(r=t-this.boundaries.bottom),ethis.boundaries.right&&(n=e-this.boundaries.right),this.callback(n,r)}},{key:"registerEvents",value:function(){var e=this,t=this.hot.rootDocument;this.eventManager.addEventListener(t,"mouseup",(function(){return e.onMouseUp()})),this.eventManager.addEventListener(t,"mousemove",(function(t){return e.onMouseMove(t)}))}},{key:"unregisterEvents",value:function(){this.eventManager.clear()}},{key:"setupListening",value:function(){var e=this.hot.view.wt.wtTable.holder;e!==this.hot.rootWindow&&(this.setBoundaries(e.getBoundingClientRect()),this.setCallback((function(t,n){t<0?e.scrollLeft-=50:t>0&&(e.scrollLeft+=50),n<0?e.scrollTop-=20:n>0&&(e.scrollTop+=20)})),this.listening=!0)}},{key:"onMouseMove",value:function(e){this.listening&&this.check(e.clientX,e.clientY)}},{key:"onMouseUp",value:function(){this.listening=!1}},{key:"destroy",value:function(){wy(by(t.prototype),"destroy",this).call(this)}}],r&&vy(n.prototype,r),t}(Rf);gu("dragToScroll",My);const ky=My;function Sy(e){return Sy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Sy(e)}function Cy(e,t){for(var n=0;nn.fixedColumnsLeft-1)){var r=this.getBestColumnReturnPosition(e);t.moveByFreeze=!0,n.fixedColumnsLeft-=1,this.getMovePlugin().moveColumn(e,r+1)}}},{key:"getMovePlugin",value:function(){return this.manualColumnMovePlugin||(this.manualColumnMovePlugin=this.hot.getPlugin("manualColumnMove")),this.manualColumnMovePlugin}},{key:"getBestColumnReturnPosition",value:function(e){var t,n=this.getMovePlugin(),r=this.hot.getSettings().fixedColumnsLeft,o=n.columnsMapper.getValueByIndex(r);if(null===this.frozenColumnsBasePositions[e]||void 0===this.frozenColumnsBasePositions[e])for(t=n.columnsMapper.getValueByIndex(e);null!==o&&o<=t;)r+=1,o=n.columnsMapper.getValueByIndex(r);else{for(t=this.frozenColumnsBasePositions[e],this.frozenColumnsBasePositions[e]=void 0;null!==o&&o<=t;)r+=1,o=n.columnsMapper.getValueByIndex(r);r=o}return r-1}},{key:"addContextMenuEntry",value:function(e){var t;e.items.push({name:"---------"},(t=this,{key:"freeze_column",name:function(){return this.getTranslatedPhrase(ic)},callback:function(e,n){var r,o,i=(r=n,o=1,function(e){if(Array.isArray(e))return e}(r)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(r,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}())[0].start.col;t.freezeColumn(i),this.render(),this.view.wt.wtOverlays.adjustElementsSize(!0)},hidden:function(){var e=this.getSelectedRange(),t=!1;return(void 0===e||e.length>1||e[0].from.col!==e[0].to.col||e[0].from.col<=this.getSettings().fixedColumnsLeft-1)&&(t=!0),t}}),function(e){return{key:"unfreeze_column",name:function(){return this.getTranslatedPhrase(ac)},callback:function(t,n){var r,o,i=(r=n,o=1,function(e){if(Array.isArray(e))return e}(r)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(r,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}())[0].start.col;e.unfreezeColumn(i),this.render(),this.view.wt.wtOverlays.adjustElementsSize(!0)},hidden:function(){var e=this.getSelectedRange(),t=!1;return(void 0===e||e.length>1||e[0].from.col!==e[0].to.col||e[0].from.col>=this.getSettings().fixedColumnsLeft)&&(t=!0),t}}}(this))}},{key:"onAfterInit",value:function(){this.getMovePlugin().isEnabled()||this.getMovePlugin().enablePlugin()}},{key:"onBeforeColumnMove",value:function(e,t){var n=Ly.get(this);if(n.afterFirstUse&&!n.moveByFreeze){var r=this.hot.getSettings().fixedColumnsLeft,o=t=1}},{key:"setPosition",value:function(e,t){Oa(e)&&(this._element.style.top=e+Yy),Oa(t)&&(this._element.style.left=t+Yy)}},{key:"getPosition",value:function(){return{top:this._element.style.top?parseInt(this._element.style.top,10):0,left:this._element.style.left?parseInt(this._element.style.left,10):0}}},{key:"setSize",value:function(e,t){Oa(e)&&(this._element.style.width=e+Yy),Oa(t)&&(this._element.style.height=t+Yy)}},{key:"getSize",value:function(){return{width:this._element.style.width?parseInt(this._element.style.width,10):0,height:this._element.style.height?parseInt(this._element.style.height,10):0}}},{key:"setOffset",value:function(e,t){Oa(e)&&(this._element.style.marginTop=e+Yy),Oa(t)&&(this._element.style.marginLeft=t+Yy)}},{key:"getOffset",value:function(){return{top:this._element.style.marginTop?parseInt(this._element.style.marginTop,10):0,left:this._element.style.marginLeft?parseInt(this._element.style.marginLeft,10):0}}}],n&&xy(t.prototype,n),e}();const jy=Iy;function Fy(e){return Fy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fy(e)}function Wy(e,t){for(var n=0;n0?e.target.col=0:e.target.col=t>0?t-1:t;else if(e.target.TD.offsetWidth/2+a<=s){var d=e.coordsColumn>=e.countCols?e.countCols-1:e.coordsColumn;e.target.col=d+1,a+=e.target.TD.offsetWidth,e.target.col>n&&n=e.fixedColumns&&t>0&&this.hot.scrollViewportTo(void 0,t-1);e.target.col<=t&&e.target.col>=e.fixedColumns&&t>0&&this.hot.scrollViewportTo(void 0,t-1);var m=s,p=a;s+h+c>=l?m=l-h-c:s+c=l-1?p=l-1:0===p?p=1:void 0!==o.scrollX&&e.coordsColumne){var r=e-1,o=[];P(this.columnsMapper._arrayMap,(function(e,t){e>r&&o.push(t)})),this.columnsMapper.removeItems(o)}}},{key:"registerEvents",value:function(){var e=this,t=this.hot.rootDocument.documentElement;this.eventManager.addEventListener(t,"mousemove",(function(t){return e.onMouseMove(t)})),this.eventManager.addEventListener(t,"mouseup",(function(){return e.onMouseUp()}))}},{key:"unregisterEvents",value:function(){this.eventManager.clear()}},{key:"onBeforeOnCellMouseDown",value:function(e,t,n,r){var o=this.hot.view.wt.wtTable,i=this.hot.selection.isSelectedByColumnHeader(),a=this.hot.getSelectedRangeLast(),s=ov.get(this),l=gt(e.realTarget,"sortAction");if(!a||!i||s.pressed||0!==e.button||l)return s.pressed=!1,s.columnsToMove.length=0,void bt(this.hot.rootElement,[sv,av]);var u=this.guideline.isBuilt()&&!this.guideline.isAppended(),c=this.backlight.isBuilt()&&!this.backlight.isAppended();u&&c&&(this.guideline.appendTo(o.hider),this.backlight.appendTo(o.hider));var h=a.from,f=a.to,d=Math.min(h.col,f.col),m=Math.max(h.col,f.col);if(t.row<0&&t.col>=d&&t.col<=m){r.column=!0,s.pressed=!0,s.target.eventPageX=e.pageX,s.coordsColumn=t.col,s.target.TD=n,s.target.col=t.col,s.columnsToMove=this.prepareColumnsToMoving(d,m),s.hasRowHeaders=!!this.hot.getSettings().rowHeaders,s.countCols=this.hot.countCols(),s.fixedColumns=this.hot.getSettings().fixedColumnsLeft,s.rootElementOffset=Ot(this.hot.rootElement).left;var p=s.hasRowHeaders?-1:0,y=o.holder.scrollTop+o.getColumnHeaderHeight(0)+1,v=t.col-1?bt(this.hot.rootElement,av):wt(this.hot.rootElement,av),r.row=!0,r.column=!0,r.cell=!0,i.coordsColumn=t.col,i.target.TD=n)}},{key:"onMouseUp",value:function(){var e=ov.get(this);if(e.coordsColumn=void 0,e.pressed=!1,e.backlightWidth=0,bt(this.hot.rootElement,[sv,av,lv]),this.hot.selection.isSelectedByColumnHeader()&&wt(this.hot.rootElement,lv),!(e.columnsToMove.length<1||void 0===e.target.col||e.columnsToMove.indexOf(e.target.col)>-1)){if(this.moveColumns(e.columnsToMove,e.target.col),this.persistentStateSave(),this.hot.render(),this.hot.view.wt.wtOverlays.adjustElementsSize(!0),!e.disallowMoving){var t=this.columnsMapper.getIndexByValue(e.columnsToMove[0]),n=this.columnsMapper.getIndexByValue(e.columnsToMove[e.columnsToMove.length-1]);this.changeSelection(t,n)}e.columnsToMove.length=0}}},{key:"onAfterScrollVertically",value:function(){var e=this.hot.view.wt.wtTable,t=e.getColumnHeaderHeight(0)+1+e.holder.scrollTop;this.backlight.setPosition(t),this.backlight.setSize(null,e.hider.offsetHeight-t)}},{key:"onAfterCreateCol",value:function(e,t){this.columnsMapper.shiftItems(e,t)}},{key:"onBeforeRemoveCol",value:function(e,t){var n=this;this.removedColumns.length=0,!1!==e&&Ra(e,e+t-1,(function(e){n.removedColumns.push(n.hot.runHooks("modifyCol",e,n.pluginName))}))}},{key:"onAfterRemoveCol",value:function(){this.columnsMapper.unshiftItems(this.removedColumns)}},{key:"onAfterLoadData",value:function(){this.updateColumnsMapper()}},{key:"onModifyCol",value:function(e,t){var n=e;if(t!==this.pluginName){var r=this.columnsMapper.getValueByIndex(n);n=null===r?n:r}return n}},{key:"onUnmodifyCol",value:function(e){var t=this.columnsMapper.getIndexByValue(e);return null===t?e:t}},{key:"onAfterPluginsInitialized",value:function(){this.updateColumnsMapper(),this.initialSettings(),this.backlight.build(),this.guideline.build()}},{key:"destroy",value:function(){this.backlight.destroy(),this.guideline.destroy(),tv(nv(t.prototype),"destroy",this).call(this)}}],r&&Zy(n.prototype,r),t}(Rf);gu("ManualColumnMove",uv);const cv=uv;function hv(e){return hv="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},hv(e)}function fv(e,t){for(var n=0;n=0){var i=this.currentTH.getBoundingClientRect(),a=r=d&&(f=h.col,d=c.col),this.currentCol>=f&&this.currentCol<=d?Ra(f,d,(function(e){return t.selectedCols.push(e)})):this.selectedCols.push(this.currentCol)}else this.selectedCols.push(this.currentCol);this.startOffset=s.left-6,this.startWidth=parseInt(i.width,10),this.handle.style.top="".concat(s.top,"px"),this.handle.style.left="".concat(this.startOffset+this.startWidth,"px"),this.handle.style.height="".concat(o,"px"),this.hot.rootElement.appendChild(this.handle)}}},{key:"refreshHandlePosition",value:function(){this.handle.style.left="".concat(this.startOffset+this.currentWidth,"px")}},{key:"setupGuidePosition",value:function(){var e=parseInt(It(this.handle),10),t=parseInt(this.handle.style.top,10)+e,n=parseInt(this.hot.view.maximumVisibleElementHeight(0),10);wt(this.handle,"active"),wt(this.guide,"active"),this.guide.style.top="".concat(t,"px"),this.guide.style.left=this.handle.style.left,this.guide.style.height="".concat(n-e,"px"),this.hot.rootElement.appendChild(this.guide)}},{key:"refreshGuidePosition",value:function(){this.guide.style.left=this.handle.style.left}},{key:"hideHandleAndGuide",value:function(){bt(this.handle,"active"),bt(this.guide,"active")}},{key:"checkIfColumnHeader",value:function(e){if(e!==this.hot.rootElement){var t=e.parentNode;return"THEAD"===t.tagName||this.checkIfColumnHeader(t)}return!1}},{key:"getTHFromTargetElement",value:function(e){return"TABLE"!==e.tagName?"TH"===e.tagName?e:this.getTHFromTargetElement(e.parentNode):null}},{key:"onMouseOver",value:function(e){if(this.checkIfColumnHeader(e.target)){var t=this.getTHFromTargetElement(e.target);if(!t)return;var n=t.getAttribute("colspan");!t||null!==n&&1!==n||this.pressed||this.setupHandlePosition(t)}}},{key:"afterMouseDownTimeout",value:function(){var e=this,t=function(){e.hot.forceFullRender=!0,e.hot.view.render(),e.hot.view.wt.wtOverlays.adjustElementsSize(!0)},n=function(n,r){var o=e.hot.runHooks("beforeColumnResize",n,e.newSize,!0);void 0!==o&&(e.newSize=o),"all"===e.hot.getSettings().stretchH?e.clearManualSize(n):e.setManualSize(n,e.newSize),r&&t(),e.saveManualColumnWidths(),e.hot.runHooks("afterColumnResize",n,e.newSize,!0)};this.dblclick>=2&&(this.selectedCols.length>1?(P(this.selectedCols,(function(e){n(e)})),t()):P(this.selectedCols,(function(e){n(e,!0)}))),this.dblclick=0,this.autoresizeTimeout=null}},{key:"onMouseDown",value:function(e){var t=this;gt(e.target,"manualColumnResizer")&&(this.setupGuidePosition(),this.pressed=this.hot,null===this.autoresizeTimeout&&(this.autoresizeTimeout=setTimeout((function(){return t.afterMouseDownTimeout()}),500),this.hot._registerTimeout(this.autoresizeTimeout)),this.dblclick+=1,this.startX=Br(e),this.newSize=this.startWidth)}},{key:"onMouseMove",value:function(e){var t=this;this.pressed&&(this.currentWidth=this.startWidth+(Br(e)-this.startX),P(this.selectedCols,(function(e){t.newSize=t.setManualSize(e,t.currentWidth)})),this.refreshHandlePosition(),this.refreshGuidePosition())}},{key:"onMouseUp",value:function(){var e=this,t=function(){e.hot.forceFullRender=!0,e.hot.view.render(),e.hot.view.wt.wtOverlays.adjustElementsSize(!0)},n=function(n,r){e.hot.runHooks("beforeColumnResize",n,e.newSize,!1),r&&t(),e.saveManualColumnWidths(),e.hot.runHooks("afterColumnResize",n,e.newSize)};this.pressed&&(this.hideHandleAndGuide(),this.pressed=!1,this.newSize!==this.startWidth&&(this.selectedCols.length>1?(P(this.selectedCols,(function(e){n(e)})),t()):P(this.selectedCols,(function(e){n(e,!0)}))),this.setupHandlePosition(this.currentTH))}},{key:"bindEvents",value:function(){var e=this,t=this.hot,n=t.rootWindow,r=t.rootElement;this.eventManager.addEventListener(r,"mouseover",(function(t){return e.onMouseOver(t)})),this.eventManager.addEventListener(r,"mousedown",(function(t){return e.onMouseDown(t)})),this.eventManager.addEventListener(n,"mousemove",(function(t){return e.onMouseMove(t)})),this.eventManager.addEventListener(n,"mouseup",(function(){return e.onMouseUp()}))}},{key:"setManualSize",value:function(e,t){var n=Math.max(t,20),r=this.hot.runHooks("modifyCol",e);return this.manualColumnWidths[r]=n,n}},{key:"clearManualSize",value:function(e){var t=this.hot.runHooks("modifyCol",e);this.manualColumnWidths[t]=void 0}},{key:"onModifyColWidth",value:function(e,t){var n=e;if(this.enabled){var r=this.hot.runHooks("modifyCol",t),o=this.manualColumnWidths[r];this.hot.getSettings().manualColumnResize&&o&&(n=o)}return n}},{key:"onBeforeStretchingColumnWidth",value:function(e,t){var n=this.manualColumnWidths[t];return void 0===n&&(n=e),n}},{key:"onBeforeColumnResize",value:function(){this.hot.view.wt.wtViewport.hasOversizedColumnHeadersMarked={}}}],r&&fv(n.prototype,r),t}(Rf);gu("manualColumnResize",vv);const gv=vv;function wv(e,t){for(var n=0;n=1}},{key:"setPosition",value:function(e,t){void 0!==e&&(this._element.style.top=e+kv),void 0!==t&&(this._element.style.left=t+kv)}},{key:"getPosition",value:function(){return{top:this._element.style.top?parseInt(this._element.style.top,10):0,left:this._element.style.left?parseInt(this._element.style.left,10):0}}},{key:"setSize",value:function(e,t){e&&(this._element.style.width=e+kv),t&&(this._element.style.height=t+kv)}},{key:"getSize",value:function(){return{width:this._element.style.width?parseInt(this._element.style.width,10):0,height:this._element.style.height?parseInt(this._element.style.height,10):0}}},{key:"setOffset",value:function(e,t){e&&(this._element.style.marginTop=e+kv),t&&(this._element.style.marginLeft=t+kv)}},{key:"getOffset",value:function(){return{top:this._element.style.marginTop?parseInt(this._element.style.marginTop,10):0,left:this._element.style.marginLeft?parseInt(this._element.style.marginLeft,10):0}}}],n&&Mv(t.prototype,n),e}();const Cv=Sv;function Tv(e){return Tv="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Tv(e)}function Ev(e,t){for(var n=0;nthis.hot.getSettings().fixedRowsBottom}},{key:"persistentStateSave",value:function(){this.hot.runHooks("persistentStateSave","manualRowMove",this.rowsMapper._arrayMap)}},{key:"persistentStateLoad",value:function(){var e={};return this.hot.runHooks("persistentStateLoad","manualRowMove",e),e.value?e.value:[]}},{key:"prepareRowsToMoving",value:function(){var e=this.hot.getSelectedRangeLast(),t=[];if(!e)return t;var n=e.from,r=e.to;return Ra(Math.min(n.row,r.row),Math.max(n.row,r.row),(function(e){t.push(e)})),t}},{key:"refreshPositions",value:function(){var e=Uv.get(this),t=e.target.coords,n=this.hot.view.wt.wtTable.getFirstVisibleRow(),r=this.hot.view.wt.wtTable.getLastVisibleRow(),o=this.hot.getSettings().fixedRowsTop,i=this.hot.countRows();t.row0&&this.hot.scrollViewportTo(n-1),t.row>=r&&r0?n-1:n:s.offsetHeight/2+u<=c?(e.target.row=t.row+1,u+=0===t.row?s.offsetHeight-1:s.offsetHeight):e.target.row=t.row;var p=c,y=u;c+m+d>=h?p=h-m-d:c+d=h-1&&(y=h-1);var v=0;this.hot.view.wt.wtOverlays.topOverlay&&(v=this.hot.view.wt.wtOverlays.topOverlay.clone.wtTable.TABLE.offsetHeight),t.row>=o&&y-a.holder.scrollTope){var r=e-1,o=[];P(this.rowsMapper._arrayMap,(function(e,t){e>r&&o.push(t)})),this.rowsMapper.removeItems(o)}}},{key:"registerEvents",value:function(){var e=this,t=this.hot.rootDocument.documentElement;this.eventManager.addEventListener(t,"mousemove",(function(t){return e.onMouseMove(t)})),this.eventManager.addEventListener(t,"mouseup",(function(){return e.onMouseUp()}))}},{key:"unregisterEvents",value:function(){this.eventManager.clear()}},{key:"onBeforeColumnSort",value:function(e,t){Uv.get(this).disallowMoving=void 0!==t}},{key:"onBeforeOnCellMouseDown",value:function(e,t,n,r){var o=this.hot.view.wt,i=o.wtTable,a=o.wtViewport,s=this.hot.selection.isSelectedByRowHeader(),l=this.hot.getSelectedRangeLast(),u=Uv.get(this);if(!l||!s||u.pressed||0!==e.button)return u.pressed=!1,u.rowsToMove.length=0,void bt(this.hot.rootElement,[qv,Gv]);var c=this.guideline.isBuilt()&&!this.guideline.isAppended(),h=this.backlight.isBuilt()&&!this.backlight.isAppended();c&&h&&(this.guideline.appendTo(i.hider),this.backlight.appendTo(i.hider));var f=l.from,d=l.to,m=Math.min(f.row,d.row),p=Math.max(f.row,d.row);if(t.col<0&&t.row>=m&&t.row<=p){r.row=!0,u.pressed=!0,u.target.eventPageY=e.pageY,u.target.coords=t,u.target.TD=n,u.rowsToMove=this.prepareRowsToMoving();var y=i.holder.scrollLeft+a.getRowHeaderWidth();this.backlight.setPosition(null,y),this.backlight.setSize(i.hider.offsetWidth-y,this.getRowsHeight(m,p+1)),this.backlight.setOffset(-1*(this.getRowsHeight(m,t.row)+e.layerY),null),wt(this.hot.rootElement,qv),this.refreshPositions()}else bt(this.hot.rootElement,Xv),u.pressed=!1,u.rowsToMove.length=0}},{key:"onMouseMove",value:function(e){var t=Uv.get(this);if(t.pressed){if(e.realTarget===this.backlight.element){var n=this.backlight.getSize().height;this.backlight.setSize(null,0),setTimeout((function(){this.backlight.setPosition(null,n)}))}t.target.eventPageY=e.pageY,this.refreshPositions()}}},{key:"onBeforeOnCellMouseOver",value:function(e,t,n,r){var o=this.hot.getSelectedRangeLast(),i=Uv.get(this);o&&i.pressed&&(i.rowsToMove.indexOf(t.row)>-1?bt(this.hot.rootElement,Gv):wt(this.hot.rootElement,Gv),r.row=!0,r.column=!0,r.cell=!0,i.target.coords=t,i.target.TD=n)}},{key:"onMouseUp",value:function(){var e=Uv.get(this),t=e.target.row,n=e.rowsToMove.length;if(e.pressed=!1,e.backlightHeight=0,bt(this.hot.rootElement,[qv,Gv,Xv]),this.hot.selection.isSelectedByRowHeader()&&wt(this.hot.rootElement,Xv),!(n<1||void 0===t||e.rowsToMove.indexOf(t)>-1||e.rowsToMove[n-1]===t-1)){if(this.moveRows(e.rowsToMove,t),this.persistentStateSave(),this.hot.render(),!e.disallowMoving){var r=this.rowsMapper.getIndexByValue(e.rowsToMove[0]),o=this.rowsMapper.getIndexByValue(e.rowsToMove[n-1]);this.changeSelection(r,o)}e.rowsToMove.length=0}}},{key:"onAfterScrollHorizontally",value:function(){var e=this.hot.view.wt.wtTable,t=this.hot.view.wt.wtViewport.getRowHeaderWidth()+e.holder.scrollLeft;this.backlight.setPosition(null,t),this.backlight.setSize(e.hider.offsetWidth-t)}},{key:"onAfterCreateRow",value:function(e,t){this.rowsMapper.shiftItems(e,t)}},{key:"onBeforeRemoveRow",value:function(e,t){var n=this;this.removedRows.length=0,!1!==e&&Ra(e,e+t-1,(function(e){n.removedRows.push(n.hot.runHooks("modifyRow",e,n.pluginName))}))}},{key:"onAfterRemoveRow",value:function(){this.rowsMapper.unshiftItems(this.removedRows)}},{key:"onAfterLoadData",value:function(){this.updateRowsMapper()}},{key:"onModifyRow",value:function(e,t){var n=e;if(t!==this.pluginName){var r=this.rowsMapper.getValueByIndex(n);n=null===r?n:r}return n}},{key:"onUnmodifyRow",value:function(e){var t=this.rowsMapper.getIndexByValue(e);return null===t?e:t}},{key:"onAfterPluginsInitialized",value:function(){this.updateRowsMapper(),this.initialSettings(),this.backlight.build(),this.guideline.build()}},{key:"destroy",value:function(){this.backlight.destroy(),this.guideline.destroy(),this.rowsMapper.destroy(),Wv(Bv(t.prototype),"destroy",this).call(this)}}],r&&jv(n.prototype,r),t}(Rf);gu("ManualRowMove",Kv);const Jv=Kv;function $v(e){return $v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$v(e)}function Qv(e,t){for(var n=0;n=0){var i=this.currentTH.getBoundingClientRect(),a=r=this.hot.countRows()-this.hot.getSettings().fixedRowsBottom,l=this.hot.view.wt.wtOverlays.leftOverlay;a?l=this.hot.view.wt.wtOverlays.topLeftCornerOverlay:s&&(l=this.hot.view.wt.wtOverlays.bottomLeftCornerOverlay);var u=l.getRelativeCellPosition(this.currentTH,n.row,n.col);if(!u){var c=l.clone.wtTable.TBODY.children[+!!this.hot.getSettings().colHeaders+r].firstChild;u=l.getRelativeCellPosition(c,n.row,n.col)}if(this.currentRow=r,this.selectedRows=[],this.hot.selection.isSelected()&&this.hot.selection.isSelectedByRowHeader()){var h=this.hot.getSelectedRangeLast(),f=h.from,d=h.to,m=f.row,p=d.row;m>=p&&(m=d.row,p=f.row),this.currentRow>=m&&this.currentRow<=p?Ra(m,p,(function(e){return t.selectedRows.push(e)})):this.selectedRows.push(this.currentRow)}else this.selectedRows.push(this.currentRow);this.startOffset=u.top-6,this.startHeight=parseInt(i.height,10),this.handle.style.top="".concat(this.startOffset+this.startHeight,"px"),this.handle.style.left="".concat(u.left,"px"),this.handle.style.width="".concat(o,"px"),this.hot.rootElement.appendChild(this.handle)}}},{key:"refreshHandlePosition",value:function(){this.handle.style.top="".concat(this.startOffset+this.currentHeight,"px")}},{key:"setupGuidePosition",value:function(){var e=parseInt(Yt(this.handle),10),t=parseInt(this.handle.style.left,10)+e,n=parseInt(this.hot.view.maximumVisibleElementWidth(0),10);wt(this.handle,"active"),wt(this.guide,"active"),this.guide.style.top=this.handle.style.top,this.guide.style.left="".concat(t,"px"),this.guide.style.width="".concat(n-e,"px"),this.hot.rootElement.appendChild(this.guide)}},{key:"refreshGuidePosition",value:function(){this.guide.style.top=this.handle.style.top}},{key:"hideHandleAndGuide",value:function(){bt(this.handle,"active"),bt(this.guide,"active")}},{key:"checkIfRowHeader",value:function(e){if(e!==this.hot.rootElement){var t=e.parentNode;return"TBODY"===t.tagName||this.checkIfRowHeader(t)}return!1}},{key:"getTHFromTargetElement",value:function(e){return"TABLE"!==e.tagName?"TH"===e.tagName?e:this.getTHFromTargetElement(e.parentNode):null}},{key:"onMouseOver",value:function(e){if(this.checkIfRowHeader(e.target)){var t=this.getTHFromTargetElement(e.target);t&&(this.pressed||this.setupHandlePosition(t))}}},{key:"afterMouseDownTimeout",value:function(){var e=this,t=function(){e.hot.forceFullRender=!0,e.hot.view.render(),e.hot.view.wt.wtOverlays.adjustElementsSize(!0)},n=function(n,r){var o=e.hot.runHooks("beforeRowResize",n,e.newSize,!0);void 0!==o&&(e.newSize=o),e.setManualSize(n,e.newSize),r&&t(),e.hot.runHooks("afterRowResize",n,e.newSize,!0)};this.dblclick>=2&&(this.selectedRows.length>1?(P(this.selectedRows,(function(e){n(e)})),t()):P(this.selectedRows,(function(e){n(e,!0)}))),this.dblclick=0,this.autoresizeTimeout=null}},{key:"onMouseDown",value:function(e){var t=this;gt(e.target,"manualRowResizer")&&(this.setupGuidePosition(),this.pressed=this.hot,null===this.autoresizeTimeout&&(this.autoresizeTimeout=setTimeout((function(){return t.afterMouseDownTimeout()}),500),this.hot._registerTimeout(this.autoresizeTimeout)),this.dblclick+=1,this.startY=Vr(e),this.newSize=this.startHeight)}},{key:"onMouseMove",value:function(e){var t=this;this.pressed&&(this.currentHeight=this.startHeight+(Vr(e)-this.startY),P(this.selectedRows,(function(e){t.newSize=t.setManualSize(e,t.currentHeight)})),this.refreshHandlePosition(),this.refreshGuidePosition())}},{key:"onMouseUp",value:function(){var e=this,t=function(){e.hot.forceFullRender=!0,e.hot.view.render(),e.hot.view.wt.wtOverlays.adjustElementsSize(!0)},n=function(n,r){e.hot.runHooks("beforeRowResize",n,e.newSize),r&&t(),e.saveManualRowHeights(),e.hot.runHooks("afterRowResize",n,e.newSize,!1)};this.pressed&&(this.hideHandleAndGuide(),this.pressed=!1,this.newSize!==this.startHeight&&(this.selectedRows.length>1?(P(this.selectedRows,(function(e){n(e)})),t()):P(this.selectedRows,(function(e){n(e,!0)}))),this.setupHandlePosition(this.currentTH))}},{key:"bindEvents",value:function(){var e=this,t=this.hot,n=t.rootElement,r=t.rootWindow;this.eventManager.addEventListener(n,"mouseover",(function(t){return e.onMouseOver(t)})),this.eventManager.addEventListener(n,"mousedown",(function(t){return e.onMouseDown(t)})),this.eventManager.addEventListener(r,"mousemove",(function(t){return e.onMouseMove(t)})),this.eventManager.addEventListener(r,"mouseup",(function(){return e.onMouseUp()}))}},{key:"setManualSize",value:function(e,t){var n=this.hot.runHooks("modifyRow",e);return this.manualRowHeights[n]=t,t}},{key:"onModifyRowHeight",value:function(e,t){if(this.enabled){var n=this.hot.getPlugin("autoRowSize"),r=n?n.heights[t]:null,o=this.hot.runHooks("modifyRow",t),i=this.manualRowHeights[o];if(void 0!==i&&(i===r||i>(e||0)))return i}return e}}],r&&Qv(n.prototype,r),t}(Rf);gu("manualRowResize",rg);const og=rg;function ig(){var e=ug(["The merged cell declared at [",", ",'] has "rowspan" or "colspan" declared as \n "0", which is not supported. It cannot be added to the collection.']);return ig=function(){return e},e}function ag(){var e=ug(["The merged cell declared at [",", ",'] has both "rowspan" \n and "colspan" declared as "1", which makes it a single cell. It cannot be added to the collection.']);return ag=function(){return e},e}function sg(){var e=ug(["The merged cell declared at [",", ","] is positioned (or positioned partially) \n outside of the table range. It was not added to the table, please fix your setup."]);return sg=function(){return e},e}function lg(){var e=ug(["The merged cell declared with {row: ",", col: ",", rowspan: \n ",", colspan: ","} contains negative values, which is not supported. It \n will not be added to the collection."]);return lg=function(){return e},e}function ug(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function cg(e,t){for(var n=0;nt-1&&(this.row=t-1),this.col<0?this.col=0:this.col>n-1&&(this.col=n-1),this.row+this.rowspan>t-1&&(this.rowspan=t-this.row),this.col+this.colspan>n-1&&(this.colspan=n-this.col)}},{key:"includes",value:function(e,t){return this.row<=e&&this.col<=t&&this.row+this.rowspan-1>=e&&this.col+this.colspan-1>=t}},{key:"includesHorizontally",value:function(e){return this.col<=e&&this.col+this.colspan-1>=e}},{key:"includesVertically",value:function(e){return this.row<=e&&this.row+this.rowspan-1>=e}},{key:"shift",value:function(e,t){var n=e[0]||e[1],r=t+Math.abs(e[0]||e[1])-1,o=e[0]?"colspan":"rowspan",i=e[0]?"col":"row",a=Math.min(t,r),s=Math.max(t,r),l=this[i],u=this[i]+this[o]-1;if(l>=t&&(this[i]+=n),n>0)t<=u&&t>l&&(this[o]+=n);else if(n<0){if(a<=l&&s>=u)return this.removed=!0,!1;if(l>=a&&l<=s){var c=s-l+1,h=Math.abs(n)-c;this[i]-=h+n,this[o]-=c}else if(l<=a&&u>=s)this[o]+=n;else if(l<=a&&u>=a&&uthis.row:"right"===t?e.col+e.colspan-1this.col:null)}},{key:"getLastRow",value:function(){return this.row+this.rowspan-1}},{key:"getLastColumn",value:function(){return this.col+this.colspan-1}},{key:"getRange",value:function(){return new Ce(new Me(this.row,this.col),new Me(this.row,this.col),new Me(this.getLastRow(),this.getLastColumn()))}}],r=[{key:"NEGATIVE_VALUES_WARNING",value:function(e){return Jn(lg(),e.row,e.col,e.rowspan,e.colspan)}},{key:"IS_OUT_OF_BOUNDS_WARNING",value:function(e){return Jn(sg(),e.row,e.col)}},{key:"IS_SINGLE_CELL",value:function(e){return Jn(ag(),e.row,e.col)}},{key:"ZERO_SPAN_WARNING",value:function(e){return Jn(ig(),e.row,e.col)}},{key:"containsNegativeValues",value:function(e){return e.row<0||e.col<0||e.rowspan<0||e.colspan<0}},{key:"isSingleCell",value:function(e){return 1===e.colspan&&1===e.rowspan}},{key:"containsZeroSpan",value:function(e){return 0===e.colspan||0===e.rowspan}},{key:"isOutOfBounds",value:function(e,t,n){return e.row<0||e.col<0||e.row>=t||e.row+e.rowspan-1>=t||e.col>=n||e.col+e.colspan-1>=n}}],n&&cg(t.prototype,n),r&&cg(t,r),e}();const fg=hg;function dg(e,t,n,r){t?t.row===n&&t.col===r?(e.setAttribute("rowspan",t.rowspan.toString()),e.setAttribute("colspan",t.colspan.toString())):(e.removeAttribute("rowspan"),e.removeAttribute("colspan"),e.style.display="none"):(e.removeAttribute("rowspan"),e.removeAttribute("colspan"),e.style.display="")}function mg(){var e,t,n=(e=["The merged cell declared at [",", ","], overlaps with the other declared merged \n cell. The overlapping merged cell was not added to the table, please fix your setup."],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return mg=function(){return n},n}function pg(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t=e&&n.col<=t&&n.col+n.colspan-1>=t&&(r=n,1))})),r}},{key:"getByRange",value:function(e){var t=this.mergedCells,n=!1;return P(t,(function(t){return!(t.row<=e.from.row&&t.row+t.rowspan-1>=e.to.row&&t.col<=e.from.col&&t.col+t.colspan-1>=e.to.col)||(n=t)})),n}},{key:"getWithinRange",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.mergedCells,r=[],o=e;if(!o.includesRange){var i=new Me(o.from.row,o.from.col),a=new Me(o.to.row,o.to.col);o=new Ce(i,i,a)}return P(n,(function(e){var n=new Me(e.row,e.col),i=new Me(e.row+e.rowspan-1,e.col+e.colspan-1),a=new Ce(n,n,i);t?o.overlaps(a)&&r.push(e):o.includesRange(a)&&r.push(e)})),!!r.length&&r}},{key:"add",value:function(t){var n=this.mergedCells,r=t.row,o=t.col,i=t.rowspan,a=t.colspan,s=new fg(r,o,i,a),l=this.get(r,o),u=this.isOverlapping(s);return l||u?(Mr(e.IS_OVERLAPPING_WARNING(s)),!1):(this.hot&&s.normalize(this.hot),n.push(s),s)}},{key:"remove",value:function(e,t){var n=this.mergedCells,r=this.get(e,t),o=r?this.mergedCells.indexOf(r):null;return!(!r||!1===o)&&(n.splice(o,1),r)}},{key:"clear",value:function(){var e=this,t=this.mergedCells,n=[],r=[];P(t,(function(t){var r=e.hot.getCell(t.row,t.col);r&&n.push([r,e.get(t.row,t.col),t.row,t.col])})),this.mergedCells.length=0,P(n,(function(t,o){Ra(0,t.rowspan-1,(function(n){Ra(0,t.colspan-1,(function(o){if(0!==o||0!==n){var i=e.hot.getCell(t.row+n,t.col+o);i&&r.push([i,null,null,null])}}))})),n[o][1]=null})),P(n,(function(e){dg.apply(void 0,pg(e))})),P(r,(function(e){dg.apply(void 0,pg(e))}))}},{key:"isOverlapping",value:function(e){var t=new Ce(null,new Me(e.row,e.col),new Me(e.row+e.rowspan-1,e.col+e.colspan-1)),n=!1;return P(this.mergedCells,(function(e){return!new Ce(null,new Me(e.row,e.col),new Me(e.row+e.rowspan-1,e.col+e.colspan-1)).overlaps(t)||(n=!0,!1)})),n}},{key:"isMergedParent",value:function(e,t){var n=this.mergedCells,r=!1;return P(n,(function(n){return n.row!==e||n.col!==t||(r=!0,!1)})),r}},{key:"shiftCollections",value:function(e,t,n){var r=this,o=[0,0];switch(e){case"right":o[0]+=n;break;case"left":o[0]-=n;break;case"down":o[1]+=n;break;case"up":o[1]-=n}P(this.mergedCells,(function(e){e.shift(o,t)})),La(this.mergedCells.length-1,0,(function(e){var t=r.mergedCells[e];t&&t.removed&&r.mergedCells.splice(r.mergedCells.indexOf(t),1)}))}}],r=[{key:"IS_OVERLAPPING_WARNING",value:function(e){return Jn(mg(),e.row,e.col)}}],n&&yg(t.prototype,n),r&&yg(t,r),e}();const gg=vg;function wg(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function bg(e,t){for(var n=0;n-1?u-s+1:c-l+1,f=i-Math.floor(i/h)*h,d=this.getFarthestCollection(e,t,n,r);if(d)if("down"===n){var m=d.row+d.rowspan-s-f;o[2]+m>=this.plugin.hot.countRows()?o[2]-=f:o[2]+=f?m:0}else if("right"===n){var p=d.col+d.colspan-l-f;o[3]+p>=this.plugin.hot.countCols()?o[3]-=f:o[3]+=f?p:0}else if("up"===n){var y=u-f-d.row+1;o[0]+y<0?o[0]+=f:o[0]-=f?y:0}else if("left"===n){var v=c-f-d.col+1;o[1]+v<0?o[1]+=f:o[1]-=f?v:0}return this.updateCurrentFillCache({baseArea:e,dragDirection:n,foundMergedCells:r,fillSize:i,dragArea:o,cycleLength:h}),o}},{key:"updateCurrentFillCache",value:function(e){this.currentFillData||(this.currentFillData={}),G(this.currentFillData,e)}},{key:"getAutofillSize",value:function(e,t,n){var r=wg(e,4),o=r[0],i=r[1],a=r[2],s=r[3],l=wg(t,4),u=l[0],c=l[1],h=l[2],f=l[3];switch(n){case"up":return o-u;case"down":return h-a;case"left":return i-c;case"right":return f-s;default:return null}}},{key:"getDragArea",value:function(e,t,n){var r=wg(e,4),o=r[0],i=r[1],a=r[2],s=r[3],l=wg(t,4),u=l[0],c=l[1],h=l[2],f=l[3];switch(n){case"up":return[u,c,o-1,s];case"down":return[a+1,i,h,s];case"left":return[u,c,a,i-1];case"right":return[o,s+1,h,f];default:return null}}},{key:"getFarthestCollection",value:function(e,t,n,r){var o=wg(e,4),i=o[0],a=o[1],s=o[2],l=o[3],u=["up","down"].indexOf(n)>-1,c=u?s:l,h=u?i:a,f=this.getAutofillSize(e,t,n),d=u?s-i+1:l-a+1,m=f-Math.floor(f/d)*d,p=null,y=null,v=null;switch(n){case"up":p="includesVertically",v=c-m+1;break;case"left":p="includesHorizontally",v=c-m+1;break;case"down":p="includesVertically",v=h+m-1;break;case"right":p="includesHorizontally",v=h+m-1}return P(r,(function(e){e[p](v)&&e.isFarther(y,n)&&(y=e)})),y}},{key:"recreateAfterDataPopulation",value:function(e){if(this.currentFillData){var t=this.getRangeFromChanges(e),n=this.currentFillData.foundMergedCells,r=this.currentFillData.dragDirection,o=function(e,n){switch(r){case"up":return e.row-n>=t.from.row;case"down":return e.row+e.rowspan-1+n<=t.to.row;case"left":return e.col-n>=t.from.column;case"right":return e.col+e.colspan-1+n<=t.to.column;default:return null}},i=0,a=null,s=1;do{for(var l=0;ln.max)&&(n.max=o),(null===r.min||ir.max)&&(r.max=i)})),{from:{row:n.min,column:r.min},to:{row:n.max,column:r.max}}}},{key:"dragAreaOverlapsCollections",value:function(e,t,n){var r=wg(this.getDragArea(e,t,n),4),o=r[0],i=r[1],a=r[2],s=r[3],l=new Me(o,i),u=new Me(a,s),c=new Ce(l,l,u);return!!this.mergedCellsCollection.getWithinRange(c,!0)}}],n&&bg(t.prototype,n),e}();const Mg=_g;function kg(e,t){for(var n=0;n0?o&&n!==i&&(r+=a-n+1):o&&n!==a&&(r-=n-i+1),e.row?e.row=r:e.col&&(e.col=r))}},{key:"getUpdatedSelectionRange",value:function(e,t){return new Ce(e.highlight,e.from,new Me(e.to.row+t.row,e.to.col+t.col))}},{key:"getSelectedMergedCellClassName",value:function(e,t,n,r){var o,i,a=(i=4,function(e){if(Array.isArray(e))return e}(o=n)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(o,i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()),s=a[0],l=a[1],u=a[2],c=a[3];if(void 0!==r&&e>=s&&e<=u&&t>=l&&t<=c){if(!this.plugin.mergedCellsCollection.isMergedParent(e,t))return;var h=this.plugin.mergedCellsCollection.get(e,t);if(!h)return;if(h.row+h.rowspan-1<=u&&h.col+h.colspan-1<=c)return"".concat(this.fullySelectedMergedCellClassName,"-").concat(r);if(this.plugin.selectionCalculations.isMergeCellFullySelected(h,this.plugin.hot.getSelectedRange()))return"".concat(this.fullySelectedMergedCellClassName,"-multiple")}}},{key:"isMergeCellFullySelected",value:function(e,t){var n=[];if(!t||!e)return!1;for(var r=0;r1&&void 0!==arguments[1]&&arguments[1])||this.validateSetting(e)}},{key:"toggleMergeOnSelection",value:function(){var e=this.hot.getSelectedRangeLast();if(e){e.setDirection("NW-SE");var t=e.from,n=e.to;this.toggleMerge(e),this.hot.selectCell(t.row,t.col,n.row,n.col,!1)}}},{key:"mergeSelection",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.hot.getSelectedRangeLast();if(e){e.setDirection("NW-SE");var t=e.from,n=e.to;this.unmergeRange(e,!0),this.mergeRange(e),this.hot.selectCell(t.row,t.col,n.row,n.col,!1)}}},{key:"unmergeSelection",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.hot.getSelectedRangeLast();if(e){var t=e.from,n=e.to;this.unmergeRange(e,!0),this.hot.selectCell(t.row,t.col,n.row,n.col,!1)}}},{key:"mergeRange",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=e.getTopLeftCorner(),i=e.getBottomRightCorner(),a={row:o.row,col:o.col,rowspan:i.row-o.row+1,colspan:i.col-o.col+1},s=[],l=null;return!!this.canMergeRange(a,n)&&(this.hot.runHooks("beforeMergeCells",e,n),Ra(0,a.rowspan-1,(function(e){Ra(0,a.colspan-1,(function(n){var r=null;s[e]||(s[e]=[]),0===e&&0===n?r=t.hot.getDataAtCell(a.row,a.col):t.hot.setCellMeta(a.row+e,a.col+n,"hidden",!0),s[e][n]=r}))})),this.hot.setCellMeta(a.row,a.col,"spanned",!0),!this.mergedCellsCollection.add(a)||(r?l=[a.row,a.col,s]:this.hot.populateFromArray(a.row,a.col,s,void 0,void 0,this.pluginName),this.hot.runHooks("afterMergeCells",e,a,n),l))}},{key:"unmergeRange",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this.mergedCellsCollection.getWithinRange(e);r&&(this.hot.runHooks("beforeUnmergeCells",e,n),P(r,(function(e){t.mergedCellsCollection.remove(e.row,e.col),Ra(0,e.rowspan-1,(function(n){Ra(0,e.colspan-1,(function(r){t.hot.removeCellMeta(e.row+n,e.col+r,"hidden")}))})),t.hot.removeCellMeta(e.row,e.col,"spanned")})),this.hot.render(),this.hot.runHooks("afterUnmergeCells",e,n))}},{key:"toggleMerge",value:function(e){var t=this.mergedCellsCollection.get(e.from.row,e.from.col);t.row===e.from.row&&t.col===e.from.col&&t.row+t.rowspan-1===e.to.row&&t.col+t.colspan-1===e.to.col?this.unmergeRange(e):this.mergeSelection(e)}},{key:"merge",value:function(e,t,n,r){var o=new Me(e,t),i=new Me(n,r);this.mergeRange(new Ce(o,o,i))}},{key:"unmerge",value:function(e,t,n,r){var o=new Me(e,t),i=new Me(n,r);this.unmergeRange(new Ce(o,o,i))}},{key:"onAfterInit",value:function(){this.generateFromSettings(this.hot.getSettings().mergeCells),this.hot.render()}},{key:"onBeforeKeyDown",value:function(e){(e.ctrlKey||e.metaKey)&&!e.altKey&&77===e.keyCode&&(this.toggleMerge(this.hot.getSelectedRangeLast()),this.hot.render(),jr(e))}},{key:"onAfterIsMultipleSelection",value:function(e){if(e)for(var t=this.mergedCellsCollection.mergedCells,n=this.hot.getSelectedRangeLast(),r=0;r0?o.row=a.row+a.rowspan-1-i.row+e.row:e.row<0&&(o.row=i.row-a.row+e.row),e.col>0?o.col=a.col+a.colspan-1-i.col+e.col:e.col<0&&(o.col=i.col-a.col+e.col)}t=new Me(r.highlight.row+o.row,r.highlight.col+o.col);var u=this.mergedCellsCollection.get(t.row,t.col);u&&(n.lastDesiredCoords=t,o={row:u.row-i.row,col:u.col-i.col}),0!==o.row&&(e.row=o.row),0!==o.col&&(e.col=o.col)}},{key:"onModifyTransformEnd",value:function(e){var t=this,n=this.hot.getSelectedRangeLast(),r=K(e),o=this.selectionCalculations.getUpdatedSelectionRange(n,e),i=K(r),a=this.mergedCellsCollection.getWithinRange(o,!0);do{i=K(r),this.selectionCalculations.getUpdatedSelectionRange(n,r),P(a,(function(e){t.selectionCalculations.snapDelta(r,n,e)}))}while(r.row!==i.row||r.col!==i.col);e.row=r.row,e.col=r.col}},{key:"onModifyGetCellCoords",value:function(e,t){var n=this.mergedCellsCollection.get(e,t);return n?[n.row,n.col,n.row+n.rowspan-1,n.col+n.colspan-1]:void 0}},{key:"addMergeActionsToContextMenu",value:function(e){var t;e.items.push({name:"---------"},(t=this,{key:"mergeCells",name:function(){var e=this.getSelectedLast();if(e){var n=t.mergedCellsCollection.get(e[0],e[1]);if(n.row===e[0]&&n.col===e[1]&&n.row+n.rowspan-1===e[2]&&n.col+n.colspan-1===e[3])return this.getTranslatedPhrase(lc)}return this.getTranslatedPhrase(sc)},callback:function(){t.toggleMergeOnSelection()},disabled:function(){var e=this.getSelectedLast();return!e||fg.isSingleCell({row:e[0],col:e[1],rowspan:e[2]-e[0]+1,colspan:e[3]-e[1]+1})||this.selection.isSelectedByCorner()},hidden:!1}))}},{key:"onAfterRenderer",value:function(e,t,n){dg(e,this.mergedCellsCollection.get(t,n),t,n)}},{key:"onBeforeSetRangeEnd",value:function(e){var t=this.hot.getSelectedRangeLast();t.highlight=new Me(t.highlight.row,t.highlight.col),t.to=e;var n=!1;if(!this.hot.selection.isSelectedByColumnHeader()&&!this.hot.selection.isSelectedByRowHeader())do{n=!1;for(var r=0;re.endRow)return e.endRow=o,n.onAfterViewportRowCalculatorOverride.call(n,e)}return!0}))}},{key:"onAfterViewportColumnCalculatorOverride",value:function(e){var t,n=this;Ra(0,this.hot.countRows()-1,(function(r){if((t=n.mergedCellsCollection.get(r,e.startColumn))&&t.cole.endColumn)return e.endColumn=o,n.onAfterViewportColumnCalculatorOverride.call(n,e)}return!0}))}},{key:"onModifyAutofillRange",value:function(e,t){this.autofillCalculations.correctSelectionAreaSize(t);var n=this.autofillCalculations.getDirection(t,e),r=e;if(this.autofillCalculations.dragAreaOverlapsCollections(t,r,n))return t;var o=this.mergedCellsCollection.getWithinRange({from:{row:t[0],col:t[1]},to:{row:t[2],col:t[3]}});return o?r=this.autofillCalculations.snapDragArea(t,r,n,o):r}},{key:"onAfterCreateCol",value:function(e,t){this.mergedCellsCollection.shiftCollections("right",e,t)}},{key:"onAfterRemoveCol",value:function(e,t){this.mergedCellsCollection.shiftCollections("left",e,t)}},{key:"onAfterCreateRow",value:function(e,t,n){"auto"!==n&&this.mergedCellsCollection.shiftCollections("down",e,t)}},{key:"onAfterRemoveRow",value:function(e,t){this.mergedCellsCollection.shiftCollections("up",e,t)}},{key:"onAfterChange",value:function(e,t){"Autofill.fill"===t&&this.autofillCalculations.recreateAfterDataPopulation(e)}},{key:"onBeforeDrawAreaBorders",value:function(e,t){if(t&&"area"===t){var n=this.hot.getSelectedRangeLast();P(this.mergedCellsCollection.getWithinRange(n),(function(t){n.getBottomRightCorner().row===t.getLastRow()&&n.getBottomRightCorner().col===t.getLastColumn()&&(e[2]=t.row,e[3]=t.col)}))}}},{key:"onAfterModifyTransformStart",value:function(e,t,n){if(this.enabled){var r=this.mergedCellsCollection.get(e.row,e.col);if(r){var o=t>0,i=t<0,a=n<0,s=n>0,l=r.row+r.rowspan-1==this.hot.countRows()-1,u=0===r.row,c=r.col+r.colspan-1==this.hot.countCols()-1,h=0===r.col;(o&&l||i&&u||s&&c||a&&h)&&(e.row=r.row,e.col=r.col)}}}},{key:"onAfterDrawSelection",value:function(e,t,n,r){return this.selectionCalculations.getSelectedMergedCellClassName(e,t,n,r)}},{key:"onBeforeRemoveCellClassNames",value:function(){return this.selectionCalculations.getSelectedMergedCellClassNameToRemove()}}],r&&Og(n.prototype,r),t}(Rf);gu("mergeCells",Ng);const Pg=Ng;function xg(e){return xg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},xg(e)}function Yg(e,t){for(var n=0;n0}}],r&&Yg(n.prototype,r),t}(Rf);gu("multipleSelectionHandles",Wg);const Bg=Wg;var Vg=n(78717),Ug=n.n(Vg);function zg(e){var t=e.match(/^\/(\d+)\/?(.*)?$/);if(!t)return null;var n,r,o=(r=3,function(e){if(Array.isArray(e))return e}(n=t)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()),i=o[1],a=o[2];return{row:parseInt(i,10),col:/^\d*$/.test(a)?parseInt(a,10):a}}function Gg(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:this.getCallback(),r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.getQueryMethod(),o=this.hot.countRows(),i=this.hot.countCols(),a=[],s=this.hot;return Ra(0,o-1,(function(o){Ra(0,i-1,(function(i){var l=t.hot.getDataAtCell(o,i),u=t.hot.getCellMeta(o,i),c=u.search.callback||n,h=(u.search.queryMethod||r)(e,l,u);if(h){var f={row:o,col:i,data:l};a.push(f)}c&&c(s,o,i,l,h)}))})),a}},{key:"getCallback",value:function(){return this.callback}},{key:"setCallback",value:function(e){this.callback=e}},{key:"getQueryMethod",value:function(){return this.queryMethod}},{key:"setQueryMethod",value:function(e){this.queryMethod=e}},{key:"getSearchResultClass",value:function(){return this.searchResultClass}},{key:"setSearchResultClass",value:function(e){this.searchResultClass=e}},{key:"updatePluginSettings",value:function(e){Q(e)&&(e.searchResultClass&&this.setSearchResultClass(e.searchResultClass),e.queryMethod&&this.setQueryMethod(e.queryMethod),e.callback&&this.setCallback(e.callback))}},{key:"onBeforeRenderer",value:function(e,t,n,r,o,i){var a,s,l=i.className||[],u=[];"string"==typeof l?u=l.split(" "):(a=u).push.apply(a,function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t1?this.getSelected():[[i[0][0],i[0][1]]];t.done(new Ew.ChangeAction(i,a))}})),e.addHook("afterCreateRow",(function(e,n,r){if("UndoRedo.undo"!==r&&"UndoRedo.undo"!==r&&"auto"!==r){var o=new Ew.CreateRowAction(e,n);t.done(o)}})),e.addHook("beforeRemoveRow",(function(n,r,o,i){if("UndoRedo.undo"!==i&&"UndoRedo.redo"!==i&&"auto"!==i){var a=t.instance.getSourceDataArray(),s=(a.length+n)%a.length,l=e.toPhysicalRow(s),u=X(a.slice(l,l+r));t.done(new Ew.RemoveRowAction(s,u))}})),e.addHook("afterCreateCol",(function(e,n,r){"UndoRedo.undo"!==r&&"UndoRedo.redo"!==r&&"auto"!==r&&t.done(new Ew.CreateColumnAction(e,n))})),e.addHook("beforeRemoveCol",(function(n,r,o,i){if("UndoRedo.undo"!==i&&"UndoRedo.redo"!==i&&"auto"!==i){var a=t.instance.getSourceDataArray(),s=(t.instance.countCols()+n)%t.instance.countCols(),l=[],u=[],c=[];Ra(a.length-1,(function(t){var n=[],o=a[t];Ra(s,s+(r-1),(function(t){n.push(o[e.runHooks("modifyCol",t)])})),l.push(n)})),Ra(r-1,(function(t){c.push(e.runHooks("modifyCol",s+t))})),Array.isArray(e.getSettings().colHeaders)&&Ra(r-1,(function(t){u.push(e.getSettings().colHeaders[e.runHooks("modifyCol",s+t)]||null)}));var h=t.instance.getPlugin("manualColumnMove"),f=h.isEnabled()?h.columnsMapper.__arrayMap:[],d=new Ew.RemoveColumnAction(s,c,l,u,f);t.done(d)}})),e.addHook("beforeCellAlignment",(function(e,n,r,o){var i=new Ew.CellAlignmentAction(e,n,r,o);t.done(i)})),e.addHook("beforeFilter",(function(e){t.done(new Ew.FiltersAction(e))})),e.addHook("beforeRowMove",(function(e,n){!1!==e&&t.done(new Ew.RowMoveAction(e,n))})),e.addHook("beforeMergeCells",(function(n,r){r||t.done(new Ew.MergeCellsAction(e,n))})),e.addHook("afterUnmergeCells",(function(n,r){r||t.done(new Ew.UnmergeCellsAction(e,n))}))}Ew.prototype.done=function(e){this.ignoreNewActions||(this.doneActions.push(e),this.undoneActions.length=0)},Ew.prototype.undo=function(){if(this.isUndoAvailable()){var e=this.doneActions.pop(),t=X(e),n=this.instance;if(!1===n.runHooks("beforeUndo",t))return;this.ignoreNewActions=!0;var r=this;e.undo(this.instance,(function(){r.ignoreNewActions=!1,r.undoneActions.push(e)})),n.runHooks("afterUndo",t)}},Ew.prototype.redo=function(){if(this.isRedoAvailable()){var e=this.undoneActions.pop(),t=X(e),n=this.instance;if(!1===n.runHooks("beforeRedo",t))return;this.ignoreNewActions=!0;var r=this;e.redo(this.instance,(function(){r.ignoreNewActions=!1,r.doneActions.push(e)})),n.runHooks("afterRedo",t)}},Ew.prototype.isUndoAvailable=function(){return this.doneActions.length>0},Ew.prototype.isRedoAvailable=function(){return this.undoneActions.length>0},Ew.prototype.clear=function(){this.doneActions.length=0,this.undoneActions.length=0},Ew.Action=function(){},Ew.Action.prototype.undo=function(){},Ew.Action.prototype.redo=function(){},Ew.ChangeAction=function(e,t){this.changes=e,this.selected=t,this.actionType="change"},z(Ew.ChangeAction,Ew.Action),Ew.ChangeAction.prototype.undo=function(e,t){for(var n=X(this.changes),r=e.countEmptyRows(!0),o=e.countEmptyCols(!0),i=0,a=n.length;i=n&&this.index-rthis.target?this.rows[0]+this.rows.length:this.rows[0],i=[],a=this.rows.length+r,s=r;s
  • '),i=this.options.get("translations").get(t.message);s.append(n(i(t.args))),s[0].className+=" select2-results__message",this.$results.append(s)},n.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},n.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n",{class:"select2-results__options select2-results__options--nested",role:"none"})).append(u),l.append(c),l.append(r)}else this.template(n,s);return t.StoreData(s,"data",n),s},n.prototype.bind=function(n,s){var i=this,o=n.id+"-results";this.$results.attr("id",o),n.on("results:all",(function(e){i.clear(),i.append(e.data),n.isOpen()&&(i.setClasses(),i.highlightFirstItem())})),n.on("results:append",(function(e){i.append(e.data),n.isOpen()&&i.setClasses()})),n.on("query",(function(e){i.hideMessages(),i.showLoading(e)})),n.on("select",(function(){n.isOpen()&&(i.setClasses(),i.options.get("scrollAfterSelect")&&i.highlightFirstItem())})),n.on("unselect",(function(){n.isOpen()&&(i.setClasses(),i.options.get("scrollAfterSelect")&&i.highlightFirstItem())})),n.on("open",(function(){i.$results.attr("aria-expanded","true"),i.$results.attr("aria-hidden","false"),i.setClasses(),i.ensureHighlightVisible()})),n.on("close",(function(){i.$results.attr("aria-expanded","false"),i.$results.attr("aria-hidden","true"),i.$results.removeAttr("aria-activedescendant")})),n.on("results:toggle",(function(){var e=i.getHighlightedResults();0!==e.length&&e.trigger("mouseup")})),n.on("results:select",(function(){var e,n=i.getHighlightedResults();0!==n.length&&(e=t.GetData(n[0],"data"),n.hasClass("select2-results__option--selected")?i.trigger("close",{}):i.trigger("select",{data:e}))})),n.on("results:previous",(function(){var e,t=i.getHighlightedResults(),n=i.$results.find(".select2-results__option--selectable"),s=n.index(t);s<=0||(e=s-1,0===t.length&&(e=0),(s=n.eq(e)).trigger("mouseenter"),t=i.$results.offset().top,n=s.offset().top,s=i.$results.scrollTop()+(n-t),0===e?i.$results.scrollTop(0):n-t<0&&i.$results.scrollTop(s))})),n.on("results:next",(function(){var e,t=i.getHighlightedResults(),n=i.$results.find(".select2-results__option--selectable"),s=n.index(t)+1;s>=n.length||((e=n.eq(s)).trigger("mouseenter"),t=i.$results.offset().top+i.$results.outerHeight(!1),n=e.offset().top+e.outerHeight(!1),e=i.$results.scrollTop()+n-t,0===s?i.$results.scrollTop(0):tthis.$results.outerHeight()||s<0)&&this.$results.scrollTop(n))},n.prototype.template=function(t,n){var s=this.options.get("templateResult"),i=this.options.get("escapeMarkup");null==(t=s(t,n))?n.style.display="none":"string"==typeof t?n.innerHTML=i(t):e(n).append(t)},n})),x.define("select2/keys",[],(function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}})),x.define("select2/selection/base",["jquery","../utils","../keys"],(function(e,t,n){function s(e,t){this.$element=e,this.options=t,s.__super__.constructor.call(this)}return t.Extend(s,t.Observable),s.prototype.render=function(){var n=e('');return this._tabindex=0,null!=t.GetData(this.$element[0],"old-tabindex")?this._tabindex=t.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),n.attr("title",this.$element.attr("title")),n.attr("tabindex",this._tabindex),n.attr("aria-disabled","false"),this.$selection=n},s.prototype.bind=function(e,t){var s=this,i=e.id+"-results";this.container=e,this.$selection.on("focus",(function(e){s.trigger("focus",e)})),this.$selection.on("blur",(function(e){s._handleBlur(e)})),this.$selection.on("keydown",(function(e){s.trigger("keypress",e),e.which===n.SPACE&&e.preventDefault()})),e.on("results:focus",(function(e){s.$selection.attr("aria-activedescendant",e.data._resultId)})),e.on("selection:update",(function(e){s.update(e.data)})),e.on("open",(function(){s.$selection.attr("aria-expanded","true"),s.$selection.attr("aria-owns",i),s._attachCloseHandler(e)})),e.on("close",(function(){s.$selection.attr("aria-expanded","false"),s.$selection.removeAttr("aria-activedescendant"),s.$selection.removeAttr("aria-owns"),s.$selection.trigger("focus"),s._detachCloseHandler(e)})),e.on("enable",(function(){s.$selection.attr("tabindex",s._tabindex),s.$selection.attr("aria-disabled","false")})),e.on("disable",(function(){s.$selection.attr("tabindex","-1"),s.$selection.attr("aria-disabled","true")}))},s.prototype._handleBlur=function(t){var n=this;window.setTimeout((function(){document.activeElement==n.$selection[0]||e.contains(n.$selection[0],document.activeElement)||n.trigger("blur",t)}),1)},s.prototype._attachCloseHandler=function(n){e(document.body).on("mousedown.select2."+n.id,(function(n){var s=e(n.target).closest(".select2");e(".select2.select2-container--open").each((function(){this!=s[0]&&t.GetData(this,"element").select2("close")}))}))},s.prototype._detachCloseHandler=function(t){e(document.body).off("mousedown.select2."+t.id)},s.prototype.position=function(e,t){t.find(".selection").append(e)},s.prototype.destroy=function(){this._detachCloseHandler(this.container)},s.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},s.prototype.isEnabled=function(){return!this.isDisabled()},s.prototype.isDisabled=function(){return this.options.get("disabled")},s})),x.define("select2/selection/single",["jquery","./base","../utils","../keys"],(function(e,t,n,s){function i(){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,t),i.prototype.render=function(){var e=i.__super__.render.call(this);return e[0].classList.add("select2-selection--single"),e.html(''),e},i.prototype.bind=function(e,t){var n=this;i.__super__.bind.apply(this,arguments);var s=e.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",s).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",s),this.$selection.attr("aria-controls",s),this.$selection.on("mousedown",(function(e){1===e.which&&n.trigger("toggle",{originalEvent:e})})),this.$selection.on("focus",(function(e){})),this.$selection.on("blur",(function(e){})),e.on("focus",(function(t){e.isOpen()||n.$selection.trigger("focus")}))},i.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},i.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},i.prototype.selectionContainer=function(){return e("")},i.prototype.update=function(e){var t,n;0!==e.length?(n=e[0],t=this.$selection.find(".select2-selection__rendered"),e=this.display(n,t),t.empty().append(e),(n=n.title||n.text)?t.attr("title",n):t.removeAttr("title")):this.clear()},i})),x.define("select2/selection/multiple",["jquery","./base","../utils"],(function(e,t,n){function s(e,t){s.__super__.constructor.apply(this,arguments)}return n.Extend(s,t),s.prototype.render=function(){var e=s.__super__.render.call(this);return e[0].classList.add("select2-selection--multiple"),e.html('
      '),e},s.prototype.bind=function(t,i){var o=this;s.__super__.bind.apply(this,arguments);var r=t.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",r),this.$selection.on("click",(function(e){o.trigger("toggle",{originalEvent:e})})),this.$selection.on("click",".select2-selection__choice__remove",(function(t){var s;o.isDisabled()||(s=e(this).parent(),s=n.GetData(s[0],"data"),o.trigger("unselect",{originalEvent:t,data:s}))})),this.$selection.on("keydown",".select2-selection__choice__remove",(function(e){o.isDisabled()||e.stopPropagation()}))},s.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},s.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},s.prototype.selectionContainer=function(){return e('
    • ')},s.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],s=this.$selection.find(".select2-selection__rendered").attr("id")+"-choice-",i=0;i')).attr("title",o()),t.attr("aria-label",o()),t.attr("aria-describedby",i),n.StoreData(t[0],"data",s),this.$selection.prepend(t),this.$selection[0].classList.add("select2-selection--clearable"))},s})),x.define("select2/selection/search",["jquery","../utils","../keys"],(function(e,t,n){function s(e,t,n){e.call(this,t,n)}return s.prototype.render=function(t){var n=this.options.get("translations").get("search"),s=e('');return this.$searchContainer=s,this.$search=s.find("textarea"),this.$search.prop("autocomplete",this.options.get("autocomplete")),this.$search.attr("aria-label",n()),t=t.call(this),this._transferTabIndex(),t.append(this.$searchContainer),t},s.prototype.bind=function(e,s,i){var o=this,r=s.id+"-results",a=s.id+"-container";e.call(this,s,i),o.$search.attr("aria-describedby",a),s.on("open",(function(){o.$search.attr("aria-controls",r),o.$search.trigger("focus")})),s.on("close",(function(){o.$search.val(""),o.resizeSearch(),o.$search.removeAttr("aria-controls"),o.$search.removeAttr("aria-activedescendant"),o.$search.trigger("focus")})),s.on("enable",(function(){o.$search.prop("disabled",!1),o._transferTabIndex()})),s.on("disable",(function(){o.$search.prop("disabled",!0)})),s.on("focus",(function(e){o.$search.trigger("focus")})),s.on("results:focus",(function(e){e.data._resultId?o.$search.attr("aria-activedescendant",e.data._resultId):o.$search.removeAttr("aria-activedescendant")})),this.$selection.on("focusin",".select2-search--inline",(function(e){o.trigger("focus",e)})),this.$selection.on("focusout",".select2-search--inline",(function(e){o._handleBlur(e)})),this.$selection.on("keydown",".select2-search--inline",(function(e){var s;e.stopPropagation(),o.trigger("keypress",e),o._keyUpPrevented=e.isDefaultPrevented(),e.which!==n.BACKSPACE||""!==o.$search.val()||0<(s=o.$selection.find(".select2-selection__choice").last()).length&&(s=t.GetData(s[0],"data"),o.searchRemoveChoice(s),e.preventDefault())})),this.$selection.on("click",".select2-search--inline",(function(e){o.$search.val()&&e.stopPropagation()}));var l=(s=document.documentMode)&&s<=11;this.$selection.on("input.searchcheck",".select2-search--inline",(function(e){l?o.$selection.off("input.search input.searchcheck"):o.$selection.off("keyup.search")})),this.$selection.on("keyup.search input.search",".select2-search--inline",(function(e){var t;l&&"input"===e.type?o.$selection.off("input.search input.searchcheck"):(t=e.which)!=n.SHIFT&&t!=n.CTRL&&t!=n.ALT&&t!=n.TAB&&o.handleSearch(e)}))},s.prototype._transferTabIndex=function(e){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},s.prototype.createPlaceholder=function(e,t){this.$search.attr("placeholder",t.text)},s.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),e.call(this,t),this.resizeSearch(),n&&this.$search.trigger("focus")},s.prototype.handleSearch=function(){var e;this.resizeSearch(),this._keyUpPrevented||(e=this.$search.val(),this.trigger("query",{term:e})),this._keyUpPrevented=!1},s.prototype.searchRemoveChoice=function(e,t){this.trigger("unselect",{data:t}),this.$search.val(t.text),this.handleSearch()},s.prototype.resizeSearch=function(){this.$search.css("width","25px");var e="100%";""===this.$search.attr("placeholder")&&(e=.75*(this.$search.val().length+1)+"em"),this.$search.css("width",e)},s})),x.define("select2/selection/selectionCss",["../utils"],(function(e){function t(){}return t.prototype.render=function(t){var n=t.call(this);return-1!==(t=this.options.get("selectionCssClass")||"").indexOf(":all:")&&(t=t.replace(":all:",""),e.copyNonInternalCssClasses(n[0],this.$element[0])),n.addClass(t),n},t})),x.define("select2/selection/eventRelay",["jquery"],(function(e){function t(){}return t.prototype.bind=function(t,n,s){var i=this,o=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],r=["opening","closing","selecting","unselecting","clearing"];t.call(this,n,s),n.on("*",(function(t,n){var s;-1!==o.indexOf(t)&&(n=n||{},s=e.Event("select2:"+t,{params:n}),i.$element.trigger(s),-1!==r.indexOf(t)&&(n.prevented=s.isDefaultPrevented()))}))},t})),x.define("select2/translation",["jquery","require"],(function(e,t){function n(e){this.dict=e||{}}return n.prototype.all=function(){return this.dict},n.prototype.get=function(e){return this.dict[e]},n.prototype.extend=function(t){this.dict=e.extend({},t.all(),this.dict)},n._cache={},n.loadPath=function(e){var s;return e in n._cache||(s=t(e),n._cache[e]=s),new n(n._cache[e])},n})),x.define("select2/diacritics",[],(function(){return{"Ⓐ":"A",A:"A",À:"A",Á:"A",Â:"A",Ầ:"A",Ấ:"A",Ẫ:"A",Ẩ:"A",Ã:"A",Ā:"A",Ă:"A",Ằ:"A",Ắ:"A",Ẵ:"A",Ẳ:"A",Ȧ:"A",Ǡ:"A",Ä:"A",Ǟ:"A",Ả:"A",Å:"A",Ǻ:"A",Ǎ:"A",Ȁ:"A",Ȃ:"A",Ạ:"A",Ậ:"A",Ặ:"A",Ḁ:"A",Ą:"A",Ⱥ:"A",Ɐ:"A",Ꜳ:"AA",Æ:"AE",Ǽ:"AE",Ǣ:"AE",Ꜵ:"AO",Ꜷ:"AU",Ꜹ:"AV",Ꜻ:"AV",Ꜽ:"AY","Ⓑ":"B",B:"B",Ḃ:"B",Ḅ:"B",Ḇ:"B",Ƀ:"B",Ƃ:"B",Ɓ:"B","Ⓒ":"C",C:"C",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",Ç:"C",Ḉ:"C",Ƈ:"C",Ȼ:"C",Ꜿ:"C","Ⓓ":"D",D:"D",Ḋ:"D",Ď:"D",Ḍ:"D",Ḑ:"D",Ḓ:"D",Ḏ:"D",Đ:"D",Ƌ:"D",Ɗ:"D",Ɖ:"D",Ꝺ:"D",DZ:"DZ",DŽ:"DZ",Dz:"Dz",Dž:"Dz","Ⓔ":"E",E:"E",È:"E",É:"E",Ê:"E",Ề:"E",Ế:"E",Ễ:"E",Ể:"E",Ẽ:"E",Ē:"E",Ḕ:"E",Ḗ:"E",Ĕ:"E",Ė:"E",Ë:"E",Ẻ:"E",Ě:"E",Ȅ:"E",Ȇ:"E",Ẹ:"E",Ệ:"E",Ȩ:"E",Ḝ:"E",Ę:"E",Ḙ:"E",Ḛ:"E",Ɛ:"E",Ǝ:"E","Ⓕ":"F",F:"F",Ḟ:"F",Ƒ:"F",Ꝼ:"F","Ⓖ":"G",G:"G",Ǵ:"G",Ĝ:"G",Ḡ:"G",Ğ:"G",Ġ:"G",Ǧ:"G",Ģ:"G",Ǥ:"G",Ɠ:"G",Ꞡ:"G",Ᵹ:"G",Ꝿ:"G","Ⓗ":"H",H:"H",Ĥ:"H",Ḣ:"H",Ḧ:"H",Ȟ:"H",Ḥ:"H",Ḩ:"H",Ḫ:"H",Ħ:"H",Ⱨ:"H",Ⱶ:"H",Ɥ:"H","Ⓘ":"I",I:"I",Ì:"I",Í:"I",Î:"I",Ĩ:"I",Ī:"I",Ĭ:"I",İ:"I",Ï:"I",Ḯ:"I",Ỉ:"I",Ǐ:"I",Ȉ:"I",Ȋ:"I",Ị:"I",Į:"I",Ḭ:"I",Ɨ:"I","Ⓙ":"J",J:"J",Ĵ:"J",Ɉ:"J","Ⓚ":"K",K:"K",Ḱ:"K",Ǩ:"K",Ḳ:"K",Ķ:"K",Ḵ:"K",Ƙ:"K",Ⱪ:"K",Ꝁ:"K",Ꝃ:"K",Ꝅ:"K",Ꞣ:"K","Ⓛ":"L",L:"L",Ŀ:"L",Ĺ:"L",Ľ:"L",Ḷ:"L",Ḹ:"L",Ļ:"L",Ḽ:"L",Ḻ:"L",Ł:"L",Ƚ:"L",Ɫ:"L",Ⱡ:"L",Ꝉ:"L",Ꝇ:"L",Ꞁ:"L",LJ:"LJ",Lj:"Lj","Ⓜ":"M",M:"M",Ḿ:"M",Ṁ:"M",Ṃ:"M",Ɱ:"M",Ɯ:"M","Ⓝ":"N",N:"N",Ǹ:"N",Ń:"N",Ñ:"N",Ṅ:"N",Ň:"N",Ṇ:"N",Ņ:"N",Ṋ:"N",Ṉ:"N",Ƞ:"N",Ɲ:"N",Ꞑ:"N",Ꞥ:"N",NJ:"NJ",Nj:"Nj","Ⓞ":"O",O:"O",Ò:"O",Ó:"O",Ô:"O",Ồ:"O",Ố:"O",Ỗ:"O",Ổ:"O",Õ:"O",Ṍ:"O",Ȭ:"O",Ṏ:"O",Ō:"O",Ṑ:"O",Ṓ:"O",Ŏ:"O",Ȯ:"O",Ȱ:"O",Ö:"O",Ȫ:"O",Ỏ:"O",Ő:"O",Ǒ:"O",Ȍ:"O",Ȏ:"O",Ơ:"O",Ờ:"O",Ớ:"O",Ỡ:"O",Ở:"O",Ợ:"O",Ọ:"O",Ộ:"O",Ǫ:"O",Ǭ:"O",Ø:"O",Ǿ:"O",Ɔ:"O",Ɵ:"O",Ꝋ:"O",Ꝍ:"O",Œ:"OE",Ƣ:"OI",Ꝏ:"OO",Ȣ:"OU","Ⓟ":"P",P:"P",Ṕ:"P",Ṗ:"P",Ƥ:"P",Ᵽ:"P",Ꝑ:"P",Ꝓ:"P",Ꝕ:"P","Ⓠ":"Q",Q:"Q",Ꝗ:"Q",Ꝙ:"Q",Ɋ:"Q","Ⓡ":"R",R:"R",Ŕ:"R",Ṙ:"R",Ř:"R",Ȑ:"R",Ȓ:"R",Ṛ:"R",Ṝ:"R",Ŗ:"R",Ṟ:"R",Ɍ:"R",Ɽ:"R",Ꝛ:"R",Ꞧ:"R",Ꞃ:"R","Ⓢ":"S",S:"S",ẞ:"S",Ś:"S",Ṥ:"S",Ŝ:"S",Ṡ:"S",Š:"S",Ṧ:"S",Ṣ:"S",Ṩ:"S",Ș:"S",Ş:"S",Ȿ:"S",Ꞩ:"S",Ꞅ:"S","Ⓣ":"T",T:"T",Ṫ:"T",Ť:"T",Ṭ:"T",Ț:"T",Ţ:"T",Ṱ:"T",Ṯ:"T",Ŧ:"T",Ƭ:"T",Ʈ:"T",Ⱦ:"T",Ꞇ:"T",Ꜩ:"TZ","Ⓤ":"U",U:"U",Ù:"U",Ú:"U",Û:"U",Ũ:"U",Ṹ:"U",Ū:"U",Ṻ:"U",Ŭ:"U",Ü:"U",Ǜ:"U",Ǘ:"U",Ǖ:"U",Ǚ:"U",Ủ:"U",Ů:"U",Ű:"U",Ǔ:"U",Ȕ:"U",Ȗ:"U",Ư:"U",Ừ:"U",Ứ:"U",Ữ:"U",Ử:"U",Ự:"U",Ụ:"U",Ṳ:"U",Ų:"U",Ṷ:"U",Ṵ:"U",Ʉ:"U","Ⓥ":"V",V:"V",Ṽ:"V",Ṿ:"V",Ʋ:"V",Ꝟ:"V",Ʌ:"V",Ꝡ:"VY","Ⓦ":"W",W:"W",Ẁ:"W",Ẃ:"W",Ŵ:"W",Ẇ:"W",Ẅ:"W",Ẉ:"W",Ⱳ:"W","Ⓧ":"X",X:"X",Ẋ:"X",Ẍ:"X","Ⓨ":"Y",Y:"Y",Ỳ:"Y",Ý:"Y",Ŷ:"Y",Ỹ:"Y",Ȳ:"Y",Ẏ:"Y",Ÿ:"Y",Ỷ:"Y",Ỵ:"Y",Ƴ:"Y",Ɏ:"Y",Ỿ:"Y","Ⓩ":"Z",Z:"Z",Ź:"Z",Ẑ:"Z",Ż:"Z",Ž:"Z",Ẓ:"Z",Ẕ:"Z",Ƶ:"Z",Ȥ:"Z",Ɀ:"Z",Ⱬ:"Z",Ꝣ:"Z","ⓐ":"a",a:"a",ẚ:"a",à:"a",á:"a",â:"a",ầ:"a",ấ:"a",ẫ:"a",ẩ:"a",ã:"a",ā:"a",ă:"a",ằ:"a",ắ:"a",ẵ:"a",ẳ:"a",ȧ:"a",ǡ:"a",ä:"a",ǟ:"a",ả:"a",å:"a",ǻ:"a",ǎ:"a",ȁ:"a",ȃ:"a",ạ:"a",ậ:"a",ặ:"a",ḁ:"a",ą:"a",ⱥ:"a",ɐ:"a",ꜳ:"aa",æ:"ae",ǽ:"ae",ǣ:"ae",ꜵ:"ao",ꜷ:"au",ꜹ:"av",ꜻ:"av",ꜽ:"ay","ⓑ":"b",b:"b",ḃ:"b",ḅ:"b",ḇ:"b",ƀ:"b",ƃ:"b",ɓ:"b","ⓒ":"c",c:"c",ć:"c",ĉ:"c",ċ:"c",č:"c",ç:"c",ḉ:"c",ƈ:"c",ȼ:"c",ꜿ:"c",ↄ:"c","ⓓ":"d",d:"d",ḋ:"d",ď:"d",ḍ:"d",ḑ:"d",ḓ:"d",ḏ:"d",đ:"d",ƌ:"d",ɖ:"d",ɗ:"d",ꝺ:"d",dz:"dz",dž:"dz","ⓔ":"e",e:"e",è:"e",é:"e",ê:"e",ề:"e",ế:"e",ễ:"e",ể:"e",ẽ:"e",ē:"e",ḕ:"e",ḗ:"e",ĕ:"e",ė:"e",ë:"e",ẻ:"e",ě:"e",ȅ:"e",ȇ:"e",ẹ:"e",ệ:"e",ȩ:"e",ḝ:"e",ę:"e",ḙ:"e",ḛ:"e",ɇ:"e",ɛ:"e",ǝ:"e","ⓕ":"f",f:"f",ḟ:"f",ƒ:"f",ꝼ:"f","ⓖ":"g",g:"g",ǵ:"g",ĝ:"g",ḡ:"g",ğ:"g",ġ:"g",ǧ:"g",ģ:"g",ǥ:"g",ɠ:"g",ꞡ:"g",ᵹ:"g",ꝿ:"g","ⓗ":"h",h:"h",ĥ:"h",ḣ:"h",ḧ:"h",ȟ:"h",ḥ:"h",ḩ:"h",ḫ:"h",ẖ:"h",ħ:"h",ⱨ:"h",ⱶ:"h",ɥ:"h",ƕ:"hv","ⓘ":"i",i:"i",ì:"i",í:"i",î:"i",ĩ:"i",ī:"i",ĭ:"i",ï:"i",ḯ:"i",ỉ:"i",ǐ:"i",ȉ:"i",ȋ:"i",ị:"i",į:"i",ḭ:"i",ɨ:"i",ı:"i","ⓙ":"j",j:"j",ĵ:"j",ǰ:"j",ɉ:"j","ⓚ":"k",k:"k",ḱ:"k",ǩ:"k",ḳ:"k",ķ:"k",ḵ:"k",ƙ:"k",ⱪ:"k",ꝁ:"k",ꝃ:"k",ꝅ:"k",ꞣ:"k","ⓛ":"l",l:"l",ŀ:"l",ĺ:"l",ľ:"l",ḷ:"l",ḹ:"l",ļ:"l",ḽ:"l",ḻ:"l",ſ:"l",ł:"l",ƚ:"l",ɫ:"l",ⱡ:"l",ꝉ:"l",ꞁ:"l",ꝇ:"l",lj:"lj","ⓜ":"m",m:"m",ḿ:"m",ṁ:"m",ṃ:"m",ɱ:"m",ɯ:"m","ⓝ":"n",n:"n",ǹ:"n",ń:"n",ñ:"n",ṅ:"n",ň:"n",ṇ:"n",ņ:"n",ṋ:"n",ṉ:"n",ƞ:"n",ɲ:"n",ʼn:"n",ꞑ:"n",ꞥ:"n",nj:"nj","ⓞ":"o",o:"o",ò:"o",ó:"o",ô:"o",ồ:"o",ố:"o",ỗ:"o",ổ:"o",õ:"o",ṍ:"o",ȭ:"o",ṏ:"o",ō:"o",ṑ:"o",ṓ:"o",ŏ:"o",ȯ:"o",ȱ:"o",ö:"o",ȫ:"o",ỏ:"o",ő:"o",ǒ:"o",ȍ:"o",ȏ:"o",ơ:"o",ờ:"o",ớ:"o",ỡ:"o",ở:"o",ợ:"o",ọ:"o",ộ:"o",ǫ:"o",ǭ:"o",ø:"o",ǿ:"o",ɔ:"o",ꝋ:"o",ꝍ:"o",ɵ:"o",œ:"oe",ƣ:"oi",ȣ:"ou",ꝏ:"oo","ⓟ":"p",p:"p",ṕ:"p",ṗ:"p",ƥ:"p",ᵽ:"p",ꝑ:"p",ꝓ:"p",ꝕ:"p","ⓠ":"q",q:"q",ɋ:"q",ꝗ:"q",ꝙ:"q","ⓡ":"r",r:"r",ŕ:"r",ṙ:"r",ř:"r",ȑ:"r",ȓ:"r",ṛ:"r",ṝ:"r",ŗ:"r",ṟ:"r",ɍ:"r",ɽ:"r",ꝛ:"r",ꞧ:"r",ꞃ:"r","ⓢ":"s",s:"s",ß:"s",ś:"s",ṥ:"s",ŝ:"s",ṡ:"s",š:"s",ṧ:"s",ṣ:"s",ṩ:"s",ș:"s",ş:"s",ȿ:"s",ꞩ:"s",ꞅ:"s",ẛ:"s","ⓣ":"t",t:"t",ṫ:"t",ẗ:"t",ť:"t",ṭ:"t",ț:"t",ţ:"t",ṱ:"t",ṯ:"t",ŧ:"t",ƭ:"t",ʈ:"t",ⱦ:"t",ꞇ:"t",ꜩ:"tz","ⓤ":"u",u:"u",ù:"u",ú:"u",û:"u",ũ:"u",ṹ:"u",ū:"u",ṻ:"u",ŭ:"u",ü:"u",ǜ:"u",ǘ:"u",ǖ:"u",ǚ:"u",ủ:"u",ů:"u",ű:"u",ǔ:"u",ȕ:"u",ȗ:"u",ư:"u",ừ:"u",ứ:"u",ữ:"u",ử:"u",ự:"u",ụ:"u",ṳ:"u",ų:"u",ṷ:"u",ṵ:"u",ʉ:"u","ⓥ":"v",v:"v",ṽ:"v",ṿ:"v",ʋ:"v",ꝟ:"v",ʌ:"v",ꝡ:"vy","ⓦ":"w",w:"w",ẁ:"w",ẃ:"w",ŵ:"w",ẇ:"w",ẅ:"w",ẘ:"w",ẉ:"w",ⱳ:"w","ⓧ":"x",x:"x",ẋ:"x",ẍ:"x","ⓨ":"y",y:"y",ỳ:"y",ý:"y",ŷ:"y",ỹ:"y",ȳ:"y",ẏ:"y",ÿ:"y",ỷ:"y",ẙ:"y",ỵ:"y",ƴ:"y",ɏ:"y",ỿ:"y","ⓩ":"z",z:"z",ź:"z",ẑ:"z",ż:"z",ž:"z",ẓ:"z",ẕ:"z",ƶ:"z",ȥ:"z",ɀ:"z",ⱬ:"z",ꝣ:"z",Ά:"Α",Έ:"Ε",Ή:"Η",Ί:"Ι",Ϊ:"Ι",Ό:"Ο",Ύ:"Υ",Ϋ:"Υ",Ώ:"Ω",ά:"α",έ:"ε",ή:"η",ί:"ι",ϊ:"ι",ΐ:"ι",ό:"ο",ύ:"υ",ϋ:"υ",ΰ:"υ",ώ:"ω",ς:"σ","’":"'"}})),x.define("select2/data/base",["../utils"],(function(e){function t(e,n){t.__super__.constructor.call(this)}return e.Extend(t,e.Observable),t.prototype.current=function(e){throw new Error("The `current` method must be defined in child classes.")},t.prototype.query=function(e,t){throw new Error("The `query` method must be defined in child classes.")},t.prototype.bind=function(e,t){},t.prototype.destroy=function(){},t.prototype.generateResultId=function(t,n){return t=t.id+"-result-",t+=e.generateChars(4),null!=n.id?t+="-"+n.id.toString():t+="-"+e.generateChars(4),t},t})),x.define("select2/data/select",["./base","../utils","jquery"],(function(e,t,n){function s(e,t){this.$element=e,this.options=t,s.__super__.constructor.call(this)}return t.Extend(s,e),s.prototype.current=function(e){var t=this;e(Array.prototype.map.call(this.$element[0].querySelectorAll(":checked"),(function(e){return t.item(n(e))})))},s.prototype.select=function(e){var t,n=this;if(e.selected=!0,null!=e.element&&"option"===e.element.tagName.toLowerCase())return e.element.selected=!0,void this.$element.trigger("input").trigger("change");this.$element.prop("multiple")?this.current((function(t){var s=[];(e=[e]).push.apply(e,t);for(var i=0;ithis.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e})),x.define("select2/data/maximumSelectionLength",[],(function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on("select",(function(){s._checkIfMaximumSelected()}))},e.prototype.query=function(e,t,n){var s=this;this._checkIfMaximumSelected((function(){e.call(s,t,n)}))},e.prototype._checkIfMaximumSelected=function(e,t){var n=this;this.current((function(e){e=null!=e?e.length:0,0=n.maximumSelectionLength?n.trigger("results:message",{message:"maximumSelected",args:{maximum:n.maximumSelectionLength}}):t&&t()}))},e})),x.define("select2/dropdown",["jquery","./utils"],(function(e,t){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return t.Extend(n,t.Observable),n.prototype.render=function(){var t=e('');return t.attr("dir",this.options.get("dir")),this.$dropdown=t},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n})),x.define("select2/dropdown/search",["jquery"],(function(e){function t(){}return t.prototype.render=function(t){var n=t.call(this),s=this.options.get("translations").get("search");return t=e(''),this.$searchContainer=t,this.$search=t.find("input"),this.$search.prop("autocomplete",this.options.get("autocomplete")),this.$search.attr("aria-label",s()),n.prepend(t),n},t.prototype.bind=function(t,n,s){var i=this,o=n.id+"-results";t.call(this,n,s),this.$search.on("keydown",(function(e){i.trigger("keypress",e),i._keyUpPrevented=e.isDefaultPrevented()})),this.$search.on("input",(function(t){e(this).off("keyup")})),this.$search.on("keyup input",(function(e){i.handleSearch(e)})),n.on("open",(function(){i.$search.attr("tabindex",0),i.$search.attr("aria-controls",o),i.$search.trigger("focus"),window.setTimeout((function(){i.$search.trigger("focus")}),0)})),n.on("close",(function(){i.$search.attr("tabindex",-1),i.$search.removeAttr("aria-controls"),i.$search.removeAttr("aria-activedescendant"),i.$search.val(""),i.$search.trigger("blur")})),n.on("focus",(function(){n.isOpen()||i.$search.trigger("focus")})),n.on("results:all",(function(e){null!=e.query.term&&""!==e.query.term||(i.showSearch(e)?i.$searchContainer[0].classList.remove("select2-search--hide"):i.$searchContainer[0].classList.add("select2-search--hide"))})),n.on("results:focus",(function(e){e.data._resultId?i.$search.attr("aria-activedescendant",e.data._resultId):i.$search.removeAttr("aria-activedescendant")}))},t.prototype.handleSearch=function(e){var t;this._keyUpPrevented||(t=this.$search.val(),this.trigger("query",{term:t})),this._keyUpPrevented=!1},t.prototype.showSearch=function(e,t){return!0},t})),x.define("select2/dropdown/hidePlaceholder",[],(function(){function e(e,t,n,s){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,s)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t?{id:"",text:t}:t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),s=t.length-1;0<=s;s--){var i=t[s];this.placeholder.id===i.id&&n.splice(s,1)}return n},e})),x.define("select2/dropdown/infiniteScroll",["jquery"],(function(e){function t(e,t,n,s){this.lastParams={},e.call(this,t,n,s),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return t.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},t.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on("query",(function(e){s.lastParams=e,s.loading=!0})),t.on("query:append",(function(e){s.lastParams=e,s.loading=!0})),this.$results.on("scroll",this.loadMoreIfNeeded.bind(this))},t.prototype.loadMoreIfNeeded=function(){var t=e.contains(document.documentElement,this.$loadingMore[0]);!this.loading&&t&&(t=this.$results.offset().top+this.$results.outerHeight(!1),this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=t+50&&this.loadMore())},t.prototype.loadMore=function(){this.loading=!0;var t=e.extend({},{page:1},this.lastParams);t.page++,this.trigger("query:append",t)},t.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},t.prototype.createLoadingMore=function(){var t=e('
    • '),n=this.options.get("translations").get("loadingMore");return t.html(n(this.lastParams)),t},t})),x.define("select2/dropdown/attachBody",["jquery","../utils"],(function(e,t){function n(t,n,s){this.$dropdownParent=e(s.get("dropdownParent")||document.body),t.call(this,n,s)}return n.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on("open",(function(){s._showDropdown(),s._attachPositioningHandler(t),s._bindContainerResultHandlers(t)})),t.on("close",(function(){s._hideDropdown(),s._detachPositioningHandler(t)})),this.$dropdownContainer.on("mousedown",(function(e){e.stopPropagation()}))},n.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},n.prototype.position=function(e,t,n){t.attr("class",n.attr("class")),t[0].classList.remove("select2"),t[0].classList.add("select2-container--open"),t.css({position:"absolute",top:-999999}),this.$container=n},n.prototype.render=function(t){var n=e("");return t=t.call(this),n.append(t),this.$dropdownContainer=n},n.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},n.prototype._bindContainerResultHandlers=function(e,t){var n;this._containerResultsHandlersBound||(n=this,t.on("results:all",(function(){n._positionDropdown(),n._resizeDropdown()})),t.on("results:append",(function(){n._positionDropdown(),n._resizeDropdown()})),t.on("results:message",(function(){n._positionDropdown(),n._resizeDropdown()})),t.on("select",(function(){n._positionDropdown(),n._resizeDropdown()})),t.on("unselect",(function(){n._positionDropdown(),n._resizeDropdown()})),this._containerResultsHandlersBound=!0)},n.prototype._attachPositioningHandler=function(n,s){var i=this,o="scroll.select2."+s.id,r="resize.select2."+s.id,a="orientationchange.select2."+s.id;(s=this.$container.parents().filter(t.hasScroll)).each((function(){t.StoreData(this,"select2-scroll-position",{x:e(this).scrollLeft(),y:e(this).scrollTop()})})),s.on(o,(function(n){var s=t.GetData(this,"select2-scroll-position");e(this).scrollTop(s.y)})),e(window).on(o+" "+r+" "+a,(function(e){i._positionDropdown(),i._resizeDropdown()}))},n.prototype._detachPositioningHandler=function(n,s){var i="scroll.select2."+s.id,o="resize.select2."+s.id;s="orientationchange.select2."+s.id,this.$container.parents().filter(t.hasScroll).off(i),e(window).off(i+" "+o+" "+s)},n.prototype._positionDropdown=function(){var t=e(window),n=this.$dropdown[0].classList.contains("select2-dropdown--above"),s=this.$dropdown[0].classList.contains("select2-dropdown--below"),i=null,o=this.$container.offset();o.bottom=o.top+this.$container.outerHeight(!1);var r={height:this.$container.outerHeight(!1)};r.top=o.top,r.bottom=o.top+r.height;var a=this.$dropdown.outerHeight(!1),l=t.scrollTop(),c=t.scrollTop()+t.height(),u=lo.bottom+a,l={left:o.left,top:r.bottom},"static"===(c=this.$dropdownParent).css("position")&&(c=c.offsetParent()),o={top:0,left:0},(e.contains(document.body,c[0])||c[0].isConnected)&&(o=c.offset()),l.top-=o.top,l.left-=o.left,n||s||(i="below"),t||!u||n?!u&&t&&n&&(i="below"):i="above",("above"==i||n&&"below"!==i)&&(l.top=r.top-o.top-a),null!=i&&(this.$dropdown[0].classList.remove("select2-dropdown--below"),this.$dropdown[0].classList.remove("select2-dropdown--above"),this.$dropdown[0].classList.add("select2-dropdown--"+i),this.$container[0].classList.remove("select2-container--below"),this.$container[0].classList.remove("select2-container--above"),this.$container[0].classList.add("select2-container--"+i)),this.$dropdownContainer.css(l)},n.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(e.minWidth=e.width,e.position="relative",e.width="auto"),this.$dropdown.css(e)},n.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},n})),x.define("select2/dropdown/minimumResultsForSearch",[],(function(){function e(e,t,n,s){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,s)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,s=0;s');return t.attr("dir",this.options.get("dir")),this.$container=t,this.$container[0].classList.add("select2-container--"+this.options.get("theme")),n.StoreData(t[0],"element",this.$element),t},i})),x.define("jquery-mousewheel",["jquery"],(function(e){return e})),x.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],(function(e,t,n,s,i){var o;return null==e.fn.select2&&(o=["open","close","destroy"],e.fn.select2=function(t){if("object"==typeof(t=t||{}))return this.each((function(){var s=e.extend(!0,{},t);new n(e(this),s)})),this;if("string"!=typeof t)throw new Error("Invalid arguments for Select2: "+t);var s,r=Array.prototype.slice.call(arguments,1);return this.each((function(){var e=i.GetData(this,"select2");null==e&&window.console&&console.error&&console.error("The select2('"+t+"') method was called on an element that is not using Select2."),s=e[t].apply(e,r)})),-1\":\">\",'\"':\""\",\"'\":\"'\",\"/\":\"/\"};return\"string\"!=typeof e?e:String(e).replace(/[&<>\"'\\/\\\\]/g,function(e){return t[e]})},s.__cache={};var n=0;return s.GetUniqueElementId=function(e){var t=e.getAttribute(\"data-select2-id\");return null!=t||(t=e.id?\"select2-data-\"+e.id:\"select2-data-\"+(++n).toString()+\"-\"+s.generateChars(4),e.setAttribute(\"data-select2-id\",t)),t},s.StoreData=function(e,t,n){e=s.GetUniqueElementId(e);s.__cache[e]||(s.__cache[e]={}),s.__cache[e][t]=n},s.GetData=function(e,t){var n=s.GetUniqueElementId(e);return t?s.__cache[n]&&null!=s.__cache[n][t]?s.__cache[n][t]:r(e).data(t):s.__cache[n]},s.RemoveData=function(e){var t=s.GetUniqueElementId(e);null!=s.__cache[t]&&delete s.__cache[t],e.removeAttribute(\"data-select2-id\")},s.copyNonInternalCssClasses=function(e,t){var n=(n=e.getAttribute(\"class\").trim().split(/\\s+/)).filter(function(e){return 0===e.indexOf(\"select2-\")}),t=(t=t.getAttribute(\"class\").trim().split(/\\s+/)).filter(function(e){return 0!==e.indexOf(\"select2-\")}),t=n.concat(t);e.setAttribute(\"class\",t.join(\" \"))},s}),u.define(\"select2/results\",[\"jquery\",\"./utils\"],function(d,p){function s(e,t,n){this.$element=e,this.data=n,this.options=t,s.__super__.constructor.call(this)}return p.Extend(s,p.Observable),s.prototype.render=function(){var e=d('
        ');return this.options.get(\"multiple\")&&e.attr(\"aria-multiselectable\",\"true\"),this.$results=e},s.prototype.clear=function(){this.$results.empty()},s.prototype.displayMessage=function(e){var t=this.options.get(\"escapeMarkup\");this.clear(),this.hideLoading();var n=d('
      • '),s=this.options.get(\"translations\").get(e.message);n.append(t(s(e.args))),n[0].className+=\" select2-results__message\",this.$results.append(n)},s.prototype.hideMessages=function(){this.$results.find(\".select2-results__message\").remove()},s.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n\",{class:\"select2-results__options select2-results__options--nested\",role:\"none\"});i.append(l),o.append(a),o.append(i)}else this.template(e,t);return p.StoreData(t,\"data\",e),t},s.prototype.bind=function(t,e){var i=this,n=t.id+\"-results\";this.$results.attr(\"id\",n),t.on(\"results:all\",function(e){i.clear(),i.append(e.data),t.isOpen()&&(i.setClasses(),i.highlightFirstItem())}),t.on(\"results:append\",function(e){i.append(e.data),t.isOpen()&&i.setClasses()}),t.on(\"query\",function(e){i.hideMessages(),i.showLoading(e)}),t.on(\"select\",function(){t.isOpen()&&(i.setClasses(),i.options.get(\"scrollAfterSelect\")&&i.highlightFirstItem())}),t.on(\"unselect\",function(){t.isOpen()&&(i.setClasses(),i.options.get(\"scrollAfterSelect\")&&i.highlightFirstItem())}),t.on(\"open\",function(){i.$results.attr(\"aria-expanded\",\"true\"),i.$results.attr(\"aria-hidden\",\"false\"),i.setClasses(),i.ensureHighlightVisible()}),t.on(\"close\",function(){i.$results.attr(\"aria-expanded\",\"false\"),i.$results.attr(\"aria-hidden\",\"true\"),i.$results.removeAttr(\"aria-activedescendant\")}),t.on(\"results:toggle\",function(){var e=i.getHighlightedResults();0!==e.length&&e.trigger(\"mouseup\")}),t.on(\"results:select\",function(){var e,t=i.getHighlightedResults();0!==t.length&&(e=p.GetData(t[0],\"data\"),t.hasClass(\"select2-results__option--selected\")?i.trigger(\"close\",{}):i.trigger(\"select\",{data:e}))}),t.on(\"results:previous\",function(){var e,t=i.getHighlightedResults(),n=i.$results.find(\".select2-results__option--selectable\"),s=n.index(t);s<=0||(e=s-1,0===t.length&&(e=0),(s=n.eq(e)).trigger(\"mouseenter\"),t=i.$results.offset().top,n=s.offset().top,s=i.$results.scrollTop()+(n-t),0===e?i.$results.scrollTop(0):n-t<0&&i.$results.scrollTop(s))}),t.on(\"results:next\",function(){var e,t=i.getHighlightedResults(),n=i.$results.find(\".select2-results__option--selectable\"),s=n.index(t)+1;s>=n.length||((e=n.eq(s)).trigger(\"mouseenter\"),t=i.$results.offset().top+i.$results.outerHeight(!1),n=e.offset().top+e.outerHeight(!1),e=i.$results.scrollTop()+n-t,0===s?i.$results.scrollTop(0):tthis.$results.outerHeight()||s<0)&&this.$results.scrollTop(n))},s.prototype.template=function(e,t){var n=this.options.get(\"templateResult\"),s=this.options.get(\"escapeMarkup\"),e=n(e,t);null==e?t.style.display=\"none\":\"string\"==typeof e?t.innerHTML=s(e):d(t).append(e)},s}),u.define(\"select2/keys\",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),u.define(\"select2/selection/base\",[\"jquery\",\"../utils\",\"../keys\"],function(n,s,i){function r(e,t){this.$element=e,this.options=t,r.__super__.constructor.call(this)}return s.Extend(r,s.Observable),r.prototype.render=function(){var e=n('');return this._tabindex=0,null!=s.GetData(this.$element[0],\"old-tabindex\")?this._tabindex=s.GetData(this.$element[0],\"old-tabindex\"):null!=this.$element.attr(\"tabindex\")&&(this._tabindex=this.$element.attr(\"tabindex\")),e.attr(\"title\",this.$element.attr(\"title\")),e.attr(\"tabindex\",this._tabindex),e.attr(\"aria-disabled\",\"false\"),this.$selection=e},r.prototype.bind=function(e,t){var n=this,s=e.id+\"-results\";this.container=e,this.$selection.on(\"focus\",function(e){n.trigger(\"focus\",e)}),this.$selection.on(\"blur\",function(e){n._handleBlur(e)}),this.$selection.on(\"keydown\",function(e){n.trigger(\"keypress\",e),e.which===i.SPACE&&e.preventDefault()}),e.on(\"results:focus\",function(e){n.$selection.attr(\"aria-activedescendant\",e.data._resultId)}),e.on(\"selection:update\",function(e){n.update(e.data)}),e.on(\"open\",function(){n.$selection.attr(\"aria-expanded\",\"true\"),n.$selection.attr(\"aria-owns\",s),n._attachCloseHandler(e)}),e.on(\"close\",function(){n.$selection.attr(\"aria-expanded\",\"false\"),n.$selection.removeAttr(\"aria-activedescendant\"),n.$selection.removeAttr(\"aria-owns\"),n.$selection.trigger(\"focus\"),n._detachCloseHandler(e)}),e.on(\"enable\",function(){n.$selection.attr(\"tabindex\",n._tabindex),n.$selection.attr(\"aria-disabled\",\"false\")}),e.on(\"disable\",function(){n.$selection.attr(\"tabindex\",\"-1\"),n.$selection.attr(\"aria-disabled\",\"true\")})},r.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger(\"blur\",e)},1)},r.prototype._attachCloseHandler=function(e){n(document.body).on(\"mousedown.select2.\"+e.id,function(e){var t=n(e.target).closest(\".select2\");n(\".select2.select2-container--open\").each(function(){this!=t[0]&&s.GetData(this,\"element\").select2(\"close\")})})},r.prototype._detachCloseHandler=function(e){n(document.body).off(\"mousedown.select2.\"+e.id)},r.prototype.position=function(e,t){t.find(\".selection\").append(e)},r.prototype.destroy=function(){this._detachCloseHandler(this.container)},r.prototype.update=function(e){throw new Error(\"The `update` method must be defined in child classes.\")},r.prototype.isEnabled=function(){return!this.isDisabled()},r.prototype.isDisabled=function(){return this.options.get(\"disabled\")},r}),u.define(\"select2/selection/single\",[\"jquery\",\"./base\",\"../utils\",\"../keys\"],function(e,t,n,s){function i(){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,t),i.prototype.render=function(){var e=i.__super__.render.call(this);return e[0].classList.add(\"select2-selection--single\"),e.html(''),e},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments);var s=t.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",s).attr(\"role\",\"textbox\").attr(\"aria-readonly\",\"true\"),this.$selection.attr(\"aria-labelledby\",s),this.$selection.attr(\"aria-controls\",s),this.$selection.on(\"mousedown\",function(e){1===e.which&&n.trigger(\"toggle\",{originalEvent:e})}),this.$selection.on(\"focus\",function(e){}),this.$selection.on(\"blur\",function(e){}),t.on(\"focus\",function(e){t.isOpen()||n.$selection.trigger(\"focus\")})},i.prototype.clear=function(){var e=this.$selection.find(\".select2-selection__rendered\");e.empty(),e.removeAttr(\"title\")},i.prototype.display=function(e,t){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(e,t))},i.prototype.selectionContainer=function(){return e(\"\")},i.prototype.update=function(e){var t,n;0!==e.length?(n=e[0],t=this.$selection.find(\".select2-selection__rendered\"),e=this.display(n,t),t.empty().append(e),(n=n.title||n.text)?t.attr(\"title\",n):t.removeAttr(\"title\")):this.clear()},i}),u.define(\"select2/selection/multiple\",[\"jquery\",\"./base\",\"../utils\"],function(i,e,c){function r(e,t){r.__super__.constructor.apply(this,arguments)}return c.Extend(r,e),r.prototype.render=function(){var e=r.__super__.render.call(this);return e[0].classList.add(\"select2-selection--multiple\"),e.html('
          '),e},r.prototype.bind=function(e,t){var n=this;r.__super__.bind.apply(this,arguments);var s=e.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",s),this.$selection.on(\"click\",function(e){n.trigger(\"toggle\",{originalEvent:e})}),this.$selection.on(\"click\",\".select2-selection__choice__remove\",function(e){var t;n.isDisabled()||(t=i(this).parent(),t=c.GetData(t[0],\"data\"),n.trigger(\"unselect\",{originalEvent:e,data:t}))}),this.$selection.on(\"keydown\",\".select2-selection__choice__remove\",function(e){n.isDisabled()||e.stopPropagation()})},r.prototype.clear=function(){var e=this.$selection.find(\".select2-selection__rendered\");e.empty(),e.removeAttr(\"title\")},r.prototype.display=function(e,t){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(e,t))},r.prototype.selectionContainer=function(){return i('
        • ')},r.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=this.$selection.find(\".select2-selection__rendered\").attr(\"id\")+\"-choice-\",s=0;s×')).attr(\"title\",s()),e.attr(\"aria-label\",s()),e.attr(\"aria-describedby\",n),a.StoreData(e[0],\"data\",t),this.$selection.prepend(e),this.$selection[0].classList.add(\"select2-selection--clearable\"))},e}),u.define(\"select2/selection/search\",[\"jquery\",\"../utils\",\"../keys\"],function(s,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=this.options.get(\"translations\").get(\"search\"),n=s('');this.$searchContainer=n,this.$search=n.find(\"textarea\"),this.$search.prop(\"autocomplete\",this.options.get(\"autocomplete\")),this.$search.attr(\"aria-label\",t());e=e.call(this);return this._transferTabIndex(),e.append(this.$searchContainer),e},e.prototype.bind=function(e,t,n){var s=this,i=t.id+\"-results\",r=t.id+\"-container\";e.call(this,t,n),s.$search.attr(\"aria-describedby\",r),t.on(\"open\",function(){s.$search.attr(\"aria-controls\",i),s.$search.trigger(\"focus\")}),t.on(\"close\",function(){s.$search.val(\"\"),s.resizeSearch(),s.$search.removeAttr(\"aria-controls\"),s.$search.removeAttr(\"aria-activedescendant\"),s.$search.trigger(\"focus\")}),t.on(\"enable\",function(){s.$search.prop(\"disabled\",!1),s._transferTabIndex()}),t.on(\"disable\",function(){s.$search.prop(\"disabled\",!0)}),t.on(\"focus\",function(e){s.$search.trigger(\"focus\")}),t.on(\"results:focus\",function(e){e.data._resultId?s.$search.attr(\"aria-activedescendant\",e.data._resultId):s.$search.removeAttr(\"aria-activedescendant\")}),this.$selection.on(\"focusin\",\".select2-search--inline\",function(e){s.trigger(\"focus\",e)}),this.$selection.on(\"focusout\",\".select2-search--inline\",function(e){s._handleBlur(e)}),this.$selection.on(\"keydown\",\".select2-search--inline\",function(e){var t;e.stopPropagation(),s.trigger(\"keypress\",e),s._keyUpPrevented=e.isDefaultPrevented(),e.which!==l.BACKSPACE||\"\"!==s.$search.val()||0<(t=s.$selection.find(\".select2-selection__choice\").last()).length&&(t=a.GetData(t[0],\"data\"),s.searchRemoveChoice(t),e.preventDefault())}),this.$selection.on(\"click\",\".select2-search--inline\",function(e){s.$search.val()&&e.stopPropagation()});var t=document.documentMode,o=t&&t<=11;this.$selection.on(\"input.searchcheck\",\".select2-search--inline\",function(e){o?s.$selection.off(\"input.search input.searchcheck\"):s.$selection.off(\"keyup.search\")}),this.$selection.on(\"keyup.search input.search\",\".select2-search--inline\",function(e){var t;o&&\"input\"===e.type?s.$selection.off(\"input.search input.searchcheck\"):(t=e.which)!=l.SHIFT&&t!=l.CTRL&&t!=l.ALT&&t!=l.TAB&&s.handleSearch(e)})},e.prototype._transferTabIndex=function(e){this.$search.attr(\"tabindex\",this.$selection.attr(\"tabindex\")),this.$selection.attr(\"tabindex\",\"-1\")},e.prototype.createPlaceholder=function(e,t){this.$search.attr(\"placeholder\",t.text)},e.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;this.$search.attr(\"placeholder\",\"\"),e.call(this,t),this.resizeSearch(),n&&this.$search.trigger(\"focus\")},e.prototype.handleSearch=function(){var e;this.resizeSearch(),this._keyUpPrevented||(e=this.$search.val(),this.trigger(\"query\",{term:e})),this._keyUpPrevented=!1},e.prototype.searchRemoveChoice=function(e,t){this.trigger(\"unselect\",{data:t}),this.$search.val(t.text),this.handleSearch()},e.prototype.resizeSearch=function(){this.$search.css(\"width\",\"25px\");var e=\"100%\";\"\"===this.$search.attr(\"placeholder\")&&(e=.75*(this.$search.val().length+1)+\"em\"),this.$search.css(\"width\",e)},e}),u.define(\"select2/selection/selectionCss\",[\"../utils\"],function(n){function e(){}return e.prototype.render=function(e){var t=e.call(this),e=this.options.get(\"selectionCssClass\")||\"\";return-1!==e.indexOf(\":all:\")&&(e=e.replace(\":all:\",\"\"),n.copyNonInternalCssClasses(t[0],this.$element[0])),t.addClass(e),t},e}),u.define(\"select2/selection/eventRelay\",[\"jquery\"],function(o){function e(){}return e.prototype.bind=function(e,t,n){var s=this,i=[\"open\",\"opening\",\"close\",\"closing\",\"select\",\"selecting\",\"unselect\",\"unselecting\",\"clear\",\"clearing\"],r=[\"opening\",\"closing\",\"selecting\",\"unselecting\",\"clearing\"];e.call(this,t,n),t.on(\"*\",function(e,t){var n;-1!==i.indexOf(e)&&(t=t||{},n=o.Event(\"select2:\"+e,{params:t}),s.$element.trigger(n),-1!==r.indexOf(e)&&(t.prevented=n.isDefaultPrevented()))})},e}),u.define(\"select2/translation\",[\"jquery\",\"require\"],function(t,n){function s(e){this.dict=e||{}}return s.prototype.all=function(){return this.dict},s.prototype.get=function(e){return this.dict[e]},s.prototype.extend=function(e){this.dict=t.extend({},e.all(),this.dict)},s._cache={},s.loadPath=function(e){var t;return e in s._cache||(t=n(e),s._cache[e]=t),new s(s._cache[e])},s}),u.define(\"select2/diacritics\",[],function(){return{\"Ⓐ\":\"A\",\"A\":\"A\",\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ầ\":\"A\",\"Ấ\":\"A\",\"Ẫ\":\"A\",\"Ẩ\":\"A\",\"Ã\":\"A\",\"Ā\":\"A\",\"Ă\":\"A\",\"Ằ\":\"A\",\"Ắ\":\"A\",\"Ẵ\":\"A\",\"Ẳ\":\"A\",\"Ȧ\":\"A\",\"Ǡ\":\"A\",\"Ä\":\"A\",\"Ǟ\":\"A\",\"Ả\":\"A\",\"Å\":\"A\",\"Ǻ\":\"A\",\"Ǎ\":\"A\",\"Ȁ\":\"A\",\"Ȃ\":\"A\",\"Ạ\":\"A\",\"Ậ\":\"A\",\"Ặ\":\"A\",\"Ḁ\":\"A\",\"Ą\":\"A\",\"Ⱥ\":\"A\",\"Ɐ\":\"A\",\"Ꜳ\":\"AA\",\"Æ\":\"AE\",\"Ǽ\":\"AE\",\"Ǣ\":\"AE\",\"Ꜵ\":\"AO\",\"Ꜷ\":\"AU\",\"Ꜹ\":\"AV\",\"Ꜻ\":\"AV\",\"Ꜽ\":\"AY\",\"Ⓑ\":\"B\",\"B\":\"B\",\"Ḃ\":\"B\",\"Ḅ\":\"B\",\"Ḇ\":\"B\",\"Ƀ\":\"B\",\"Ƃ\":\"B\",\"Ɓ\":\"B\",\"Ⓒ\":\"C\",\"C\":\"C\",\"Ć\":\"C\",\"Ĉ\":\"C\",\"Ċ\":\"C\",\"Č\":\"C\",\"Ç\":\"C\",\"Ḉ\":\"C\",\"Ƈ\":\"C\",\"Ȼ\":\"C\",\"Ꜿ\":\"C\",\"Ⓓ\":\"D\",\"D\":\"D\",\"Ḋ\":\"D\",\"Ď\":\"D\",\"Ḍ\":\"D\",\"Ḑ\":\"D\",\"Ḓ\":\"D\",\"Ḏ\":\"D\",\"Đ\":\"D\",\"Ƌ\":\"D\",\"Ɗ\":\"D\",\"Ɖ\":\"D\",\"Ꝺ\":\"D\",\"DZ\":\"DZ\",\"DŽ\":\"DZ\",\"Dz\":\"Dz\",\"Dž\":\"Dz\",\"Ⓔ\":\"E\",\"E\":\"E\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ề\":\"E\",\"Ế\":\"E\",\"Ễ\":\"E\",\"Ể\":\"E\",\"Ẽ\":\"E\",\"Ē\":\"E\",\"Ḕ\":\"E\",\"Ḗ\":\"E\",\"Ĕ\":\"E\",\"Ė\":\"E\",\"Ë\":\"E\",\"Ẻ\":\"E\",\"Ě\":\"E\",\"Ȅ\":\"E\",\"Ȇ\":\"E\",\"Ẹ\":\"E\",\"Ệ\":\"E\",\"Ȩ\":\"E\",\"Ḝ\":\"E\",\"Ę\":\"E\",\"Ḙ\":\"E\",\"Ḛ\":\"E\",\"Ɛ\":\"E\",\"Ǝ\":\"E\",\"Ⓕ\":\"F\",\"F\":\"F\",\"Ḟ\":\"F\",\"Ƒ\":\"F\",\"Ꝼ\":\"F\",\"Ⓖ\":\"G\",\"G\":\"G\",\"Ǵ\":\"G\",\"Ĝ\":\"G\",\"Ḡ\":\"G\",\"Ğ\":\"G\",\"Ġ\":\"G\",\"Ǧ\":\"G\",\"Ģ\":\"G\",\"Ǥ\":\"G\",\"Ɠ\":\"G\",\"Ꞡ\":\"G\",\"Ᵹ\":\"G\",\"Ꝿ\":\"G\",\"Ⓗ\":\"H\",\"H\":\"H\",\"Ĥ\":\"H\",\"Ḣ\":\"H\",\"Ḧ\":\"H\",\"Ȟ\":\"H\",\"Ḥ\":\"H\",\"Ḩ\":\"H\",\"Ḫ\":\"H\",\"Ħ\":\"H\",\"Ⱨ\":\"H\",\"Ⱶ\":\"H\",\"Ɥ\":\"H\",\"Ⓘ\":\"I\",\"I\":\"I\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ĩ\":\"I\",\"Ī\":\"I\",\"Ĭ\":\"I\",\"İ\":\"I\",\"Ï\":\"I\",\"Ḯ\":\"I\",\"Ỉ\":\"I\",\"Ǐ\":\"I\",\"Ȉ\":\"I\",\"Ȋ\":\"I\",\"Ị\":\"I\",\"Į\":\"I\",\"Ḭ\":\"I\",\"Ɨ\":\"I\",\"Ⓙ\":\"J\",\"J\":\"J\",\"Ĵ\":\"J\",\"Ɉ\":\"J\",\"Ⓚ\":\"K\",\"K\":\"K\",\"Ḱ\":\"K\",\"Ǩ\":\"K\",\"Ḳ\":\"K\",\"Ķ\":\"K\",\"Ḵ\":\"K\",\"Ƙ\":\"K\",\"Ⱪ\":\"K\",\"Ꝁ\":\"K\",\"Ꝃ\":\"K\",\"Ꝅ\":\"K\",\"Ꞣ\":\"K\",\"Ⓛ\":\"L\",\"L\":\"L\",\"Ŀ\":\"L\",\"Ĺ\":\"L\",\"Ľ\":\"L\",\"Ḷ\":\"L\",\"Ḹ\":\"L\",\"Ļ\":\"L\",\"Ḽ\":\"L\",\"Ḻ\":\"L\",\"Ł\":\"L\",\"Ƚ\":\"L\",\"Ɫ\":\"L\",\"Ⱡ\":\"L\",\"Ꝉ\":\"L\",\"Ꝇ\":\"L\",\"Ꞁ\":\"L\",\"LJ\":\"LJ\",\"Lj\":\"Lj\",\"Ⓜ\":\"M\",\"M\":\"M\",\"Ḿ\":\"M\",\"Ṁ\":\"M\",\"Ṃ\":\"M\",\"Ɱ\":\"M\",\"Ɯ\":\"M\",\"Ⓝ\":\"N\",\"N\":\"N\",\"Ǹ\":\"N\",\"Ń\":\"N\",\"Ñ\":\"N\",\"Ṅ\":\"N\",\"Ň\":\"N\",\"Ṇ\":\"N\",\"Ņ\":\"N\",\"Ṋ\":\"N\",\"Ṉ\":\"N\",\"Ƞ\":\"N\",\"Ɲ\":\"N\",\"Ꞑ\":\"N\",\"Ꞥ\":\"N\",\"NJ\":\"NJ\",\"Nj\":\"Nj\",\"Ⓞ\":\"O\",\"O\":\"O\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Ồ\":\"O\",\"Ố\":\"O\",\"Ỗ\":\"O\",\"Ổ\":\"O\",\"Õ\":\"O\",\"Ṍ\":\"O\",\"Ȭ\":\"O\",\"Ṏ\":\"O\",\"Ō\":\"O\",\"Ṑ\":\"O\",\"Ṓ\":\"O\",\"Ŏ\":\"O\",\"Ȯ\":\"O\",\"Ȱ\":\"O\",\"Ö\":\"O\",\"Ȫ\":\"O\",\"Ỏ\":\"O\",\"Ő\":\"O\",\"Ǒ\":\"O\",\"Ȍ\":\"O\",\"Ȏ\":\"O\",\"Ơ\":\"O\",\"Ờ\":\"O\",\"Ớ\":\"O\",\"Ỡ\":\"O\",\"Ở\":\"O\",\"Ợ\":\"O\",\"Ọ\":\"O\",\"Ộ\":\"O\",\"Ǫ\":\"O\",\"Ǭ\":\"O\",\"Ø\":\"O\",\"Ǿ\":\"O\",\"Ɔ\":\"O\",\"Ɵ\":\"O\",\"Ꝋ\":\"O\",\"Ꝍ\":\"O\",\"Œ\":\"OE\",\"Ƣ\":\"OI\",\"Ꝏ\":\"OO\",\"Ȣ\":\"OU\",\"Ⓟ\":\"P\",\"P\":\"P\",\"Ṕ\":\"P\",\"Ṗ\":\"P\",\"Ƥ\":\"P\",\"Ᵽ\":\"P\",\"Ꝑ\":\"P\",\"Ꝓ\":\"P\",\"Ꝕ\":\"P\",\"Ⓠ\":\"Q\",\"Q\":\"Q\",\"Ꝗ\":\"Q\",\"Ꝙ\":\"Q\",\"Ɋ\":\"Q\",\"Ⓡ\":\"R\",\"R\":\"R\",\"Ŕ\":\"R\",\"Ṙ\":\"R\",\"Ř\":\"R\",\"Ȑ\":\"R\",\"Ȓ\":\"R\",\"Ṛ\":\"R\",\"Ṝ\":\"R\",\"Ŗ\":\"R\",\"Ṟ\":\"R\",\"Ɍ\":\"R\",\"Ɽ\":\"R\",\"Ꝛ\":\"R\",\"Ꞧ\":\"R\",\"Ꞃ\":\"R\",\"Ⓢ\":\"S\",\"S\":\"S\",\"ẞ\":\"S\",\"Ś\":\"S\",\"Ṥ\":\"S\",\"Ŝ\":\"S\",\"Ṡ\":\"S\",\"Š\":\"S\",\"Ṧ\":\"S\",\"Ṣ\":\"S\",\"Ṩ\":\"S\",\"Ș\":\"S\",\"Ş\":\"S\",\"Ȿ\":\"S\",\"Ꞩ\":\"S\",\"Ꞅ\":\"S\",\"Ⓣ\":\"T\",\"T\":\"T\",\"Ṫ\":\"T\",\"Ť\":\"T\",\"Ṭ\":\"T\",\"Ț\":\"T\",\"Ţ\":\"T\",\"Ṱ\":\"T\",\"Ṯ\":\"T\",\"Ŧ\":\"T\",\"Ƭ\":\"T\",\"Ʈ\":\"T\",\"Ⱦ\":\"T\",\"Ꞇ\":\"T\",\"Ꜩ\":\"TZ\",\"Ⓤ\":\"U\",\"U\":\"U\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ũ\":\"U\",\"Ṹ\":\"U\",\"Ū\":\"U\",\"Ṻ\":\"U\",\"Ŭ\":\"U\",\"Ü\":\"U\",\"Ǜ\":\"U\",\"Ǘ\":\"U\",\"Ǖ\":\"U\",\"Ǚ\":\"U\",\"Ủ\":\"U\",\"Ů\":\"U\",\"Ű\":\"U\",\"Ǔ\":\"U\",\"Ȕ\":\"U\",\"Ȗ\":\"U\",\"Ư\":\"U\",\"Ừ\":\"U\",\"Ứ\":\"U\",\"Ữ\":\"U\",\"Ử\":\"U\",\"Ự\":\"U\",\"Ụ\":\"U\",\"Ṳ\":\"U\",\"Ų\":\"U\",\"Ṷ\":\"U\",\"Ṵ\":\"U\",\"Ʉ\":\"U\",\"Ⓥ\":\"V\",\"V\":\"V\",\"Ṽ\":\"V\",\"Ṿ\":\"V\",\"Ʋ\":\"V\",\"Ꝟ\":\"V\",\"Ʌ\":\"V\",\"Ꝡ\":\"VY\",\"Ⓦ\":\"W\",\"W\":\"W\",\"Ẁ\":\"W\",\"Ẃ\":\"W\",\"Ŵ\":\"W\",\"Ẇ\":\"W\",\"Ẅ\":\"W\",\"Ẉ\":\"W\",\"Ⱳ\":\"W\",\"Ⓧ\":\"X\",\"X\":\"X\",\"Ẋ\":\"X\",\"Ẍ\":\"X\",\"Ⓨ\":\"Y\",\"Y\":\"Y\",\"Ỳ\":\"Y\",\"Ý\":\"Y\",\"Ŷ\":\"Y\",\"Ỹ\":\"Y\",\"Ȳ\":\"Y\",\"Ẏ\":\"Y\",\"Ÿ\":\"Y\",\"Ỷ\":\"Y\",\"Ỵ\":\"Y\",\"Ƴ\":\"Y\",\"Ɏ\":\"Y\",\"Ỿ\":\"Y\",\"Ⓩ\":\"Z\",\"Z\":\"Z\",\"Ź\":\"Z\",\"Ẑ\":\"Z\",\"Ż\":\"Z\",\"Ž\":\"Z\",\"Ẓ\":\"Z\",\"Ẕ\":\"Z\",\"Ƶ\":\"Z\",\"Ȥ\":\"Z\",\"Ɀ\":\"Z\",\"Ⱬ\":\"Z\",\"Ꝣ\":\"Z\",\"ⓐ\":\"a\",\"a\":\"a\",\"ẚ\":\"a\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ầ\":\"a\",\"ấ\":\"a\",\"ẫ\":\"a\",\"ẩ\":\"a\",\"ã\":\"a\",\"ā\":\"a\",\"ă\":\"a\",\"ằ\":\"a\",\"ắ\":\"a\",\"ẵ\":\"a\",\"ẳ\":\"a\",\"ȧ\":\"a\",\"ǡ\":\"a\",\"ä\":\"a\",\"ǟ\":\"a\",\"ả\":\"a\",\"å\":\"a\",\"ǻ\":\"a\",\"ǎ\":\"a\",\"ȁ\":\"a\",\"ȃ\":\"a\",\"ạ\":\"a\",\"ậ\":\"a\",\"ặ\":\"a\",\"ḁ\":\"a\",\"ą\":\"a\",\"ⱥ\":\"a\",\"ɐ\":\"a\",\"ꜳ\":\"aa\",\"æ\":\"ae\",\"ǽ\":\"ae\",\"ǣ\":\"ae\",\"ꜵ\":\"ao\",\"ꜷ\":\"au\",\"ꜹ\":\"av\",\"ꜻ\":\"av\",\"ꜽ\":\"ay\",\"ⓑ\":\"b\",\"b\":\"b\",\"ḃ\":\"b\",\"ḅ\":\"b\",\"ḇ\":\"b\",\"ƀ\":\"b\",\"ƃ\":\"b\",\"ɓ\":\"b\",\"ⓒ\":\"c\",\"c\":\"c\",\"ć\":\"c\",\"ĉ\":\"c\",\"ċ\":\"c\",\"č\":\"c\",\"ç\":\"c\",\"ḉ\":\"c\",\"ƈ\":\"c\",\"ȼ\":\"c\",\"ꜿ\":\"c\",\"ↄ\":\"c\",\"ⓓ\":\"d\",\"d\":\"d\",\"ḋ\":\"d\",\"ď\":\"d\",\"ḍ\":\"d\",\"ḑ\":\"d\",\"ḓ\":\"d\",\"ḏ\":\"d\",\"đ\":\"d\",\"ƌ\":\"d\",\"ɖ\":\"d\",\"ɗ\":\"d\",\"ꝺ\":\"d\",\"dz\":\"dz\",\"dž\":\"dz\",\"ⓔ\":\"e\",\"e\":\"e\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ề\":\"e\",\"ế\":\"e\",\"ễ\":\"e\",\"ể\":\"e\",\"ẽ\":\"e\",\"ē\":\"e\",\"ḕ\":\"e\",\"ḗ\":\"e\",\"ĕ\":\"e\",\"ė\":\"e\",\"ë\":\"e\",\"ẻ\":\"e\",\"ě\":\"e\",\"ȅ\":\"e\",\"ȇ\":\"e\",\"ẹ\":\"e\",\"ệ\":\"e\",\"ȩ\":\"e\",\"ḝ\":\"e\",\"ę\":\"e\",\"ḙ\":\"e\",\"ḛ\":\"e\",\"ɇ\":\"e\",\"ɛ\":\"e\",\"ǝ\":\"e\",\"ⓕ\":\"f\",\"f\":\"f\",\"ḟ\":\"f\",\"ƒ\":\"f\",\"ꝼ\":\"f\",\"ⓖ\":\"g\",\"g\":\"g\",\"ǵ\":\"g\",\"ĝ\":\"g\",\"ḡ\":\"g\",\"ğ\":\"g\",\"ġ\":\"g\",\"ǧ\":\"g\",\"ģ\":\"g\",\"ǥ\":\"g\",\"ɠ\":\"g\",\"ꞡ\":\"g\",\"ᵹ\":\"g\",\"ꝿ\":\"g\",\"ⓗ\":\"h\",\"h\":\"h\",\"ĥ\":\"h\",\"ḣ\":\"h\",\"ḧ\":\"h\",\"ȟ\":\"h\",\"ḥ\":\"h\",\"ḩ\":\"h\",\"ḫ\":\"h\",\"ẖ\":\"h\",\"ħ\":\"h\",\"ⱨ\":\"h\",\"ⱶ\":\"h\",\"ɥ\":\"h\",\"ƕ\":\"hv\",\"ⓘ\":\"i\",\"i\":\"i\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ĩ\":\"i\",\"ī\":\"i\",\"ĭ\":\"i\",\"ï\":\"i\",\"ḯ\":\"i\",\"ỉ\":\"i\",\"ǐ\":\"i\",\"ȉ\":\"i\",\"ȋ\":\"i\",\"ị\":\"i\",\"į\":\"i\",\"ḭ\":\"i\",\"ɨ\":\"i\",\"ı\":\"i\",\"ⓙ\":\"j\",\"j\":\"j\",\"ĵ\":\"j\",\"ǰ\":\"j\",\"ɉ\":\"j\",\"ⓚ\":\"k\",\"k\":\"k\",\"ḱ\":\"k\",\"ǩ\":\"k\",\"ḳ\":\"k\",\"ķ\":\"k\",\"ḵ\":\"k\",\"ƙ\":\"k\",\"ⱪ\":\"k\",\"ꝁ\":\"k\",\"ꝃ\":\"k\",\"ꝅ\":\"k\",\"ꞣ\":\"k\",\"ⓛ\":\"l\",\"l\":\"l\",\"ŀ\":\"l\",\"ĺ\":\"l\",\"ľ\":\"l\",\"ḷ\":\"l\",\"ḹ\":\"l\",\"ļ\":\"l\",\"ḽ\":\"l\",\"ḻ\":\"l\",\"ſ\":\"l\",\"ł\":\"l\",\"ƚ\":\"l\",\"ɫ\":\"l\",\"ⱡ\":\"l\",\"ꝉ\":\"l\",\"ꞁ\":\"l\",\"ꝇ\":\"l\",\"lj\":\"lj\",\"ⓜ\":\"m\",\"m\":\"m\",\"ḿ\":\"m\",\"ṁ\":\"m\",\"ṃ\":\"m\",\"ɱ\":\"m\",\"ɯ\":\"m\",\"ⓝ\":\"n\",\"n\":\"n\",\"ǹ\":\"n\",\"ń\":\"n\",\"ñ\":\"n\",\"ṅ\":\"n\",\"ň\":\"n\",\"ṇ\":\"n\",\"ņ\":\"n\",\"ṋ\":\"n\",\"ṉ\":\"n\",\"ƞ\":\"n\",\"ɲ\":\"n\",\"ʼn\":\"n\",\"ꞑ\":\"n\",\"ꞥ\":\"n\",\"nj\":\"nj\",\"ⓞ\":\"o\",\"o\":\"o\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"ồ\":\"o\",\"ố\":\"o\",\"ỗ\":\"o\",\"ổ\":\"o\",\"õ\":\"o\",\"ṍ\":\"o\",\"ȭ\":\"o\",\"ṏ\":\"o\",\"ō\":\"o\",\"ṑ\":\"o\",\"ṓ\":\"o\",\"ŏ\":\"o\",\"ȯ\":\"o\",\"ȱ\":\"o\",\"ö\":\"o\",\"ȫ\":\"o\",\"ỏ\":\"o\",\"ő\":\"o\",\"ǒ\":\"o\",\"ȍ\":\"o\",\"ȏ\":\"o\",\"ơ\":\"o\",\"ờ\":\"o\",\"ớ\":\"o\",\"ỡ\":\"o\",\"ở\":\"o\",\"ợ\":\"o\",\"ọ\":\"o\",\"ộ\":\"o\",\"ǫ\":\"o\",\"ǭ\":\"o\",\"ø\":\"o\",\"ǿ\":\"o\",\"ɔ\":\"o\",\"ꝋ\":\"o\",\"ꝍ\":\"o\",\"ɵ\":\"o\",\"œ\":\"oe\",\"ƣ\":\"oi\",\"ȣ\":\"ou\",\"ꝏ\":\"oo\",\"ⓟ\":\"p\",\"p\":\"p\",\"ṕ\":\"p\",\"ṗ\":\"p\",\"ƥ\":\"p\",\"ᵽ\":\"p\",\"ꝑ\":\"p\",\"ꝓ\":\"p\",\"ꝕ\":\"p\",\"ⓠ\":\"q\",\"q\":\"q\",\"ɋ\":\"q\",\"ꝗ\":\"q\",\"ꝙ\":\"q\",\"ⓡ\":\"r\",\"r\":\"r\",\"ŕ\":\"r\",\"ṙ\":\"r\",\"ř\":\"r\",\"ȑ\":\"r\",\"ȓ\":\"r\",\"ṛ\":\"r\",\"ṝ\":\"r\",\"ŗ\":\"r\",\"ṟ\":\"r\",\"ɍ\":\"r\",\"ɽ\":\"r\",\"ꝛ\":\"r\",\"ꞧ\":\"r\",\"ꞃ\":\"r\",\"ⓢ\":\"s\",\"s\":\"s\",\"ß\":\"s\",\"ś\":\"s\",\"ṥ\":\"s\",\"ŝ\":\"s\",\"ṡ\":\"s\",\"š\":\"s\",\"ṧ\":\"s\",\"ṣ\":\"s\",\"ṩ\":\"s\",\"ș\":\"s\",\"ş\":\"s\",\"ȿ\":\"s\",\"ꞩ\":\"s\",\"ꞅ\":\"s\",\"ẛ\":\"s\",\"ⓣ\":\"t\",\"t\":\"t\",\"ṫ\":\"t\",\"ẗ\":\"t\",\"ť\":\"t\",\"ṭ\":\"t\",\"ț\":\"t\",\"ţ\":\"t\",\"ṱ\":\"t\",\"ṯ\":\"t\",\"ŧ\":\"t\",\"ƭ\":\"t\",\"ʈ\":\"t\",\"ⱦ\":\"t\",\"ꞇ\":\"t\",\"ꜩ\":\"tz\",\"ⓤ\":\"u\",\"u\":\"u\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ũ\":\"u\",\"ṹ\":\"u\",\"ū\":\"u\",\"ṻ\":\"u\",\"ŭ\":\"u\",\"ü\":\"u\",\"ǜ\":\"u\",\"ǘ\":\"u\",\"ǖ\":\"u\",\"ǚ\":\"u\",\"ủ\":\"u\",\"ů\":\"u\",\"ű\":\"u\",\"ǔ\":\"u\",\"ȕ\":\"u\",\"ȗ\":\"u\",\"ư\":\"u\",\"ừ\":\"u\",\"ứ\":\"u\",\"ữ\":\"u\",\"ử\":\"u\",\"ự\":\"u\",\"ụ\":\"u\",\"ṳ\":\"u\",\"ų\":\"u\",\"ṷ\":\"u\",\"ṵ\":\"u\",\"ʉ\":\"u\",\"ⓥ\":\"v\",\"v\":\"v\",\"ṽ\":\"v\",\"ṿ\":\"v\",\"ʋ\":\"v\",\"ꝟ\":\"v\",\"ʌ\":\"v\",\"ꝡ\":\"vy\",\"ⓦ\":\"w\",\"w\":\"w\",\"ẁ\":\"w\",\"ẃ\":\"w\",\"ŵ\":\"w\",\"ẇ\":\"w\",\"ẅ\":\"w\",\"ẘ\":\"w\",\"ẉ\":\"w\",\"ⱳ\":\"w\",\"ⓧ\":\"x\",\"x\":\"x\",\"ẋ\":\"x\",\"ẍ\":\"x\",\"ⓨ\":\"y\",\"y\":\"y\",\"ỳ\":\"y\",\"ý\":\"y\",\"ŷ\":\"y\",\"ỹ\":\"y\",\"ȳ\":\"y\",\"ẏ\":\"y\",\"ÿ\":\"y\",\"ỷ\":\"y\",\"ẙ\":\"y\",\"ỵ\":\"y\",\"ƴ\":\"y\",\"ɏ\":\"y\",\"ỿ\":\"y\",\"ⓩ\":\"z\",\"z\":\"z\",\"ź\":\"z\",\"ẑ\":\"z\",\"ż\":\"z\",\"ž\":\"z\",\"ẓ\":\"z\",\"ẕ\":\"z\",\"ƶ\":\"z\",\"ȥ\":\"z\",\"ɀ\":\"z\",\"ⱬ\":\"z\",\"ꝣ\":\"z\",\"Ά\":\"Α\",\"Έ\":\"Ε\",\"Ή\":\"Η\",\"Ί\":\"Ι\",\"Ϊ\":\"Ι\",\"Ό\":\"Ο\",\"Ύ\":\"Υ\",\"Ϋ\":\"Υ\",\"Ώ\":\"Ω\",\"ά\":\"α\",\"έ\":\"ε\",\"ή\":\"η\",\"ί\":\"ι\",\"ϊ\":\"ι\",\"ΐ\":\"ι\",\"ό\":\"ο\",\"ύ\":\"υ\",\"ϋ\":\"υ\",\"ΰ\":\"υ\",\"ώ\":\"ω\",\"ς\":\"σ\",\"’\":\"'\"}}),u.define(\"select2/data/base\",[\"../utils\"],function(n){function s(e,t){s.__super__.constructor.call(this)}return n.Extend(s,n.Observable),s.prototype.current=function(e){throw new Error(\"The `current` method must be defined in child classes.\")},s.prototype.query=function(e,t){throw new Error(\"The `query` method must be defined in child classes.\")},s.prototype.bind=function(e,t){},s.prototype.destroy=function(){},s.prototype.generateResultId=function(e,t){e=e.id+\"-result-\";return e+=n.generateChars(4),null!=t.id?e+=\"-\"+t.id.toString():e+=\"-\"+n.generateChars(4),e},s}),u.define(\"select2/data/select\",[\"./base\",\"../utils\",\"jquery\"],function(e,a,l){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return a.Extend(n,e),n.prototype.current=function(e){var t=this;e(Array.prototype.map.call(this.$element[0].querySelectorAll(\":checked\"),function(e){return t.item(l(e))}))},n.prototype.select=function(i){var e,r=this;if(i.selected=!0,null!=i.element&&\"option\"===i.element.tagName.toLowerCase())return i.element.selected=!0,void this.$element.trigger(\"input\").trigger(\"change\");this.$element.prop(\"multiple\")?this.current(function(e){var t=[];(i=[i]).push.apply(i,e);for(var n=0;nthis.maximumInputLength?this.trigger(\"results:message\",{message:\"inputTooLong\",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),u.define(\"select2/data/maximumSelectionLength\",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get(\"maximumSelectionLength\"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on(\"select\",function(){s._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var s=this;this._checkIfMaximumSelected(function(){e.call(s,t,n)})},e.prototype._checkIfMaximumSelected=function(e,t){var n=this;this.current(function(e){e=null!=e?e.length:0;0=n.maximumSelectionLength?n.trigger(\"results:message\",{message:\"maximumSelected\",args:{maximum:n.maximumSelectionLength}}):t&&t()})},e}),u.define(\"select2/dropdown\",[\"jquery\",\"./utils\"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('');return e.attr(\"dir\",this.options.get(\"dir\")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),u.define(\"select2/dropdown/search\",[\"jquery\"],function(r){function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get(\"translations\").get(\"search\"),e=r('');return this.$searchContainer=e,this.$search=e.find(\"input\"),this.$search.prop(\"autocomplete\",this.options.get(\"autocomplete\")),this.$search.attr(\"aria-label\",n()),t.prepend(e),t},e.prototype.bind=function(e,t,n){var s=this,i=t.id+\"-results\";e.call(this,t,n),this.$search.on(\"keydown\",function(e){s.trigger(\"keypress\",e),s._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on(\"input\",function(e){r(this).off(\"keyup\")}),this.$search.on(\"keyup input\",function(e){s.handleSearch(e)}),t.on(\"open\",function(){s.$search.attr(\"tabindex\",0),s.$search.attr(\"aria-controls\",i),s.$search.trigger(\"focus\"),window.setTimeout(function(){s.$search.trigger(\"focus\")},0)}),t.on(\"close\",function(){s.$search.attr(\"tabindex\",-1),s.$search.removeAttr(\"aria-controls\"),s.$search.removeAttr(\"aria-activedescendant\"),s.$search.val(\"\"),s.$search.trigger(\"blur\")}),t.on(\"focus\",function(){t.isOpen()||s.$search.trigger(\"focus\")}),t.on(\"results:all\",function(e){null!=e.query.term&&\"\"!==e.query.term||(s.showSearch(e)?s.$searchContainer[0].classList.remove(\"select2-search--hide\"):s.$searchContainer[0].classList.add(\"select2-search--hide\"))}),t.on(\"results:focus\",function(e){e.data._resultId?s.$search.attr(\"aria-activedescendant\",e.data._resultId):s.$search.removeAttr(\"aria-activedescendant\")})},e.prototype.handleSearch=function(e){var t;this._keyUpPrevented||(t=this.$search.val(),this.trigger(\"query\",{term:t})),this._keyUpPrevented=!1},e.prototype.showSearch=function(e,t){return!0},e}),u.define(\"select2/dropdown/hidePlaceholder\",[],function(){function e(e,t,n,s){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),e.call(this,t,n,s)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return t=\"string\"==typeof t?{id:\"\",text:t}:t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),s=t.length-1;0<=s;s--){var i=t[s];this.placeholder.id===i.id&&n.splice(s,1)}return n},e}),u.define(\"select2/dropdown/infiniteScroll\",[\"jquery\"],function(n){function e(e,t,n,s){this.lastParams={},e.call(this,t,n,s),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on(\"query\",function(e){s.lastParams=e,s.loading=!0}),t.on(\"query:append\",function(e){s.lastParams=e,s.loading=!0}),this.$results.on(\"scroll\",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);!this.loading&&e&&(e=this.$results.offset().top+this.$results.outerHeight(!1),this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=e+50&&this.loadMore())},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger(\"query:append\",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n('
        • '),t=this.options.get(\"translations\").get(\"loadingMore\");return e.html(t(this.lastParams)),e},e}),u.define(\"select2/dropdown/attachBody\",[\"jquery\",\"../utils\"],function(u,o){function e(e,t,n){this.$dropdownParent=u(n.get(\"dropdownParent\")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on(\"open\",function(){s._showDropdown(),s._attachPositioningHandler(t),s._bindContainerResultHandlers(t)}),t.on(\"close\",function(){s._hideDropdown(),s._detachPositioningHandler(t)}),this.$dropdownContainer.on(\"mousedown\",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr(\"class\",n.attr(\"class\")),t[0].classList.remove(\"select2\"),t[0].classList.add(\"select2-container--open\"),t.css({position:\"absolute\",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=u(\"\"),e=e.call(this);return t.append(e),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){var n;this._containerResultsHandlersBound||(n=this,t.on(\"results:all\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"results:append\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"results:message\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"select\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"unselect\",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0)},e.prototype._attachPositioningHandler=function(e,t){var n=this,s=\"scroll.select2.\"+t.id,i=\"resize.select2.\"+t.id,r=\"orientationchange.select2.\"+t.id,t=this.$container.parents().filter(o.hasScroll);t.each(function(){o.StoreData(this,\"select2-scroll-position\",{x:u(this).scrollLeft(),y:u(this).scrollTop()})}),t.on(s,function(e){var t=o.GetData(this,\"select2-scroll-position\");u(this).scrollTop(t.y)}),u(window).on(s+\" \"+i+\" \"+r,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n=\"scroll.select2.\"+t.id,s=\"resize.select2.\"+t.id,t=\"orientationchange.select2.\"+t.id;this.$container.parents().filter(o.hasScroll).off(n),u(window).off(n+\" \"+s+\" \"+t)},e.prototype._positionDropdown=function(){var e=u(window),t=this.$dropdown[0].classList.contains(\"select2-dropdown--above\"),n=this.$dropdown[0].classList.contains(\"select2-dropdown--below\"),s=null,i=this.$container.offset();i.bottom=i.top+this.$container.outerHeight(!1);var r={height:this.$container.outerHeight(!1)};r.top=i.top,r.bottom=i.top+r.height;var o=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=ai.bottom+o,a={left:i.left,top:r.bottom},l=this.$dropdownParent;\"static\"===l.css(\"position\")&&(l=l.offsetParent());i={top:0,left:0};(u.contains(document.body,l[0])||l[0].isConnected)&&(i=l.offset()),a.top-=i.top,a.left-=i.left,t||n||(s=\"below\"),e||!c||t?!c&&e&&t&&(s=\"below\"):s=\"above\",(\"above\"==s||t&&\"below\"!==s)&&(a.top=r.top-i.top-o),null!=s&&(this.$dropdown[0].classList.remove(\"select2-dropdown--below\"),this.$dropdown[0].classList.remove(\"select2-dropdown--above\"),this.$dropdown[0].classList.add(\"select2-dropdown--\"+s),this.$container[0].classList.remove(\"select2-container--below\"),this.$container[0].classList.remove(\"select2-container--above\"),this.$container[0].classList.add(\"select2-container--\"+s)),this.$dropdownContainer.css(a)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+\"px\"};this.options.get(\"dropdownAutoWidth\")&&(e.minWidth=e.width,e.position=\"relative\",e.width=\"auto\"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),u.define(\"select2/dropdown/minimumResultsForSearch\",[],function(){function e(e,t,n,s){this.minimumResultsForSearch=n.get(\"minimumResultsForSearch\"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,s)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,s=0;s');return e.attr(\"dir\",this.options.get(\"dir\")),this.$container=e,this.$container[0].classList.add(\"select2-container--\"+this.options.get(\"theme\")),r.StoreData(e[0],\"element\",this.$element),e},o}),u.define(\"jquery-mousewheel\",[\"jquery\"],function(e){return e}),u.define(\"jquery.select2\",[\"jquery\",\"jquery-mousewheel\",\"./select2/core\",\"./select2/defaults\",\"./select2/utils\"],function(i,e,r,t,o){var a;return null==i.fn.select2&&(a=[\"open\",\"close\",\"destroy\"],i.fn.select2=function(t){if(\"object\"==typeof(t=t||{}))return this.each(function(){var e=i.extend(!0,{},t);new r(i(this),e)}),this;if(\"string\"!=typeof t)throw new Error(\"Invalid arguments for Select2: \"+t);var n,s=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=o.GetData(this,\"select2\");null==e&&window.console&&console.error&&console.error(\"The select2('\"+t+\"') method was called on an element that is not using Select2.\"),n=e[t].apply(e,s)}),-12),v=/Android/.test(e),y=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),b=g||/Mac/.test(t),x=/\bCrOS\b/.test(e),w=/win/i.test(t),_=f&&e.match(/Version\/(\d*\.\d*)/);_&&(_=Number(_[1])),_&&_>=15&&(f=!1,l=!0);var k=b&&(c||f&&(null==_||_<12.11)),C=r||a&&s>=9;function S(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var L,T=function(e,t){var r=e.className,n=S(t).exec(r);if(n){var i=r.slice(n.index+n[0].length);e.className=r.slice(0,n.index)+(i?n[1]+i:"")}};function M(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function N(e,t){return M(e).appendChild(t)}function z(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o=t)return a+(t-o);a+=s-o,a+=r-a%r,o=s+1}}g?I=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:a&&(I=function(e){try{e.select()}catch(e){}});var j=function(){this.id=null,this.f=null,this.time=0,this.handler=R(this.onTimeout,this)};function B(e,t){for(var r=0;r=t)return n+Math.min(a,t-i);if(i+=o-n,n=o+1,(i+=r-i%r)>=t)return n}}var X=[""];function Y(e){for(;X.length<=e;)X.push(Q(X)+" ");return X[e]}function Q(e){return e[e.length-1]}function Z(e,t){for(var r=[],n=0;n"€"&&(e.toUpperCase()!=e.toLowerCase()||te.test(e))}function ne(e,t){return t?!!(t.source.indexOf("\\w")>-1&&re(e))||t.test(e):re(e)}function ie(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var oe=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ae(e){return e.charCodeAt(0)>=768&&oe.test(e)}function se(e,t,r){for(;(r<0?t>0:tr?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}var ce=null;function ue(e,t,r){var n;ce=null;for(var i=0;it)return i;o.to==t&&(o.from!=o.to&&"before"==r?n=i:ce=i),o.from==t&&(o.from!=o.to&&"before"!=r?n=i:ce=i)}return null!=n?n:ce}var de=function(){var e=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,t=/[stwN]/,r=/[LRr]/,n=/[Lb1n]/,i=/[1n]/;function o(e,t,r){this.level=e,this.from=t,this.to=r}return function(a,s){var l,c="ltr"==s?"L":"R";if(0==a.length||"ltr"==s&&!e.test(a))return!1;for(var u=a.length,d=[],f=0;f-1&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function ve(e,t){var r=me(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i0}function we(e){e.prototype.on=function(e,t){he(this,e,t)},e.prototype.off=function(e,t){ge(this,e,t)}}function _e(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function ke(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Ce(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Se(e){_e(e),ke(e)}function Le(e){return e.target||e.srcElement}function Te(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),b&&e.ctrlKey&&1==t&&(t=3),t}var Me,Ne,ze=function(){if(a&&s<9)return!1;var e=z("div");return"draggable"in e||"dragDrop"in e}();function Oe(e){if(null==Me){var t=z("span","​");N(e,z("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Me=t.offsetWidth<=1&&t.offsetHeight>2&&!(a&&s<8))}var r=Me?z("span","​"):z("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return r.setAttribute("cm-text",""),r}function Ae(e){if(null!=Ne)return Ne;var t=N(e,document.createTextNode("AخA")),r=L(t,0,1).getBoundingClientRect(),n=L(t,1,2).getBoundingClientRect();return M(e),!(!r||r.left==r.right)&&(Ne=n.right-r.right<3)}var De,Ee=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,r=[],n=e.length;t<=n;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),a=o.indexOf("\r");-1!=a?(r.push(o.slice(0,a)),t+=a+1):(r.push(o),t=i+1)}return r}:function(e){return e.split(/\r\n?|\n/)},Fe=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Ie="oncopy"in(De=z("div"))||(De.setAttribute("oncopy","return;"),"function"==typeof De.oncopy),We=null;var Pe={},Re={};function He(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Pe[e]=t}function qe(e){if("string"==typeof e&&Re.hasOwnProperty(e))e=Re[e];else if(e&&"string"==typeof e.name&&Re.hasOwnProperty(e.name)){var t=Re[e.name];"string"==typeof t&&(t={name:t}),(e=ee(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return qe("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return qe("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function je(e,t){t=qe(t);var r=Pe[t.name];if(!r)return je(e,"text/plain");var n=r(e,t);if(Be.hasOwnProperty(t.name)){var i=Be[t.name];for(var o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n["_"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var a in t.modeProps)n[a]=t.modeProps[a];return n}var Be={};function Ue(e,t){H(t,Be.hasOwnProperty(e)?Be[e]:Be[e]={})}function Ve(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function $e(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function Ge(e,t,r){return!e.startState||e.startState(t,r)}var Ke=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};function Xe(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t=e.first&&tr?nt(r,Xe(e,r).text.length):function(e,t){var r=e.ch;return null==r||r>t?nt(e.line,t):r<0?nt(e.line,0):e}(t,Xe(e,t.line).text.length)}function dt(e,t){for(var r=[],n=0;n=this.string.length},Ke.prototype.sol=function(){return this.pos==this.lineStart},Ke.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Ke.prototype.next=function(){if(this.post},Ke.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Ke.prototype.skipToEnd=function(){this.pos=this.string.length},Ke.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Ke.prototype.backUp=function(e){this.pos-=e},Ke.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},Ke.prototype.current=function(){return this.string.slice(this.start,this.pos)},Ke.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Ke.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Ke.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var ft=function(e,t){this.state=e,this.lookAhead=t},pt=function(e,t,r,n){this.state=t,this.doc=e,this.line=r,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function ht(e,t,r,n){var i=[e.state.modeGen],o={};kt(e,t.text,e.doc.mode,r,(function(e,t){return i.push(e,t)}),o,n);for(var a=r.state,s=function(n){r.baseTokens=i;var s=e.state.overlays[n],l=1,c=0;r.state=!0,kt(e,t.text,s.mode,r,(function(e,t){for(var r=l;ce&&i.splice(l,1,e,i[l+1],n),l+=2,c=Math.min(e,n)}if(t)if(s.opaque)i.splice(r,l-r,e,"overlay "+t),l=r+2;else for(;re.options.maxHighlightLength&&Ve(e.doc.mode,n.state),o=ht(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function gt(e,t,r){var n=e.doc,i=e.display;if(!n.mode.startState)return new pt(n,!0,t);var o=function(e,t,r){for(var n,i,o=e.doc,a=r?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>a;--s){if(s<=o.first)return o.first;var l=Xe(o,s-1),c=l.stateAfter;if(c&&(!r||s+(c instanceof ft?c.lookAhead:0)<=o.modeFrontier))return s;var u=q(l.text,null,e.options.tabSize);(null==i||n>u)&&(i=s-1,n=u)}return i}(e,t,r),a=o>n.first&&Xe(n,o-1).stateAfter,s=a?pt.fromSaved(n,a,o):new pt(n,Ge(n.mode),o);return n.iter(o,t,(function(r){vt(e,r.text,s);var n=s.line;r.stateAfter=n==t-1||n%5==0||n>=i.viewFrom&&nt.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}pt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},pt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},pt.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},pt.fromSaved=function(e,t,r){return t instanceof ft?new pt(e,Ve(e.mode,t.state),r,t.lookAhead):new pt(e,Ve(e.mode,t),r)},pt.prototype.save=function(e){var t=!1!==e?Ve(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ft(t,this.maxLookAhead):t};var xt=function(e,t,r){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=r};function wt(e,t,r,n){var i,o,a=e.doc,s=a.mode,l=Xe(a,(t=ut(a,t)).line),c=gt(e,t.line,r),u=new Ke(l.text,e.options.tabSize,c);for(n&&(o=[]);(n||u.pose.options.maxHighlightLength?(s=!1,a&&vt(e,t,n,d.pos),d.pos=t.length,l=null):l=_t(bt(r,d,n.state,f),o),f){var p=f[0].name;p&&(l="m-"+(l?p+" "+l:p))}if(!s||u!=l){for(;c=t:o.to>t);(n||(n=[])).push(new Lt(a,o.from,s?null:o.to))}}return n}(r,i,a),l=function(e,t,r){var n;if(e)for(var i=0;i=t:o.to>t)||o.from==t&&"bookmark"==a.type&&(!r||o.marker.insertLeft)){var s=null==o.from||(a.inclusiveLeft?o.from<=t:o.from0&&s)for(var b=0;bt)&&(!r||Ft(r,o.marker)<0)&&(r=o.marker)}return r}function Ht(e,t,r,n,i){var o=Xe(e,t),a=St&&o.markedSpans;if(a)for(var s=0;s=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(l.marker.inclusiveRight&&i.inclusiveLeft?it(c.to,r)>=0:it(c.to,r)>0)||u>=0&&(l.marker.inclusiveRight&&i.inclusiveLeft?it(c.from,n)<=0:it(c.from,n)<0)))return!0}}}function qt(e){for(var t;t=Wt(e);)e=t.find(-1,!0).line;return e}function jt(e,t){var r=Xe(e,t),n=qt(r);return r==n?t:Je(n)}function Bt(e,t){if(t>e.lastLine())return t;var r,n=Xe(e,t);if(!Ut(e,n))return t;for(;r=Pt(n);)n=r.find(1,!0).line;return Je(n)+1}function Ut(e,t){var r=St&&t.markedSpans;if(r)for(var n=void 0,i=0;it.maxLineLength&&(t.maxLineLength=r,t.maxLine=e)}))}var Xt=function(e,t,r){this.text=e,At(this,t),this.height=r?r(this):1};function Yt(e){e.parent=null,Ot(e)}Xt.prototype.lineNo=function(){return Je(this)},we(Xt);var Qt={},Zt={};function Jt(e,t){if(!e||/^\s*$/.test(e))return null;var r=t.addModeClass?Zt:Qt;return r[e]||(r[e]=e.replace(/\S+/g,"cm-$&"))}function er(e,t){var r=O("span",null,null,l?"padding-right: .1px":null),n={pre:O("pre",[r],"CodeMirror-line"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,a=void 0;n.pos=0,n.addToken=rr,Ae(e.display.measure)&&(a=fe(o,e.doc.direction))&&(n.addToken=nr(n.addToken,a)),n.map=[],or(o,n,mt(e,o,t!=e.display.externalMeasured&&Je(o))),o.styleClasses&&(o.styleClasses.bgClass&&(n.bgClass=F(o.styleClasses.bgClass,n.bgClass||"")),o.styleClasses.textClass&&(n.textClass=F(o.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(Oe(e.display.measure))),0==i?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(l){var s=n.content.lastChild;(/\bcm-tab\b/.test(s.className)||s.querySelector&&s.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return ve(e,"renderLine",e,t.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function tr(e){var t=z("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function rr(e,t,r,n,i,o,l){if(t){var c,u=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var r=t,n="",i=0;ic&&d.from<=c);f++);if(d.to>=u)return e(r,n,i,o,a,s,l);e(r,n.slice(0,d.to-c),i,o,null,s,l),o=null,n=n.slice(d.to-c),c=d.to}}}function ir(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function or(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(n)for(var a,s,l,c,u,d,f,p=i.length,h=0,m=1,g="",v=0;;){if(v==h){l=c=u=s="",f=null,d=null,v=1/0;for(var y=[],b=void 0,x=0;xh||_.collapsed&&w.to==h&&w.from==h)){if(null!=w.to&&w.to!=h&&v>w.to&&(v=w.to,c=""),_.className&&(l+=" "+_.className),_.css&&(s=(s?s+";":"")+_.css),_.startStyle&&w.from==h&&(u+=" "+_.startStyle),_.endStyle&&w.to==v&&(b||(b=[])).push(_.endStyle,w.to),_.title&&((f||(f={})).title=_.title),_.attributes)for(var k in _.attributes)(f||(f={}))[k]=_.attributes[k];_.collapsed&&(!d||Ft(d.marker,_)<0)&&(d=w)}else w.from>h&&v>w.from&&(v=w.from)}if(b)for(var C=0;C=p)break;for(var L=Math.min(p,v);;){if(g){var T=h+g.length;if(!d){var M=T>L?g.slice(0,L-h):g;t.addToken(t,M,a?a+l:l,u,h+M.length==v?c:"",s,f)}if(T>=L){g=g.slice(L-h),h=L;break}h=T,u=""}g=i.slice(o,o=r[m++]),a=Jt(r[m++],t.cm.options)}}else for(var N=1;Nr)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}}function Ar(e,t,r,n){return Fr(e,Er(e,t),r,n)}function Dr(e,t){if(t>=e.display.viewFrom&&t=r.lineN&&t2&&o.push((l.bottom+c.top)/2-r.top)}}o.push(r.bottom-r.top)}}(e,t.view,t.rect),t.hasHeights=!0),(o=function(e,t,r,n){var i,o=Pr(t.map,r,n),l=o.node,c=o.start,u=o.end,d=o.collapse;if(3==l.nodeType){for(var f=0;f<4;f++){for(;c&&ae(t.line.text.charAt(o.coverStart+c));)--c;for(;o.coverStart+u1}(e))return t;var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}(e.display.measure,i))}else{var p;c>0&&(d=n="right"),i=e.options.lineWrapping&&(p=l.getClientRects()).length>1?p["right"==n?p.length-1:0]:l.getBoundingClientRect()}if(a&&s<9&&!c&&(!i||!i.left&&!i.right)){var h=l.parentNode.getClientRects()[0];i=h?{left:h.left,right:h.left+sn(e.display),top:h.top,bottom:h.bottom}:Wr}for(var m=i.top-t.rect.top,g=i.bottom-t.rect.top,v=(m+g)/2,y=t.view.measure.heights,b=0;bt)&&(i=(o=l-s)-1,t>=l&&(a="right")),null!=i){if(n=e[c+2],s==l&&r==(n.insertLeft?"left":"right")&&(a=r),"left"==r&&0==i)for(;c&&e[c-2]==e[c-3]&&e[c-1].insertLeft;)n=e[2+(c-=3)],a="left";if("right"==r&&i==l-s)for(;c=0&&(r=e[i]).left==r.right;i--);return r}function Hr(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=n.text.length?(l=n.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return a("before"==c?l-1:l,"before"==c);function u(e,t,r){return a(r?e-1:e,1==s[t].level!=r)}var d=ue(s,l,c),f=ce,p=u(l,d,"before"==c);return null!=f&&(p.other=u(l,f,"before"!=c)),p}function Yr(e,t){var r=0;t=ut(e.doc,t),e.options.lineWrapping||(r=sn(e.display)*t.ch);var n=Xe(e.doc,t.line),i=$t(n)+Sr(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function Qr(e,t,r,n,i){var o=nt(e,t,r);return o.xRel=i,n&&(o.outside=n),o}function Zr(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return Qr(n.first,0,null,-1,-1);var i=et(n,r),o=n.first+n.size-1;if(i>o)return Qr(n.first+n.size-1,Xe(n,o).text.length,null,1,1);t<0&&(t=0);for(var a=Xe(n,i);;){var s=rn(e,a,i,t,r),l=Rt(a,s.ch+(s.xRel>0||s.outside>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==i)return c;a=Xe(n,i=c.line)}}function Jr(e,t,r,n){n-=Vr(t);var i=t.text.length,o=le((function(t){return Fr(e,r,t-1).bottom<=n}),i,0);return{begin:o,end:i=le((function(t){return Fr(e,r,t).top>n}),o,i)}}function en(e,t,r,n){return r||(r=Er(e,t)),Jr(e,t,r,$r(e,t,Fr(e,r,n),"line").top)}function tn(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function rn(e,t,r,n,i){i-=$t(t);var o=Er(e,t),a=Vr(t),s=0,l=t.text.length,c=!0,u=fe(t,e.doc.direction);if(u){var d=(e.options.lineWrapping?on:nn)(e,t,r,o,u,n,i);s=(c=1!=d.level)?d.from:d.to-1,l=c?d.to:d.from-1}var f,p,h=null,m=null,g=le((function(t){var r=Fr(e,o,t);return r.top+=a,r.bottom+=a,!!tn(r,n,i,!1)&&(r.top<=i&&r.left<=n&&(h=t,m=r),!0)}),s,l),v=!1;if(m){var y=n-m.left=x.bottom?1:0}return Qr(r,g=se(t.text,g,1),p,v,n-f)}function nn(e,t,r,n,i,o,a){var s=le((function(s){var l=i[s],c=1!=l.level;return tn(Xr(e,nt(r,c?l.to:l.from,c?"before":"after"),"line",t,n),o,a,!0)}),0,i.length-1),l=i[s];if(s>0){var c=1!=l.level,u=Xr(e,nt(r,c?l.from:l.to,c?"after":"before"),"line",t,n);tn(u,o,a,!0)&&u.top>a&&(l=i[s-1])}return l}function on(e,t,r,n,i,o,a){var s=Jr(e,t,n,a),l=s.begin,c=s.end;/\s/.test(t.text.charAt(c-1))&&c--;for(var u=null,d=null,f=0;f=c||p.to<=l)){var h=Fr(e,n,1!=p.level?Math.min(c,p.to)-1:Math.max(l,p.from)).right,m=hm)&&(u=p,d=m)}}return u||(u=i[i.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}function an(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Ir){Ir=z("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Ir.appendChild(document.createTextNode("x")),Ir.appendChild(z("br"));Ir.appendChild(document.createTextNode("x"))}N(e.measure,Ir);var r=Ir.offsetHeight/50;return r>3&&(e.cachedTextHeight=r),M(e.measure),r||1}function sn(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=z("span","xxxxxxxxxx"),r=z("pre",[t],"CodeMirror-line-like");N(e.measure,r);var n=t.getBoundingClientRect(),i=(n.right-n.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function ln(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a){var s=e.display.gutterSpecs[a].className;r[s]=o.offsetLeft+o.clientLeft+i,n[s]=o.clientWidth}return{fixedPos:cn(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function cn(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function un(e){var t=an(e.display),r=e.options.lineWrapping,n=r&&Math.max(5,e.display.scroller.clientWidth/sn(e.display)-3);return function(i){if(Ut(e.doc,i))return 0;var o=0;if(i.widgets)for(var a=0;a0&&(l=Xe(e.doc,c.line).text).length==c.ch){var u=q(l,l.length,e.options.tabSize)-l.length;c=nt(c.line,Math.max(0,Math.round((o-Tr(e.display).left)/sn(e.display))-u))}return c}function pn(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;nt)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)St&&jt(e.doc,t)i.viewFrom?gn(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)gn(e);else if(t<=i.viewFrom){var o=vn(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):gn(e)}else if(r>=i.viewTo){var a=vn(e,t,t,-1);a?(i.view=i.view.slice(0,a.index),i.viewTo=a.lineN):gn(e)}else{var s=vn(e,t,t,-1),l=vn(e,r,r+n,1);s&&l?(i.view=i.view.slice(0,s.index).concat(sr(e,s.lineN,l.lineN)).concat(i.view.slice(l.index)),i.viewTo+=n):gn(e)}var c=i.externalMeasured;c&&(r=i.lineN&&t=n.viewTo)){var o=n.view[pn(e,t)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==B(a,r)&&a.push(r)}}}function gn(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function vn(e,t,r,n){var i,o=pn(e,t),a=e.display.view;if(!St||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var s=e.display.viewFrom,l=0;l0){if(o==a.length-1)return null;i=s+a[o].size-t,o++}else i=s-t;t+=i,r+=i}for(;jt(e.doc,r)!=r;){if(o==(n<0?0:a.length-1))return null;r+=n*a[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function yn(e){for(var t=e.display.view,r=0,n=0;n=e.display.viewTo||l.to().line0?a:e.defaultCharWidth())+"px"}if(n.other){var s=r.appendChild(z("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));s.style.display="",s.style.left=n.other.left+"px",s.style.top=n.other.top+"px",s.style.height=.85*(n.other.bottom-n.other.top)+"px"}}function _n(e,t){return e.top-t.top||e.left-t.left}function kn(e,t,r){var n=e.display,i=e.doc,o=document.createDocumentFragment(),a=Tr(e.display),s=a.left,l=Math.max(n.sizerWidth,Nr(e)-n.sizer.offsetLeft)-a.right,c="ltr"==i.direction;function u(e,t,r,n){t<0&&(t=0),t=Math.round(t),n=Math.round(n),o.appendChild(z("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n top: "+t+"px; width: "+(null==r?l-e:r)+"px;\n height: "+(n-t)+"px"))}function d(t,r,n){var o,a,d=Xe(i,t),f=d.text.length;function p(r,n){return Kr(e,nt(t,r),"div",d,n)}function h(t,r,n){var i=en(e,d,null,t),o="ltr"==r==("after"==n)?"left":"right";return p("after"==n?i.begin:i.end-(/\s/.test(d.text.charAt(i.end-1))?2:1),o)[o]}var m=fe(d,i.direction);return function(e,t,r,n){if(!e)return n(t,r,"ltr",0);for(var i=!1,o=0;ot||t==r&&a.to==t)&&(n(Math.max(a.from,t),Math.min(a.to,r),1==a.level?"rtl":"ltr",o),i=!0)}i||n(t,r,"ltr")}(m,r||0,null==n?f:n,(function(e,t,i,d){var g="ltr"==i,v=p(e,g?"left":"right"),y=p(t-1,g?"right":"left"),b=null==r&&0==e,x=null==n&&t==f,w=0==d,_=!m||d==m.length-1;if(y.top-v.top<=3){var k=(c?x:b)&&_,C=(c?b:x)&&w?s:(g?v:y).left,S=k?l:(g?y:v).right;u(C,v.top,S-C,v.bottom)}else{var L,T,M,N;g?(L=c&&b&&w?s:v.left,T=c?l:h(e,i,"before"),M=c?s:h(t,i,"after"),N=c&&x&&_?l:y.right):(L=c?h(e,i,"before"):s,T=!c&&b&&w?l:v.right,M=!c&&x&&_?s:y.left,N=c?h(t,i,"after"):l),u(L,v.top,T-L,v.bottom),v.bottom0?t.blinker=setInterval((function(){e.hasFocus()||Mn(e),t.cursorDiv.style.visibility=(r=!r)?"":"hidden"}),e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Sn(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||Tn(e))}function Ln(e){e.state.delayingBlurEvent=!0,setTimeout((function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused&&Mn(e))}),100)}function Tn(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(ve(e,"focus",e,t),e.state.focused=!0,E(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),l&&setTimeout((function(){return e.display.input.reset(!0)}),20)),e.display.input.receivedFocus()),Cn(e))}function Mn(e,t){e.state.delayingBlurEvent||(e.state.focused&&(ve(e,"blur",e,t),e.state.focused=!1,T(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout((function(){e.state.focused||(e.display.shift=!1)}),150))}function Nn(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=Math.max(0,t.scroller.getBoundingClientRect().top),i=t.lineDiv.getBoundingClientRect().top,o=0,l=0;l.005||m<-.005)&&(ie.display.sizerWidth){var v=Math.ceil(f/sn(e.display));v>e.display.maxLineLength&&(e.display.maxLineLength=v,e.display.maxLine=c.line,e.display.maxLineChanged=!0)}}}Math.abs(o)>2&&(t.scroller.scrollTop+=o)}function zn(e){if(e.widgets)for(var t=0;t=a&&(o=et(t,$t(Xe(t,l))-e.wrapper.clientHeight),a=l)}return{from:o,to:Math.max(a,o+1)}}function An(e,t){var r=e.display,n=an(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scroller.scrollTop,o=zr(e),a={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+Lr(r),l=t.tops-n;if(t.topi+o){var u=Math.min(t.top,(c?s:t.bottom)-o);u!=i&&(a.scrollTop=u)}var d=e.options.fixedGutter?0:r.gutters.offsetWidth,f=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft-d,p=Nr(e)-r.gutters.offsetWidth,h=t.right-t.left>p;return h&&(t.right=t.left+p),t.left<10?a.scrollLeft=0:t.leftp+f-3&&(a.scrollLeft=t.right+(h?0:10)-p),a}function Dn(e,t){null!=t&&(In(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function En(e){In(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Fn(e,t,r){null==t&&null==r||In(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function In(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Wn(e,Yr(e,t.from),Yr(e,t.to),t.margin))}function Wn(e,t,r,n){var i=An(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});Fn(e,i.scrollLeft,i.scrollTop)}function Pn(e,t){Math.abs(e.doc.scrollTop-t)<2||(r||fi(e,{top:t}),Rn(e,t,!0),r&&fi(e),ai(e,100))}function Rn(e,t,r){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Hn(e,t,r,n){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,mi(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function qn(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+Lr(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+Mr(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}var jn=function(e,t,r){this.cm=r;var n=this.vert=z("div",[z("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=z("div",[z("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=i.tabIndex=-1,e(n),e(i),he(n,"scroll",(function(){n.clientHeight&&t(n.scrollTop,"vertical")})),he(i,"scroll",(function(){i.clientWidth&&t(i.scrollLeft,"horizontal")})),this.checkedZeroWidth=!1,a&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};jn.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(r){this.vert.style.display="block",this.vert.style.bottom=t?n+"px":"0";var i=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=r?n+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(r?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?n:0,bottom:t?n:0}},jn.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},jn.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},jn.prototype.zeroWidthHack=function(){var e=b&&!h?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new j,this.disableVert=new j},jn.prototype.enableZeroWidthBar=function(e,t,r){e.style.visibility="",t.set(1e3,(function n(){var i=e.getBoundingClientRect();("vert"==r?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.visibility="hidden":t.set(1e3,n)}))},jn.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Bn=function(){};function Un(e,t){t||(t=qn(e));var r=e.display.barWidth,n=e.display.barHeight;Vn(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&Nn(e),Vn(e,qn(e)),r=e.display.barWidth,n=e.display.barHeight}function Vn(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+"px",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+"px",r.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(r.scrollbarFiller.style.display="block",r.scrollbarFiller.style.height=n.bottom+"px",r.scrollbarFiller.style.width=n.right+"px"):r.scrollbarFiller.style.display="",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(r.gutterFiller.style.display="block",r.gutterFiller.style.height=n.bottom+"px",r.gutterFiller.style.width=t.gutterWidth+"px"):r.gutterFiller.style.display=""}Bn.prototype.update=function(){return{bottom:0,right:0}},Bn.prototype.setScrollLeft=function(){},Bn.prototype.setScrollTop=function(){},Bn.prototype.clear=function(){};var $n={native:jn,null:Bn};function Gn(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&T(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new $n[e.options.scrollbarStyle]((function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),he(t,"mousedown",(function(){e.state.focused&&setTimeout((function(){return e.display.input.focus()}),0)})),t.setAttribute("cm-not-content","true")}),(function(t,r){"horizontal"==r?Hn(e,t):Pn(e,t)}),e),e.display.scrollbars.addClass&&E(e.display.wrapper,e.display.scrollbars.addClass)}var Kn=0;function Xn(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Kn,markArrays:null},t=e.curOp,lr?lr.ops.push(t):t.ownsGroup=lr={ops:[t],delayedCallbacks:[]}}function Yn(e){var t=e.curOp;t&&function(e,t){var r=e.ownsGroup;if(r)try{!function(e){var t=e.delayedCallbacks,r=0;do{for(;r=r.viewTo)||r.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new li(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Zn(e){e.updatedDisplay=e.mustUpdate&&ui(e.cm,e.update)}function Jn(e){var t=e.cm,r=t.display;e.updatedDisplay&&Nn(t),e.barMeasure=qn(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Ar(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+Mr(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-Nr(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}function ei(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft(o.defaultView.innerHeight||o.documentElement.clientHeight)&&(i=!1),null!=i&&!m){var a=z("div","​",null,"position: absolute;\n top: "+(t.top-r.viewOffset-Sr(e.display))+"px;\n height: "+(t.bottom-t.top+Mr(e)+r.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(a),a.scrollIntoView(i),e.display.lineSpace.removeChild(a)}}}(t,function(e,t,r,n){var i;null==n&&(n=0),e.options.lineWrapping||t!=r||(r="before"==t.sticky?nt(t.line,t.ch+1,"before"):t,t=t.ch?nt(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t);for(var o=0;o<5;o++){var a=!1,s=Xr(e,t),l=r&&r!=t?Xr(e,r):s,c=An(e,i={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-n,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+n}),u=e.doc.scrollTop,d=e.doc.scrollLeft;if(null!=c.scrollTop&&(Pn(e,c.scrollTop),Math.abs(e.doc.scrollTop-u)>1&&(a=!0)),null!=c.scrollLeft&&(Hn(e,c.scrollLeft),Math.abs(e.doc.scrollLeft-d)>1&&(a=!0)),!a)break}return i}(t,ut(n,e.scrollToPos.from),ut(n,e.scrollToPos.to),e.scrollToPos.margin));var i=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(i)for(var a=0;a=e.display.viewTo)){var r=+new Date+e.options.workTime,n=gt(e,t.highlightFrontier),i=[];t.iter(n.line,Math.min(t.first+t.size,e.display.viewTo+500),(function(o){if(n.line>=e.display.viewFrom){var a=o.styles,s=o.text.length>e.options.maxHighlightLength?Ve(t.mode,n.state):null,l=ht(e,o,n,!0);s&&(n.state=s),o.styles=l.styles;var c=o.styleClasses,u=l.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var d=!a||a.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),f=0;!d&&fr)return ai(e,e.options.workDelay),!0})),t.highlightFrontier=n.line,t.modeFrontier=Math.max(t.modeFrontier,n.line),i.length&&ri(e,(function(){for(var t=0;t=r.viewFrom&&t.visible.to<=r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo)&&r.renderedView==r.view&&0==yn(e))return!1;gi(e)&&(gn(e),t.dims=ln(e));var i=n.first+n.size,o=Math.max(t.visible.from-e.options.viewportMargin,n.first),a=Math.min(i,t.visible.to+e.options.viewportMargin);r.viewFroma&&r.viewTo-a<20&&(a=Math.min(i,r.viewTo)),St&&(o=jt(e.doc,o),a=Bt(e.doc,a));var s=o!=r.viewFrom||a!=r.viewTo||r.lastWrapHeight!=t.wrapperHeight||r.lastWrapWidth!=t.wrapperWidth;(function(e,t,r){var n=e.display;0==n.view.length||t>=n.viewTo||r<=n.viewFrom?(n.view=sr(e,t,r),n.viewFrom=t):(n.viewFrom>t?n.view=sr(e,t,n.viewFrom).concat(n.view):n.viewFromr&&(n.view=n.view.slice(0,pn(e,r)))),n.viewTo=r})(e,o,a),r.viewOffset=$t(Xe(e.doc,r.viewFrom)),e.display.mover.style.top=r.viewOffset+"px";var c=yn(e);if(!s&&0==c&&!t.force&&r.renderedView==r.view&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo))return!1;var u=ci(e);return c>4&&(r.lineDiv.style.display="none"),function(e,t,r){var n=e.display,i=e.options.lineNumbers,o=n.lineDiv,a=o.firstChild;function s(t){var r=t.nextSibling;return l&&b&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),r}for(var c=n.view,u=n.viewFrom,d=0;d-1&&(p=!1),fr(e,f,u,r)),p&&(M(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(rt(e.options,u)))),a=f.node.nextSibling}else{var h=br(e,f,u,r);o.insertBefore(h,a)}u+=f.size}for(;a;)a=s(a)}(e,r.updateLineNumbers,t.dims),c>4&&(r.lineDiv.style.display=""),r.renderedView=r.view,function(e){if(e&&e.activeElt&&e.activeElt!=D(e.activeElt.ownerDocument)&&(e.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(e.activeElt.nodeName)&&e.anchorNode&&A(document.body,e.anchorNode)&&A(document.body,e.focusNode))){var t=e.activeElt.ownerDocument,r=t.defaultView.getSelection(),n=t.createRange();n.setEnd(e.anchorNode,e.anchorOffset),n.collapse(!1),r.removeAllRanges(),r.addRange(n),r.extend(e.focusNode,e.focusOffset)}}(u),M(r.cursorDiv),M(r.selectionDiv),r.gutters.style.height=r.sizer.style.minHeight=0,s&&(r.lastWrapHeight=t.wrapperHeight,r.lastWrapWidth=t.wrapperWidth,ai(e,400)),r.updateLineNumbers=null,!0}function di(e,t){for(var r=t.viewport,n=!0;;n=!1){if(n&&e.options.lineWrapping&&t.oldDisplayWidth!=Nr(e))n&&(t.visible=On(e.display,e.doc,r));else if(r&&null!=r.top&&(r={top:Math.min(e.doc.height+Lr(e.display)-zr(e),r.top)}),t.visible=On(e.display,e.doc,r),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!ui(e,t))break;Nn(e);var i=qn(e);bn(e),Un(e,i),hi(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function fi(e,t){var r=new li(e,t);if(ui(e,r)){Nn(e),di(e,r);var n=qn(e);bn(e),Un(e,n),hi(e,n),r.finish()}}function pi(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px",ur(e,"gutterChanged",e)}function hi(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Mr(e)+"px"}function mi(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=cn(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+"px",a=0;ac.clientWidth,h=c.scrollHeight>c.clientHeight;if(i&&p||o&&h){if(o&&b&&l)e:for(var m=t.target,g=s.view;m!=c;m=m.parentNode)for(var v=0;v=0&&it(e,n.to())<=0)return r}return-1};var Ti=function(e,t){this.anchor=e,this.head=t};function Mi(e,t,r){var n=e&&e.options.selectionsMayTouch,i=t[r];t.sort((function(e,t){return it(e.from(),t.from())})),r=B(t,i);for(var o=1;o0:l>=0){var c=lt(s.from(),a.from()),u=st(s.to(),a.to()),d=s.empty()?a.from()==a.head:s.from()==s.head;o<=r&&--r,t.splice(--o,2,new Ti(d?u:c,d?c:u))}}return new Li(t,r)}function Ni(e,t){return new Li([new Ti(e,t||e)],0)}function zi(e){return e.text?nt(e.from.line+e.text.length-1,Q(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Oi(e,t){if(it(e,t.from)<0)return e;if(it(e,t.to)<=0)return zi(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=zi(t).ch-t.to.ch),nt(r,n)}function Ai(e,t){for(var r=[],n=0;n1&&e.remove(s.line+1,h-1),e.insert(s.line+1,v)}ur(e,"change",e,t)}function Pi(e,t,r){!function e(n,i,o){if(n.linked)for(var a=0;as-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=function(e,t){return t?(Bi(e.done),Q(e.done)):e.done.length&&!Q(e.done).ranges?Q(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),Q(e.done)):void 0}(i,i.lastOp==n)))a=Q(o.changes),0==it(t.from,t.to)&&0==it(t.from,a.to)?a.to=zi(t):o.changes.push(ji(e,t));else{var l=Q(i.done);for(l&&l.ranges||$i(e.sel,i.done),o={changes:[ji(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,a||ve(e,"historyAdded")}function Vi(e,t,r,n){var i=e.history,o=n&&n.origin;r==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||function(e,t,r,n){var i=t.charAt(0);return"*"==i||"+"==i&&r.ranges.length==n.ranges.length&&r.somethingSelected()==n.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,o,Q(i.done),t))?i.done[i.done.length-1]=t:$i(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=r,n&&!1!==n.clearRedo&&Bi(i.undone)}function $i(e,t){var r=Q(t);r&&r.ranges&&r.equals(e)||t.push(e)}function Gi(e,t,r,n){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,r),Math.min(e.first+e.size,n),(function(r){r.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=r.markedSpans),++o}))}function Ki(e){if(!e)return null;for(var t,r=0;r-1&&(Q(s)[d]=c[d],delete c[d])}}}return n}function Qi(e,t,r,n){if(n){var i=e.anchor;if(r){var o=it(t,i)<0;o!=it(r,i)<0?(i=t,t=r):o!=it(t,r)<0&&(t=r)}return new Ti(i,t)}return new Ti(r||t,t)}function Zi(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),no(e,new Li([Qi(e.sel.primary(),t,r,i)],0),n)}function Ji(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o=t.ch:s.to>t.ch))){if(i&&(ve(l,"beforeCursorEnter"),l.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!l.atomic)continue;if(r){var d=l.find(n<0?1:-1),f=void 0;if((n<0?u:c)&&(d=uo(e,d,-n,d&&d.line==t.line?o:null)),d&&d.line==t.line&&(f=it(d,r))&&(n<0?f<0:f>0))return lo(e,d,t,n,i)}var p=l.find(n<0?-1:1);return(n<0?c:u)&&(p=uo(e,p,n,p.line==t.line?o:null)),p?lo(e,p,t,n,i):null}}return t}function co(e,t,r,n,i){var o=n||1;return lo(e,t,r,o,i)||!i&&lo(e,t,r,o,!0)||lo(e,t,r,-o,i)||!i&&lo(e,t,r,-o,!0)||(e.cantEdit=!0,nt(e.first,0))}function uo(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?ut(e,nt(t.line-1)):null:r>0&&t.ch==(n||Xe(e,t.line)).text.length?t.line0)){var u=[l,1],d=it(c.from,s.from),f=it(c.to,s.to);(d<0||!a.inclusiveLeft&&!d)&&u.push({from:c.from,to:s.from}),(f>0||!a.inclusiveRight&&!f)&&u.push({from:s.to,to:c.to}),i.splice.apply(i,u),l+=u.length-3}}return i}(e,t.from,t.to);if(n)for(var i=n.length-1;i>=0;--i)mo(e,{from:n[i].from,to:n[i].to,text:i?[""]:t.text,origin:t.origin});else mo(e,t)}}function mo(e,t){if(1!=t.text.length||""!=t.text[0]||0!=it(t.from,t.to)){var r=Ai(e,t);Ui(e,t,r,e.cm?e.cm.curOp.id:NaN),yo(e,t,r,Nt(e,t));var n=[];Pi(e,(function(e,r){r||-1!=B(n,e.history)||(_o(e.history,t),n.push(e.history)),yo(e,t,null,Nt(e,t))}))}}function go(e,t,r){var n=e.cm&&e.cm.state.suppressEdits;if(!n||r){for(var i,o=e.history,a=e.sel,s="undo"==t?o.done:o.undone,l="undo"==t?o.undone:o.done,c=0;c=0;--p){var h=f(p);if(h)return h.v}}}}function vo(e,t){if(0!=t&&(e.first+=t,e.sel=new Li(Z(e.sel.ranges,(function(e){return new Ti(nt(e.anchor.line+t,e.anchor.ch),nt(e.head.line+t,e.head.ch))})),e.sel.primIndex),e.cm)){hn(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;ne.lastLine())){if(t.from.lineo&&(t={from:t.from,to:nt(o,Xe(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=Ye(e,t.from,t.to),r||(r=Ai(e,t)),e.cm?function(e,t,r){var n=e.doc,i=e.display,o=t.from,a=t.to,s=!1,l=o.line;e.options.lineWrapping||(l=Je(qt(Xe(n,o.line))),n.iter(l,a.line+1,(function(e){if(e==i.maxLine)return s=!0,!0}))),n.sel.contains(t.from,t.to)>-1&&be(e),Wi(n,t,r,un(e)),e.options.lineWrapping||(n.iter(l,o.line+t.text.length,(function(e){var t=Gt(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)})),s&&(e.curOp.updateMaxLine=!0)),function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontierr;n--){var i=Xe(e,n).stateAfter;if(i&&(!(i instanceof ft)||n+i.lookAhead1||!(this.children[0]instanceof Co))){var s=[];this.collapse(s),this.children=[new Co(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var a=i.lines.length%25+25,s=a;s10);e.parent.maybeSpill()}},iterN:function(e,t,r){for(var n=0;n0||0==a&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=O("span",[o.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(Ht(e,t.line,t,r,o)||t.line!=r.line&&Ht(e,r.line,t,r,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");St=!0}o.addToHistory&&Ui(e,{from:t,to:r,origin:"markText"},e.sel,NaN);var s,l=t.line,c=e.cm;if(e.iter(l,r.line+1,(function(n){c&&o.collapsed&&!c.options.lineWrapping&&qt(n)==c.display.maxLine&&(s=!0),o.collapsed&&l!=t.line&&Ze(n,0),function(e,t,r){var n=r&&window.WeakSet&&(r.markedSpans||(r.markedSpans=new WeakSet));n&&e.markedSpans&&n.has(e.markedSpans)?e.markedSpans.push(t):(e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],n&&n.add(e.markedSpans)),t.marker.attachLine(e)}(n,new Lt(o,l==t.line?t.ch:null,l==r.line?r.ch:null),e.cm&&e.cm.curOp),++l})),o.collapsed&&e.iter(t.line,r.line+1,(function(t){Ut(e,t)&&Ze(t,0)})),o.clearOnEnter&&he(o,"beforeCursorEnter",(function(){return o.clear()})),o.readOnly&&(Ct=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++Mo,o.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),o.collapsed)hn(c,t.line,r.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var u=t.line;u<=r.line;u++)mn(c,u,"text");o.atomic&&ao(c.doc),ur(c,"markerAdded",c,o)}return o}No.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Xn(e),xe(this,"clear")){var r=this.find();r&&ur(this,"clear",r.from,r.to)}for(var n=null,i=null,o=0;oe.display.maxLineLength&&(e.display.maxLine=c,e.display.maxLineLength=u,e.display.maxLineChanged=!0)}null!=n&&e&&this.collapsed&&hn(e,n,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&ao(e.doc)),e&&ur(e,"markerCleared",e,this,n,i),t&&Yn(e),this.parent&&this.parent.clear()}},No.prototype.find=function(e,t){var r,n;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=0;l--)ho(this,n[l]);s?ro(this,s):this.cm&&En(this.cm)})),undo:oi((function(){go(this,"undo")})),redo:oi((function(){go(this,"redo")})),undoSelection:oi((function(){go(this,"undo",!0)})),redoSelection:oi((function(){go(this,"redo",!0)})),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,r=0,n=0;n=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,r){e=ut(this,e),t=ut(this,t);var n=[],i=e.line;return this.iter(e.line,t.line+1,(function(o){var a=o.markedSpans;if(a)for(var s=0;s=l.to||null==l.from&&i!=e.line||null!=l.from&&i==t.line&&l.from>=t.ch||r&&!r(l.marker)||n.push(l.marker.parent||l.marker)}++i})),n},getAllMarks:function(){var e=[];return this.iter((function(t){var r=t.markedSpans;if(r)for(var n=0;ne)return t=e,!0;e-=o,++r})),ut(this,nt(r,t))},indexFromPos:function(e){var t=(e=ut(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout((function(){return t.display.input.focus()}),20);try{var d=e.dataTransfer.getData("Text");if(d){var f;if(t.state.draggingText&&!t.state.draggingText.copy&&(f=t.listSelections()),io(t.doc,Ni(r,r)),f)for(var p=0;p=0;t--)bo(e.doc,"",n[t].from,n[t].to,"+delete");En(e)}))}function ra(e,t,r){var n=se(e.text,t+r,r);return n<0||n>e.text.length?null:n}function na(e,t,r){var n=ra(e,t.ch,r);return null==n?null:new nt(t.line,n,r<0?"after":"before")}function ia(e,t,r,n,i){if(e){"rtl"==t.doc.direction&&(i=-i);var o=fe(r,t.doc.direction);if(o){var a,s=i<0?Q(o):o[0],l=i<0==(1==s.level)?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var c=Er(t,r);a=i<0?r.text.length-1:0;var u=Fr(t,c,a).top;a=le((function(e){return Fr(t,c,e).top==u}),i<0==(1==s.level)?s.from:s.to-1,a),"before"==l&&(a=ra(r,a,1))}else a=i<0?s.to:s.from;return new nt(n,a,l)}}return new nt(n,i<0?r.text.length:0,i<0?"before":"after")}Go.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Go.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Go.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Go.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Go.default=b?Go.macDefault:Go.pcDefault;var oa={selectAll:fo,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),V)},killLine:function(e){return ta(e,(function(t){if(t.empty()){var r=Xe(e.doc,t.head.line).text.length;return t.head.ch==r&&t.head.line0)i=new nt(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),nt(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var a=Xe(e.doc,i.line-1).text;a&&(i=new nt(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+a.charAt(a.length-1),nt(i.line-1,a.length-1),i,"+transpose"))}r.push(new Ti(i,i))}e.setSelections(r)}))},newlineAndIndent:function(e){return ri(e,(function(){for(var t=e.listSelections(),r=t.length-1;r>=0;r--)e.replaceRange(e.doc.lineSeparator(),t[r].anchor,t[r].head,"+input");t=e.listSelections();for(var n=0;n-1&&(it((i=c.ranges[i]).from(),t)<0||t.xRel>0)&&(it(i.to(),t)>0||t.xRel<0)?function(e,t,r,n){var i=e.display,o=!1,c=ni(e,(function(t){l&&(i.scroller.draggable=!1),e.state.draggingText=!1,e.state.delayingBlurEvent&&(e.hasFocus()?e.state.delayingBlurEvent=!1:Ln(e)),ge(i.wrapper.ownerDocument,"mouseup",c),ge(i.wrapper.ownerDocument,"mousemove",u),ge(i.scroller,"dragstart",d),ge(i.scroller,"drop",c),o||(_e(t),n.addNew||Zi(e.doc,r,null,null,n.extend),l&&!p||a&&9==s?setTimeout((function(){i.wrapper.ownerDocument.body.focus({preventScroll:!0}),i.input.focus()}),20):i.input.focus())})),u=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},d=function(){return o=!0};l&&(i.scroller.draggable=!0),e.state.draggingText=c,c.copy=!n.moveOnDrag,he(i.wrapper.ownerDocument,"mouseup",c),he(i.wrapper.ownerDocument,"mousemove",u),he(i.scroller,"dragstart",d),he(i.scroller,"drop",c),e.state.delayingBlurEvent=!0,setTimeout((function(){return i.input.focus()}),20),i.scroller.dragDrop&&i.scroller.dragDrop()}(e,n,t,o):function(e,t,r,n){a&&Ln(e);var i=e.display,o=e.doc;_e(t);var s,l,c=o.sel,u=c.ranges;if(n.addNew&&!n.extend?(l=o.sel.contains(r),s=l>-1?u[l]:new Ti(r,r)):(s=o.sel.primary(),l=o.sel.primIndex),"rectangle"==n.unit)n.addNew||(s=new Ti(r,r)),r=fn(e,t,!0,!0),l=-1;else{var d=wa(e,r,n.unit);s=n.extend?Qi(s,d.anchor,d.head,n.extend):d}n.addNew?-1==l?(l=u.length,no(o,Mi(e,u.concat([s]),l),{scroll:!1,origin:"*mouse"})):u.length>1&&u[l].empty()&&"char"==n.unit&&!n.extend?(no(o,Mi(e,u.slice(0,l).concat(u.slice(l+1)),0),{scroll:!1,origin:"*mouse"}),c=o.sel):eo(o,l,s,$):(l=0,no(o,new Li([s],0),$),c=o.sel);var f=r;function p(t){if(0!=it(f,t))if(f=t,"rectangle"==n.unit){for(var i=[],a=e.options.tabSize,u=q(Xe(o,r.line).text,r.ch,a),d=q(Xe(o,t.line).text,t.ch,a),p=Math.min(u,d),h=Math.max(u,d),m=Math.min(r.line,t.line),g=Math.min(e.lastLine(),Math.max(r.line,t.line));m<=g;m++){var v=Xe(o,m).text,y=K(v,p,a);p==h?i.push(new Ti(nt(m,y),nt(m,y))):v.length>y&&i.push(new Ti(nt(m,y),nt(m,K(v,h,a))))}i.length||i.push(new Ti(r,r)),no(o,Mi(e,c.ranges.slice(0,l).concat(i),l),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var b,x=s,w=wa(e,t,n.unit),_=x.anchor;it(w.anchor,_)>0?(b=w.head,_=lt(x.from(),w.anchor)):(b=w.anchor,_=st(x.to(),w.head));var k=c.ranges.slice(0);k[l]=function(e,t){var r=t.anchor,n=t.head,i=Xe(e.doc,r.line);if(0==it(r,n)&&r.sticky==n.sticky)return t;var o=fe(i);if(!o)return t;var a=ue(o,r.ch,r.sticky),s=o[a];if(s.from!=r.ch&&s.to!=r.ch)return t;var l,c=a+(s.from==r.ch==(1!=s.level)?0:1);if(0==c||c==o.length)return t;if(n.line!=r.line)l=(n.line-r.line)*("ltr"==e.doc.direction?1:-1)>0;else{var u=ue(o,n.ch,n.sticky),d=u-a||(n.ch-r.ch)*(1==s.level?-1:1);l=u==c-1||u==c?d<0:d>0}var f=o[c+(l?-1:0)],p=l==(1==f.level),h=p?f.from:f.to,m=p?"after":"before";return r.ch==h&&r.sticky==m?t:new Ti(new nt(r.line,h,m),n)}(e,new Ti(ut(o,_),b)),no(o,Mi(e,k,l),$)}}var h=i.wrapper.getBoundingClientRect(),m=0;function g(t){var r=++m,a=fn(e,t,!0,"rectangle"==n.unit);if(a)if(0!=it(a,f)){e.curOp.focus=D(W(e)),p(a);var s=On(i,o);(a.line>=s.to||a.lineh.bottom?20:0;l&&setTimeout(ni(e,(function(){m==r&&(i.scroller.scrollTop+=l,g(t))})),50)}}function v(t){e.state.selectingText=!1,m=1/0,t&&(_e(t),i.input.focus()),ge(i.wrapper.ownerDocument,"mousemove",y),ge(i.wrapper.ownerDocument,"mouseup",b),o.history.lastSelOrigin=null}var y=ni(e,(function(e){0!==e.buttons&&Te(e)?g(e):v(e)})),b=ni(e,v);e.state.selectingText=b,he(i.wrapper.ownerDocument,"mousemove",y),he(i.wrapper.ownerDocument,"mouseup",b)}(e,n,t,o)}(t,n,o,e):Le(e)==r.scroller&&_e(e):2==i?(n&&Zi(t.doc,n),setTimeout((function(){return r.input.focus()}),20)):3==i&&(C?t.display.input.onContextMenu(e):Ln(t)))}}function wa(e,t,r){if("char"==r)return new Ti(t,t);if("word"==r)return e.findWordAt(t);if("line"==r)return new Ti(nt(t.line,0),ut(e.doc,nt(t.line+1,0)));var n=r(e,t);return new Ti(n.from,n.to)}function _a(e,t,r,n){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(e){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;n&&_e(t);var a=e.display,s=a.lineDiv.getBoundingClientRect();if(o>s.bottom||!xe(e,r))return Ce(t);o-=s.top-a.viewOffset;for(var l=0;l=i)return ve(e,r,e,et(e.doc,o),e.display.gutterSpecs[l].className,t),Ce(t)}}function ka(e,t){return _a(e,t,"gutterClick",!0)}function Ca(e,t){Cr(e.display,t)||function(e,t){return!!xe(e,"gutterContextMenu")&&_a(e,t,"gutterContextMenu",!1)}(e,t)||ye(e,t,"contextmenu")||C||e.display.input.onContextMenu(t)}function Sa(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),jr(e)}ba.prototype.compare=function(e,t,r){return this.time+400>e&&0==it(t,this.pos)&&r==this.button};var La={toString:function(){return"CodeMirror.Init"}},Ta={},Ma={};function Na(e,t,r){if(!t!=!(r&&r!=La)){var n=e.display.dragFunctions,i=t?he:ge;i(e.display.scroller,"dragstart",n.start),i(e.display.scroller,"dragenter",n.enter),i(e.display.scroller,"dragover",n.over),i(e.display.scroller,"dragleave",n.leave),i(e.display.scroller,"drop",n.drop)}}function za(e){e.options.lineWrapping?(E(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(T(e.display.wrapper,"CodeMirror-wrap"),Kt(e)),dn(e),hn(e),jr(e),setTimeout((function(){return Un(e)}),100)}function Oa(e,t){var r=this;if(!(this instanceof Oa))return new Oa(e,t);this.options=t=t?H(t):{},H(Ta,t,!1);var n=t.value;"string"==typeof n?n=new Fo(n,t.mode,null,t.lineSeparator,t.direction):t.mode&&(n.modeOption=t.mode),this.doc=n;var i=new Oa.inputStyles[t.inputStyle](this),o=this.display=new xi(e,n,i,t);for(var c in o.wrapper.CodeMirror=this,Sa(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Gn(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new j,keySeq:null,specialChars:null},t.autofocus&&!y&&o.input.focus(),a&&s<11&&setTimeout((function(){return r.display.input.reset(!0)}),20),function(e){var t=e.display;he(t.scroller,"mousedown",ni(e,xa)),he(t.scroller,"dblclick",a&&s<11?ni(e,(function(t){if(!ye(e,t)){var r=fn(e,t);if(r&&!ka(e,t)&&!Cr(e.display,t)){_e(t);var n=e.findWordAt(r);Zi(e.doc,n.anchor,n.head)}}})):function(t){return ye(e,t)||_e(t)}),he(t.scroller,"contextmenu",(function(t){return Ca(e,t)})),he(t.input.getField(),"contextmenu",(function(r){t.scroller.contains(r.target)||Ca(e,r)}));var r,n={end:0};function i(){t.activeTouch&&(r=setTimeout((function(){return t.activeTouch=null}),1e3),(n=t.activeTouch).end=+new Date)}function o(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function l(e,t){if(null==t.left)return!0;var r=t.left-e.left,n=t.top-e.top;return r*r+n*n>400}he(t.scroller,"touchstart",(function(i){if(!ye(e,i)&&!o(i)&&!ka(e,i)){t.input.ensurePolled(),clearTimeout(r);var a=+new Date;t.activeTouch={start:a,moved:!1,prev:a-n.end<=300?n:null},1==i.touches.length&&(t.activeTouch.left=i.touches[0].pageX,t.activeTouch.top=i.touches[0].pageY)}})),he(t.scroller,"touchmove",(function(){t.activeTouch&&(t.activeTouch.moved=!0)})),he(t.scroller,"touchend",(function(r){var n=t.activeTouch;if(n&&!Cr(t,r)&&null!=n.left&&!n.moved&&new Date-n.start<300){var o,a=e.coordsChar(t.activeTouch,"page");o=!n.prev||l(n,n.prev)?new Ti(a,a):!n.prev.prev||l(n,n.prev.prev)?e.findWordAt(a):new Ti(nt(a.line,0),ut(e.doc,nt(a.line+1,0))),e.setSelection(o.anchor,o.head),e.focus(),_e(r)}i()})),he(t.scroller,"touchcancel",i),he(t.scroller,"scroll",(function(){t.scroller.clientHeight&&(Pn(e,t.scroller.scrollTop),Hn(e,t.scroller.scrollLeft,!0),ve(e,"scroll",e))})),he(t.scroller,"mousewheel",(function(t){return Si(e,t)})),he(t.scroller,"DOMMouseScroll",(function(t){return Si(e,t)})),he(t.wrapper,"scroll",(function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0})),t.dragFunctions={enter:function(t){ye(e,t)||Se(t)},over:function(t){ye(e,t)||(function(e,t){var r=fn(e,t);if(r){var n=document.createDocumentFragment();wn(e,r,n),e.display.dragCursor||(e.display.dragCursor=z("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),N(e.display.dragCursor,n)}}(e,t),Se(t))},start:function(t){return function(e,t){if(a&&(!e.state.draggingText||+new Date-Io<100))Se(t);else if(!ye(e,t)&&!Cr(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!p)){var r=z("img",null,null,"position: fixed; left: 0; top: 0;");r.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",f&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),f&&r.parentNode.removeChild(r)}}(e,t)},drop:ni(e,Wo),leave:function(t){ye(e,t)||Po(e)}};var c=t.input.getField();he(c,"keyup",(function(t){return ma.call(e,t)})),he(c,"keydown",ni(e,ha)),he(c,"keypress",ni(e,ga)),he(c,"focus",(function(t){return Tn(e,t)})),he(c,"blur",(function(t){return Mn(e,t)}))}(this),qo(),Xn(this),this.curOp.forceUpdate=!0,Ri(this,n),t.autofocus&&!y||this.hasFocus()?setTimeout((function(){r.hasFocus()&&!r.state.focused&&Tn(r)}),20):Mn(this),Ma)Ma.hasOwnProperty(c)&&Ma[c](this,t[c],La);gi(this),t.finishInit&&t.finishInit(this);for(var u=0;u150)){if(!n)return;r="prev"}}else c=0,r="not";"prev"==r?c=t>o.first?q(Xe(o,t-1).text,null,a):0:"add"==r?c=l+e.options.indentUnit:"subtract"==r?c=l-e.options.indentUnit:"number"==typeof r&&(c=l+r),c=Math.max(0,c);var d="",f=0;if(e.options.indentWithTabs)for(var p=Math.floor(c/a);p;--p)f+=a,d+="\t";if(fa,l=Ee(t),c=null;if(s&&n.ranges.length>1)if(Ea&&Ea.text.join("\n")==t){if(n.ranges.length%Ea.text.length==0){c=[];for(var u=0;u=0;f--){var p=n.ranges[f],h=p.from(),m=p.to();p.empty()&&(r&&r>0?h=nt(h.line,h.ch-r):e.state.overwrite&&!s?m=nt(m.line,Math.min(Xe(o,m.line).text.length,m.ch+Q(l).length)):s&&Ea&&Ea.lineWise&&Ea.text.join("\n")==l.join("\n")&&(h=m=nt(h.line,0)));var g={from:h,to:m,text:c?c[f%c.length]:l,origin:i||(s?"paste":e.state.cutIncoming>a?"cut":"+input")};ho(e.doc,g),ur(e,"inputRead",e,g)}t&&!s&&Pa(e,t),En(e),e.curOp.updateInput<2&&(e.curOp.updateInput=d),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Wa(e,t){var r=e.clipboardData&&e.clipboardData.getData("Text");if(r)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||!t.hasFocus()||ri(t,(function(){return Ia(t,r,0,null,"paste")})),!0}function Pa(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var r=e.doc.sel,n=r.ranges.length-1;n>=0;n--){var i=r.ranges[n];if(!(i.head.ch>100||n&&r.ranges[n-1].head.line==i.head.line)){var o=e.getModeAt(i.head),a=!1;if(o.electricChars){for(var s=0;s-1){a=Da(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(Xe(e.doc,i.head.line).text.slice(0,i.head.ch))&&(a=Da(e,i.head.line,"smart"));a&&ur(e,"electricInput",e,i.head.line)}}}function Ra(e){for(var t=[],r=[],n=0;n0?0:-1));if(isNaN(u))a=null;else{var d=r>0?u>=55296&&u<56320:u>=56320&&u<57343;a=new nt(t.line,Math.max(0,Math.min(s.text.length,t.ch+r*(d?2:1))),-r)}}else a=i?function(e,t,r,n){var i=fe(t,e.doc.direction);if(!i)return na(t,r,n);r.ch>=t.text.length?(r.ch=t.text.length,r.sticky="before"):r.ch<=0&&(r.ch=0,r.sticky="after");var o=ue(i,r.ch,r.sticky),a=i[o];if("ltr"==e.doc.direction&&a.level%2==0&&(n>0?a.to>r.ch:a.from=a.from&&f>=u.begin)){var p=d?"before":"after";return new nt(r.line,f,p)}}var h=function(e,t,n){for(var o=function(e,t){return t?new nt(r.line,l(e,1),"before"):new nt(r.line,e,"after")};e>=0&&e0==(1!=a.level),c=s?n.begin:l(n.end,-1);if(a.from<=c&&c0?u.end:l(u.begin,-1);return null==g||n>0&&g==t.text.length||!(m=h(n>0?0:i.length-1,n,c(g)))?null:m}(e.cm,s,t,r):na(s,t,r);if(null==a){if(o||((c=t.line+l)=e.first+e.size||(t=new nt(c,t.ch,t.sticky),!(s=Xe(e,c)))))return!1;t=ia(i,e.cm,s,t.line,l)}else t=a;return!0}if("char"==n||"codepoint"==n)c();else if("column"==n)c(!0);else if("word"==n||"group"==n)for(var u=null,d="group"==n,f=e.cm&&e.cm.getHelper(t,"wordChars"),p=!0;!(r<0)||c(!p);p=!1){var h=s.text.charAt(t.ch)||"\n",m=ne(h,f)?"w":d&&"\n"==h?"n":!d||/\s/.test(h)?null:"p";if(!d||p||m||(m="s"),u&&u!=m){r<0&&(r=1,c(),t.sticky="after");break}if(m&&(u=m),r>0&&!c(!p))break}var g=co(e,t,o,a,!0);return ot(o,g)&&(g.hitSide=!0),g}function Ba(e,t,r,n){var i,o,a=e.doc,s=t.left;if("page"==n){var l=Math.min(e.display.wrapper.clientHeight,P(e).innerHeight||a(e).documentElement.clientHeight),c=Math.max(l-.5*an(e.display),3);i=(r>0?t.bottom:t.top)+r*c}else"line"==n&&(i=r>0?t.bottom+3:t.top-3);for(;(o=Zr(e,s,i)).outside;){if(r<0?i<=0:i>=a.height){o.hitSide=!0;break}i+=5*r}return o}var Ua=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new j,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Va(e,t){var r=Dr(e,t.line);if(!r||r.hidden)return null;var n=Xe(e.doc,t.line),i=Or(r,n,t.line),o=fe(n,e.doc.direction),a="left";o&&(a=ue(o,t.ch)%2?"right":"left");var s=Pr(i.map,t.ch,a);return s.offset="right"==s.collapse?s.end:s.start,s}function $a(e,t){return t&&(e.bad=!0),e}function Ga(e,t,r){var n;if(t==e.display.lineDiv){if(!(n=e.display.lineDiv.childNodes[r]))return $a(e.clipPos(nt(e.display.viewTo-1)),!0);t=null,r=0}else for(n=t;;n=n.parentNode){if(!n||n==e.display.lineDiv)return null;if(n.parentNode&&n.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||o.line=t.display.viewFrom&&Va(t,i)||{node:l[0].measure.map[2],offset:0},u=o.linen.firstLine()&&(a=nt(a.line-1,Xe(n.doc,a.line-1).length)),s.ch==Xe(n.doc,s.line).text.length&&s.linei.viewTo-1)return!1;a.line==i.viewFrom||0==(e=pn(n,a.line))?(t=Je(i.view[0].line),r=i.view[0].node):(t=Je(i.view[e].line),r=i.view[e-1].node.nextSibling);var l,c,u=pn(n,s.line);if(u==i.view.length-1?(l=i.viewTo-1,c=i.lineDiv.lastChild):(l=Je(i.view[u+1].line)-1,c=i.view[u+1].node.previousSibling),!r)return!1;for(var d=n.doc.splitLines(function(e,t,r,n,i){var o="",a=!1,s=e.doc.lineSeparator(),l=!1;function c(){a&&(o+=s,l&&(o+=s),a=l=!1)}function u(e){e&&(c(),o+=e)}function d(t){if(1==t.nodeType){var r=t.getAttribute("cm-text");if(r)return void u(r);var o,f=t.getAttribute("cm-marker");if(f){var p=e.findMarks(nt(n,0),nt(i+1,0),(g=+f,function(e){return e.id==g}));return void(p.length&&(o=p[0].find(0))&&u(Ye(e.doc,o.from,o.to).join(s)))}if("false"==t.getAttribute("contenteditable"))return;var h=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;h&&c();for(var m=0;m1&&f.length>1;)if(Q(d)==Q(f))d.pop(),f.pop(),l--;else{if(d[0]!=f[0])break;d.shift(),f.shift(),t++}for(var p=0,h=0,m=d[0],g=f[0],v=Math.min(m.length,g.length);pa.ch&&y.charCodeAt(y.length-h-1)==b.charCodeAt(b.length-h-1);)p--,h++;d[d.length-1]=y.slice(0,y.length-h).replace(/^\u200b+/,""),d[0]=d[0].slice(p).replace(/\u200b+$/,"");var w=nt(t,p),_=nt(l,f.length?Q(f).length-h:0);return d.length>1||d[0]||it(w,_)?(bo(n.doc,d,w,_,"+input"),!0):void 0},Ua.prototype.ensurePolled=function(){this.forceCompositionEnd()},Ua.prototype.reset=function(){this.forceCompositionEnd()},Ua.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Ua.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout((function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()}),80))},Ua.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||ri(this.cm,(function(){return hn(e.cm)}))},Ua.prototype.setUneditable=function(e){e.contentEditable="false"},Ua.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||ni(this.cm,Ia)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Ua.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Ua.prototype.onContextMenu=function(){},Ua.prototype.resetPosition=function(){},Ua.prototype.needsContentAttribute=!0;var Xa=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new j,this.hasSelection=!1,this.composing=null,this.resetting=!1};Xa.prototype.init=function(e){var t=this,r=this,n=this.cm;this.createField(e);var i=this.textarea;function o(e){if(!ye(n,e)){if(n.somethingSelected())Fa({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var t=Ra(n);Fa({lineWise:!0,text:t.text}),"cut"==e.type?n.setSelections(t.ranges,null,V):(r.prevInput="",i.value=t.text.join("\n"),I(i))}"cut"==e.type&&(n.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(i.style.width="0px"),he(i,"input",(function(){a&&s>=9&&t.hasSelection&&(t.hasSelection=null),r.poll()})),he(i,"paste",(function(e){ye(n,e)||Wa(e,n)||(n.state.pasteIncoming=+new Date,r.fastPoll())})),he(i,"cut",o),he(i,"copy",o),he(e.scroller,"paste",(function(t){if(!Cr(e,t)&&!ye(n,t)){if(!i.dispatchEvent)return n.state.pasteIncoming=+new Date,void r.focus();var o=new Event("paste");o.clipboardData=t.clipboardData,i.dispatchEvent(o)}})),he(e.lineSpace,"selectstart",(function(t){Cr(e,t)||_e(t)})),he(i,"compositionstart",(function(){var e=n.getCursor("from");r.composing&&r.composing.range.clear(),r.composing={start:e,range:n.markText(e,n.getCursor("to"),{className:"CodeMirror-composing"})}})),he(i,"compositionend",(function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)}))},Xa.prototype.createField=function(e){this.wrapper=qa(),this.textarea=this.wrapper.firstChild},Xa.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute("aria-label",e):this.textarea.removeAttribute("aria-label")},Xa.prototype.prepareSelection=function(){var e=this.cm,t=e.display,r=e.doc,n=xn(e);if(e.options.moveInputWithCursor){var i=Xr(e,r.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),a=t.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+a.top-o.top)),n.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+a.left-o.left))}return n},Xa.prototype.showSelection=function(e){var t=this.cm.display;N(t.cursorDiv,e.cursors),N(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Xa.prototype.reset=function(e){if(!(this.contextMenuPending||this.composing&&e)){var t=this.cm;if(this.resetting=!0,t.somethingSelected()){this.prevInput="";var r=t.getSelection();this.textarea.value=r,t.state.focused&&I(this.textarea),a&&s>=9&&(this.hasSelection=r)}else e||(this.prevInput=this.textarea.value="",a&&s>=9&&(this.hasSelection=null));this.resetting=!1}},Xa.prototype.getField=function(){return this.textarea},Xa.prototype.supportsTouch=function(){return!1},Xa.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!y||D(this.textarea.ownerDocument)!=this.textarea))try{this.textarea.focus()}catch(e){}},Xa.prototype.blur=function(){this.textarea.blur()},Xa.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Xa.prototype.receivedFocus=function(){this.slowPoll()},Xa.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,(function(){e.poll(),e.cm.state.focused&&e.slowPoll()}))},Xa.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,(function r(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,r))}))},Xa.prototype.poll=function(){var e=this,t=this.cm,r=this.textarea,n=this.prevInput;if(this.contextMenuPending||this.resetting||!t.state.focused||Fe(r)&&!n&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=r.value;if(i==n&&!t.somethingSelected())return!1;if(a&&s>=9&&this.hasSelection===i||b&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||n||(n="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var l=0,c=Math.min(n.length,i.length);l1e3||i.indexOf("\n")>-1?r.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))})),!0},Xa.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Xa.prototype.onKeyPress=function(){a&&s>=9&&(this.hasSelection=null),this.fastPoll()},Xa.prototype.onContextMenu=function(e){var t=this,r=t.cm,n=r.display,i=t.textarea;t.contextMenuPending&&t.contextMenuPending();var o=fn(r,e),c=n.scroller.scrollTop;if(o&&!f){r.options.resetSelectionOnContextMenu&&-1==r.doc.sel.contains(o)&&ni(r,no)(r.doc,Ni(o),V);var u,d=i.style.cssText,p=t.wrapper.style.cssText,h=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",i.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-h.top-5)+"px; left: "+(e.clientX-h.left-5)+"px;\n z-index: 1000; background: "+(a?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(u=i.ownerDocument.defaultView.scrollY),n.input.focus(),l&&i.ownerDocument.defaultView.scrollTo(null,u),n.input.reset(),r.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=v,n.selForContextMenu=r.doc.sel,clearTimeout(n.detectingSelectAll),a&&s>=9&&g(),C){Se(e);var m=function(){ge(window,"mouseup",m),setTimeout(v,20)};he(window,"mouseup",m)}else setTimeout(v,50)}function g(){if(null!=i.selectionStart){var e=r.somethingSelected(),o="​"+(e?i.value:"");i.value="⇚",i.value=o,t.prevInput=e?"":"​",i.selectionStart=1,i.selectionEnd=o.length,n.selForContextMenu=r.doc.sel}}function v(){if(t.contextMenuPending==v&&(t.contextMenuPending=!1,t.wrapper.style.cssText=p,i.style.cssText=d,a&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=c),null!=i.selectionStart)){(!a||a&&s<9)&&g();var e=0,o=function(){n.selForContextMenu==r.doc.sel&&0==i.selectionStart&&i.selectionEnd>0&&"​"==t.prevInput?ni(r,fo)(r):e++<10?n.detectingSelectAll=setTimeout(o,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(o,200)}}},Xa.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e,this.textarea.readOnly=!!e},Xa.prototype.setUneditable=function(){},Xa.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function r(r,n,i,o){e.defaults[r]=n,i&&(t[r]=o?function(e,t,r){r!=La&&i(e,t,r)}:i)}e.defineOption=r,e.Init=La,r("value","",(function(e,t){return e.setValue(t)}),!0),r("mode",null,(function(e,t){e.doc.modeOption=t,Ei(e)}),!0),r("indentUnit",2,Ei,!0),r("indentWithTabs",!1),r("smartIndent",!0),r("tabSize",4,(function(e){Fi(e),jr(e),hn(e)}),!0),r("lineSeparator",null,(function(e,t){if(e.doc.lineSep=t,t){var r=[],n=e.doc.first;e.doc.iter((function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,r.push(nt(n,o))}n++}));for(var i=r.length-1;i>=0;i--)bo(e.doc,t,r[i],nt(r[i].line,r[i].ch+t.length))}})),r("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,(function(e,t,r){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),r!=La&&e.refresh()})),r("specialCharPlaceholder",tr,(function(e){return e.refresh()}),!0),r("electricChars",!0),r("inputStyle",y?"contenteditable":"textarea",(function(){throw new Error("inputStyle can not (yet) be changed in a running editor")}),!0),r("spellcheck",!1,(function(e,t){return e.getInputField().spellcheck=t}),!0),r("autocorrect",!1,(function(e,t){return e.getInputField().autocorrect=t}),!0),r("autocapitalize",!1,(function(e,t){return e.getInputField().autocapitalize=t}),!0),r("rtlMoveVisually",!w),r("wholeLineUpdateBefore",!0),r("theme","default",(function(e){Sa(e),bi(e)}),!0),r("keyMap","default",(function(e,t,r){var n=ea(t),i=r!=La&&ea(r);i&&i.detach&&i.detach(e,n),n.attach&&n.attach(e,i||null)})),r("extraKeys",null),r("configureMouse",null),r("lineWrapping",!1,za,!0),r("gutters",[],(function(e,t){e.display.gutterSpecs=vi(t,e.options.lineNumbers),bi(e)}),!0),r("fixedGutter",!0,(function(e,t){e.display.gutters.style.left=t?cn(e.display)+"px":"0",e.refresh()}),!0),r("coverGutterNextToScrollbar",!1,(function(e){return Un(e)}),!0),r("scrollbarStyle","native",(function(e){Gn(e),Un(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)}),!0),r("lineNumbers",!1,(function(e,t){e.display.gutterSpecs=vi(e.options.gutters,t),bi(e)}),!0),r("firstLineNumber",1,bi,!0),r("lineNumberFormatter",(function(e){return e}),bi,!0),r("showCursorWhenSelecting",!1,bn,!0),r("resetSelectionOnContextMenu",!0),r("lineWiseCopyCut",!0),r("pasteLinesPerSelection",!0),r("selectionsMayTouch",!1),r("readOnly",!1,(function(e,t){"nocursor"==t&&(Mn(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)})),r("screenReaderLabel",null,(function(e,t){t=""===t?null:t,e.display.input.screenReaderLabelChanged(t)})),r("disableInput",!1,(function(e,t){t||e.display.input.reset()}),!0),r("dragDrop",!0,Na),r("allowDropFileTypes",null),r("cursorBlinkRate",530),r("cursorScrollMargin",0),r("cursorHeight",1,bn,!0),r("singleCursorHeightPerLine",!0,bn,!0),r("workTime",100),r("workDelay",100),r("flattenSpans",!0,Fi,!0),r("addModeClass",!1,Fi,!0),r("pollInterval",100),r("undoDepth",200,(function(e,t){return e.doc.history.undoDepth=t})),r("historyEventDelay",1250),r("viewportMargin",10,(function(e){return e.refresh()}),!0),r("maxHighlightLength",1e4,Fi,!0),r("moveInputWithCursor",!0,(function(e,t){t||e.display.input.resetPosition()})),r("tabindex",null,(function(e,t){return e.display.input.getField().tabIndex=t||""})),r("autofocus",null),r("direction","ltr",(function(e,t){return e.doc.setDirection(t)}),!0),r("phrases",null)}(Oa),function(e){var t=e.optionHandlers,r=e.helpers={};e.prototype={constructor:e,focus:function(){P(this).focus(),this.display.input.focus()},setOption:function(e,r){var n=this.options,i=n[e];n[e]==r&&"mode"!=e||(n[e]=r,t.hasOwnProperty(e)&&ni(this,t[e])(this,r,i),ve(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](ea(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,r=0;rr&&(Da(this,i.head.line,e,!0),r=i.head.line,n==this.doc.sel.primIndex&&En(this));else{var o=i.from(),a=i.to(),s=Math.max(r,o.line);r=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var l=s;l0&&eo(this.doc,n,new Ti(o,c[n].to()),V)}}})),getTokenAt:function(e,t){return wt(this,e,t)},getLineTokens:function(e,t){return wt(this,nt(e),t,!0)},getTokenTypeAt:function(e){e=ut(this.doc,e);var t,r=mt(this,Xe(this.doc,e.line)),n=0,i=(r.length-1)/2,o=e.ch;if(0==o)t=r[2];else for(;;){var a=n+i>>1;if((a?r[2*a-1]:0)>=o)i=a;else{if(!(r[2*a+1]o&&(e=o,i=!0),n=Xe(this.doc,e)}else n=e;return $r(this,n,{top:0,left:0},t||"page",r||i).top+(i?this.doc.height-$t(n):0)},defaultTextHeight:function(){return an(this.display)},defaultCharWidth:function(){return sn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,r,n,i){var o,a,s,l=this.display,c=(e=Xr(this,ut(this.doc,e))).bottom,u=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),l.sizer.appendChild(t),"over"==n)c=e.top;else if("above"==n||"near"==n){var d=Math.max(l.wrapper.clientHeight,this.doc.height),f=Math.max(l.sizer.clientWidth,l.lineSpace.clientWidth);("above"==n||e.bottom+t.offsetHeight>d)&&e.top>t.offsetHeight?c=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=d&&(c=e.bottom),u+t.offsetWidth>f&&(u=f-t.offsetWidth)}t.style.top=c+"px",t.style.left=t.style.right="","right"==i?(u=l.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?u=0:"middle"==i&&(u=(l.sizer.clientWidth-t.offsetWidth)/2),t.style.left=u+"px"),r&&(o=this,a={left:u,top:c,right:u+t.offsetWidth,bottom:c+t.offsetHeight},null!=(s=An(o,a)).scrollTop&&Pn(o,s.scrollTop),null!=s.scrollLeft&&Hn(o,s.scrollLeft))},triggerOnKeyDown:ii(ha),triggerOnKeyPress:ii(ga),triggerOnKeyUp:ma,triggerOnMouseDown:ii(xa),execCommand:function(e){if(oa.hasOwnProperty(e))return oa[e].call(null,this)},triggerElectric:ii((function(e){Pa(this,e)})),findPosH:function(e,t,r,n){var i=1;t<0&&(i=-1,t=-t);for(var o=ut(this.doc,e),a=0;a0&&a(t.charAt(r-1));)--r;for(;n.5||this.options.lineWrapping)&&dn(this),ve(this,"refresh",this)})),swapDoc:ii((function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Ri(this,e),jr(this),this.display.input.reset(),Fn(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,ur(this,"swapDoc",this,t),t})),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},we(e),e.registerHelper=function(t,n,i){r.hasOwnProperty(t)||(r[t]=e[t]={_global:[]}),r[t][n]=i},e.registerGlobalHelper=function(t,n,i,o){e.registerHelper(t,n,o),r[t]._global.push({pred:i,val:o})}}(Oa);var Ya="iter insert remove copy getEditor constructor".split(" ");for(var Qa in Fo.prototype)Fo.prototype.hasOwnProperty(Qa)&&B(Ya,Qa)<0&&(Oa.prototype[Qa]=function(e){return function(){return e.apply(this.doc,arguments)}}(Fo.prototype[Qa]));return we(Fo),Oa.inputStyles={textarea:Xa,contenteditable:Ua},Oa.defineMode=function(e){Oa.defaults.mode||"null"==e||(Oa.defaults.mode=e),He.apply(this,arguments)},Oa.defineMIME=function(e,t){Re[e]=t},Oa.defineMode("null",(function(){return{token:function(e){return e.skipToEnd()}}})),Oa.defineMIME("text/plain","null"),Oa.defineExtension=function(e,t){Oa.prototype[e]=t},Oa.defineDocExtension=function(e,t){Fo.prototype[e]=t},Oa.fromTextArea=function(e,t){if((t=t?H(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var r=D(e.ownerDocument);t.autofocus=r==e||null!=e.getAttribute("autofocus")&&r==document.body}function n(){e.value=s.getValue()}var i;if(e.form&&(he(e.form,"submit",n),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var a=o.submit=function(){n(),o.submit=i,o.submit(),o.submit=a}}catch(e){}}t.finishInit=function(r){r.save=n,r.getTextArea=function(){return e},r.toTextArea=function(){r.toTextArea=isNaN,n(),e.parentNode.removeChild(r.getWrapperElement()),e.style.display="",e.form&&(ge(e.form,"submit",n),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=i))}},e.style.display="none";var s=Oa((function(t){return e.parentNode.insertBefore(t,e.nextSibling)}),t);return s},function(e){e.off=ge,e.on=he,e.wheelEventPixels=Ci,e.Doc=Fo,e.splitLines=Ee,e.countColumn=q,e.findColumn=K,e.isWordChar=re,e.Pass=U,e.signal=ve,e.Line=Xt,e.changeEnd=zi,e.scrollbarModel=$n,e.Pos=nt,e.cmpPos=it,e.modes=Pe,e.mimeModes=Re,e.resolveMode=qe,e.getMode=je,e.modeExtensions=Be,e.extendMode=Ue,e.copyState=Ve,e.startState=Ge,e.innerMode=$e,e.commands=oa,e.keyMap=Go,e.keyName=Jo,e.isModifierKey=Qo,e.lookupKey=Yo,e.normalizeKeyMap=Xo,e.StringStream=Ke,e.SharedTextMarker=Oo,e.TextMarker=No,e.LineWidget=Lo,e.e_preventDefault=_e,e.e_stopPropagation=ke,e.e_stop=Se,e.addClass=E,e.contains=A,e.rmClass=T,e.keyNames=Bo}(Oa),Oa.version="5.65.8",Oa}()},16792:(e,t,r)=>{!function(e){"use strict";e.defineMode("javascript",(function(t,r){var n,i,o=t.indentUnit,a=r.statementIndent,s=r.jsonld,l=r.json||s,c=!1!==r.trackScope,u=r.typescript,d=r.wordCharacters||/[\w$\xa1-\uffff]/,f=function(){function e(e){return{type:e,style:"keyword"}}var t=e("keyword a"),r=e("keyword b"),n=e("keyword c"),i=e("keyword d"),o=e("operator"),a={type:"atom",style:"atom"};return{if:e("if"),while:t,with:t,else:r,do:r,try:r,finally:r,return:i,break:i,continue:i,new:e("new"),delete:n,void:n,throw:n,debugger:e("debugger"),var:e("var"),const:e("var"),let:e("var"),function:e("function"),catch:e("catch"),for:e("for"),switch:e("switch"),case:e("case"),default:e("default"),in:o,typeof:o,instanceof:o,true:a,false:a,null:a,undefined:a,NaN:a,Infinity:a,this:e("this"),class:e("class"),super:e("atom"),yield:n,export:e("export"),import:e("import"),extends:n,await:n}}(),p=/[+\-*&%=<>!?|~^@]/,h=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function m(e,t,r){return n=e,i=r,t}function g(e,t){var r,n=e.next();if('"'==n||"'"==n)return t.tokenize=(r=n,function(e,t){var n,i=!1;if(s&&"@"==e.peek()&&e.match(h))return t.tokenize=g,m("jsonld-keyword","meta");for(;null!=(n=e.next())&&(n!=r||i);)i=!i&&"\\"==n;return i||(t.tokenize=g),m("string","string")}),t.tokenize(e,t);if("."==n&&e.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return m("number","number");if("."==n&&e.match(".."))return m("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(n))return m(n);if("="==n&&e.eat(">"))return m("=>","operator");if("0"==n&&e.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return m("number","number");if(/\d/.test(n))return e.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),m("number","number");if("/"==n)return e.eat("*")?(t.tokenize=v,v(e,t)):e.eat("/")?(e.skipToEnd(),m("comment","comment")):Je(e,t,1)?(function(e){for(var t,r=!1,n=!1;null!=(t=e.next());){if(!r){if("/"==t&&!n)return;"["==t?n=!0:n&&"]"==t&&(n=!1)}r=!r&&"\\"==t}}(e),e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),m("regexp","string-2")):(e.eat("="),m("operator","operator",e.current()));if("`"==n)return t.tokenize=y,y(e,t);if("#"==n&&"!"==e.peek())return e.skipToEnd(),m("meta","meta");if("#"==n&&e.eatWhile(d))return m("variable","property");if("<"==n&&e.match("!--")||"-"==n&&e.match("->")&&!/\S/.test(e.string.slice(0,e.start)))return e.skipToEnd(),m("comment","comment");if(p.test(n))return">"==n&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=n&&"="!=n||e.eat("="):/[<>*+\-|&?]/.test(n)&&(e.eat(n),">"==n&&e.eat(n))),"?"==n&&e.eat(".")?m("."):m("operator","operator",e.current());if(d.test(n)){e.eatWhile(d);var i=e.current();if("."!=t.lastType){if(f.propertyIsEnumerable(i)){var o=f[i];return m(o.type,o.style,i)}if("async"==i&&e.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return m("async","keyword",i)}return m("variable","variable",i)}}function v(e,t){for(var r,n=!1;r=e.next();){if("/"==r&&n){t.tokenize=g;break}n="*"==r}return m("comment","comment")}function y(e,t){for(var r,n=!1;null!=(r=e.next());){if(!n&&("`"==r||"$"==r&&e.eat("{"))){t.tokenize=g;break}n=!n&&"\\"==r}return m("quasi","string-2",e.current())}function b(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var r=e.string.indexOf("=>",e.start);if(!(r<0)){if(u){var n=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,r));n&&(r=n.index)}for(var i=0,o=!1,a=r-1;a>=0;--a){var s=e.string.charAt(a),l="([{}])".indexOf(s);if(l>=0&&l<3){if(!i){++a;break}if(0==--i){"("==s&&(o=!0);break}}else if(l>=3&&l<6)++i;else if(d.test(s))o=!0;else if(/["'\/`]/.test(s))for(;;--a){if(0==a)return;if(e.string.charAt(a-1)==s&&"\\"!=e.string.charAt(a-2)){a--;break}}else if(o&&!i){++a;break}}o&&!i&&(t.fatArrowAt=a)}}var x={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,import:!0,"jsonld-keyword":!0};function w(e,t,r,n,i,o){this.indented=e,this.column=t,this.type=r,this.prev=i,this.info=o,null!=n&&(this.align=n)}function _(e,t){if(!c)return!1;for(var r=e.localVars;r;r=r.next)if(r.name==t)return!0;for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return!0}function k(e,t,r,n,i){var o=e.cc;for(C.state=e,C.stream=i,C.marked=null,C.cc=o,C.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((o.length?o.pop():l?j:H)(r,n)){for(;o.length&&o[o.length-1].lex;)o.pop()();return C.marked?C.marked:"variable"==r&&_(e,n)?"variable-2":t}}var C={state:null,column:null,marked:null,cc:null};function S(){for(var e=arguments.length-1;e>=0;e--)C.cc.push(arguments[e])}function L(){return S.apply(null,arguments),!0}function T(e,t){for(var r=t;r;r=r.next)if(r.name==e)return!0;return!1}function M(e){var t=C.state;if(C.marked="def",c){if(t.context)if("var"==t.lexical.info&&t.context&&t.context.block){var n=N(e,t.context);if(null!=n)return void(t.context=n)}else if(!T(e,t.localVars))return void(t.localVars=new A(e,t.localVars));r.globalVars&&!T(e,t.globalVars)&&(t.globalVars=new A(e,t.globalVars))}}function N(e,t){if(t){if(t.block){var r=N(e,t.prev);return r?r==t.prev?t:new O(r,t.vars,!0):null}return T(e,t.vars)?t:new O(t.prev,new A(e,t.vars),!1)}return null}function z(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function O(e,t,r){this.prev=e,this.vars=t,this.block=r}function A(e,t){this.name=e,this.next=t}var D=new A("this",new A("arguments",null));function E(){C.state.context=new O(C.state.context,C.state.localVars,!1),C.state.localVars=D}function F(){C.state.context=new O(C.state.context,C.state.localVars,!0),C.state.localVars=null}function I(){C.state.localVars=C.state.context.vars,C.state.context=C.state.context.prev}function W(e,t){var r=function(){var r=C.state,n=r.indented;if("stat"==r.lexical.type)n=r.lexical.indented;else for(var i=r.lexical;i&&")"==i.type&&i.align;i=i.prev)n=i.indented;r.lexical=new w(n,C.stream.column(),e,null,r.lexical,t)};return r.lex=!0,r}function P(){var e=C.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function R(e){return function t(r){return r==e?L():";"==e||"}"==r||")"==r||"]"==r?S():L(t)}}function H(e,t){return"var"==e?L(W("vardef",t),Ce,R(";"),P):"keyword a"==e?L(W("form"),U,H,P):"keyword b"==e?L(W("form"),H,P):"keyword d"==e?C.stream.match(/^\s*$/,!1)?L():L(W("stat"),$,R(";"),P):"debugger"==e?L(R(";")):"{"==e?L(W("}"),F,le,P,I):";"==e?L():"if"==e?("else"==C.state.lexical.info&&C.state.cc[C.state.cc.length-1]==P&&C.state.cc.pop()(),L(W("form"),U,H,P,ze)):"function"==e?L(Ee):"for"==e?L(W("form"),F,Oe,H,I,P):"class"==e||u&&"interface"==t?(C.marked="keyword",L(W("form","class"==e?e:t),Re,P)):"variable"==e?u&&"declare"==t?(C.marked="keyword",L(H)):u&&("module"==t||"enum"==t||"type"==t)&&C.stream.match(/^\s*\w/,!1)?(C.marked="keyword","enum"==t?L(Qe):"type"==t?L(Ie,R("operator"),pe,R(";")):L(W("form"),Se,R("{"),W("}"),le,P,P)):u&&"namespace"==t?(C.marked="keyword",L(W("form"),j,H,P)):u&&"abstract"==t?(C.marked="keyword",L(H)):L(W("stat"),te):"switch"==e?L(W("form"),U,R("{"),W("}","switch"),F,le,P,P,I):"case"==e?L(j,R(":")):"default"==e?L(R(":")):"catch"==e?L(W("form"),E,q,H,P,I):"export"==e?L(W("stat"),Be,P):"import"==e?L(W("stat"),Ve,P):"async"==e?L(H):"@"==t?L(j,H):S(W("stat"),j,R(";"),P)}function q(e){if("("==e)return L(We,R(")"))}function j(e,t){return V(e,t,!1)}function B(e,t){return V(e,t,!0)}function U(e){return"("!=e?S():L(W(")"),$,R(")"),P)}function V(e,t,r){if(C.state.fatArrowAt==C.stream.start){var n=r?Z:Q;if("("==e)return L(E,W(")"),ae(We,")"),P,R("=>"),n,I);if("variable"==e)return S(E,Se,R("=>"),n,I)}var i=r?K:G;return x.hasOwnProperty(e)?L(i):"function"==e?L(Ee,i):"class"==e||u&&"interface"==t?(C.marked="keyword",L(W("form"),Pe,P)):"keyword c"==e||"async"==e?L(r?B:j):"("==e?L(W(")"),$,R(")"),P,i):"operator"==e||"spread"==e?L(r?B:j):"["==e?L(W("]"),Ye,P,i):"{"==e?se(ne,"}",null,i):"quasi"==e?S(X,i):"new"==e?L(function(e){return function(t){return"."==t?L(e?ee:J):"variable"==t&&u?L(we,e?K:G):S(e?B:j)}}(r)):L()}function $(e){return e.match(/[;\}\)\],]/)?S():S(j)}function G(e,t){return","==e?L($):K(e,t,!1)}function K(e,t,r){var n=0==r?G:K,i=0==r?j:B;return"=>"==e?L(E,r?Z:Q,I):"operator"==e?/\+\+|--/.test(t)||u&&"!"==t?L(n):u&&"<"==t&&C.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?L(W(">"),ae(pe,">"),P,n):"?"==t?L(j,R(":"),i):L(i):"quasi"==e?S(X,n):";"!=e?"("==e?se(B,")","call",n):"."==e?L(re,n):"["==e?L(W("]"),$,R("]"),P,n):u&&"as"==t?(C.marked="keyword",L(pe,n)):"regexp"==e?(C.state.lastType=C.marked="operator",C.stream.backUp(C.stream.pos-C.stream.start-1),L(i)):void 0:void 0}function X(e,t){return"quasi"!=e?S():"${"!=t.slice(t.length-2)?L(X):L($,Y)}function Y(e){if("}"==e)return C.marked="string-2",C.state.tokenize=y,L(X)}function Q(e){return b(C.stream,C.state),S("{"==e?H:j)}function Z(e){return b(C.stream,C.state),S("{"==e?H:B)}function J(e,t){if("target"==t)return C.marked="keyword",L(G)}function ee(e,t){if("target"==t)return C.marked="keyword",L(K)}function te(e){return":"==e?L(P,H):S(G,R(";"),P)}function re(e){if("variable"==e)return C.marked="property",L()}function ne(e,t){return"async"==e?(C.marked="property",L(ne)):"variable"==e||"keyword"==C.style?(C.marked="property","get"==t||"set"==t?L(ie):(u&&C.state.fatArrowAt==C.stream.start&&(r=C.stream.match(/^\s*:\s*/,!1))&&(C.state.fatArrowAt=C.stream.pos+r[0].length),L(oe))):"number"==e||"string"==e?(C.marked=s?"property":C.style+" property",L(oe)):"jsonld-keyword"==e?L(oe):u&&z(t)?(C.marked="keyword",L(ne)):"["==e?L(j,ce,R("]"),oe):"spread"==e?L(B,oe):"*"==t?(C.marked="keyword",L(ne)):":"==e?S(oe):void 0;var r}function ie(e){return"variable"!=e?S(oe):(C.marked="property",L(Ee))}function oe(e){return":"==e?L(B):"("==e?S(Ee):void 0}function ae(e,t,r){function n(i,o){if(r?r.indexOf(i)>-1:","==i){var a=C.state.lexical;return"call"==a.info&&(a.pos=(a.pos||0)+1),L((function(r,n){return r==t||n==t?S():S(e)}),n)}return i==t||o==t?L():r&&r.indexOf(";")>-1?S(e):L(R(t))}return function(r,i){return r==t||i==t?L():S(e,n)}}function se(e,t,r){for(var n=3;n"),pe):"quasi"==e?S(ve,xe):void 0}function he(e){if("=>"==e)return L(pe)}function me(e){return e.match(/[\}\)\]]/)?L():","==e||";"==e?L(me):S(ge,me)}function ge(e,t){return"variable"==e||"keyword"==C.style?(C.marked="property",L(ge)):"?"==t||"number"==e||"string"==e?L(ge):":"==e?L(pe):"["==e?L(R("variable"),ue,R("]"),ge):"("==e?S(Fe,ge):e.match(/[;\}\)\],]/)?void 0:L()}function ve(e,t){return"quasi"!=e?S():"${"!=t.slice(t.length-2)?L(ve):L(pe,ye)}function ye(e){if("}"==e)return C.marked="string-2",C.state.tokenize=y,L(ve)}function be(e,t){return"variable"==e&&C.stream.match(/^\s*[?:]/,!1)||"?"==t?L(be):":"==e?L(pe):"spread"==e?L(be):S(pe)}function xe(e,t){return"<"==t?L(W(">"),ae(pe,">"),P,xe):"|"==t||"."==e||"&"==t?L(pe):"["==e?L(pe,R("]"),xe):"extends"==t||"implements"==t?(C.marked="keyword",L(pe)):"?"==t?L(pe,R(":"),pe):void 0}function we(e,t){if("<"==t)return L(W(">"),ae(pe,">"),P,xe)}function _e(){return S(pe,ke)}function ke(e,t){if("="==t)return L(pe)}function Ce(e,t){return"enum"==t?(C.marked="keyword",L(Qe)):S(Se,ce,Me,Ne)}function Se(e,t){return u&&z(t)?(C.marked="keyword",L(Se)):"variable"==e?(M(t),L()):"spread"==e?L(Se):"["==e?se(Te,"]"):"{"==e?se(Le,"}"):void 0}function Le(e,t){return"variable"!=e||C.stream.match(/^\s*:/,!1)?("variable"==e&&(C.marked="property"),"spread"==e?L(Se):"}"==e?S():"["==e?L(j,R("]"),R(":"),Le):L(R(":"),Se,Me)):(M(t),L(Me))}function Te(){return S(Se,Me)}function Me(e,t){if("="==t)return L(B)}function Ne(e){if(","==e)return L(Ce)}function ze(e,t){if("keyword b"==e&&"else"==t)return L(W("form","else"),H,P)}function Oe(e,t){return"await"==t?L(Oe):"("==e?L(W(")"),Ae,P):void 0}function Ae(e){return"var"==e?L(Ce,De):"variable"==e?L(De):S(De)}function De(e,t){return")"==e?L():";"==e?L(De):"in"==t||"of"==t?(C.marked="keyword",L(j,De)):S(j,De)}function Ee(e,t){return"*"==t?(C.marked="keyword",L(Ee)):"variable"==e?(M(t),L(Ee)):"("==e?L(E,W(")"),ae(We,")"),P,de,H,I):u&&"<"==t?L(W(">"),ae(_e,">"),P,Ee):void 0}function Fe(e,t){return"*"==t?(C.marked="keyword",L(Fe)):"variable"==e?(M(t),L(Fe)):"("==e?L(E,W(")"),ae(We,")"),P,de,I):u&&"<"==t?L(W(">"),ae(_e,">"),P,Fe):void 0}function Ie(e,t){return"keyword"==e||"variable"==e?(C.marked="type",L(Ie)):"<"==t?L(W(">"),ae(_e,">"),P):void 0}function We(e,t){return"@"==t&&L(j,We),"spread"==e?L(We):u&&z(t)?(C.marked="keyword",L(We)):u&&"this"==e?L(ce,Me):S(Se,ce,Me)}function Pe(e,t){return"variable"==e?Re(e,t):He(e,t)}function Re(e,t){if("variable"==e)return M(t),L(He)}function He(e,t){return"<"==t?L(W(">"),ae(_e,">"),P,He):"extends"==t||"implements"==t||u&&","==e?("implements"==t&&(C.marked="keyword"),L(u?pe:j,He)):"{"==e?L(W("}"),qe,P):void 0}function qe(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||u&&z(t))&&C.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(C.marked="keyword",L(qe)):"variable"==e||"keyword"==C.style?(C.marked="property",L(je,qe)):"number"==e||"string"==e?L(je,qe):"["==e?L(j,ce,R("]"),je,qe):"*"==t?(C.marked="keyword",L(qe)):u&&"("==e?S(Fe,qe):";"==e||","==e?L(qe):"}"==e?L():"@"==t?L(j,qe):void 0}function je(e,t){if("!"==t)return L(je);if("?"==t)return L(je);if(":"==e)return L(pe,Me);if("="==t)return L(B);var r=C.state.lexical.prev;return S(r&&"interface"==r.info?Fe:Ee)}function Be(e,t){return"*"==t?(C.marked="keyword",L(Xe,R(";"))):"default"==t?(C.marked="keyword",L(j,R(";"))):"{"==e?L(ae(Ue,"}"),Xe,R(";")):S(H)}function Ue(e,t){return"as"==t?(C.marked="keyword",L(R("variable"))):"variable"==e?S(B,Ue):void 0}function Ve(e){return"string"==e?L():"("==e?S(j):"."==e?S(G):S($e,Ge,Xe)}function $e(e,t){return"{"==e?se($e,"}"):("variable"==e&&M(t),"*"==t&&(C.marked="keyword"),L(Ke))}function Ge(e){if(","==e)return L($e,Ge)}function Ke(e,t){if("as"==t)return C.marked="keyword",L($e)}function Xe(e,t){if("from"==t)return C.marked="keyword",L(j)}function Ye(e){return"]"==e?L():S(ae(B,"]"))}function Qe(){return S(W("form"),Se,R("{"),W("}"),ae(Ze,"}"),P,P)}function Ze(){return S(Se,Me)}function Je(e,t,r){return t.tokenize==g&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(r||0)))}return E.lex=F.lex=!0,I.lex=!0,P.lex=!0,{startState:function(e){var t={tokenize:g,lastType:"sof",cc:[],lexical:new w((e||0)-o,0,"block",!1),localVars:r.localVars,context:r.localVars&&new O(null,null,!1),indented:e||0};return r.globalVars&&"object"==typeof r.globalVars&&(t.globalVars=r.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),b(e,t)),t.tokenize!=v&&e.eatSpace())return null;var r=t.tokenize(e,t);return"comment"==n?r:(t.lastType="operator"!=n||"++"!=i&&"--"!=i?n:"incdec",k(t,r,n,i,e))},indent:function(t,n){if(t.tokenize==v||t.tokenize==y)return e.Pass;if(t.tokenize!=g)return 0;var i,s=n&&n.charAt(0),l=t.lexical;if(!/^\s*else\b/.test(n))for(var c=t.cc.length-1;c>=0;--c){var u=t.cc[c];if(u==P)l=l.prev;else if(u!=ze&&u!=I)break}for(;("stat"==l.type||"form"==l.type)&&("}"==s||(i=t.cc[t.cc.length-1])&&(i==G||i==K)&&!/^[,\.=+\-*:?[\(]/.test(n));)l=l.prev;a&&")"==l.type&&"stat"==l.prev.type&&(l=l.prev);var d=l.type,f=s==d;return"vardef"==d?l.indented+("operator"==t.lastType||","==t.lastType?l.info.length+1:0):"form"==d&&"{"==s?l.indented:"form"==d?l.indented+o:"stat"==d?l.indented+(function(e,t){return"operator"==e.lastType||","==e.lastType||p.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}(t,n)?a||o:0):"switch"!=l.info||f||0==r.doubleIndentSwitch?l.align?l.column+(f?0:1):l.indented+(f?0:o):l.indented+(/^(?:case|default)\b/.test(n)?o:2*o)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:l?null:"/*",blockCommentEnd:l?null:"*/",blockCommentContinue:l?null:" * ",lineComment:l?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:l?"json":"javascript",jsonldMode:s,jsonMode:l,expressionAllowed:Je,skipExpression:function(t){k(t,"atom","atom","true",new e.StringStream("",2,null))}}})),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/manifest+json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})}(r(15237))},29532:(e,t,r)=>{!function(e){"use strict";function t(e){for(var t;null!=(t=e.next());)if("`"==t&&!e.eat("`"))return"variable-2";return e.backUp(e.current().length-1),e.eatWhile(/\w/)?"variable-2":null}function r(e){return e.eat("@")&&(e.match("session."),e.match("local."),e.match("global.")),e.eat("'")?(e.match(/^.*'/),"variable-2"):e.eat('"')?(e.match(/^.*"/),"variable-2"):e.eat("`")?(e.match(/^.*`/),"variable-2"):e.match(/^[0-9a-zA-Z$\.\_]+/)?"variable-2":null}function n(e){return e.eat("N")?"atom":e.match(/^[a-zA-Z.#!?]/)?"variable-2":null}e.defineMode("sql",(function(t,r){var n=r.client||{},s=r.atoms||{false:!0,true:!0,null:!0},l=r.builtin||o(a),c=r.keywords||o(i),u=r.operatorChars||/^[*+\-%<>!=&|~^\/]/,d=r.support||{},f=r.hooks||{},p=r.dateSQL||{date:!0,time:!0,timestamp:!0},h=!1!==r.backslashStringEscapes,m=r.brackets||/^[\{}\(\)\[\]]/,g=r.punctuation||/^[;.,:]/;function v(e,t){var r=e.next();if(f[r]){var i=f[r](e,t);if(!1!==i)return i}if(d.hexNumber&&("0"==r&&e.match(/^[xX][0-9a-fA-F]+/)||("x"==r||"X"==r)&&e.match(/^'[0-9a-fA-F]*'/)))return"number";if(d.binaryNumber&&(("b"==r||"B"==r)&&e.match(/^'[01]*'/)||"0"==r&&e.match(/^b[01]+/)))return"number";if(r.charCodeAt(0)>47&&r.charCodeAt(0)<58)return e.match(/^[0-9]*(\.[0-9]+)?([eE][-+]?[0-9]+)?/),d.decimallessFloat&&e.match(/^\.(?!\.)/),"number";if("?"==r&&(e.eatSpace()||e.eol()||e.eat(";")))return"variable-3";if("'"==r||'"'==r&&d.doubleQuote)return t.tokenize=y(r),t.tokenize(e,t);if((d.nCharCast&&("n"==r||"N"==r)||d.charsetCast&&"_"==r&&e.match(/[a-z][a-z0-9]*/i))&&("'"==e.peek()||'"'==e.peek()))return"keyword";if(d.escapeConstant&&("e"==r||"E"==r)&&("'"==e.peek()||'"'==e.peek()&&d.doubleQuote))return t.tokenize=function(e,t){return(t.tokenize=y(e.next(),!0))(e,t)},"keyword";if(d.commentSlashSlash&&"/"==r&&e.eat("/"))return e.skipToEnd(),"comment";if(d.commentHash&&"#"==r||"-"==r&&e.eat("-")&&(!d.commentSpaceRequired||e.eat(" ")))return e.skipToEnd(),"comment";if("/"==r&&e.eat("*"))return t.tokenize=b(1),t.tokenize(e,t);if("."!=r){if(u.test(r))return e.eatWhile(u),"operator";if(m.test(r))return"bracket";if(g.test(r))return e.eatWhile(g),"punctuation";if("{"==r&&(e.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/)||e.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/)))return"number";e.eatWhile(/^[_\w\d]/);var o=e.current().toLowerCase();return p.hasOwnProperty(o)&&(e.match(/^( )+'[^']*'/)||e.match(/^( )+"[^"]*"/))?"number":s.hasOwnProperty(o)?"atom":l.hasOwnProperty(o)?"type":c.hasOwnProperty(o)?"keyword":n.hasOwnProperty(o)?"builtin":null}return d.zerolessFloat&&e.match(/^(?:\d+(?:e[+-]?\d+)?)/i)?"number":e.match(/^\.+/)?null:d.ODBCdotTable&&e.match(/^[\w\d_$#]+/)?"variable-2":void 0}function y(e,t){return function(r,n){for(var i,o=!1;null!=(i=r.next());){if(i==e&&!o){n.tokenize=v;break}o=(h||t)&&!o&&"\\"==i}return"string"}}function b(e){return function(t,r){var n=t.match(/^.*?(\/\*|\*\/)/);return n?"/*"==n[1]?r.tokenize=b(e+1):r.tokenize=e>1?b(e-1):v:t.skipToEnd(),"comment"}}function x(e,t,r){t.context={prev:t.context,indent:e.indentation(),col:e.column(),type:r}}return{startState:function(){return{tokenize:v,context:null}},token:function(e,t){if(e.sol()&&t.context&&null==t.context.align&&(t.context.align=!1),t.tokenize==v&&e.eatSpace())return null;var r=t.tokenize(e,t);if("comment"==r)return r;t.context&&null==t.context.align&&(t.context.align=!0);var n=e.current();return"("==n?x(e,t,")"):"["==n?x(e,t,"]"):t.context&&t.context.type==n&&function(e){e.indent=e.context.indent,e.context=e.context.prev}(t),r},indent:function(r,n){var i=r.context;if(!i)return e.Pass;var o=n.charAt(0)==i.type;return i.align?i.col+(o?0:1):i.indent+(o?0:t.indentUnit)},blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:d.commentSlashSlash?"//":d.commentHash?"#":"--",closeBrackets:"()[]{}''\"\"``"}}));var i="alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit ";function o(e){for(var t={},r=e.split(" "),n=0;n!=^\&|\/]/,brackets:/^[\{}\(\)]/,punctuation:/^[;.,:/]/,backslashStringEscapes:!1,dateSQL:o("date datetimeoffset datetime2 smalldatetime datetime time"),hooks:{"@":r}}),e.defineMIME("text/x-mysql",{name:"sql",client:o("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),keywords:o(i+"accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),builtin:o("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),atoms:o("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,dateSQL:o("date time timestamp"),support:o("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),hooks:{"@":r,"`":t,"\\":n}}),e.defineMIME("text/x-mariadb",{name:"sql",client:o("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),keywords:o(i+"accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group group_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),builtin:o("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),atoms:o("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,dateSQL:o("date time timestamp"),support:o("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),hooks:{"@":r,"`":t,"\\":n}}),e.defineMIME("text/x-sqlite",{name:"sql",client:o("auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width"),keywords:o(i+"abort action add after all analyze attach autoincrement before begin cascade case cast check collate column commit conflict constraint cross current_date current_time current_timestamp database default deferrable deferred detach each else end escape except exclusive exists explain fail for foreign full glob if ignore immediate index indexed initially inner instead intersect isnull key left limit match natural no notnull null of offset outer plan pragma primary query raise recursive references regexp reindex release rename replace restrict right rollback row savepoint temp temporary then to transaction trigger unique using vacuum view virtual when with without"),builtin:o("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text clob bigint int int2 int8 integer float double char varchar date datetime year unsigned signed numeric real"),atoms:o("null current_date current_time current_timestamp"),operatorChars:/^[*+\-%<>!=&|/~]/,dateSQL:o("date time timestamp datetime"),support:o("decimallessFloat zerolessFloat"),identifierQuote:'"',hooks:{"@":r,":":r,"?":r,$:r,'"':function(e){for(var t;null!=(t=e.next());)if('"'==t&&!e.eat('"'))return"variable-2";return e.backUp(e.current().length-1),e.eatWhile(/\w/)?"variable-2":null},"`":t}}),e.defineMIME("text/x-cassandra",{name:"sql",client:{},keywords:o("add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime"),builtin:o("ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint"),atoms:o("false true infinity NaN"),operatorChars:/^[<>=]/,dateSQL:{},support:o("commentSlashSlash decimallessFloat"),hooks:{}}),e.defineMIME("text/x-plsql",{name:"sql",client:o("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"),keywords:o("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"),builtin:o("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"),operatorChars:/^[*\/+\-%<>!=~]/,dateSQL:o("date time timestamp"),support:o("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber")}),e.defineMIME("text/x-hive",{name:"sql",keywords:o("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with admin authorization char compact compactions conf cube current current_date current_timestamp day decimal defined dependency directories elem_type exchange file following for grouping hour ignore inner interval jar less logical macro minute month more none noscan over owner partialscan preceding pretty principals protection reload rewrite role roles rollup rows second server sets skewed transactions truncate unbounded unset uri user values window year"),builtin:o("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype key_type utctimestamp value_type varchar"),atoms:o("false true null unknown"),operatorChars:/^[*+\-%<>!=]/,dateSQL:o("date timestamp"),support:o("ODBCdotTable doubleQuote binaryNumber hexNumber")}),e.defineMIME("text/x-pgsql",{name:"sql",client:o("source"),keywords:o(i+"a abort abs absent absolute access according action ada add admin after aggregate alias all allocate also alter always analyse analyze and any are array array_agg array_max_cardinality as asc asensitive assert assertion assignment asymmetric at atomic attach attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli between bigint binary bit bit_length blob blocked bom boolean both breadth by c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain char char_length character character_length character_set_catalog character_set_name character_set_schema characteristics characters check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column column_name columns command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constant constraint constraint_catalog constraint_name constraint_schema constraints constructor contains content continue control conversion convert copy corr corresponding cost count covar_pop covar_samp create cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datatype date datetime_interval_code datetime_interval_precision day db deallocate debug dec decimal declare default defaults deferrable deferred defined definer degree delete delimiter delimiters dense_rank depends depth deref derived desc describe descriptor detach detail deterministic diagnostics dictionary disable discard disconnect dispatch distinct dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain double drop dump dynamic dynamic_function dynamic_function_code each element else elseif elsif empty enable encoding encrypted end end_frame end_partition endexec enforced enum equals errcode error escape event every except exception exclude excluding exclusive exec execute exists exit exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreach foreign fortran forward found frame_row free freeze from fs full function functions fusion g general generated get global go goto grant granted greatest group grouping groups handler having header hex hierarchy hint hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import in include including increment indent index indexes indicator info inherit inherits initially inline inner inout input insensitive insert instance instantiable instead int integer integrity intersect intersection interval into invoker is isnull isolation join k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like like_regex limit link listen ln load local localtime localtimestamp location locator lock locked log logged loop lower m map mapping match matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized not nothing notice notify notnull nowait nth_value ntile null nullable nullif nulls number numeric object occurrences_regex octet_length octets of off offset oids old on only open operator option options or order ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parallel parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password path percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding precision prepare prepared preserve primary print_strict_params prior privileges procedural procedure procedures program public publication query quote raise range rank read reads real reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result result_oid return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns reverse revoke right role rollback rollup routine routine_catalog routine_name routine_schema routines row row_count row_number rows rowtype rule savepoint scale schema schema_name schemas scope scope_catalog scope_name scope_schema scroll search second section security select selective self sensitive sequence sequences serializable server server_name session session_user set setof sets share show similar simple size skip slice smallint snapshot some source space specific specific_name specifictype sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable stacked standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time system_user t table table_name tables tablesample tablespace temp template temporary text then ties time timestamp timezone_hour timezone_minute to token top_level_count trailing transaction transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted union unique unknown unlink unlisten unlogged unnamed unnest until untyped update upper uri usage use_column use_variable user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of values var_pop var_samp varbinary varchar variable_conflict variadic varying verbose version versioning view views volatile warning when whenever where while whitespace width_bucket window with within without work wrapper write xml xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes zone"),builtin:o("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),atoms:o("false true null unknown"),operatorChars:/^[*\/+\-%<>!=&|^\/#@?~]/,backslashStringEscapes:!1,dateSQL:o("date time timestamp"),support:o("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast escapeConstant")}),e.defineMIME("text/x-gql",{name:"sql",keywords:o("ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where"),atoms:o("false true"),builtin:o("blob datetime first key __key__ string integer double boolean null"),operatorChars:/^[*+\-%<>!=]/}),e.defineMIME("text/x-gpsql",{name:"sql",client:o("source"),keywords:o("abort absolute access action active add admin after aggregate all also alter always analyse analyze and any array as asc assertion assignment asymmetric at authorization backward before begin between bigint binary bit boolean both by cache called cascade cascaded case cast chain char character characteristics check checkpoint class close cluster coalesce codegen collate column comment commit committed concurrency concurrently configuration connection constraint constraints contains content continue conversion copy cost cpu_rate_limit create createdb createexttable createrole createuser cross csv cube current current_catalog current_date current_role current_schema current_time current_timestamp current_user cursor cycle data database day deallocate dec decimal declare decode default defaults deferrable deferred definer delete delimiter delimiters deny desc dictionary disable discard distinct distributed do document domain double drop dxl each else enable encoding encrypted end enum errors escape every except exchange exclude excluding exclusive execute exists explain extension external extract false family fetch fields filespace fill filter first float following for force foreign format forward freeze from full function global grant granted greatest group group_id grouping handler hash having header hold host hour identity if ignore ilike immediate immutable implicit in including inclusive increment index indexes inherit inherits initially inline inner inout input insensitive insert instead int integer intersect interval into invoker is isnull isolation join key language large last leading least left level like limit list listen load local localtime localtimestamp location lock log login mapping master match maxvalue median merge minute minvalue missing mode modifies modify month move name names national natural nchar new newline next no nocreatedb nocreateexttable nocreaterole nocreateuser noinherit nologin none noovercommit nosuperuser not nothing notify notnull nowait null nullif nulls numeric object of off offset oids old on only operator option options or order ordered others out outer over overcommit overlaps overlay owned owner parser partial partition partitions passing password percent percentile_cont percentile_disc placing plans position preceding precision prepare prepared preserve primary prior privileges procedural procedure protocol queue quote randomly range read readable reads real reassign recheck recursive ref references reindex reject relative release rename repeatable replace replica reset resource restart restrict returning returns revoke right role rollback rollup rootpartition row rows rule savepoint scatter schema scroll search second security segment select sequence serializable session session_user set setof sets share show similar simple smallint some split sql stable standalone start statement statistics stdin stdout storage strict strip subpartition subpartitions substring superuser symmetric sysid system table tablespace temp template temporary text then threshold ties time timestamp to trailing transaction treat trigger trim true truncate trusted type unbounded uncommitted unencrypted union unique unknown unlisten until update user using vacuum valid validation validator value values varchar variadic varying verbose version view volatile web when where whitespace window with within without work writable write xml xmlattributes xmlconcat xmlelement xmlexists xmlforest xmlparse xmlpi xmlroot xmlserialize year yes zone"),builtin:o("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),atoms:o("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^\/#@?~]/,dateSQL:o("date time timestamp"),support:o("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast")}),e.defineMIME("text/x-sparksql",{name:"sql",keywords:o("add after all alter analyze and anti archive array as asc at between bucket buckets by cache cascade case cast change clear cluster clustered codegen collection column columns comment commit compact compactions compute concatenate cost create cross cube current current_date current_timestamp database databases data dbproperties defined delete delimited deny desc describe dfs directories distinct distribute drop else end escaped except exchange exists explain export extended external false fields fileformat first following for format formatted from full function functions global grant group grouping having if ignore import in index indexes inner inpath inputformat insert intersect interval into is items join keys last lateral lazy left like limit lines list load local location lock locks logical macro map minus msck natural no not null nulls of on optimize option options or order out outer outputformat over overwrite partition partitioned partitions percent preceding principals purge range recordreader recordwriter recover reduce refresh regexp rename repair replace reset restrict revoke right rlike role roles rollback rollup row rows schema schemas select semi separated serde serdeproperties set sets show skewed sort sorted start statistics stored stratify struct table tables tablesample tblproperties temp temporary terminated then to touch transaction transactions transform true truncate unarchive unbounded uncache union unlock unset use using values view when where window with"),builtin:o("abs acos acosh add_months aggregate and any approx_count_distinct approx_percentile array array_contains array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_repeat array_sort array_union arrays_overlap arrays_zip ascii asin asinh assert_true atan atan2 atanh avg base64 between bigint bin binary bit_and bit_count bit_get bit_length bit_or bit_xor bool_and bool_or boolean bround btrim cardinality case cast cbrt ceil ceiling char char_length character_length chr coalesce collect_list collect_set concat concat_ws conv corr cos cosh cot count count_if count_min_sketch covar_pop covar_samp crc32 cume_dist current_catalog current_database current_date current_timestamp current_timezone current_user date date_add date_format date_from_unix_date date_part date_sub date_trunc datediff day dayofmonth dayofweek dayofyear decimal decode degrees delimited dense_rank div double e element_at elt encode every exists exp explode explode_outer expm1 extract factorial filter find_in_set first first_value flatten float floor forall format_number format_string from_csv from_json from_unixtime from_utc_timestamp get_json_object getbit greatest grouping grouping_id hash hex hour hypot if ifnull in initcap inline inline_outer input_file_block_length input_file_block_start input_file_name inputformat instr int isnan isnotnull isnull java_method json_array_length json_object_keys json_tuple kurtosis lag last last_day last_value lcase lead least left length levenshtein like ln locate log log10 log1p log2 lower lpad ltrim make_date make_dt_interval make_interval make_timestamp make_ym_interval map map_concat map_entries map_filter map_from_arrays map_from_entries map_keys map_values map_zip_with max max_by md5 mean min min_by minute mod monotonically_increasing_id month months_between named_struct nanvl negative next_day not now nth_value ntile nullif nvl nvl2 octet_length or outputformat overlay parse_url percent_rank percentile percentile_approx pi pmod posexplode posexplode_outer position positive pow power printf quarter radians raise_error rand randn random rank rcfile reflect regexp regexp_extract regexp_extract_all regexp_like regexp_replace repeat replace reverse right rint rlike round row_number rpad rtrim schema_of_csv schema_of_json second sentences sequence sequencefile serde session_window sha sha1 sha2 shiftleft shiftright shiftrightunsigned shuffle sign signum sin sinh size skewness slice smallint some sort_array soundex space spark_partition_id split sqrt stack std stddev stddev_pop stddev_samp str_to_map string struct substr substring substring_index sum tan tanh textfile timestamp timestamp_micros timestamp_millis timestamp_seconds tinyint to_csv to_date to_json to_timestamp to_unix_timestamp to_utc_timestamp transform transform_keys transform_values translate trim trunc try_add try_divide typeof ucase unbase64 unhex uniontype unix_date unix_micros unix_millis unix_seconds unix_timestamp upper uuid var_pop var_samp variance version weekday weekofyear when width_bucket window xpath xpath_boolean xpath_double xpath_float xpath_int xpath_long xpath_number xpath_short xpath_string xxhash64 year zip_with"),atoms:o("false true null"),operatorChars:/^[*\/+\-%<>!=~&|^]/,dateSQL:o("date time timestamp"),support:o("ODBCdotTable doubleQuote zerolessFloat")}),e.defineMIME("text/x-esper",{name:"sql",client:o("source"),keywords:o("alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit after all and as at asc avedev avg between by case cast coalesce count create current_timestamp day days delete define desc distinct else end escape events every exists false first from full group having hour hours in inner insert instanceof into irstream is istream join last lastweekday left limit like max match_recognize matches median measures metadatasql min minute minutes msec millisecond milliseconds not null offset on or order outer output partition pattern prev prior regexp retain-union retain-intersection right rstream sec second seconds select set some snapshot sql stddev sum then true unidirectional until update variable weekday when where window"),builtin:{},atoms:o("false true null"),operatorChars:/^[*+\-%<>!=&|^\/#@?~]/,dateSQL:o("time"),support:o("decimallessFloat zerolessFloat binaryNumber hexNumber")}),e.defineMIME("text/x-trino",{name:"sql",keywords:o("abs absent acos add admin after all all_match alter analyze and any any_match approx_distinct approx_most_frequent approx_percentile approx_set arbitrary array_agg array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_sort array_union arrays_overlap as asc asin at at_timezone atan atan2 authorization avg bar bernoulli beta_cdf between bing_tile bing_tile_at bing_tile_coordinates bing_tile_polygon bing_tile_quadkey bing_tile_zoom_level bing_tiles_around bit_count bitwise_and bitwise_and_agg bitwise_left_shift bitwise_not bitwise_or bitwise_or_agg bitwise_right_shift bitwise_right_shift_arithmetic bitwise_xor bool_and bool_or both by call cardinality cascade case cast catalogs cbrt ceil ceiling char2hexint checksum chr classify coalesce codepoint column columns combinations comment commit committed concat concat_ws conditional constraint contains contains_sequence convex_hull_agg copartition corr cos cosh cosine_similarity count count_if covar_pop covar_samp crc32 create cross cube cume_dist current current_catalog current_date current_groups current_path current_role current_schema current_time current_timestamp current_timezone current_user data date_add date_diff date_format date_parse date_trunc day day_of_month day_of_week day_of_year deallocate default define definer degrees delete dense_rank deny desc describe descriptor distinct distributed dow doy drop e element_at else empty empty_approx_set encoding end error escape evaluate_classifier_predictions every except excluding execute exists exp explain extract false features fetch filter final first first_value flatten floor following for format format_datetime format_number from from_base from_base32 from_base64 from_base64url from_big_endian_32 from_big_endian_64 from_encoded_polyline from_geojson_geometry from_hex from_ieee754_32 from_ieee754_64 from_iso8601_date from_iso8601_timestamp from_iso8601_timestamp_nanos from_unixtime from_unixtime_nanos from_utf8 full functions geometric_mean geometry_from_hadoop_shape geometry_invalid_reason geometry_nearest_points geometry_to_bing_tiles geometry_union geometry_union_agg grant granted grants graphviz great_circle_distance greatest group grouping groups hamming_distance hash_counts having histogram hmac_md5 hmac_sha1 hmac_sha256 hmac_sha512 hour human_readable_seconds if ignore in including index infinity initial inner input insert intersect intersection_cardinality into inverse_beta_cdf inverse_normal_cdf invoker io is is_finite is_infinite is_json_scalar is_nan isolation jaccard_index join json_array json_array_contains json_array_get json_array_length json_exists json_extract json_extract_scalar json_format json_object json_parse json_query json_size json_value keep key keys kurtosis lag last last_day_of_month last_value lateral lead leading learn_classifier learn_libsvm_classifier learn_libsvm_regressor learn_regressor least left length level levenshtein_distance like limit line_interpolate_point line_interpolate_points line_locate_point listagg ln local localtime localtimestamp log log10 log2 logical lower lpad ltrim luhn_check make_set_digest map_agg map_concat map_entries map_filter map_from_entries map_keys map_union map_values map_zip_with match match_recognize matched matches materialized max max_by md5 measures merge merge_set_digest millisecond min min_by minute mod month multimap_agg multimap_from_entries murmur3 nan natural next nfc nfd nfkc nfkd ngrams no none none_match normal_cdf normalize not now nth_value ntile null nullif nulls numeric_histogram object objectid_timestamp of offset omit on one only option or order ordinality outer output over overflow parse_data_size parse_datetime parse_duration partition partitions passing past path pattern per percent_rank permute pi position pow power preceding prepare privileges properties prune qdigest_agg quarter quotes radians rand random range rank read recursive reduce reduce_agg refresh regexp_count regexp_extract regexp_extract_all regexp_like regexp_position regexp_replace regexp_split regr_intercept regr_slope regress rename render repeat repeatable replace reset respect restrict returning reverse revoke rgb right role roles rollback rollup round row_number rows rpad rtrim running scalar schema schemas second security seek select sequence serializable session set sets sha1 sha256 sha512 show shuffle sign simplify_geometry sin skewness skip slice some soundex spatial_partitioning spatial_partitions split split_part split_to_map split_to_multimap spooky_hash_v2_32 spooky_hash_v2_64 sqrt st_area st_asbinary st_astext st_boundary st_buffer st_centroid st_contains st_convexhull st_coorddim st_crosses st_difference st_dimension st_disjoint st_distance st_endpoint st_envelope st_envelopeaspts st_equals st_exteriorring st_geometries st_geometryfromtext st_geometryn st_geometrytype st_geomfrombinary st_interiorringn st_interiorrings st_intersection st_intersects st_isclosed st_isempty st_isring st_issimple st_isvalid st_length st_linefromtext st_linestring st_multipoint st_numgeometries st_numinteriorring st_numpoints st_overlaps st_point st_pointn st_points st_polygon st_relate st_startpoint st_symdifference st_touches st_union st_within st_x st_xmax st_xmin st_y st_ymax st_ymin start starts_with stats stddev stddev_pop stddev_samp string strpos subset substr substring sum system table tables tablesample tan tanh tdigest_agg text then ties timestamp_objectid timezone_hour timezone_minute to to_base to_base32 to_base64 to_base64url to_big_endian_32 to_big_endian_64 to_char to_date to_encoded_polyline to_geojson_geometry to_geometry to_hex to_ieee754_32 to_ieee754_64 to_iso8601 to_milliseconds to_spherical_geography to_timestamp to_unixtime to_utf8 trailing transaction transform transform_keys transform_values translate trim trim_array true truncate try try_cast type typeof uescape unbounded uncommitted unconditional union unique unknown unmatched unnest update upper url_decode url_encode url_extract_fragment url_extract_host url_extract_parameter url_extract_path url_extract_port url_extract_protocol url_extract_query use user using utf16 utf32 utf8 validate value value_at_quantile values values_at_quantiles var_pop var_samp variance verbose version view week week_of_year when where width_bucket wilson_interval_lower wilson_interval_upper window with with_timezone within without word_stem work wrapper write xxhash64 year year_of_week yow zip zip_with"),builtin:o("array bigint bingtile boolean char codepoints color date decimal double function geometry hyperloglog int integer interval ipaddress joniregexp json json2016 jsonpath kdbtree likepattern map model objectid p4hyperloglog precision qdigest re2jregexp real regressor row setdigest smallint sphericalgeography tdigest time timestamp tinyint uuid varbinary varchar zone"),atoms:o("false true null unknown"),operatorChars:/^[[\]|<>=!\-+*/%]/,dateSQL:o("date time timestamp zone"),support:o("ODBCdotTable decimallessFloat zerolessFloat hexNumber")})}(r(15237))},48712:(e,t,r)=>{!function(e){"use strict";function t(e,t,r,n,i,o){this.indented=e,this.column=t,this.type=r,this.info=n,this.align=i,this.prev=o}function r(e,r,n,i){var o=e.indented;return e.context&&"statement"==e.context.type&&"statement"!=n&&(o=e.context.indented),e.context=new t(o,r,n,i,null,e.context)}function n(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.indented=e.context.indented),e.context=e.context.prev}function i(e,t,r){return"variable"==t.prevToken||"type"==t.prevToken||!!/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(e.string.slice(0,r))||!(!t.typeAtEndOfLine||e.column()!=e.indentation())||void 0}function o(e){for(;;){if(!e||"top"==e.type)return!0;if("}"==e.type&&"namespace"!=e.prev.info)return!1;e=e.prev}}function a(e){for(var t={},r=e.split(" "),n=0;n!?|\/]/,N=l.isIdentifierChar||/[\w\$_\xa1-\uffff]/,z=l.isReservedIdentifier||!1;function O(e,t){var r,n=e.next();if(x[n]){var i=x[n](e,t);if(!1!==i)return i}if('"'==n||"'"==n)return t.tokenize=(r=n,function(e,t){for(var n,i=!1,o=!1;null!=(n=e.next());){if(n==r&&!i){o=!0;break}i=!i&&"\\"==n}return(o||!i&&!w)&&(t.tokenize=null),"string"}),t.tokenize(e,t);if(L.test(n)){if(e.backUp(1),e.match(T))return"number";e.next()}if(S.test(n))return c=n,null;if("/"==n){if(e.eat("*"))return t.tokenize=A,A(e,t);if(e.eat("/"))return e.skipToEnd(),"comment"}if(M.test(n)){for(;!e.match(/^\/[\/*]/,!1)&&e.eat(M););return"operator"}if(e.eatWhile(N),C)for(;e.match(C);)e.eatWhile(N);var o=e.current();return s(h,o)?(s(v,o)&&(c="newstatement"),s(y,o)&&(u=!0),"keyword"):s(m,o)?"type":s(g,o)||z&&z(o)?(s(v,o)&&(c="newstatement"),"builtin"):s(b,o)?"atom":"variable"}function A(e,t){for(var r,n=!1;r=e.next();){if("/"==r&&n){t.tokenize=null;break}n="*"==r}return"comment"}function D(e,t){l.typeFirstDefinitions&&e.eol()&&o(t.context)&&(t.typeAtEndOfLine=i(e,t,e.pos))}return{startState:function(e){return{tokenize:null,context:new t((e||0)-d,0,"top",null,!1),indented:0,startOfLine:!0,prevToken:null}},token:function(e,t){var a=t.context;if(e.sol()&&(null==a.align&&(a.align=!1),t.indented=e.indentation(),t.startOfLine=!0),e.eatSpace())return D(e,t),null;c=u=null;var s=(t.tokenize||O)(e,t);if("comment"==s||"meta"==s)return s;if(null==a.align&&(a.align=!0),";"==c||":"==c||","==c&&e.match(/^\s*(?:\/\/.*)?$/,!1))for(;"statement"==t.context.type;)n(t);else if("{"==c)r(t,e.column(),"}");else if("["==c)r(t,e.column(),"]");else if("("==c)r(t,e.column(),")");else if("}"==c){for(;"statement"==a.type;)a=n(t);for("}"==a.type&&(a=n(t));"statement"==a.type;)a=n(t)}else c==a.type?n(t):_&&(("}"==a.type||"top"==a.type)&&";"!=c||"statement"==a.type&&"newstatement"==c)&&r(t,e.column(),"statement",e.current());if("variable"==s&&("def"==t.prevToken||l.typeFirstDefinitions&&i(e,t,e.start)&&o(t.context)&&e.match(/^\s*\(/,!1))&&(s="def"),x.token){var d=x.token(e,t,s);void 0!==d&&(s=d)}return"def"==s&&!1===l.styleDefs&&(s="variable"),t.startOfLine=!1,t.prevToken=u?"def":s||c,D(e,t),s},indent:function(t,r){if(t.tokenize!=O&&null!=t.tokenize||t.typeAtEndOfLine)return e.Pass;var n=t.context,i=r&&r.charAt(0),o=i==n.type;if("statement"==n.type&&"}"==i&&(n=n.prev),l.dontIndentStatements)for(;"statement"==n.type&&l.dontIndentStatements.test(n.info);)n=n.prev;if(x.indent){var a=x.indent(t,n,r,d);if("number"==typeof a)return a}var s=n.prev&&"switch"==n.prev.info;if(l.allmanIndentation&&/[{(]/.test(i)){for(;"top"!=n.type&&"}"!=n.type;)n=n.prev;return n.indented}return"statement"==n.type?n.indented+("{"==i?0:f):!n.align||p&&")"==n.type?")"!=n.type||o?n.indented+(o?0:d)+(o||!s||/^(?:case|default)\b/.test(r)?0:d):n.indented+f:n.column+(o?0:1)},electricInput:k?/^\s*(?:case .*?:|default:|\{\}?|\})$/:/^\s*[{}]$/,blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//",fold:"brace"}}));var l="auto if break case register continue return default do sizeof static else struct switch extern typedef union for goto while enum const volatile inline restrict asm fortran",c="alignas alignof and and_eq audit axiom bitand bitor catch class compl concept constexpr const_cast decltype delete dynamic_cast explicit export final friend import module mutable namespace new noexcept not not_eq operator or or_eq override private protected public reinterpret_cast requires static_assert static_cast template this thread_local throw try typeid typename using virtual xor xor_eq",u="bycopy byref in inout oneway out self super atomic nonatomic retain copy readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd @interface @implementation @end @protocol @encode @property @synthesize @dynamic @class @public @package @private @protected @required @optional @try @catch @finally @import @selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available",d="FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION NS_RETURNS_RETAINEDNS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT",f=a("int long char short double float unsigned signed void bool"),p=a("SEL instancetype id Class Protocol BOOL");function h(e){return s(f,e)||/.+_t$/.test(e)}function m(e){return h(e)||s(p,e)}var g="case do else for if switch while struct enum union",v="struct enum union";function y(e,t){if(!t.startOfLine)return!1;for(var r,n=null;r=e.peek();){if("\\"==r&&e.match(/^.$/)){n=y;break}if("/"==r&&e.match(/^\/[\/\*]/,!1))break;e.next()}return t.tokenize=n,"meta"}function b(e,t){return"type"==t.prevToken&&"type"}function x(e){return!(!e||e.length<2||"_"!=e[0]||"_"!=e[1]&&e[1]===e[1].toLowerCase())}function w(e){return e.eatWhile(/[\w\.']/),"number"}function _(e,t){if(e.backUp(1),e.match(/^(?:R|u8R|uR|UR|LR)/)){var r=e.match(/^"([^\s\\()]{0,16})\(/);return!!r&&(t.cpp11RawStringDelim=r[1],t.tokenize=S,S(e,t))}return e.match(/^(?:u8|u|U|L)/)?!!e.match(/^["']/,!1)&&"string":(e.next(),!1)}function k(e){var t=/(\w+)::~?(\w+)$/.exec(e);return t&&t[1]==t[2]}function C(e,t){for(var r;null!=(r=e.next());)if('"'==r&&!e.eat('"')){t.tokenize=null;break}return"string"}function S(e,t){var r=t.cpp11RawStringDelim.replace(/[^\w\s]/g,"\\$&");return e.match(new RegExp(".*?\\)"+r+'"'))?t.tokenize=null:e.skipToEnd(),"string"}function L(t,r){"string"==typeof t&&(t=[t]);var n=[];function i(e){if(e)for(var t in e)e.hasOwnProperty(t)&&n.push(t)}i(r.keywords),i(r.types),i(r.builtin),i(r.atoms),n.length&&(r.helperType=t[0],e.registerHelper("hintWords",t[0],n));for(var o=0;o!?|\/#:@]/,hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},'"':function(e,t){return!!e.match('""')&&(t.tokenize=T,t.tokenize(e,t))},"'":function(e){return e.eatWhile(/[\w\$_\xa1-\uffff]/),"atom"},"=":function(e,r){var n=r.context;return!("}"!=n.type||!n.align||!e.eat(">"))&&(r.context=new t(n.indented,n.column,n.type,n.info,null,n.prev),"operator")},"/":function(e,t){return!!e.eat("*")&&(t.tokenize=M(1),t.tokenize(e,t))}},modeProps:{closeBrackets:{pairs:'()[]{}""',triples:'"'}}}),L("text/x-kotlin",{name:"clike",keywords:a("package as typealias class interface this super val operator var fun for is in This throw return annotation break continue object if else while do try when !in !is as? file import where by get set abstract enum open inner override private public internal protected catch finally out final vararg reified dynamic companion constructor init sealed field property receiver param sparam lateinit data inline noinline tailrec external annotation crossinline const operator infix suspend actual expect setparam value"),types:a("Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy LazyThreadSafetyMode LongArray Nothing ShortArray Unit"),intendSwitch:!1,indentStatements:!1,multiLineStrings:!0,number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i,blockKeywords:a("catch class do else finally for if where try while enum"),defKeywords:a("class val var object interface fun"),atoms:a("true false null this"),hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},"*":function(e,t){return"."==t.prevToken?"variable":"operator"},'"':function(e,t){return t.tokenize=(r=e.match('""'),function(e,t){for(var n,i=!1,o=!1;!e.eol();){if(!r&&!i&&e.match('"')){o=!0;break}if(r&&e.match('"""')){o=!0;break}n=e.next(),!i&&"$"==n&&e.match("{")&&e.skipTo("}"),i=!i&&"\\"==n&&!r}return!o&&r||(t.tokenize=null),"string"}),t.tokenize(e,t);var r},"/":function(e,t){return!!e.eat("*")&&(t.tokenize=M(1),t.tokenize(e,t))},indent:function(e,t,r,n){var i=r&&r.charAt(0);return"}"!=e.prevToken&&")"!=e.prevToken||""!=r?"operator"==e.prevToken&&"}"!=r&&"}"!=e.context.type||"variable"==e.prevToken&&"."==i||("}"==e.prevToken||")"==e.prevToken)&&"."==i?2*n+t.indented:t.align&&"}"==t.type?t.indented+(e.context.type==(r||"").charAt(0)?0:n):void 0:e.indented}},modeProps:{closeBrackets:{triples:'"'}}}),L(["x-shader/x-vertex","x-shader/x-fragment"],{name:"clike",keywords:a("sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow const attribute uniform varying break continue discard return for while do if else struct in out inout"),types:a("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4"),blockKeywords:a("for while do if else struct"),builtin:a("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),atoms:a("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_PointCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),indentSwitch:!1,hooks:{"#":y},modeProps:{fold:["brace","include"]}}),L("text/x-nesc",{name:"clike",keywords:a(l+" as atomic async call command component components configuration event generic implementation includes interface module new norace nx_struct nx_union post provides signal task uses abstract extends"),types:h,blockKeywords:a(g),atoms:a("null true false"),hooks:{"#":y},modeProps:{fold:["brace","include"]}}),L("text/x-objectivec",{name:"clike",keywords:a(l+" "+u),types:m,builtin:a(d),blockKeywords:a(g+" @synthesize @try @catch @finally @autoreleasepool @synchronized"),defKeywords:a(v+" @interface @implementation @protocol @class"),dontIndentStatements:/^@.*$/,typeFirstDefinitions:!0,atoms:a("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:x,hooks:{"#":y,"*":b},modeProps:{fold:["brace","include"]}}),L("text/x-objectivec++",{name:"clike",keywords:a(l+" "+u+" "+c),types:m,builtin:a(d),blockKeywords:a(g+" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch"),defKeywords:a(v+" @interface @implementation @protocol @class class namespace"),dontIndentStatements:/^@.*$|^template$/,typeFirstDefinitions:!0,atoms:a("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:x,hooks:{"#":y,"*":b,u:_,U:_,L:_,R:_,0:w,1:w,2:w,3:w,4:w,5:w,6:w,7:w,8:w,9:w,token:function(e,t,r){if("variable"==r&&"("==e.peek()&&(";"==t.prevToken||null==t.prevToken||"}"==t.prevToken)&&k(e.current()))return"def"}},namespaceSeparator:"::",modeProps:{fold:["brace","include"]}}),L("text/x-squirrel",{name:"clike",keywords:a("base break clone continue const default delete enum extends function in class foreach local resume return this throw typeof yield constructor instanceof static"),types:h,blockKeywords:a("case catch class else for foreach if switch try while"),defKeywords:a("function local class"),typeFirstDefinitions:!0,atoms:a("true false null"),hooks:{"#":y},modeProps:{fold:["brace","include"]}});var N=null;function z(e){return function(t,r){for(var n,i=!1,o=!1;!t.eol();){if(!i&&t.match('"')&&("single"==e||t.match('""'))){o=!0;break}if(!i&&t.match("``")){N=z(e),o=!0;break}n=t.next(),i="single"==e&&!i&&"\\"==n}return o&&(r.tokenize=null),"string"}}L("text/x-ceylon",{name:"clike",keywords:a("abstracts alias assembly assert assign break case catch class continue dynamic else exists extends finally for function given if import in interface is let module new nonempty object of out outer package return satisfies super switch then this throw try value void while"),types:function(e){var t=e.charAt(0);return t===t.toUpperCase()&&t!==t.toLowerCase()},blockKeywords:a("case catch class dynamic else finally for function if interface module new object switch try while"),defKeywords:a("class dynamic function interface module object package value"),builtin:a("abstract actual aliased annotation by default deprecated doc final formal late license native optional sealed see serializable shared suppressWarnings tagged throws variable"),isPunctuationChar:/[\[\]{}\(\),;\:\.`]/,isOperatorChar:/[+\-*&%=<>!?|^~:\/]/,numberStart:/[\d#$]/,number:/^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i,multiLineStrings:!0,typeFirstDefinitions:!0,atoms:a("true false null larger smaller equal empty finished"),indentSwitch:!1,styleDefs:!1,hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},'"':function(e,t){return t.tokenize=z(e.match('""')?"triple":"single"),t.tokenize(e,t)},"`":function(e,t){return!(!N||!e.match("`"))&&(t.tokenize=N,N=null,t.tokenize(e,t))},"'":function(e){return e.eatWhile(/[\w\$_\xa1-\uffff]/),"atom"},token:function(e,t,r){if(("variable"==r||"type"==r)&&"."==t.prevToken)return"variable-2"}},modeProps:{fold:["brace","import"],closeBrackets:{triples:'"'}}})}(r(15237))},74806:(e,t,r)=>{!function(e){"use strict";function t(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}var r=t(["and","or","not","is"]),n=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in"],i=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];function o(e){return e.scopes[e.scopes.length-1]}e.registerHelper("hintWords","python",n.concat(i).concat(["exec","print"])),e.defineMode("python",(function(a,s){for(var l="error",c=s.delimiters||s.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,u=[s.singleOperators,s.doubleOperators,s.doubleDelimiters,s.tripleDelimiters,s.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],d=0;dn?_(t):i0&&k(e,t)&&(a+=" "+l),a}return w(e,t)}function w(e,t,n){if(e.eatSpace())return null;if(!n&&e.match(/^#.*/))return"comment";if(e.match(/^[0-9\.]/,!1)){var i=!1;if(e.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)&&(i=!0),e.match(/^[\d_]+\.\d*/)&&(i=!0),e.match(/^\.\d+/)&&(i=!0),i)return e.eat(/J/i),"number";var o=!1;if(e.match(/^0x[0-9a-f_]+/i)&&(o=!0),e.match(/^0b[01_]+/i)&&(o=!0),e.match(/^0o[0-7_]+/i)&&(o=!0),e.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)&&(e.eat(/J/i),o=!0),e.match(/^0(?![\dx])/i)&&(o=!0),o)return e.eat(/L/i),"number"}if(e.match(v))return-1!==e.current().toLowerCase().indexOf("f")?(t.tokenize=function(e,t){for(;"rubf".indexOf(e.charAt(0).toLowerCase())>=0;)e=e.substr(1);var r=1==e.length,n="string";function i(e){return function(t,r){var n=w(t,r,!0);return"punctuation"==n&&("{"==t.current()?r.tokenize=i(e+1):"}"==t.current()&&(r.tokenize=e>1?i(e-1):o)),n}}function o(o,a){for(;!o.eol();)if(o.eatWhile(/[^'"\{\}\\]/),o.eat("\\")){if(o.next(),r&&o.eol())return n}else{if(o.match(e))return a.tokenize=t,n;if(o.match("{{"))return n;if(o.match("{",!1))return a.tokenize=i(0),o.current()?n:a.tokenize(o,a);if(o.match("}}"))return n;if(o.match("}"))return l;o.eat(/['"]/)}if(r){if(s.singleLineStringErrors)return l;a.tokenize=t}return n}return o.isString=!0,o}(e.current(),t.tokenize),t.tokenize(e,t)):(t.tokenize=function(e,t){for(;"rubf".indexOf(e.charAt(0).toLowerCase())>=0;)e=e.substr(1);var r=1==e.length,n="string";function i(i,o){for(;!i.eol();)if(i.eatWhile(/[^'"\\]/),i.eat("\\")){if(i.next(),r&&i.eol())return n}else{if(i.match(e))return o.tokenize=t,n;i.eat(/['"]/)}if(r){if(s.singleLineStringErrors)return l;o.tokenize=t}return n}return i.isString=!0,i}(e.current(),t.tokenize),t.tokenize(e,t));for(var a=0;a1&&o(t).offset>r;){if("py"!=o(t).type)return!0;t.scopes.pop()}return o(t).offset!=r}function C(e,t){e.sol()&&(t.beginningOfLine=!0,t.dedent=!1);var r=t.tokenize(e,t),n=e.current();if(t.beginningOfLine&&"@"==n)return e.match(g,!1)?"meta":m?"operator":l;if(/\S/.test(n)&&(t.beginningOfLine=!1),"variable"!=r&&"builtin"!=r||"meta"!=t.lastToken||(r="meta"),"pass"!=n&&"return"!=n||(t.dedent=!0),"lambda"==n&&(t.lambda=!0),":"==n&&!t.lambda&&"py"==o(t).type&&e.match(/^\s*(?:#|$)/,!1)&&_(t),1==n.length&&!/string|comment/.test(r)){var i="[({".indexOf(n);if(-1!=i&&function(e,t,r){var n=e.match(/^[\s\[\{\(]*(?:#|$)/,!1)?null:e.column()+1;t.scopes.push({offset:t.indent+f,type:r,align:n})}(e,t,"])}".slice(i,i+1)),-1!=(i="])}".indexOf(n))){if(o(t).type!=n)return l;t.indent=t.scopes.pop().offset-f}}return t.dedent&&e.eol()&&"py"==o(t).type&&t.scopes.length>1&&t.scopes.pop(),r}return{startState:function(e){return{tokenize:x,scopes:[{offset:e||0,type:"py",align:null}],indent:e||0,lastToken:null,lambda:!1,dedent:0}},token:function(e,t){var r=t.errorToken;r&&(t.errorToken=!1);var n=C(e,t);return n&&"comment"!=n&&(t.lastToken="keyword"==n||"punctuation"==n?e.current():n),"punctuation"==n&&(n=null),e.eol()&&t.lambda&&(t.lambda=!1),r?n+" "+l:n},indent:function(t,r){if(t.tokenize!=x)return t.tokenize.isString?e.Pass:0;var n=o(t),i=n.type==r.charAt(0)||"py"==n.type&&!t.dedent&&/^(else:|elif |except |finally:)/.test(r);return null!=n.align?n.align-(i?1:0):n.offset-(i?f:0)},electricInput:/^\s*([\}\]\)]|else:|elif |except |finally:)$/,closeBrackets:{triples:"'\""},lineComment:"#",fold:"indent"}})),e.defineMIME("text/x-python","python");var a;e.defineMIME("text/x-cython",{name:"python",extra_keywords:(a="by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE",a.split(" "))})}(r(15237))},80330:(e,t,r)=>{!function(e){"use strict";e.defineMode("octave",(function(){function e(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}var t=new RegExp("^[\\+\\-\\*/&|\\^~<>!@'\\\\]"),r=new RegExp("^[\\(\\[\\{\\},:=;\\.]"),n=new RegExp("^((==)|(~=)|(<=)|(>=)|(<<)|(>>)|(\\.[\\+\\-\\*/\\^\\\\]))"),i=new RegExp("^((!=)|(\\+=)|(\\-=)|(\\*=)|(/=)|(&=)|(\\|=)|(\\^=))"),o=new RegExp("^((>>=)|(<<=))"),a=new RegExp("^[\\]\\)]"),s=new RegExp("^[_A-Za-z¡-￿][_A-Za-z0-9¡-￿]*"),l=e(["error","eval","function","abs","acos","atan","asin","cos","cosh","exp","log","prod","sum","log10","max","min","sign","sin","sinh","sqrt","tan","reshape","break","zeros","default","margin","round","ones","rand","syn","ceil","floor","size","clear","zeros","eye","mean","std","cov","det","eig","inv","norm","rank","trace","expm","logm","sqrtm","linspace","plot","title","xlabel","ylabel","legend","text","grid","meshgrid","mesh","num2str","fft","ifft","arrayfun","cellfun","input","fliplr","flipud","ismember"]),c=e(["return","case","switch","else","elseif","end","endif","endfunction","if","otherwise","do","for","while","try","catch","classdef","properties","events","methods","global","persistent","endfor","endwhile","printf","sprintf","disp","until","continue","pkg"]);function u(e,t){return e.sol()||"'"!==e.peek()?(t.tokenize=f,f(e,t)):(e.next(),t.tokenize=f,"operator")}function d(e,t){return e.match(/^.*%}/)?(t.tokenize=f,"comment"):(e.skipToEnd(),"comment")}function f(p,h){if(p.eatSpace())return null;if(p.match("%{"))return h.tokenize=d,p.skipToEnd(),"comment";if(p.match(/^[%#]/))return p.skipToEnd(),"comment";if(p.match(/^[0-9\.+-]/,!1)){if(p.match(/^[+-]?0x[0-9a-fA-F]+[ij]?/))return p.tokenize=f,"number";if(p.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?[ij]?/))return"number";if(p.match(/^[+-]?\d+([EeDd][+-]?\d+)?[ij]?/))return"number"}if(p.match(e(["nan","NaN","inf","Inf"])))return"number";var m=p.match(/^"(?:[^"]|"")*("|$)/)||p.match(/^'(?:[^']|'')*('|$)/);return m?m[1]?"string":"string error":p.match(c)?"keyword":p.match(l)?"builtin":p.match(s)?"variable":p.match(t)||p.match(n)?"operator":p.match(r)||p.match(i)||p.match(o)?null:p.match(a)?(h.tokenize=u,null):(p.next(),"error")}return{startState:function(){return{tokenize:f}},token:function(e,t){var r=t.tokenize(e,t);return"number"!==r&&"variable"!==r||(t.tokenize=u),r},lineComment:"%",fold:"indent"}})),e.defineMIME("text/x-octave","octave")}(r(15237))}}]); +//# sourceMappingURL=296.37eb8c05642d8ef9.js.map \ No newline at end of file diff --git a/_static/296.37eb8c05642d8ef9.js.gz b/_static/296.37eb8c05642d8ef9.js.gz new file mode 100644 index 0000000..816ccb6 Binary files /dev/null and b/_static/296.37eb8c05642d8ef9.js.gz differ diff --git a/_static/296.37eb8c05642d8ef9.js.map b/_static/296.37eb8c05642d8ef9.js.map new file mode 100644 index 0000000..ff2387a --- /dev/null +++ b/_static/296.37eb8c05642d8ef9.js.map @@ -0,0 +1 @@ +{"version":3,"file":"296.37eb8c05642d8ef9.js","mappings":"mGAUiEA,EAAOC,QAGhE,WAAe,aAIrB,IAAIC,EAAYC,UAAUD,UACtBE,EAAWD,UAAUC,SAErBC,EAAQ,aAAaC,KAAKJ,GAC1BK,EAAY,UAAUD,KAAKJ,GAC3BM,EAAU,wCAAwCC,KAAKP,GACvDQ,EAAO,cAAcD,KAAKP,GAC1BS,EAAKJ,GAAaC,GAAWE,EAC7BE,EAAaD,IAAOJ,EAAYM,SAASC,cAAgB,IAAMJ,GAAQF,GAAS,IAChFO,GAAUL,GAAQ,WAAWJ,KAAKJ,GAClCc,EAAWD,GAAU,eAAeT,KAAKJ,GACzCe,GAAUP,GAAQ,gBAAgBD,KAAKP,GACvCgB,EAAiBD,IAAWA,EAAO,GACnCE,EAAS,UAAUb,KAAKJ,GACxBkB,EAAS,iBAAiBd,KAAKH,UAAUkB,QACzCC,EAAqB,+BAA+BhB,KAAKJ,GACzDqB,EAAU,YAAYjB,KAAKJ,GAE3BsB,EAAMJ,IAAW,cAAcd,KAAKJ,IAAcC,UAAUsB,eAAiB,GAC7EC,EAAU,UAAUpB,KAAKJ,GAEzByB,EAASH,GAAOE,GAAW,mDAAmDpB,KAAKJ,GACnF0B,EAAMJ,GAAO,MAAMlB,KAAKF,GACxByB,EAAW,WAAWvB,KAAKJ,GAC3B4B,EAAU,OAAOxB,KAAKF,GAEtB2B,EAAiBZ,GAAUjB,EAAU8B,MAAM,uBAC3CD,IAAkBA,EAAiBE,OAAOF,EAAe,KACzDA,GAAkBA,GAAkB,KAAMZ,GAAS,EAAOJ,GAAS,GAEvE,IAAImB,EAAcN,IAAQZ,GAAYG,IAA6B,MAAlBY,GAA0BA,EAAiB,QACxFI,EAAoB9B,GAAUM,GAAMC,GAAc,EAEtD,SAASwB,EAAUC,GAAO,OAAO,IAAIC,OAAO,UAAYD,EAAM,gBAAiB,CAE/E,IAkCIE,EAlCAC,EAAU,SAASC,EAAMJ,GAC3B,IAAIK,EAAUD,EAAKE,UACfX,EAAQI,EAAUC,GAAK5B,KAAKiC,GAChC,GAAIV,EAAO,CACT,IAAIY,EAAQF,EAAQG,MAAMb,EAAMc,MAAQd,EAAM,GAAGe,QACjDN,EAAKE,UAAYD,EAAQG,MAAM,EAAGb,EAAMc,QAAUF,EAAQZ,EAAM,GAAKY,EAAQ,GAC/E,CACF,EAEA,SAASI,EAAeC,GACtB,IAAK,IAAIC,EAAQD,EAAEE,WAAWJ,OAAQG,EAAQ,IAAKA,EAC/CD,EAAEG,YAAYH,EAAEI,YACpB,OAAOJ,CACT,CAEA,SAASK,EAAqBC,EAAQN,GACpC,OAAOD,EAAeO,GAAQC,YAAYP,EAC5C,CAEA,SAASQ,EAAIC,EAAKC,EAAShB,EAAWiB,GACpC,IAAIX,EAAIpC,SAASgD,cAAcH,GAG/B,GAFIf,IAAaM,EAAEN,UAAYA,GAC3BiB,IAASX,EAAEW,MAAME,QAAUF,GACT,iBAAXD,EAAuBV,EAAEO,YAAY3C,SAASkD,eAAeJ,SACnE,GAAIA,EAAW,IAAK,IAAIK,EAAI,EAAGA,EAAIL,EAAQZ,SAAUiB,EAAKf,EAAEO,YAAYG,EAAQK,IACrF,OAAOf,CACT,CAEA,SAASgB,EAAKP,EAAKC,EAAShB,EAAWiB,GACrC,IAAIX,EAAIQ,EAAIC,EAAKC,EAAShB,EAAWiB,GAErC,OADAX,EAAEiB,aAAa,OAAQ,gBAChBjB,CACT,CAmBA,SAASkB,EAASZ,EAAQa,GAGxB,GAFsB,GAAlBA,EAAMC,WACND,EAAQA,EAAME,YACdf,EAAOY,SACP,OAAOZ,EAAOY,SAASC,GAC3B,GAEE,GADsB,IAAlBA,EAAMC,WAAkBD,EAAQA,EAAMG,MACtCH,GAASb,EAAU,OAAO,QACvBa,EAAQA,EAAME,WACzB,CAEA,SAASE,EAAUC,GAIjB,IAAIC,EACJ,IACEA,EAAgBD,EAAIC,aACtB,CAAE,MAAMzB,GACNyB,EAAgBD,EAAIE,MAAQ,IAC9B,CACA,KAAOD,GAAiBA,EAAcE,YAAcF,EAAcE,WAAWF,eACzEA,EAAgBA,EAAcE,WAAWF,cAC7C,OAAOA,CACT,CAEA,SAASG,EAASpC,EAAMJ,GACtB,IAAIK,EAAUD,EAAKE,UACdP,EAAUC,GAAK/B,KAAKoC,KAAYD,EAAKE,YAAcD,EAAU,IAAM,IAAML,EAChF,CACA,SAASyC,EAAYC,EAAGC,GAEtB,IADA,IAAIC,EAAKF,EAAEG,MAAM,KACRlB,EAAI,EAAGA,EAAIiB,EAAGlC,OAAQiB,IACvBiB,EAAGjB,KAAO5B,EAAU6C,EAAGjB,IAAI1D,KAAK0E,KAAMA,GAAK,IAAMC,EAAGjB,IAC5D,OAAOgB,CACT,CAnD4BzC,EAAxB1B,SAASsE,YAAuB,SAAS1C,EAAM2C,EAAOC,EAAKC,GAC7D,IAAIC,EAAI1E,SAASsE,cAGjB,OAFAI,EAAEC,OAAOF,GAAW7C,EAAM4C,GAC1BE,EAAEE,SAAShD,EAAM2C,GACVG,CACT,EACe,SAAS9C,EAAM2C,EAAOC,GACnC,IAAIE,EAAI1E,SAAS8D,KAAKe,kBACtB,IAAMH,EAAEI,kBAAkBlD,EAAK6B,WAAa,CAC5C,MAAMrB,GAAK,OAAOsC,CAAE,CAIpB,OAHAA,EAAEK,UAAS,GACXL,EAAEM,QAAQ,YAAaR,GACvBE,EAAEO,UAAU,YAAaV,GAClBG,CACT,EAuCA,IAAIQ,EAAc,SAAStD,GAAQA,EAAKuD,QAAU,EAMlD,SAASvB,EAAIwB,GAAM,OAAOA,EAAGC,QAAQC,QAAQC,aAAc,CAE3D,SAASC,EAAIJ,GAAM,OAAOxB,EAAIwB,GAAIK,WAAY,CAE9C,SAASC,EAAKC,GACZ,IAAIC,EAAOC,MAAMC,UAAU9D,MAAM+D,KAAKC,UAAW,GACjD,OAAO,WAAW,OAAOL,EAAEM,MAAM,KAAML,EAAK,CAC9C,CAEA,SAASM,EAAQC,EAAKC,EAAQC,GAE5B,IAAK,IAAIC,KADJF,IAAUA,EAAS,CAAC,GACRD,GACTA,EAAII,eAAeD,KAAwB,IAAdD,GAAwBD,EAAOG,eAAeD,KAC7EF,EAAOE,GAAQH,EAAIG,IACzB,OAAOF,CACT,CAIA,SAASI,EAAYC,EAAQjC,EAAKkC,EAASC,EAAYC,GAC1C,MAAPpC,IAEU,IADZA,EAAMiC,EAAOI,OAAO,kBACHrC,EAAMiC,EAAOvE,QAEhC,IAAK,IAAIiB,EAAIwD,GAAc,EAAGG,EAAIF,GAAc,IAAK,CACnD,IAAIG,EAAUN,EAAOO,QAAQ,KAAM7D,GACnC,GAAI4D,EAAU,GAAKA,GAAWvC,EAC1B,OAAOsC,GAAKtC,EAAMrB,GACtB2D,GAAKC,EAAU5D,EACf2D,GAAKJ,EAAWI,EAAIJ,EACpBvD,EAAI4D,EAAU,CAChB,CACF,CArCIpG,EACAuE,EAAc,SAAStD,GAAQA,EAAKqF,eAAiB,EAAGrF,EAAKsF,aAAetF,EAAKuF,MAAMjF,MAAQ,EAC1FpC,IACLoF,EAAc,SAAStD,GAAQ,IAAMA,EAAKuD,QAAU,CAAE,MAAMiC,GAAK,CAAE,GAoCvE,IAAIC,EAAU,WACZC,KAAKC,GAAK,KACVD,KAAK3B,EAAI,KACT2B,KAAKE,KAAO,EACZF,KAAKG,QAAU/B,EAAK4B,KAAKI,UAAWJ,KACtC,EAmBA,SAASN,EAAQW,EAAO/E,GACtB,IAAK,IAAIO,EAAI,EAAGA,EAAIwE,EAAMzF,SAAUiB,EAChC,GAAIwE,EAAMxE,IAAMP,EAAO,OAAOO,EAClC,OAAQ,CACV,CAtBAkE,EAAQvB,UAAU4B,UAAY,SAAUE,GACtCA,EAAKL,GAAK,EACNK,EAAKJ,OAAS,IAAIK,KACpBD,EAAKjC,IAELmC,WAAWF,EAAKH,QAASG,EAAKJ,MAAQ,IAAIK,KAE9C,EACAR,EAAQvB,UAAUiC,IAAM,SAAUC,EAAIrC,GACpC2B,KAAK3B,EAAIA,EACT,IAAI6B,GAAQ,IAAIK,KAAOG,IAClBV,KAAKC,IAAMC,EAAOF,KAAKE,QAC1BS,aAAaX,KAAKC,IAClBD,KAAKC,GAAKO,WAAWR,KAAKG,QAASO,GACnCV,KAAKE,KAAOA,EAEhB,EASA,IAIIU,EAAO,CAACC,SAAU,WAAW,MAAO,iBAAiB,GAGrDC,EAAiB,CAACC,QAAQ,GAAQC,EAAY,CAACC,OAAQ,UAAWC,EAAW,CAACD,OAAQ,SAI1F,SAASE,EAAWhC,EAAQiC,EAAMhC,GAChC,IAAK,IAAIiC,EAAM,EAAGC,EAAM,IAAK,CAC3B,IAAI7B,EAAUN,EAAOO,QAAQ,KAAM2B,IACnB,GAAZ5B,IAAiBA,EAAUN,EAAOvE,QACtC,IAAI2G,EAAU9B,EAAU4B,EACxB,GAAI5B,GAAWN,EAAOvE,QAAU0G,EAAMC,GAAWH,EAC7C,OAAOC,EAAMG,KAAKC,IAAIF,EAASH,EAAOE,GAI1C,GAHAA,GAAO7B,EAAU4B,EAEjBA,EAAM5B,EAAU,GADhB6B,GAAOlC,EAAWkC,EAAMlC,IAEbgC,EAAQ,OAAOC,CAC5B,CACF,CAEA,IAAIK,EAAY,CAAC,IACjB,SAASC,EAASnC,GAChB,KAAOkC,EAAU9G,QAAU4E,GACvBkC,EAAUE,KAAKC,EAAIH,GAAa,KACpC,OAAOA,EAAUlC,EACnB,CAEA,SAASqC,EAAIC,GAAO,OAAOA,EAAIA,EAAIlH,OAAO,EAAG,CAE7C,SAASmH,EAAI1B,EAAOhC,GAElB,IADA,IAAI2D,EAAM,GACDnG,EAAI,EAAGA,EAAIwE,EAAMzF,OAAQiB,IAAOmG,EAAInG,GAAKwC,EAAEgC,EAAMxE,GAAIA,GAC9D,OAAOmG,CACT,CAQA,SAASC,IAAW,CAEpB,SAASC,GAAUC,EAAMC,GACvB,IAAIC,EAQJ,OAPIC,OAAOC,OACTF,EAAOC,OAAOC,OAAOJ,IAErBF,EAAQzD,UAAY2D,EACpBE,EAAO,IAAIJ,GAETG,GAASxD,EAAQwD,EAAOC,GACrBA,CACT,CAEA,IAAIG,GAA6B,4GACjC,SAASC,GAAgBC,GACvB,MAAO,KAAKvK,KAAKuK,IAAOA,EAAK,MAC1BA,EAAGC,eAAiBD,EAAGE,eAAiBJ,GAA2BrK,KAAKuK,GAC7E,CACA,SAASG,GAAWH,EAAII,GACtB,OAAKA,KACDA,EAAOC,OAAOrD,QAAQ,QAAU,GAAK+C,GAAgBC,KAClDI,EAAO3K,KAAKuK,GAFGD,GAAgBC,EAGxC,CAEA,SAASM,GAAQnE,GACf,IAAK,IAAIW,KAAKX,EAAO,GAAIA,EAAII,eAAeO,IAAMX,EAAIW,GAAM,OAAO,EACnE,OAAO,CACT,CAOA,IAAIyD,GAAiB,64DACrB,SAASC,GAAgBR,GAAM,OAAOA,EAAGS,WAAW,IAAM,KAAOF,GAAe9K,KAAKuK,EAAI,CAGzF,SAASU,GAAmBC,EAAKhC,EAAKiC,GACpC,MAAQA,EAAM,EAAIjC,EAAM,EAAIA,EAAMgC,EAAIzI,SAAWsI,GAAgBG,EAAIE,OAAOlC,KAASA,GAAOiC,EAC5F,OAAOjC,CACT,CAKA,SAASmC,GAAUC,EAAMC,EAAMC,GAI7B,IADA,IAAIL,EAAMI,EAAOC,GAAM,EAAI,IAClB,CACP,GAAID,GAAQC,EAAM,OAAOD,EACzB,IAAIE,GAAQF,EAAOC,GAAM,EAAGE,EAAMP,EAAM,EAAI9B,KAAKsC,KAAKF,GAAQpC,KAAKuC,MAAMH,GACzE,GAAIC,GAAOH,EAAQ,OAAOD,EAAKI,GAAOH,EAAOC,EACzCF,EAAKI,GAAQF,EAAKE,EACfH,EAAOG,EAAMP,CACtB,CACF,CAiBA,IAAIU,GAAY,KAChB,SAASC,GAAcC,EAAOxB,EAAIyB,GAChC,IAAIC,EACJJ,GAAY,KACZ,IAAK,IAAInI,EAAI,EAAGA,EAAIqI,EAAMtJ,SAAUiB,EAAG,CACrC,IAAIwI,EAAMH,EAAMrI,GAChB,GAAIwI,EAAIX,KAAOhB,GAAM2B,EAAIV,GAAKjB,EAAM,OAAO7G,EACvCwI,EAAIV,IAAMjB,IACR2B,EAAIX,MAAQW,EAAIV,IAAgB,UAAVQ,EAAsBC,EAAQvI,EACjDmI,GAAYnI,GAEjBwI,EAAIX,MAAQhB,IACV2B,EAAIX,MAAQW,EAAIV,IAAgB,UAAVQ,EAAsBC,EAAQvI,EACjDmI,GAAYnI,EAEvB,CACA,OAAgB,MAATuI,EAAgBA,EAAQJ,EACjC,CAyBA,IAAIM,GAAe,WAejB,IAAIC,EAAS,4CACTC,EAAY,SAAUC,EAAW,QAASC,EAAe,SAAUC,EAAc,OAErF,SAASC,EAASC,EAAOnB,EAAMC,GAC7B3D,KAAK6E,MAAQA,EACb7E,KAAK0D,KAAOA,EAAM1D,KAAK2D,GAAKA,CAC9B,CAEA,OAAO,SAASN,EAAKyB,GACnB,IAnBgBC,EAmBZC,EAAyB,OAAbF,EAAqB,IAAM,IAE3C,GAAkB,GAAdzB,EAAIzI,QAA4B,OAAbkK,IAAuBP,EAAOpM,KAAKkL,GAAQ,OAAO,EAEzE,IADA,IAAI4B,EAAM5B,EAAIzI,OAAQsK,EAAQ,GACrBrJ,EAAI,EAAGA,EAAIoJ,IAAOpJ,EACvBqJ,EAAMtD,MAxBMmD,EAwBQ1B,EAAIF,WAAWtH,KAvB3B,IAJC,2PAIuB0H,OAAOwB,GAClC,MAASA,GAAQA,GAAQ,KAAgB,IACzC,MAASA,GAAQA,GAAQ,KAJlB,6PAI8CxB,OAAOwB,EAAO,MACnE,MAASA,GAAQA,GAAQ,KAAgB,IACzC,MAAUA,GAAQA,GAAQ,KAAiB,IACnC,MAARA,EAAyB,IACpB,KAuBd,IAAK,IAAII,EAAM,EAAGC,EAAOJ,EAAWG,EAAMF,IAAOE,EAAK,CACpD,IAAIE,EAAOH,EAAMC,GACL,KAARE,EAAeH,EAAMC,GAAOC,EACzBA,EAAOC,CAChB,CAOA,IAAK,IAAIC,EAAM,EAAGjB,EAAMW,EAAWM,EAAML,IAAOK,EAAK,CACnD,IAAIC,EAASL,EAAMI,GACL,KAAVC,GAAwB,KAAPlB,EAAca,EAAMI,GAAO,IACvCb,EAAStM,KAAKoN,KAAWlB,EAAMkB,EAAsB,KAAVA,IAAiBL,EAAMI,GAAO,KACpF,CAKA,IAAK,IAAIE,EAAM,EAAGC,EAASP,EAAM,GAAIM,EAAMP,EAAM,IAAKO,EAAK,CACzD,IAAIE,EAASR,EAAMM,GACL,KAAVE,GAA2B,KAAVD,GAAiC,KAAhBP,EAAMM,EAAI,GAAaN,EAAMM,GAAO,IACvD,KAAVE,GAAiBD,GAAUP,EAAMM,EAAI,IAC1B,KAAVC,GAA2B,KAAVA,IAAkBP,EAAMM,GAAOC,GAC1DA,EAASC,CACX,CAMA,IAAK,IAAIC,EAAM,EAAGA,EAAMV,IAAOU,EAAK,CAClC,IAAIC,EAASV,EAAMS,GACnB,GAAc,KAAVC,EAAiBV,EAAMS,GAAO,SAC7B,GAAc,KAAVC,EAAe,CACtB,IAAI1I,OAAM,EACV,IAAKA,EAAMyI,EAAM,EAAGzI,EAAM+H,GAAqB,KAAdC,EAAMhI,KAAeA,GAEtD,IADA,IAAI2I,EAAWF,GAAuB,KAAhBT,EAAMS,EAAI,IAAezI,EAAM+H,GAAqB,KAAdC,EAAMhI,GAAe,IAAM,IAC9E4I,EAAIH,EAAKG,EAAI5I,IAAO4I,EAAKZ,EAAMY,GAAKD,EAC7CF,EAAMzI,EAAM,CACd,CACF,CAKA,IAAK,IAAI6I,EAAM,EAAGC,EAAQhB,EAAWe,EAAMd,IAAOc,EAAK,CACrD,IAAIE,EAASf,EAAMa,GACN,KAATC,GAA0B,KAAVC,EAAiBf,EAAMa,GAAO,IACzCtB,EAAStM,KAAK8N,KAAWD,EAAQC,EAC5C,CAQA,IAAK,IAAIC,EAAM,EAAGA,EAAMjB,IAAOiB,EAC7B,GAAI1B,EAAUrM,KAAK+M,EAAMgB,IAAO,CAC9B,IAAIC,OAAQ,EACZ,IAAKA,EAAQD,EAAM,EAAGC,EAAQlB,GAAOT,EAAUrM,KAAK+M,EAAMiB,MAAWA,GAIrE,IAHA,IAAIC,EAA6C,MAAnCF,EAAMhB,EAAMgB,EAAI,GAAKlB,GAE/BqB,EAAYD,IADwC,MAA3CD,EAAQlB,EAAMC,EAAMiB,GAASnB,IACPoB,EAAS,IAAM,IAAOpB,EAChDsB,EAAMJ,EAAKI,EAAMH,IAASG,EAAOpB,EAAMoB,GAAOD,EACvDH,EAAMC,EAAQ,CAChB,CASF,IADA,IAAgBI,EAAZrC,EAAQ,GACHsC,EAAM,EAAGA,EAAMvB,GACtB,GAAIP,EAAavM,KAAK+M,EAAMsB,IAAO,CACjC,IAAIvJ,EAAQuJ,EACZ,MAAOA,EAAKA,EAAMvB,GAAOP,EAAavM,KAAK+M,EAAMsB,MAASA,GAC1DtC,EAAMtC,KAAK,IAAIgD,EAAS,EAAG3H,EAAOuJ,GACpC,KAAO,CACL,IAAInF,EAAMmF,EAAKC,EAAKvC,EAAMtJ,OAAQ8L,EAAqB,OAAb5B,EAAqB,EAAI,EACnE,MAAO0B,EAAKA,EAAMvB,GAAqB,KAAdC,EAAMsB,KAAeA,GAC9C,IAAK,IAAIG,EAAMtF,EAAKsF,EAAMH,GACxB,GAAI7B,EAAYxM,KAAK+M,EAAMyB,IAAO,CAC5BtF,EAAMsF,IAAOzC,EAAM0C,OAAOH,EAAI,EAAG,IAAI7B,EAAS,EAAGvD,EAAKsF,IAAOF,GAAMC,GACvE,IAAIG,EAASF,EACb,MAAOA,EAAKA,EAAMH,GAAO7B,EAAYxM,KAAK+M,EAAMyB,MAASA,GACzDzC,EAAM0C,OAAOH,EAAI,EAAG,IAAI7B,EAAS,EAAGiC,EAAQF,IAC5CF,GAAMC,EACNrF,EAAMsF,CACR,OAAWA,EAETtF,EAAMmF,GAAOtC,EAAM0C,OAAOH,EAAI,EAAG,IAAI7B,EAAS,EAAGvD,EAAKmF,GAC5D,CAaF,MAXiB,OAAb1B,IACoB,GAAlBZ,EAAM,GAAGW,QAAe0B,EAAIlD,EAAIxJ,MAAM,WACxCqK,EAAM,GAAGR,KAAO6C,EAAE,GAAG3L,OACrBsJ,EAAM4C,QAAQ,IAAIlC,EAAS,EAAG,EAAG2B,EAAE,GAAG3L,UAEhB,GAApBiH,EAAIqC,GAAOW,QAAe0B,EAAIlD,EAAIxJ,MAAM,WAC1CgI,EAAIqC,GAAOP,IAAM4C,EAAE,GAAG3L,OACtBsJ,EAAMtC,KAAK,IAAIgD,EAAS,EAAGK,EAAMsB,EAAE,GAAG3L,OAAQqK,MAI9B,OAAbH,EAAqBZ,EAAM6C,UAAY7C,CAChD,CACD,CAlJkB,GAuJnB,SAAS8C,GAASC,EAAMnC,GACtB,IAAIZ,EAAQ+C,EAAK/C,MAEjB,OADa,MAATA,IAAiBA,EAAQ+C,EAAK/C,MAAQI,GAAa2C,EAAKC,KAAMpC,IAC3DZ,CACT,CAOA,IAAIiD,GAAa,GAEbC,GAAK,SAASC,EAAShC,EAAMhH,GAC/B,GAAIgJ,EAAQC,iBACVD,EAAQC,iBAAiBjC,EAAMhH,GAAG,QAC7B,GAAIgJ,EAAQE,YACjBF,EAAQE,YAAY,KAAOlC,EAAMhH,OAC5B,CACL,IAAI0D,EAAMsF,EAAQG,YAAcH,EAAQG,UAAY,CAAC,GACrDzF,EAAIsD,IAAStD,EAAIsD,IAAS8B,IAAYM,OAAOpJ,EAC/C,CACF,EAEA,SAASqJ,GAAYL,EAAShC,GAC5B,OAAOgC,EAAQG,WAAaH,EAAQG,UAAUnC,IAAS8B,EACzD,CAEA,SAASQ,GAAIN,EAAShC,EAAMhH,GAC1B,GAAIgJ,EAAQO,oBACVP,EAAQO,oBAAoBvC,EAAMhH,GAAG,QAChC,GAAIgJ,EAAQQ,YACjBR,EAAQQ,YAAY,KAAOxC,EAAMhH,OAC5B,CACL,IAAI0D,EAAMsF,EAAQG,UAAW1F,EAAMC,GAAOA,EAAIsD,GAC9C,GAAIvD,EAAK,CACP,IAAInH,EAAQ+E,EAAQoC,EAAKzD,GACrB1D,GAAS,IACToH,EAAIsD,GAAQvD,EAAIpH,MAAM,EAAGC,GAAO8M,OAAO3F,EAAIpH,MAAMC,EAAQ,IAC/D,CACF,CACF,CAEA,SAASmN,GAAOT,EAAShC,GACvB,IAAI0C,EAAWL,GAAYL,EAAShC,GACpC,GAAK0C,EAASnN,OAEd,IADA,IAAI0D,EAAOC,MAAMC,UAAU9D,MAAM+D,KAAKC,UAAW,GACxC7C,EAAI,EAAGA,EAAIkM,EAASnN,SAAUiB,EAAKkM,EAASlM,GAAG8C,MAAM,KAAML,EACtE,CAKA,SAAS0J,GAAelK,EAAIhD,EAAGmN,GAI7B,MAHgB,iBAALnN,IACPA,EAAI,CAACuK,KAAMvK,EAAGoN,eAAgB,WAAalI,KAAKmI,kBAAmB,CAAM,IAC7EL,GAAOhK,EAAImK,GAAYnN,EAAEuK,KAAMvH,EAAIhD,GAC5BsN,GAAmBtN,IAAMA,EAAEuN,gBACpC,CAEA,SAASC,GAAqBxK,GAC5B,IAAIgE,EAAMhE,EAAG0J,WAAa1J,EAAG0J,UAAUe,eACvC,GAAKzG,EAEL,IADA,IAAIrB,EAAM3C,EAAG0K,MAAMC,yBAA2B3K,EAAG0K,MAAMC,uBAAyB,IACvE5M,EAAI,EAAGA,EAAIiG,EAAIlH,SAAUiB,GAAkC,GAAzB6D,EAAQe,EAAKqB,EAAIjG,KACxD4E,EAAImB,KAAKE,EAAIjG,GACnB,CAEA,SAAS6M,GAAWrB,EAAShC,GAC3B,OAAOqC,GAAYL,EAAShC,GAAMzK,OAAS,CAC7C,CAIA,SAAS+N,GAAWC,GAClBA,EAAKpK,UAAU4I,GAAK,SAAS/B,EAAMhH,GAAI+I,GAAGpH,KAAMqF,EAAMhH,EAAG,EACzDuK,EAAKpK,UAAUmJ,IAAM,SAAStC,EAAMhH,GAAIsJ,GAAI3H,KAAMqF,EAAMhH,EAAG,CAC7D,CAKA,SAASwK,GAAiB/N,GACpBA,EAAEoN,eAAkBpN,EAAEoN,iBACnBpN,EAAEgO,aAAc,CACzB,CACA,SAASC,GAAkBjO,GACrBA,EAAEkO,gBAAmBlO,EAAEkO,kBACpBlO,EAAEmO,cAAe,CAC1B,CACA,SAASb,GAAmBtN,GAC1B,OAA6B,MAAtBA,EAAEqN,iBAA2BrN,EAAEqN,iBAAoC,GAAjBrN,EAAEgO,WAC7D,CACA,SAASI,GAAOpO,GAAI+N,GAAiB/N,GAAIiO,GAAkBjO,EAAG,CAE9D,SAASqO,GAASrO,GAAI,OAAOA,EAAEgE,QAAUhE,EAAEsO,UAAU,CACrD,SAASC,GAASvO,GAChB,IAAI+B,EAAI/B,EAAEwO,MAOV,OANS,MAALzM,IACa,EAAX/B,EAAEyO,OAAc1M,EAAI,EACJ,EAAX/B,EAAEyO,OAAc1M,EAAI,EACT,EAAX/B,EAAEyO,SAAc1M,EAAI,IAE3BpD,GAAOqB,EAAE0O,SAAgB,GAAL3M,IAAUA,EAAI,GAC/BA,CACT,CAGA,IAQI4M,GAeAC,GAvBAC,GAAc,WAGhB,GAAInR,GAAMC,EAAa,EAAK,OAAO,EACnC,IAAImR,EAAMtO,EAAI,OACd,MAAO,cAAesO,GAAO,aAAcA,CAC7C,CANkB,GASlB,SAASC,GAAiBC,GACxB,GAAqB,MAAjBL,GAAuB,CACzB,IAAItR,EAAOmD,EAAI,OAAQ,KACvBH,EAAqB2O,EAASxO,EAAI,OAAQ,CAACnD,EAAMO,SAASkD,eAAe,QAClC,GAAnCkO,EAAQ5O,WAAW6O,eACnBN,GAAgBtR,EAAK6R,aAAe,GAAK7R,EAAK4R,aAAe,KAAOvR,GAAMC,EAAa,GAC7F,CACA,IAAI6B,EAAOmP,GAAgBnO,EAAI,OAAQ,KACrCA,EAAI,OAAQ,IAAU,KAAM,yDAE9B,OADAhB,EAAKyB,aAAa,UAAW,IACtBzB,CACT,CAIA,SAAS2P,GAAgBH,GACvB,GAAoB,MAAhBJ,GAAwB,OAAOA,GACnC,IAAIQ,EAAM/O,EAAqB2O,EAASpR,SAASkD,eAAe,QAC5DuO,EAAK/P,EAAM8P,EAAK,EAAG,GAAGE,wBACtBC,EAAKjQ,EAAM8P,EAAK,EAAG,GAAGE,wBAE1B,OADAvP,EAAeiP,MACVK,GAAMA,EAAGG,MAAQH,EAAGI,SAClBb,GAAgBW,EAAGE,MAAQJ,EAAGI,MAAQ,EAC/C,CAIA,IA8BMzP,GA9BF0P,GAA+C,GAA9B,QAAQzN,MAAM,MAAMnC,OAAc,SAAUuE,GAE/D,IADA,IAAIkC,EAAM,EAAGoJ,EAAS,GAAIC,EAAIvL,EAAOvE,OAC9ByG,GAAOqJ,GAAG,CACf,IAAIC,EAAKxL,EAAOO,QAAQ,KAAM2B,IACnB,GAAPsJ,IAAYA,EAAKxL,EAAOvE,QAC5B,IAAIqM,EAAO9H,EAAOzE,MAAM2G,EAA8B,MAAzBlC,EAAOoE,OAAOoH,EAAK,GAAaA,EAAK,EAAIA,GAClEC,EAAK3D,EAAKvH,QAAQ,OACX,GAAPkL,GACFH,EAAO7I,KAAKqF,EAAKvM,MAAM,EAAGkQ,IAC1BvJ,GAAOuJ,EAAK,IAEZH,EAAO7I,KAAKqF,GACZ5F,EAAMsJ,EAAK,EAEf,CACA,OAAOF,CACT,EAAI,SAAUtL,GAAU,OAAOA,EAAOpC,MAAM,WAAa,EAErD8N,GAAeC,OAAOC,aAAe,SAAUC,GACjD,IAAM,OAAOA,EAAGrL,gBAAkBqL,EAAGpL,YAAa,CAClD,MAAM9E,GAAK,OAAO,CAAM,CAC1B,EAAI,SAAUkQ,GACZ,IAAI5Q,EACJ,IAAKA,EAAQ4Q,EAAG/M,cAAcgN,UAAUjO,aAAc,CACtD,MAAMlC,GAAI,CACV,SAAKV,GAASA,EAAM8Q,iBAAmBF,IACe,GAA/C5Q,EAAM+Q,iBAAiB,aAAc/Q,EAC9C,EAEIgR,GAEE,WADAtQ,GAAIQ,EAAI,UAEZR,GAAEiB,aAAa,SAAU,WACC,mBAAZjB,GAAEuQ,QAGdC,GAAiB,KAUrB,IAAIC,GAAQ,CAAC,EAAGC,GAAY,CAAC,EAK7B,SAASC,GAAWC,EAAMC,GACpBjN,UAAU9D,OAAS,IACnB+Q,EAAKC,aAAerN,MAAMC,UAAU9D,MAAM+D,KAAKC,UAAW,IAC9D6M,GAAMG,GAAQC,CAChB,CAQA,SAASE,GAAYC,GACnB,GAAmB,iBAARA,GAAoBN,GAAUvM,eAAe6M,GACtDA,EAAON,GAAUM,QACZ,GAAIA,GAA4B,iBAAbA,EAAKJ,MAAoBF,GAAUvM,eAAe6M,EAAKJ,MAAO,CACtF,IAAItH,EAAQoH,GAAUM,EAAKJ,MACP,iBAATtH,IAAqBA,EAAQ,CAACsH,KAAMtH,KAC/C0H,EAAO5J,GAAUkC,EAAO0H,IACnBJ,KAAOtH,EAAMsH,IACpB,KAAO,IAAmB,iBAARI,GAAoB,0BAA0B3T,KAAK2T,GACnE,OAAOD,GAAY,mBACd,GAAmB,iBAARC,GAAoB,2BAA2B3T,KAAK2T,GACpE,OAAOD,GAAY,mBACrB,CACA,MAAmB,iBAARC,EAA2B,CAACJ,KAAMI,GAC/BA,GAAQ,CAACJ,KAAM,OAC/B,CAIA,SAASK,GAAQC,EAASF,GACxBA,EAAOD,GAAYC,GACnB,IAAIG,EAAWV,GAAMO,EAAKJ,MAC1B,IAAKO,EAAY,OAAOF,GAAQC,EAAS,cACzC,IAAIE,EAAUD,EAASD,EAASF,GAChC,GAAIK,GAAelN,eAAe6M,EAAKJ,MAAO,CAC5C,IAAIU,EAAOD,GAAeL,EAAKJ,MAC/B,IAAK,IAAI1M,KAAQoN,EACVA,EAAKnN,eAAeD,KACrBkN,EAAQjN,eAAeD,KAASkN,EAAQ,IAAMlN,GAAQkN,EAAQlN,IAClEkN,EAAQlN,GAAQoN,EAAKpN,GAEzB,CAGA,GAFAkN,EAAQR,KAAOI,EAAKJ,KAChBI,EAAKO,aAAcH,EAAQG,WAAaP,EAAKO,YAC7CP,EAAKQ,UAAa,IAAK,IAAIC,KAAUT,EAAKQ,UAC1CJ,EAAQK,GAAUT,EAAKQ,UAAUC,GAErC,OAAOL,CACT,CAIA,IAAIC,GAAiB,CAAC,EACtB,SAASK,GAAWb,EAAMc,GAExB7N,EAAQ6N,EADGN,GAAelN,eAAe0M,GAAQQ,GAAeR,GAASQ,GAAeR,GAAQ,CAAC,EAEnG,CAEA,SAASe,GAAUf,EAAMgB,GACvB,IAAc,IAAVA,EAAkB,OAAOA,EAC7B,GAAIhB,EAAKe,UAAa,OAAOf,EAAKe,UAAUC,GAC5C,IAAIC,EAAS,CAAC,EACd,IAAK,IAAIpN,KAAKmN,EAAO,CACnB,IAAIE,EAAMF,EAAMnN,GACZqN,aAAetO,QAASsO,EAAMA,EAAIpF,OAAO,KAC7CmF,EAAOpN,GAAKqN,CACd,CACA,OAAOD,CACT,CAIA,SAASE,GAAUnB,EAAMgB,GAEvB,IADA,IAAII,EACGpB,EAAKmB,YACVC,EAAOpB,EAAKmB,UAAUH,KACTI,EAAKpB,MAAQA,GAC1BgB,EAAQI,EAAKJ,MACbhB,EAAOoB,EAAKpB,KAEd,OAAOoB,GAAQ,CAACpB,KAAMA,EAAMgB,MAAOA,EACrC,CAEA,SAASK,GAAWrB,EAAMsB,EAAIC,GAC5B,OAAOvB,EAAKqB,YAAarB,EAAKqB,WAAWC,EAAIC,EAC/C,CAOA,IAAIC,GAAe,SAAShO,EAAQC,EAASgO,GAC3CpN,KAAKqB,IAAMrB,KAAK/C,MAAQ,EACxB+C,KAAKb,OAASA,EACda,KAAKZ,QAAUA,GAAW,EAC1BY,KAAKqN,cAAgBrN,KAAKsN,gBAAkB,EAC5CtN,KAAKuN,UAAY,EACjBvN,KAAKoN,WAAaA,CACpB,EA0EA,SAASI,GAAQlR,EAAKkD,GAEpB,IADAA,GAAKlD,EAAImR,OACD,GAAKjO,GAAKlD,EAAIoR,KAAQ,MAAM,IAAIC,MAAM,qBAAuBnO,EAAIlD,EAAImR,OAAS,qBAEtF,IADA,IAAIG,EAAQtR,GACJsR,EAAMC,OACZ,IAAK,IAAIhS,EAAI,KAAMA,EAAG,CACpB,IAAII,EAAQ2R,EAAME,SAASjS,GAAIkS,EAAK9R,EAAM+R,YAC1C,GAAIxO,EAAIuO,EAAI,CAAEH,EAAQ3R,EAAO,KAAM,CACnCuD,GAAKuO,CACP,CAEF,OAAOH,EAAMC,MAAMrO,EACrB,CAIA,SAASyO,GAAW3R,EAAKW,EAAOC,GAC9B,IAAI8E,EAAM,GAAIxC,EAAIvC,EAAMgK,KAQxB,OAPA3K,EAAI4R,KAAKjR,EAAMgK,KAAM/J,EAAI+J,KAAO,GAAG,SAAUA,GAC3C,IAAIC,EAAOD,EAAKC,KACZ1H,GAAKtC,EAAI+J,OAAQC,EAAOA,EAAKxM,MAAM,EAAGwC,EAAIwF,KAC1ClD,GAAKvC,EAAMgK,OAAQC,EAAOA,EAAKxM,MAAMuC,EAAMyF,KAC/CV,EAAIJ,KAAKsF,KACP1H,CACJ,IACOwC,CACT,CAEA,SAASmM,GAAS7R,EAAKoH,EAAMC,GAC3B,IAAI3B,EAAM,GAEV,OADA1F,EAAI4R,KAAKxK,EAAMC,GAAI,SAAUsD,GAAQjF,EAAIJ,KAAKqF,EAAKC,KAAO,IACnDlF,CACT,CAIA,SAASoM,GAAiBnH,EAAMoH,GAC9B,IAAIC,EAAOD,EAASpH,EAAKoH,OACzB,GAAIC,EAAQ,IAAK,IAAI9O,EAAIyH,EAAMzH,EAAGA,EAAIA,EAAEpE,OAAUoE,EAAE6O,QAAUC,CAChE,CAIA,SAASC,GAAOtH,GACd,GAAmB,MAAfA,EAAK7L,OAAkB,OAAO,KAElC,IADA,IAAIiJ,EAAM4C,EAAK7L,OAAQoT,EAAK9O,EAAQ2E,EAAIwJ,MAAO5G,GACtC2G,EAAQvJ,EAAIjJ,OAAQwS,EAAOvJ,EAAMuJ,EAAOA,EAAQA,EAAMxS,OAC7D,IAAK,IAAIS,EAAI,EACP+R,EAAME,SAASjS,IAAMwI,IADRxI,EAEjB2S,GAAMZ,EAAME,SAASjS,GAAGmS,YAG5B,OAAOQ,EAAKnK,EAAIoJ,KAClB,CAIA,SAASgB,GAAab,EAAOc,GAC3B,IAAIlP,EAAIoO,EAAMH,MACdkB,EAAO,EAAG,CACR,IAAK,IAAIxJ,EAAM,EAAGA,EAAMyI,EAAME,SAASlT,SAAUuK,EAAK,CACpD,IAAIlJ,EAAQ2R,EAAME,SAAS3I,GAAMzC,EAAKzG,EAAMoS,OAC5C,GAAIK,EAAIhM,EAAI,CAAEkL,EAAQ3R,EAAO,SAAS0S,CAAM,CAC5CD,GAAKhM,EACLlD,GAAKvD,EAAM+R,WACb,CACA,OAAOxO,CACT,QAAUoO,EAAMC,OAEhB,IADA,IAAIhS,EAAI,EACDA,EAAI+R,EAAMC,MAAMjT,SAAUiB,EAAG,CAClC,IAA2B+S,EAAhBhB,EAAMC,MAAMhS,GAAcwS,OACrC,GAAIK,EAAIE,EAAM,MACdF,GAAKE,CACP,CACA,OAAOpP,EAAI3D,CACb,CAEA,SAASgT,GAAOvS,EAAKoO,GAAI,OAAOA,GAAKpO,EAAImR,OAAS/C,EAAIpO,EAAImR,MAAQnR,EAAIoR,IAAI,CAE1E,SAASoB,GAAc9C,EAASnQ,GAC9B,OAAOkT,OAAO/C,EAAQgD,oBAAoBnT,EAAImQ,EAAQiD,iBACxD,CAGA,SAASC,GAAIjI,EAAMvE,EAAIyB,GAGrB,QAFgB,IAAXA,IAAoBA,EAAS,QAE5BnE,gBAAgBkP,IAAQ,OAAO,IAAIA,GAAIjI,EAAMvE,EAAIyB,GACvDnE,KAAKiH,KAAOA,EACZjH,KAAK0C,GAAKA,EACV1C,KAAKmE,OAASA,CAChB,CAIA,SAASgL,GAAIvS,EAAGC,GAAK,OAAOD,EAAEqK,KAAOpK,EAAEoK,MAAQrK,EAAE8F,GAAK7F,EAAE6F,EAAG,CAE3D,SAAS0M,GAAexS,EAAGC,GAAK,OAAOD,EAAEuH,QAAUtH,EAAEsH,QAAuB,GAAbgL,GAAIvS,EAAGC,EAAQ,CAE9E,SAASwS,GAAQC,GAAI,OAAOJ,GAAII,EAAErI,KAAMqI,EAAE5M,GAAG,CAC7C,SAAS6M,GAAO3S,EAAGC,GAAK,OAAOsS,GAAIvS,EAAGC,GAAK,EAAIA,EAAID,CAAE,CACrD,SAAS4S,GAAO5S,EAAGC,GAAK,OAAOsS,GAAIvS,EAAGC,GAAK,EAAID,EAAIC,CAAE,CAIrD,SAAS4S,GAASnT,EAAKkD,GAAI,OAAOgC,KAAKkO,IAAIpT,EAAImR,MAAOjM,KAAKC,IAAIjC,EAAGlD,EAAImR,MAAQnR,EAAIoR,KAAO,GAAG,CAC5F,SAASiC,GAAQrT,EAAK+E,GACpB,GAAIA,EAAI4F,KAAO3K,EAAImR,MAAS,OAAOyB,GAAI5S,EAAImR,MAAO,GAClD,IAAImC,EAAOtT,EAAImR,MAAQnR,EAAIoR,KAAO,EAClC,OAAIrM,EAAI4F,KAAO2I,EAAeV,GAAIU,EAAMpC,GAAQlR,EAAKsT,GAAM1I,KAAKtM,QAGlE,SAAmByG,EAAKwO,GACtB,IAAInN,EAAKrB,EAAIqB,GACb,OAAU,MAANA,GAAcA,EAAKmN,EAAkBX,GAAI7N,EAAI4F,KAAM4I,GAC9CnN,EAAK,EAAYwM,GAAI7N,EAAI4F,KAAM,GAC1B5F,CAChB,CAPSyO,CAAUzO,EAAKmM,GAAQlR,EAAK+E,EAAI4F,MAAMC,KAAKtM,OACpD,CAOA,SAASmV,GAAazT,EAAK+D,GAEzB,IADA,IAAI2B,EAAM,GACDnG,EAAI,EAAGA,EAAIwE,EAAMzF,OAAQiB,IAAOmG,EAAInG,GAAK8T,GAAQrT,EAAK+D,EAAMxE,IACrE,OAAOmG,CACT,CAlMAmL,GAAa3O,UAAUwR,IAAM,WAAa,OAAOhQ,KAAKqB,KAAOrB,KAAKb,OAAOvE,MAAM,EAC/EuS,GAAa3O,UAAUyR,IAAM,WAAa,OAAOjQ,KAAKqB,KAAOrB,KAAKuN,SAAS,EAC3EJ,GAAa3O,UAAU0R,KAAO,WAAa,OAAOlQ,KAAKb,OAAOoE,OAAOvD,KAAKqB,WAAQ8O,CAAS,EAC3FhD,GAAa3O,UAAU4R,KAAO,WAC5B,GAAIpQ,KAAKqB,IAAMrB,KAAKb,OAAOvE,OACvB,OAAOoF,KAAKb,OAAOoE,OAAOvD,KAAKqB,MACrC,EACA8L,GAAa3O,UAAU6R,IAAM,SAAUxW,GACrC,IAAI6I,EAAK1C,KAAKb,OAAOoE,OAAOvD,KAAKqB,KAIjC,GAFoB,iBAATxH,EAA0B6I,GAAM7I,EAC/B6I,IAAO7I,EAAM1B,KAAO0B,EAAM1B,KAAKuK,GAAM7I,EAAM6I,IAClC,QAAV1C,KAAKqB,IAAYqB,CAC9B,EACAyK,GAAa3O,UAAU8R,SAAW,SAAUzW,GAE1C,IADA,IAAIoD,EAAQ+C,KAAKqB,IACVrB,KAAKqQ,IAAIxW,KAChB,OAAOmG,KAAKqB,IAAMpE,CACpB,EACAkQ,GAAa3O,UAAU+R,SAAW,WAEhC,IADA,IAAItT,EAAQ+C,KAAKqB,IACV,aAAalJ,KAAK6H,KAAKb,OAAOoE,OAAOvD,KAAKqB,SAAWrB,KAAKqB,IACjE,OAAOrB,KAAKqB,IAAMpE,CACpB,EACAkQ,GAAa3O,UAAUgS,UAAY,WAAaxQ,KAAKqB,IAAMrB,KAAKb,OAAOvE,MAAO,EAC9EuS,GAAa3O,UAAUiS,OAAS,SAAU/N,GACxC,IAAI0B,EAAQpE,KAAKb,OAAOO,QAAQgD,EAAI1C,KAAKqB,KACzC,GAAI+C,GAAS,EAAsB,OAAlBpE,KAAKqB,IAAM+C,GAAc,CAC5C,EACA+I,GAAa3O,UAAUkS,OAAS,SAAUlR,GAAIQ,KAAKqB,KAAO7B,CAAE,EAC5D2N,GAAa3O,UAAUmS,OAAS,WAK9B,OAJI3Q,KAAKqN,cAAgBrN,KAAK/C,QAC5B+C,KAAKsN,gBAAkBpO,EAAYc,KAAKb,OAAQa,KAAK/C,MAAO+C,KAAKZ,QAASY,KAAKqN,cAAerN,KAAKsN,iBACnGtN,KAAKqN,cAAgBrN,KAAK/C,OAErB+C,KAAKsN,iBAAmBtN,KAAKuN,UAAYrO,EAAYc,KAAKb,OAAQa,KAAKuN,UAAWvN,KAAKZ,SAAW,EAC3G,EACA+N,GAAa3O,UAAUoS,YAAc,WACnC,OAAO1R,EAAYc,KAAKb,OAAQ,KAAMa,KAAKZ,UACxCY,KAAKuN,UAAYrO,EAAYc,KAAKb,OAAQa,KAAKuN,UAAWvN,KAAKZ,SAAW,EAC/E,EACA+N,GAAa3O,UAAU3E,MAAQ,SAAUgX,EAASC,EAASC,GACzD,GAAsB,iBAAXF,EAOJ,CACL,IAAIhX,EAAQmG,KAAKb,OAAOzE,MAAMsF,KAAKqB,KAAKxH,MAAMgX,GAC9C,OAAIhX,GAASA,EAAMc,MAAQ,EAAY,MACnCd,IAAqB,IAAZiX,IAAqB9Q,KAAKqB,KAAOxH,EAAM,GAAGe,QAChDf,EACT,CAXE,IAAImX,EAAQ,SAAU3N,GAAO,OAAO0N,EAAkB1N,EAAIT,cAAgBS,CAAK,EAE/E,GAAI2N,EADShR,KAAKb,OAAO8R,OAAOjR,KAAKqB,IAAKwP,EAAQjW,UAC7BoW,EAAMH,GAEzB,OADgB,IAAZC,IAAqB9Q,KAAKqB,KAAOwP,EAAQjW,SACtC,CAQb,EACAuS,GAAa3O,UAAUjE,QAAU,WAAY,OAAOyF,KAAKb,OAAOzE,MAAMsF,KAAK/C,MAAO+C,KAAKqB,IAAI,EAC3F8L,GAAa3O,UAAU0S,eAAiB,SAAU1R,EAAG2R,GACnDnR,KAAKuN,WAAa/N,EAClB,IAAM,OAAO2R,GAAQ,CACrB,QAAUnR,KAAKuN,WAAa/N,CAAG,CACjC,EACA2N,GAAa3O,UAAU4S,UAAY,SAAU5R,GAC3C,IAAI6R,EAASrR,KAAKoN,WAClB,OAAOiE,GAAUA,EAAOD,UAAU5R,EACpC,EACA2N,GAAa3O,UAAU8S,UAAY,WACjC,IAAID,EAASrR,KAAKoN,WAClB,OAAOiE,GAAUA,EAAOC,UAAUtR,KAAKqB,IACzC,EA+HA,IAAIkQ,GAAe,SAAS5E,EAAOyE,GACjCpR,KAAK2M,MAAQA,EACb3M,KAAKoR,UAAYA,CACnB,EAEII,GAAU,SAASlV,EAAKqQ,EAAO1F,EAAMmK,GACvCpR,KAAK2M,MAAQA,EACb3M,KAAK1D,IAAMA,EACX0D,KAAKiH,KAAOA,EACZjH,KAAKyR,aAAeL,GAAa,EACjCpR,KAAK0R,WAAa,KAClB1R,KAAK2R,aAAe,CACtB,EAuCA,SAASC,GAAc9T,EAAImJ,EAAM4K,EAASC,GAGxC,IAAIC,EAAK,CAACjU,EAAG6O,MAAMqF,SAAUC,EAAc,CAAC,EAE5CC,GAAQpU,EAAImJ,EAAKC,KAAMpJ,EAAGxB,IAAIqP,KAAMkG,GAAS,SAAU3U,EAAKzB,GAAS,OAAOsW,EAAGnQ,KAAK1E,EAAKzB,EAAQ,GACzFwW,EAAaH,GAkCrB,IAjCA,IAAInF,EAAQkF,EAAQlF,MAGhBwF,EAAO,SAAWC,GACpBP,EAAQH,WAAaK,EACrB,IAAIM,EAAUvU,EAAG6O,MAAM2F,SAASF,GAAIvW,EAAI,EAAG4K,EAAK,EAChDoL,EAAQlF,OAAQ,EAChBuF,GAAQpU,EAAImJ,EAAKC,KAAMmL,EAAQ1G,KAAMkG,GAAS,SAAU3U,EAAKzB,GAG3D,IAFA,IAAIwB,EAAQpB,EAEL4K,EAAKvJ,GAAK,CACf,IAAIqV,EAAQR,EAAGlW,GACX0W,EAAQrV,GACR6U,EAAGnL,OAAO/K,EAAG,EAAGqB,EAAK6U,EAAGlW,EAAE,GAAI0W,GAClC1W,GAAK,EACL4K,EAAKjF,KAAKC,IAAIvE,EAAKqV,EACrB,CACA,GAAK9W,EACL,GAAI4W,EAAQG,OACVT,EAAGnL,OAAO3J,EAAOpB,EAAIoB,EAAOC,EAAK,WAAazB,GAC9CI,EAAIoB,EAAQ,OAEZ,KAAOA,EAAQpB,EAAGoB,GAAS,EAAG,CAC5B,IAAIoH,EAAM0N,EAAG9U,EAAM,GACnB8U,EAAG9U,EAAM,IAAMoH,EAAMA,EAAM,IAAM,IAAM,WAAa5I,CACtD,CAEJ,GAAGwW,GACHJ,EAAQlF,MAAQA,EAChBkF,EAAQH,WAAa,KACrBG,EAAQF,aAAe,CACzB,EAESS,EAAI,EAAGA,EAAItU,EAAG6O,MAAM2F,SAAS1X,SAAUwX,EAAGD,EAAMC,GAEzD,MAAO,CAACK,OAAQV,EAAIW,QAAST,EAAYU,SAAWV,EAAYW,UAAYX,EAAc,KAC5F,CAEA,SAASY,GAAc/U,EAAImJ,EAAM6L,GAC/B,IAAK7L,EAAKwL,QAAUxL,EAAKwL,OAAO,IAAM3U,EAAG6O,MAAMqF,QAAS,CACtD,IAAIH,EAAUkB,GAAiBjV,EAAIyQ,GAAOtH,IACtC+L,EAAa/L,EAAKC,KAAKtM,OAASkD,EAAGkO,QAAQiH,oBAAsBvG,GAAU5O,EAAGxB,IAAIqP,KAAMkG,EAAQlF,OAChGlC,EAASmH,GAAc9T,EAAImJ,EAAM4K,GACjCmB,IAAcnB,EAAQlF,MAAQqG,GAClC/L,EAAKiM,WAAarB,EAAQsB,MAAMH,GAChC/L,EAAKwL,OAAShI,EAAOgI,OACjBhI,EAAOiI,QAAWzL,EAAKmM,aAAe3I,EAAOiI,QACxCzL,EAAKmM,eAAgBnM,EAAKmM,aAAe,MAC9CN,IAAmBhV,EAAGxB,IAAI+W,oBAC1BvV,EAAGxB,IAAIgX,aAAe9R,KAAKkO,IAAI5R,EAAGxB,IAAIgX,eAAgBxV,EAAGxB,IAAI+W,mBACnE,CACA,OAAOpM,EAAKwL,MACd,CAEA,SAASM,GAAiBjV,EAAI0B,EAAG+T,GAC/B,IAAIjX,EAAMwB,EAAGxB,IAAKyB,EAAUD,EAAGC,QAC/B,IAAKzB,EAAIqP,KAAKqB,WAAc,OAAO,IAAIwE,GAAQlV,GAAK,EAAMkD,GAC1D,IAAIvC,EA6HN,SAAuBa,EAAI0B,EAAG+T,GAG5B,IAFA,IAAIC,EAAWC,EAASnX,EAAMwB,EAAGxB,IAC7BoX,EAAMH,GAAW,EAAI/T,GAAK1B,EAAGxB,IAAIqP,KAAKmB,UAAY,IAAO,KACpDvN,EAASC,EAAGD,EAASmU,IAAOnU,EAAQ,CAC3C,GAAIA,GAAUjD,EAAImR,MAAS,OAAOnR,EAAImR,MACtC,IAAIxG,EAAOuG,GAAQlR,EAAKiD,EAAS,GAAI9E,EAAQwM,EAAKiM,WAClD,GAAIzY,KAAW8Y,GAAWhU,GAAU9E,aAAiB8W,GAAe9W,EAAM2W,UAAY,IAAM9U,EAAIgX,cAC5F,OAAO/T,EACX,IAAIoU,EAAWzU,EAAY+H,EAAKC,KAAM,KAAMpJ,EAAGkO,QAAQ5M,UACxC,MAAXqU,GAAmBD,EAAYG,KACjCF,EAAUlU,EAAS,EACnBiU,EAAYG,EAEhB,CACA,OAAOF,CACT,CA5IcG,CAAc9V,EAAI0B,EAAG+T,GAC7BM,EAAQ5W,EAAQX,EAAImR,OAASD,GAAQlR,EAAKW,EAAQ,GAAGiW,WACrDrB,EAAUgC,EAAQrC,GAAQsC,UAAUxX,EAAKuX,EAAO5W,GAAS,IAAIuU,GAAQlV,EAAK0Q,GAAW1Q,EAAIqP,MAAO1O,GASpG,OAPAX,EAAI4R,KAAKjR,EAAOuC,GAAG,SAAUyH,GAC3B8M,GAAYjW,EAAImJ,EAAKC,KAAM2K,GAC3B,IAAIxQ,EAAMwQ,EAAQ5K,KAClBA,EAAKiM,WAAa7R,GAAO7B,EAAI,GAAK6B,EAAM,GAAK,GAAKA,GAAOtD,EAAQiW,UAAY3S,EAAMtD,EAAQkW,OAASpC,EAAQsB,OAAS,KACrHtB,EAAQqC,UACV,IACIX,IAAWjX,EAAIgX,aAAezB,EAAQ5K,MACnC4K,CACT,CAKA,SAASkC,GAAYjW,EAAIoJ,EAAM2K,EAASsC,GACtC,IAAIxI,EAAO7N,EAAGxB,IAAIqP,KACdyI,EAAS,IAAIjH,GAAajG,EAAMpJ,EAAGkO,QAAQ5M,QAASyS,GAGxD,IAFAuC,EAAOnX,MAAQmX,EAAO/S,IAAM8S,GAAW,EAC3B,IAARjN,GAAcmN,GAAc1I,EAAMkG,EAAQlF,QACtCyH,EAAOpE,OACbsE,GAAU3I,EAAMyI,EAAQvC,EAAQlF,OAChCyH,EAAOnX,MAAQmX,EAAO/S,GAE1B,CAEA,SAASgT,GAAc1I,EAAMgB,GAC3B,GAAIhB,EAAK4I,UAAa,OAAO5I,EAAK4I,UAAU5H,GAC5C,GAAKhB,EAAKmB,UAAV,CACA,IAAIqE,EAAQrE,GAAUnB,EAAMgB,GAC5B,OAAIwE,EAAMxF,KAAK4I,UAAoBpD,EAAMxF,KAAK4I,UAAUpD,EAAMxE,YAA9D,CAF8B,CAGhC,CAEA,SAAS2H,GAAU3I,EAAMyI,EAAQzH,EAAOwE,GACtC,IAAK,IAAItV,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACvBsV,IAASA,EAAM,GAAKrE,GAAUnB,EAAMgB,GAAOhB,MAC/C,IAAIlQ,EAAQkQ,EAAK6I,MAAMJ,EAAQzH,GAC/B,GAAIyH,EAAO/S,IAAM+S,EAAOnX,MAAS,OAAOxB,CAC1C,CACA,MAAM,IAAIkS,MAAM,QAAUhC,EAAKD,KAAO,6BACxC,CA/IA8F,GAAQhT,UAAU4S,UAAY,SAAU5R,GACtC,IAAIyH,EAAOjH,KAAK1D,IAAIkR,QAAQxN,KAAKiH,KAAOzH,GAExC,OADY,MAARyH,GAAgBzH,EAAIQ,KAAKyR,eAAgBzR,KAAKyR,aAAejS,GAC1DyH,CACT,EAEAuK,GAAQhT,UAAU8S,UAAY,SAAU9R,GACtC,IAAKQ,KAAK0R,WAAc,OAAO,KAC/B,KAAO1R,KAAK0R,WAAW1R,KAAK2R,eAAiBnS,GACzCQ,KAAK2R,cAAgB,EACzB,IAAItM,EAAOrF,KAAK0R,WAAW1R,KAAK2R,aAAe,GAC/C,MAAO,CAACtM,KAAMA,GAAQA,EAAKQ,QAAQ,kBAAmB,IAC9C6H,KAAM1N,KAAK0R,WAAW1R,KAAK2R,cAAgBnS,EACrD,EAEAgS,GAAQhT,UAAU0V,SAAW,WAC3BlU,KAAKiH,OACDjH,KAAKyR,aAAe,GAAKzR,KAAKyR,cACpC,EAEAD,GAAQsC,UAAY,SAAUxX,EAAKuX,EAAO5M,GACxC,OAAI4M,aAAiBtC,GACV,IAAIC,GAAQlV,EAAKoQ,GAAUpQ,EAAIqP,KAAMkI,EAAMlH,OAAQ1F,EAAM4M,EAAMzC,WAE/D,IAAII,GAAQlV,EAAKoQ,GAAUpQ,EAAIqP,KAAMkI,GAAQ5M,EAC1D,EAEAuK,GAAQhT,UAAU2U,KAAO,SAAUsB,GACjC,IAAI9H,GAAiB,IAAT8H,EAAiB/H,GAAU1M,KAAK1D,IAAIqP,KAAM3L,KAAK2M,OAAS3M,KAAK2M,MACzE,OAAO3M,KAAKyR,aAAe,EAAI,IAAIF,GAAa5E,EAAO3M,KAAKyR,cAAgB9E,CAC9E,EAmHA,IAAI+H,GAAQ,SAASN,EAAQ/O,EAAMsH,GACjC3M,KAAK/C,MAAQmX,EAAOnX,MAAO+C,KAAK9C,IAAMkX,EAAO/S,IAC7CrB,KAAKb,OAASiV,EAAO7Z,UACrByF,KAAKqF,KAAOA,GAAQ,KACpBrF,KAAK2M,MAAQA,CACf,EAGA,SAASgI,GAAU7W,EAAIuD,EAAKkS,EAASqB,GACnC,IAAmCnZ,EAGoCoZ,EAHnEvY,EAAMwB,EAAGxB,IAAKqP,EAAOrP,EAAIqP,KAEzB1E,EAAOuG,GAAQlR,GADnB+E,EAAMsO,GAAQrT,EAAK+E,IACS4F,MAAO4K,EAAUkB,GAAiBjV,EAAIuD,EAAI4F,KAAMsM,GACxEa,EAAS,IAAIjH,GAAalG,EAAKC,KAAMpJ,EAAGkO,QAAQ5M,QAASyS,GAE7D,IADI+C,IAAWC,EAAS,KAChBD,GAAWR,EAAO/S,IAAMA,EAAIqB,MAAQ0R,EAAOpE,OACjDoE,EAAOnX,MAAQmX,EAAO/S,IACtB5F,EAAQ6Y,GAAU3I,EAAMyI,EAAQvC,EAAQlF,OACpCiI,GAAWC,EAAOjT,KAAK,IAAI8S,GAAMN,EAAQ3Y,EAAOiR,GAAUpQ,EAAIqP,KAAMkG,EAAQlF,SAElF,OAAOiI,EAAUC,EAAS,IAAIH,GAAMN,EAAQ3Y,EAAOoW,EAAQlF,MAC7D,CAEA,SAASmI,GAAmBzP,EAAM0P,GAChC,GAAI1P,EAAQ,OAAS,CACnB,IAAI2P,EAAY3P,EAAKxL,MAAM,qCAC3B,IAAKmb,EAAa,MAClB3P,EAAOA,EAAK3K,MAAM,EAAGsa,EAAUra,OAAS0K,EAAK3K,MAAMsa,EAAUra,MAAQqa,EAAU,GAAGpa,QAClF,IAAIoE,EAAOgW,EAAU,GAAK,UAAY,YAClB,MAAhBD,EAAO/V,GACP+V,EAAO/V,GAAQgW,EAAU,GACnB,IAAK7a,OAAO,YAAc6a,EAAU,GAAK,aAAc7c,KAAK4c,EAAO/V,MACzE+V,EAAO/V,IAAS,IAAMgW,EAAU,GACtC,CACA,OAAO3P,CACT,CAGA,SAAS6M,GAAQpU,EAAIoJ,EAAMyE,EAAMkG,EAASxT,EAAG4T,EAAaH,GACxD,IAAImD,EAAetJ,EAAKsJ,aACJ,MAAhBA,IAAwBA,EAAenX,EAAGkO,QAAQiJ,cACtD,IACkExZ,EAD9DyZ,EAAW,EAAGC,EAAW,KACzBf,EAAS,IAAIjH,GAAajG,EAAMpJ,EAAGkO,QAAQ5M,QAASyS,GACpDV,EAAQrT,EAAGkO,QAAQoJ,cAAgB,CAAC,MAExC,IADY,IAARlO,GAAc4N,GAAmBT,GAAc1I,EAAMkG,EAAQlF,OAAQsF,IACjEmC,EAAOpE,OAAO,CASpB,GARIoE,EAAO/S,IAAMvD,EAAGkO,QAAQiH,oBAC1BgC,GAAe,EACXnD,GAAciC,GAAYjW,EAAIoJ,EAAM2K,EAASuC,EAAO/S,KACxD+S,EAAO/S,IAAM6F,EAAKtM,OAClBa,EAAQ,MAERA,EAAQqZ,GAAmBR,GAAU3I,EAAMyI,EAAQvC,EAAQlF,MAAOwE,GAAQc,GAExEd,EAAO,CACT,IAAIkE,EAAQlE,EAAM,GAAGzF,KACjB2J,IAAS5Z,EAAQ,MAAQA,EAAQ4Z,EAAQ,IAAM5Z,EAAQ4Z,GAC7D,CACA,IAAKJ,GAAgBE,GAAY1Z,EAAO,CACtC,KAAOyZ,EAAWd,EAAOnX,OAEvBoB,EADA6W,EAAW1T,KAAKC,IAAI2S,EAAOnX,MAAOiY,EAAW,KACjCC,GAEdA,EAAW1Z,CACb,CACA2Y,EAAOnX,MAAQmX,EAAO/S,GACxB,CACA,KAAO6T,EAAWd,EAAO/S,KAAK,CAI5B,IAAIA,EAAMG,KAAKC,IAAI2S,EAAO/S,IAAK6T,EAAW,KAC1C7W,EAAEgD,EAAK8T,GACPD,EAAW7T,CACb,CACF,CA0CA,IAAIiU,IAAmB,EAAOC,IAAoB,EAYlD,SAASC,GAAWC,EAAQ/R,EAAMC,GAChC3D,KAAKyV,OAASA,EACdzV,KAAK0D,KAAOA,EAAM1D,KAAK2D,GAAKA,CAC9B,CAGA,SAAS+R,GAAiBC,EAAOF,GAC/B,GAAIE,EAAS,IAAK,IAAI9Z,EAAI,EAAGA,EAAI8Z,EAAM/a,SAAUiB,EAAG,CAClD,IAAI+Z,EAAOD,EAAM9Z,GACjB,GAAI+Z,EAAKH,QAAUA,EAAU,OAAOG,CACtC,CACF,CAIA,SAASC,GAAiBF,EAAOC,GAE/B,IADA,IAAIxY,EACKvB,EAAI,EAAGA,EAAI8Z,EAAM/a,SAAUiB,EAC5B8Z,EAAM9Z,IAAM+Z,IAASxY,IAAMA,EAAI,KAAKwE,KAAK+T,EAAM9Z,IACvD,OAAOuB,CACT,CAkDA,SAAS0Y,GAAuBxZ,EAAKyZ,GACnC,GAAIA,EAAOC,KAAQ,OAAO,KAC1B,IAAIC,EAAWpH,GAAOvS,EAAKyZ,EAAOrS,KAAKuD,OAASuG,GAAQlR,EAAKyZ,EAAOrS,KAAKuD,MAAMiP,YAC3EC,EAAUtH,GAAOvS,EAAKyZ,EAAOpS,GAAGsD,OAASuG,GAAQlR,EAAKyZ,EAAOpS,GAAGsD,MAAMiP,YAC1E,IAAKD,IAAaE,EAAW,OAAO,KAEpC,IAAIC,EAAUL,EAAOrS,KAAKhB,GAAI2T,EAAQN,EAAOpS,GAAGjB,GAAI4T,EAA0C,GAA/BnH,GAAI4G,EAAOrS,KAAMqS,EAAOpS,IAEnF8J,EAxCN,SAA2B8I,EAAKH,EAASE,GACvC,IAAIE,EACJ,GAAID,EAAO,IAAK,IAAI1a,EAAI,EAAGA,EAAI0a,EAAI3b,SAAUiB,EAAG,CAC9C,IAAI+Z,EAAOW,EAAI1a,GAAI4Z,EAASG,EAAKH,OAEjC,GADgC,MAAbG,EAAKlS,OAAiB+R,EAAOgB,cAAgBb,EAAKlS,MAAQ0S,EAAUR,EAAKlS,KAAO0S,IAC/ER,EAAKlS,MAAQ0S,GAA0B,YAAfX,EAAOpQ,QAAwBiR,IAAaV,EAAKH,OAAOiB,YAAa,CAC/G,IAAIC,EAAuB,MAAXf,EAAKjS,KAAe8R,EAAOmB,eAAiBhB,EAAKjS,IAAMyS,EAAUR,EAAKjS,GAAKyS,IACzFI,IAAOA,EAAK,KAAK5U,KAAK,IAAI4T,GAAWC,EAAQG,EAAKlS,KAAMiT,EAAY,KAAOf,EAAKjS,IACpF,CACF,CACA,OAAO6S,CACT,CA6BcK,CAAkBZ,EAAUG,EAASE,GAC7C1G,EA7BN,SAA0B2G,EAAKF,EAAOC,GACpC,IAAIE,EACJ,GAAID,EAAO,IAAK,IAAI1a,EAAI,EAAGA,EAAI0a,EAAI3b,SAAUiB,EAAG,CAC9C,IAAI+Z,EAAOW,EAAI1a,GAAI4Z,EAASG,EAAKH,OAEjC,GAD2B,MAAXG,EAAKjS,KAAe8R,EAAOmB,eAAiBhB,EAAKjS,IAAM0S,EAAQT,EAAKjS,GAAK0S,IACxET,EAAKlS,MAAQ2S,GAAwB,YAAfZ,EAAOpQ,QAAwBiR,GAAYV,EAAKH,OAAOiB,YAAa,CACzG,IAAII,EAA4B,MAAblB,EAAKlS,OAAiB+R,EAAOgB,cAAgBb,EAAKlS,MAAQ2S,EAAQT,EAAKlS,KAAO2S,IAC/FG,IAAOA,EAAK,KAAK5U,KAAK,IAAI4T,GAAWC,EAAQqB,EAAe,KAAOlB,EAAKlS,KAAO2S,EAChC,MAAXT,EAAKjS,GAAa,KAAOiS,EAAKjS,GAAK0S,GAC3E,CACF,CACA,OAAOG,CACT,CAiBaO,CAAiBZ,EAASE,EAAOC,GAGxCU,EAAiC,GAAtBjB,EAAO7O,KAAKtM,OAAaqc,EAASpV,EAAIkU,EAAO7O,MAAMtM,QAAUoc,EAAWZ,EAAU,GACjG,GAAI3I,EAEF,IAAK,IAAI5R,EAAI,EAAGA,EAAI4R,EAAM7S,SAAUiB,EAAG,CACrC,IAAI+Z,EAAOnI,EAAM5R,GACjB,GAAe,MAAX+Z,EAAKjS,GAAY,CACnB,IAAIS,EAAQsR,GAAiB9F,EAAMgG,EAAKH,QACnCrR,EACI4S,IAAYpB,EAAKjS,GAAiB,MAAZS,EAAMT,GAAa,KAAOS,EAAMT,GAAKsT,GADtDrB,EAAKjS,GAAKyS,CAE1B,CACF,CAEF,GAAIxG,EAEF,IAAK,IAAIzK,EAAM,EAAGA,EAAMyK,EAAKhV,SAAUuK,EAAK,CAC1C,IAAI+R,EAAStH,EAAKzK,GACD,MAAb+R,EAAOvT,KAAcuT,EAAOvT,IAAMsT,GACnB,MAAfC,EAAOxT,KACKgS,GAAiBjI,EAAOyJ,EAAOzB,UAE3CyB,EAAOxT,KAAOuT,EACVD,IAAavJ,IAAUA,EAAQ,KAAK7L,KAAKsV,KAG/CA,EAAOxT,MAAQuT,EACXD,IAAavJ,IAAUA,EAAQ,KAAK7L,KAAKsV,GAEjD,CAGEzJ,IAASA,EAAQ0J,GAAgB1J,IACjCmC,GAAQA,GAAQnC,IAASmC,EAAOuH,GAAgBvH,IAEpD,IAAIwH,EAAa,CAAC3J,GAClB,IAAKuJ,EAAU,CAEb,IAAkCK,EAA9BC,EAAMvB,EAAO7O,KAAKtM,OAAS,EAC/B,GAAI0c,EAAM,GAAK7J,EACX,IAAK,IAAInI,EAAM,EAAGA,EAAMmI,EAAM7S,SAAU0K,EACjB,MAAjBmI,EAAMnI,GAAK3B,KACZ0T,IAAeA,EAAa,KAAKzV,KAAK,IAAI4T,GAAW/H,EAAMnI,GAAKmQ,OAAQ,KAAM,OACvF,IAAK,IAAIjQ,EAAM,EAAGA,EAAM8R,IAAO9R,EAC3B4R,EAAWxV,KAAKyV,GACpBD,EAAWxV,KAAKgO,EAClB,CACA,OAAOwH,CACT,CAIA,SAASD,GAAgBxB,GACvB,IAAK,IAAI9Z,EAAI,EAAGA,EAAI8Z,EAAM/a,SAAUiB,EAAG,CACrC,IAAI+Z,EAAOD,EAAM9Z,GACA,MAAb+Z,EAAKlS,MAAgBkS,EAAKlS,MAAQkS,EAAKjS,KAAqC,IAA/BiS,EAAKH,OAAO8B,gBACzD5B,EAAM/O,OAAO/K,IAAK,EACxB,CACA,OAAK8Z,EAAM/a,OACJ+a,EADqB,IAE9B,CAgCA,SAAS6B,GAAkBvQ,GACzB,IAAI0O,EAAQ1O,EAAKiP,YACjB,GAAKP,EAAL,CACA,IAAK,IAAI9Z,EAAI,EAAGA,EAAI8Z,EAAM/a,SAAUiB,EAChC8Z,EAAM9Z,GAAG4Z,OAAOgC,WAAWxQ,GAC/BA,EAAKiP,YAAc,IAHE,CAIvB,CACA,SAASwB,GAAkBzQ,EAAM0O,GAC/B,GAAKA,EAAL,CACA,IAAK,IAAI9Z,EAAI,EAAGA,EAAI8Z,EAAM/a,SAAUiB,EAChC8Z,EAAM9Z,GAAG4Z,OAAOkC,WAAW1Q,GAC/BA,EAAKiP,YAAcP,CAHE,CAIvB,CAIA,SAASiC,GAAUnC,GAAU,OAAOA,EAAOgB,eAAiB,EAAI,CAAE,CAClE,SAASoB,GAAWpC,GAAU,OAAOA,EAAOmB,eAAiB,EAAI,CAAE,CAKnE,SAASkB,GAAwBlb,EAAGC,GAClC,IAAIkb,EAAUnb,EAAEiR,MAAMjT,OAASiC,EAAEgR,MAAMjT,OACvC,GAAe,GAAXmd,EAAgB,OAAOA,EAC3B,IAAIC,EAAOpb,EAAEqb,OAAQC,EAAOrb,EAAEob,OAC1BE,EAAUhJ,GAAI6I,EAAKtU,KAAMwU,EAAKxU,OAASkU,GAAUhb,GAAKgb,GAAU/a,GACpE,OAAIsb,GAAmBA,EACXhJ,GAAI6I,EAAKrU,GAAIuU,EAAKvU,KAAOkU,GAAWjb,GAAKib,GAAWhb,IAEzDA,EAAEoD,GAAKrD,EAAEqD,EAClB,CAIA,SAASmY,GAAoBnR,EAAMhK,GACjC,IAAiDmH,EAA7CiU,EAAM9C,IAAqBtO,EAAKiP,YACpC,GAAImC,EAAO,IAAK,IAAIC,OAAK,EAAUzc,EAAI,EAAGA,EAAIwc,EAAIzd,SAAUiB,GAC1Dyc,EAAKD,EAAIxc,IACF4Z,OAAO8C,WAA0C,OAA5Btb,EAAQqb,EAAG5U,KAAO4U,EAAG3U,OAC3CS,GAAS0T,GAAwB1T,EAAOkU,EAAG7C,QAAU,KACvDrR,EAAQkU,EAAG7C,QAEjB,OAAOrR,CACT,CACA,SAASoU,GAAqBvR,GAAQ,OAAOmR,GAAoBnR,GAAM,EAAM,CAC7E,SAASwR,GAAmBxR,GAAQ,OAAOmR,GAAoBnR,GAAM,EAAO,CAE5E,SAASyR,GAAoBzR,EAAMvE,GACjC,IAAiD0B,EAA7CiU,EAAM9C,IAAqBtO,EAAKiP,YACpC,GAAImC,EAAO,IAAK,IAAIxc,EAAI,EAAGA,EAAIwc,EAAIzd,SAAUiB,EAAG,CAC9C,IAAIyc,EAAKD,EAAIxc,GACTyc,EAAG7C,OAAO8C,YAAyB,MAAXD,EAAG5U,MAAgB4U,EAAG5U,KAAOhB,KAAiB,MAAT4V,EAAG3U,IAAc2U,EAAG3U,GAAKjB,MACpF0B,GAAS0T,GAAwB1T,EAAOkU,EAAG7C,QAAU,KAAMrR,EAAQkU,EAAG7C,OAC9E,CACA,OAAOrR,CACT,CAKA,SAASuU,GAA0Brc,EAAKiS,EAAQ7K,EAAMC,EAAI8R,GACxD,IAAIxO,EAAOuG,GAAQlR,EAAKiS,GACpB8J,EAAM9C,IAAqBtO,EAAKiP,YACpC,GAAImC,EAAO,IAAK,IAAIxc,EAAI,EAAGA,EAAIwc,EAAIzd,SAAUiB,EAAG,CAC9C,IAAIyc,EAAKD,EAAIxc,GACb,GAAKyc,EAAG7C,OAAO8C,UAAf,CACA,IAAInU,EAAQkU,EAAG7C,OAAOwC,KAAK,GACvBE,EAAUhJ,GAAI/K,EAAMV,KAAMA,IAASkU,GAAUU,EAAG7C,QAAUmC,GAAUnC,GACpEmD,EAAQzJ,GAAI/K,EAAMT,GAAIA,IAAOkU,GAAWS,EAAG7C,QAAUoC,GAAWpC,GACpE,KAAI0C,GAAW,GAAKS,GAAS,GAAKT,GAAW,GAAKS,GAAS,KACvDT,GAAW,IAAMG,EAAG7C,OAAOmB,gBAAkBnB,EAAOgB,cAAgBtH,GAAI/K,EAAMT,GAAID,IAAS,EAAIyL,GAAI/K,EAAMT,GAAID,GAAQ,IACrHyU,GAAW,IAAMG,EAAG7C,OAAOmB,gBAAkBnB,EAAOgB,cAAgBtH,GAAI/K,EAAMV,KAAMC,IAAO,EAAIwL,GAAI/K,EAAMV,KAAMC,GAAM,IACrH,OAAO,CAP0B,CAQvC,CACF,CAMA,SAASkV,GAAW5R,GAElB,IADA,IAAI6R,EACGA,EAASN,GAAqBvR,IACjCA,EAAO6R,EAAOb,MAAM,GAAG,GAAMhR,KACjC,OAAOA,CACT,CAsBA,SAAS8R,GAAazc,EAAK0c,GACzB,IAAI/R,EAAOuG,GAAQlR,EAAK0c,GAAQC,EAAMJ,GAAW5R,GACjD,OAAIA,GAAQgS,EAAcD,EACnBzK,GAAO0K,EAChB,CAIA,SAASC,GAAgB5c,EAAK0c,GAC5B,GAAIA,EAAQ1c,EAAI6c,WAAc,OAAOH,EACrC,IAAgCF,EAA5B7R,EAAOuG,GAAQlR,EAAK0c,GACxB,IAAKI,GAAa9c,EAAK2K,GAAS,OAAO+R,EACvC,KAAOF,EAASL,GAAmBxR,IAC/BA,EAAO6R,EAAOb,KAAK,GAAG,GAAMhR,KAChC,OAAOsH,GAAOtH,GAAQ,CACxB,CAKA,SAASmS,GAAa9c,EAAK2K,GACzB,IAAIoR,EAAM9C,IAAqBtO,EAAKiP,YACpC,GAAImC,EAAO,IAAK,IAAIC,OAAK,EAAUzc,EAAI,EAAGA,EAAIwc,EAAIzd,SAAUiB,EAE1D,IADAyc,EAAKD,EAAIxc,IACD4Z,OAAO8C,UAAf,CACA,GAAe,MAAXD,EAAG5U,KAAgB,OAAO,EAC9B,IAAI4U,EAAG7C,OAAO4D,YACC,GAAXf,EAAG5U,MAAa4U,EAAG7C,OAAOgB,eAAiB6C,GAAkBhd,EAAK2K,EAAMqR,GACxE,OAAO,CAJ0B,CAMzC,CACA,SAASgB,GAAkBhd,EAAK2K,EAAM2O,GACpC,GAAe,MAAXA,EAAKjS,GAAY,CACnB,IAAIzG,EAAM0Y,EAAKH,OAAOwC,KAAK,GAAG,GAC9B,OAAOqB,GAAkBhd,EAAKY,EAAI+J,KAAMyO,GAAiBxY,EAAI+J,KAAKiP,YAAaN,EAAKH,QACtF,CACA,GAAIG,EAAKH,OAAOmB,gBAAkBhB,EAAKjS,IAAMsD,EAAKC,KAAKtM,OACnD,OAAO,EACX,IAAK,IAAI0d,OAAK,EAAUzc,EAAI,EAAGA,EAAIoL,EAAKiP,YAAYtb,SAAUiB,EAE5D,IADAyc,EAAKrR,EAAKiP,YAAYra,IACf4Z,OAAO8C,YAAcD,EAAG7C,OAAO4D,YAAcf,EAAG5U,MAAQkS,EAAKjS,KACtD,MAAT2U,EAAG3U,IAAc2U,EAAG3U,IAAMiS,EAAKlS,QAC/B4U,EAAG7C,OAAOgB,eAAiBb,EAAKH,OAAOmB,iBACxC0C,GAAkBhd,EAAK2K,EAAMqR,GAAO,OAAO,CAEnD,CAGA,SAASiB,GAAaC,GAIpB,IADA,IAAI9K,EAAI,EAAGd,GAFX4L,EAAUX,GAAWW,IAEMpe,OAClBS,EAAI,EAAGA,EAAI+R,EAAMC,MAAMjT,SAAUiB,EAAG,CAC3C,IAAIoL,EAAO2G,EAAMC,MAAMhS,GACvB,GAAIoL,GAAQuS,EAAW,MAChB9K,GAAKzH,EAAKoH,MACnB,CACA,IAAK,IAAIoL,EAAI7L,EAAMxS,OAAQqe,EAAcA,GAAX7L,EAAQ6L,GAAare,OACjD,IAAK,IAAI+J,EAAM,EAAGA,EAAMsU,EAAE3L,SAASlT,SAAUuK,EAAK,CAChD,IAAId,EAAMoV,EAAE3L,SAAS3I,GACrB,GAAId,GAAOuJ,EAAS,MACbc,GAAKrK,EAAIgK,MAClB,CAEF,OAAOK,CACT,CAKA,SAASgL,GAAWzS,GAClB,GAAmB,GAAfA,EAAKoH,OAAe,OAAO,EAE/B,IADA,IAA4ByK,EAAxB7T,EAAMgC,EAAKC,KAAKtM,OAAgByJ,EAAM4C,EACnC6R,EAASN,GAAqBnU,IAAM,CACzC,IAAID,EAAQ0U,EAAOb,KAAK,GAAG,GAC3B5T,EAAMD,EAAMV,KAAKuD,KACjBhC,GAAOb,EAAMV,KAAKhB,GAAK0B,EAAMT,GAAGjB,EAClC,CAEA,IADA2B,EAAM4C,EACC6R,EAASL,GAAmBpU,IAAM,CACvC,IAAIsV,EAAUb,EAAOb,KAAK,GAAG,GAC7BhT,GAAOZ,EAAI6C,KAAKtM,OAAS+e,EAAQjW,KAAKhB,GAEtCuC,IADAZ,EAAMsV,EAAQhW,GAAGsD,MACNC,KAAKtM,OAAS+e,EAAQhW,GAAGjB,EACtC,CACA,OAAOuC,CACT,CAGA,SAAS2U,GAAY9b,GACnB,IAAI+b,EAAI/b,EAAGC,QAASzB,EAAMwB,EAAGxB,IAC7Bud,EAAEC,QAAUtM,GAAQlR,EAAKA,EAAImR,OAC7BoM,EAAEE,cAAgBL,GAAWG,EAAEC,SAC/BD,EAAEG,gBAAiB,EACnB1d,EAAI4R,MAAK,SAAUjH,GACjB,IAAIhC,EAAMyU,GAAWzS,GACjBhC,EAAM4U,EAAEE,gBACVF,EAAEE,cAAgB9U,EAClB4U,EAAEC,QAAU7S,EAEhB,GACF,CAMA,IAAIgT,GAAO,SAAS/S,EAAMgP,EAAagE,GACrCla,KAAKkH,KAAOA,EACZwQ,GAAkB1X,KAAMkW,GACxBlW,KAAKqO,OAAS6L,EAAiBA,EAAela,MAAQ,CACxD,EAoBA,SAASma,GAAYlT,GACnBA,EAAK7L,OAAS,KACdoc,GAAkBvQ,EACpB,CArBAgT,GAAKzb,UAAU+P,OAAS,WAAc,OAAOA,GAAOvO,KAAM,EAC1D2I,GAAWsR,IAyBX,IAAIG,GAAoB,CAAC,EAAGC,GAA4B,CAAC,EACzD,SAASC,GAAoB7e,EAAOuQ,GAClC,IAAKvQ,GAAS,QAAQtD,KAAKsD,GAAU,OAAO,KAC5C,IAAI8e,EAAQvO,EAAQoJ,aAAeiF,GAA4BD,GAC/D,OAAOG,EAAM9e,KACV8e,EAAM9e,GAASA,EAAMoK,QAAQ,OAAQ,SAC1C,CAOA,SAAS2U,GAAiB1c,EAAI2c,GAI5B,IAAIjf,EAAUM,EAAK,OAAQ,KAAM,KAAMlD,EAAS,sBAAwB,MACpE8hB,EAAU,CAACC,IAAK7e,EAAK,MAAO,CAACN,GAAU,mBAAoBA,QAASA,EACzD8F,IAAK,EAAGD,IAAK,EAAGvD,GAAIA,EACpB8c,eAAe,EACfC,YAAa/c,EAAGgd,UAAU,iBACzCL,EAAS3Q,QAAU,CAAC,EAGpB,IAAK,IAAIjO,EAAI,EAAGA,IAAM4e,EAASM,KAAON,EAASM,KAAKngB,OAAS,GAAIiB,IAAK,CACpE,IAAIoL,EAAOpL,EAAI4e,EAASM,KAAKlf,EAAI,GAAK4e,EAASxT,KAAM/C,OAAQ,EAC7DwW,EAAQrZ,IAAM,EACdqZ,EAAQM,SAAWC,GAGfhR,GAAgBnM,EAAGC,QAAQ+L,WAAa5F,EAAQ8C,GAASC,EAAMnJ,EAAGxB,IAAIwI,cACtE4V,EAAQM,SAAWE,GAAkBR,EAAQM,SAAU9W,IAC3DwW,EAAQ3Y,IAAM,GAEdoZ,GAAkBlU,EAAMyT,EAAS7H,GAAc/U,EAAImJ,EADzBwT,GAAY3c,EAAGC,QAAQqd,kBAAoB7M,GAAOtH,KAExEA,EAAKmM,eACHnM,EAAKmM,aAAaT,UAClB+H,EAAQ/H,QAAUhW,EAAYsK,EAAKmM,aAAaT,QAAS+H,EAAQ/H,SAAW,KAC5E1L,EAAKmM,aAAaR,YAClB8H,EAAQ9H,UAAYjW,EAAYsK,EAAKmM,aAAaR,UAAW8H,EAAQ9H,WAAa,MAI9D,GAAtB8H,EAAQ3Y,IAAInH,QACZ8f,EAAQ3Y,IAAIH,KAAK,EAAG,EAAG8Y,EAAQlf,QAAQH,YAAYwO,GAAiB/L,EAAGC,QAAQ+L,WAG1E,GAALjO,GACF4e,EAAS3Q,QAAQ/H,IAAM2Y,EAAQ3Y,IAC/B0Y,EAAS3Q,QAAQyQ,MAAQ,CAAC,KAE/BE,EAAS3Q,QAAQuR,OAASZ,EAAS3Q,QAAQuR,KAAO,KAAKzZ,KAAK8Y,EAAQ3Y,MAC7D0Y,EAAS3Q,QAAQwR,SAAWb,EAAS3Q,QAAQwR,OAAS,KAAK1Z,KAAK,CAAC,GAEvE,CAGA,GAAIhJ,EAAQ,CACV,IAAIgX,EAAO8K,EAAQlf,QAAQ+f,WACvB,aAAapjB,KAAKyX,EAAKpV,YAAeoV,EAAK4L,eAAiB5L,EAAK4L,cAAc,cAC/Ed,EAAQlf,QAAQhB,UAAY,mBAClC,CAMA,OAJAsN,GAAOhK,EAAI,aAAcA,EAAI2c,EAASxT,KAAMyT,EAAQC,KAChDD,EAAQC,IAAIngB,YACZkgB,EAAQ9H,UAAYjW,EAAY+d,EAAQC,IAAIngB,UAAWkgB,EAAQ9H,WAAa,KAEzE8H,CACT,CAEA,SAASe,GAA8B/Y,GACrC,IAAI8R,EAAQlZ,EAAI,OAAQ,IAAU,kBAGlC,OAFAkZ,EAAMkH,MAAQ,MAAQhZ,EAAGS,WAAW,GAAGtC,SAAS,IAChD2T,EAAMzY,aAAa,aAAcyY,EAAMkH,OAChClH,CACT,CAIA,SAASyG,GAAWP,EAASxT,EAAMzL,EAAOkgB,EAAYC,EAAUC,EAAKC,GACnE,GAAK5U,EAAL,CACA,IAEI1L,EAFAugB,EAAcrB,EAAQG,YAiE5B,SAAqB3T,EAAM8U,GACzB,GAAI9U,EAAKtM,OAAS,IAAM,KAAKzC,KAAK+O,GAAS,OAAOA,EAElD,IADA,IAAI+U,EAAcD,EAAgBvR,EAAS,GAClC5O,EAAI,EAAGA,EAAIqL,EAAKtM,OAAQiB,IAAK,CACpC,IAAI6G,EAAKwE,EAAK3D,OAAO1H,GACX,KAAN6G,IAAauZ,GAAgBpgB,GAAKqL,EAAKtM,OAAS,GAA+B,IAA1BsM,EAAK/D,WAAWtH,EAAI,KACzE6G,EAAK,KACT+H,GAAU/H,EACVuZ,EAAoB,KAANvZ,CAChB,CACA,OAAO+H,CACT,CA5E0CoQ,CAAY3T,EAAMwT,EAAQE,eAAiB1T,EAC/EgV,EAAUxB,EAAQ5c,GAAG6O,MAAMwP,aAAcC,GAAW,EAExD,GAAKF,EAAQ/jB,KAAK+O,GAMX,CACL1L,EAAU9C,SAAS2jB,yBAEnB,IADA,IAAIhb,EAAM,IACG,CACX6a,EAAQI,UAAYjb,EACpB,IAAIkF,EAAI2V,EAAQ5jB,KAAK4O,GACjB3F,EAAUgF,EAAIA,EAAE5L,MAAQ0G,EAAM6F,EAAKtM,OAASyG,EAChD,GAAIE,EAAS,CACX,IAAI2I,EAAMxR,SAASkD,eAAemgB,EAAYrhB,MAAM2G,EAAKA,EAAME,IAC3D/I,GAAMC,EAAa,EAAK+C,EAAQH,YAAYC,EAAI,OAAQ,CAAC4O,KACtD1O,EAAQH,YAAY6O,GAC3BwQ,EAAQ3Y,IAAIH,KAAK8Y,EAAQrZ,IAAKqZ,EAAQrZ,IAAME,EAAS2I,GACrDwQ,EAAQpZ,KAAOC,EACfmZ,EAAQrZ,KAAOE,CACjB,CACA,IAAKgF,EAAK,MACVlF,GAAOE,EAAU,EACjB,IAAIgb,OAAQ,EACZ,GAAY,MAARhW,EAAE,GAAY,CAChB,IAAInH,EAAUsb,EAAQ5c,GAAGkO,QAAQ5M,QAASod,EAAWpd,EAAUsb,EAAQpZ,IAAMlC,GAC7Emd,EAAQ/gB,EAAQH,YAAYC,EAAI,OAAQqG,EAAS6a,GAAW,YACtDzgB,aAAa,OAAQ,gBAC3BwgB,EAAMxgB,aAAa,UAAW,MAC9B2e,EAAQpZ,KAAOkb,CACjB,KAAmB,MAARjW,EAAE,IAAsB,MAARA,EAAE,KAC3BgW,EAAQ/gB,EAAQH,YAAYC,EAAI,OAAgB,MAARiL,EAAE,GAAa,IAAW,IAAU,oBACtExK,aAAa,UAAWwK,EAAE,IAChCmU,EAAQpZ,KAAO,KAEfib,EAAQ7B,EAAQ5c,GAAGkO,QAAQyQ,uBAAuBlW,EAAE,KAC9CxK,aAAa,UAAWwK,EAAE,IAC5B/N,GAAMC,EAAa,EAAK+C,EAAQH,YAAYC,EAAI,OAAQ,CAACihB,KACtD/gB,EAAQH,YAAYkhB,GAC3B7B,EAAQpZ,KAAO,GAEjBoZ,EAAQ3Y,IAAIH,KAAK8Y,EAAQrZ,IAAKqZ,EAAQrZ,IAAM,EAAGkb,GAC/C7B,EAAQrZ,KACV,CACF,MA3CEqZ,EAAQpZ,KAAO4F,EAAKtM,OACpBY,EAAU9C,SAASkD,eAAemgB,GAClCrB,EAAQ3Y,IAAIH,KAAK8Y,EAAQrZ,IAAKqZ,EAAQrZ,IAAM6F,EAAKtM,OAAQY,GACrDhD,GAAMC,EAAa,IAAK2jB,GAAW,GACvC1B,EAAQrZ,KAAO6F,EAAKtM,OAyCtB,GADA8f,EAAQE,cAA2D,IAA3CmB,EAAY5Y,WAAW+D,EAAKtM,OAAS,GACzDa,GAASkgB,GAAcC,GAAYQ,GAAYP,GAAOC,EAAY,CACpE,IAAIY,EAAYjhB,GAAS,GACrBkgB,IAAce,GAAaf,GAC3BC,IAAYc,GAAad,GAC7B,IAAIpH,EAAQlZ,EAAI,OAAQ,CAACE,GAAUkhB,EAAWb,GAC9C,GAAIC,EACF,IAAK,IAAIa,KAAQb,EAAkBA,EAAW7c,eAAe0d,IAAiB,SAARA,GAA2B,SAARA,GACrFnI,EAAMzY,aAAa4gB,EAAMb,EAAWa,IAE1C,OAAOjC,EAAQlf,QAAQH,YAAYmZ,EACrC,CACAkG,EAAQlf,QAAQH,YAAYG,EA7DR,CA8DtB,CAmBA,SAAS0f,GAAkB/J,EAAOjN,GAChC,OAAO,SAAUwW,EAASxT,EAAMzL,EAAOkgB,EAAYC,EAAUC,EAAKC,GAChErgB,EAAQA,EAAQA,EAAQ,mBAAqB,kBAE7C,IADA,IAAIwB,EAAQyd,EAAQrZ,IAAKnE,EAAMD,EAAQiK,EAAKtM,SACnC,CAGP,IADA,IAAIgiB,OAAO,EACF/gB,EAAI,EAAGA,EAAIqI,EAAMtJ,WACxBgiB,EAAO1Y,EAAMrI,IACJ8H,GAAK1G,GAAS2f,EAAKlZ,MAAQzG,GAFJpB,KAIlC,GAAI+gB,EAAKjZ,IAAMzG,EAAO,OAAOiU,EAAMuJ,EAASxT,EAAMzL,EAAOkgB,EAAYC,EAAUC,EAAKC,GACpF3K,EAAMuJ,EAASxT,EAAKxM,MAAM,EAAGkiB,EAAKjZ,GAAK1G,GAAQxB,EAAOkgB,EAAY,KAAME,EAAKC,GAC7EH,EAAa,KACbzU,EAAOA,EAAKxM,MAAMkiB,EAAKjZ,GAAK1G,GAC5BA,EAAQ2f,EAAKjZ,EACf,CACF,CACF,CAEA,SAASkZ,GAAmBnC,EAAShN,EAAM+H,EAAQqH,GACjD,IAAIC,GAAUD,GAAgBrH,EAAO4D,WACjC0D,GAAUrC,EAAQ3Y,IAAIH,KAAK8Y,EAAQrZ,IAAKqZ,EAAQrZ,IAAMqM,EAAMqP,IAC3DD,GAAgBpC,EAAQ5c,GAAGC,QAAQif,MAAMC,wBACvCF,IACDA,EAASrC,EAAQlf,QAAQH,YAAY3C,SAASgD,cAAc,UAChEqhB,EAAOhhB,aAAa,YAAa0Z,EAAOxV,KAEtC8c,IACFrC,EAAQ5c,GAAGC,QAAQif,MAAME,cAAcH,GACvCrC,EAAQlf,QAAQH,YAAY0hB,IAE9BrC,EAAQrZ,KAAOqM,EACfgN,EAAQE,eAAgB,CAC1B,CAIA,SAASO,GAAkBlU,EAAMyT,EAASjI,GACxC,IAAIkD,EAAQ1O,EAAKiP,YAAaiH,EAAUlW,EAAKC,KAAMT,EAAK,EACxD,GAAKkP,EAQL,IAFA,IAAqDla,EAAOogB,EACxCuB,EAAWC,EAAcC,EAAgB/E,EAAWuD,EADpE7W,EAAMkY,EAAQviB,OAAQyG,EAAM,EAAGxF,EAAI,EAAGqL,EAAO,GAC7CqW,EAAa,IACR,CACP,GAAIA,GAAclc,EAAK,CACrB+b,EAAYC,EAAeC,EAAiBzB,EAAM,GAClDC,EAAa,KACbvD,EAAY,KAAMgF,EAAaC,IAE/B,IADA,IAAIC,EAAiB,GAAIC,OAAY,EAC5B5X,EAAI,EAAGA,EAAI6P,EAAM/a,SAAUkL,EAAG,CACrC,IAAIwS,EAAK3C,EAAM7P,GAAIS,EAAI+R,EAAG7C,OAC1B,GAAc,YAAVlP,EAAElB,MAAsBiT,EAAG5U,MAAQrC,GAAOkF,EAAE8S,WAC9CoE,EAAe7b,KAAK2E,QACf,GAAI+R,EAAG5U,MAAQrC,IAAiB,MAATiX,EAAG3U,IAAc2U,EAAG3U,GAAKtC,GAAOkF,EAAEgS,WAAaD,EAAG3U,IAAMtC,GAAOiX,EAAG5U,MAAQrC,GAAM,CAY5G,GAXa,MAATiX,EAAG3U,IAAc2U,EAAG3U,IAAMtC,GAAOkc,EAAajF,EAAG3U,KACnD4Z,EAAajF,EAAG3U,GAChB0Z,EAAe,IAEb9W,EAAE/L,YAAa4iB,GAAa,IAAM7W,EAAE/L,WACpC+L,EAAEsV,MAAOA,GAAOA,EAAMA,EAAM,IAAM,IAAMtV,EAAEsV,KAC1CtV,EAAEoV,YAAcrD,EAAG5U,MAAQrC,IAAOic,GAAkB,IAAM/W,EAAEoV,YAC5DpV,EAAEqV,UAAYtD,EAAG3U,IAAM4Z,IAAeG,IAAcA,EAAY,KAAK9b,KAAK2E,EAAEqV,SAAUtD,EAAG3U,IAGzF4C,EAAEmV,SAAUI,IAAeA,EAAa,CAAC,IAAIJ,MAAQnV,EAAEmV,OACvDnV,EAAEuV,WACJ,IAAK,IAAIa,KAAQpW,EAAEuV,YACdA,IAAeA,EAAa,CAAC,IAAIa,GAAQpW,EAAEuV,WAAWa,GAEzDpW,EAAEgS,aAAeA,GAAaT,GAAwBS,EAAU9C,OAAQlP,GAAK,KAC7EgS,EAAYD,EAClB,MAAWA,EAAG5U,KAAOrC,GAAOkc,EAAajF,EAAG5U,OAC1C6Z,EAAajF,EAAG5U,KAEpB,CACA,GAAIga,EAAa,IAAK,IAAIpX,EAAM,EAAGA,EAAMoX,EAAU9iB,OAAQ0L,GAAO,EAC1DoX,EAAUpX,EAAM,IAAMiX,IAAcF,GAAgB,IAAMK,EAAUpX,IAE5E,IAAKiS,GAAaA,EAAU7U,MAAQrC,EAAO,IAAK,IAAIsF,EAAM,EAAGA,EAAM8W,EAAe7iB,SAAU+L,EACxFkW,GAAmBnC,EAAS,EAAG+C,EAAe9W,IAClD,GAAI4R,IAAcA,EAAU7U,MAAQ,IAAMrC,EAAK,CAG7C,GAFAwb,GAAmBnC,GAA0B,MAAhBnC,EAAU5U,GAAasB,EAAM,EAAIsT,EAAU5U,IAAMtC,EAC3DkX,EAAU9C,OAA0B,MAAlB8C,EAAU7U,MAC3B,MAAhB6U,EAAU5U,GAAc,OACxB4U,EAAU5U,IAAMtC,IAAOkX,GAAY,EACzC,CACF,CACA,GAAIlX,GAAO4D,EAAO,MAGlB,IADA,IAAI0Y,EAAOnc,KAAKC,IAAIwD,EAAKsY,KACZ,CACX,GAAIrW,EAAM,CACR,IAAIhK,EAAMmE,EAAM6F,EAAKtM,OACrB,IAAK2d,EAAW,CACd,IAAIqF,EAAY1gB,EAAMygB,EAAOzW,EAAKxM,MAAM,EAAGijB,EAAOtc,GAAO6F,EACzDwT,EAAQM,SAASN,EAASkD,EAAWniB,EAAQA,EAAQ2hB,EAAYA,EAChDE,EAAgBjc,EAAMuc,EAAUhjB,QAAU2iB,EAAaF,EAAe,GAAIxB,EAAKC,EAClG,CACA,GAAI5e,GAAOygB,EAAM,CAACzW,EAAOA,EAAKxM,MAAMijB,EAAOtc,GAAMA,EAAMsc,EAAM,KAAK,CAClEtc,EAAMnE,EACNogB,EAAiB,EACnB,CACApW,EAAOiW,EAAQziB,MAAM+L,EAAIA,EAAKgM,EAAO5W,MACrCJ,EAAQ6e,GAAoB7H,EAAO5W,KAAM6e,EAAQ5c,GAAGkO,QACtD,CACF,MArEE,IAAK,IAAI7G,EAAM,EAAGA,EAAMsN,EAAO7X,OAAQuK,GAAK,EACxCuV,EAAQM,SAASN,EAASyC,EAAQziB,MAAM+L,EAAIA,EAAKgM,EAAOtN,IAAOmV,GAAoB7H,EAAOtN,EAAI,GAAIuV,EAAQ5c,GAAGkO,SAqErH,CAMA,SAAS6R,GAASvhB,EAAK2K,EAAM+R,GAE3BhZ,KAAKiH,KAAOA,EAEZjH,KAAK+a,KAjbP,SAA6B9T,GAE3B,IADA,IAAI6R,EAAQjL,EACLiL,EAASL,GAAmBxR,IACjCA,EAAO6R,EAAOb,KAAK,GAAG,GAAMhR,MAC1B4G,IAAUA,EAAQ,KAAKjM,KAAKqF,GAEhC,OAAO4G,CACT,CA0aciQ,CAAoB7W,GAEhCjH,KAAK0N,KAAO1N,KAAK+a,KAAOxM,GAAO1M,EAAI7B,KAAK+a,OAAS/B,EAAQ,EAAI,EAC7DhZ,KAAK1F,KAAO0F,KAAKkH,KAAO,KACxBlH,KAAK+d,OAAS3E,GAAa9c,EAAK2K,EAClC,CAGA,SAAS+W,GAAelgB,EAAI4F,EAAMC,GAEhC,IADA,IAAgBsa,EAAZ5d,EAAQ,GACHgB,EAAMqC,EAAMrC,EAAMsC,EAAItC,EAAM4c,EAAS,CAC5C,IAAIC,EAAO,IAAIL,GAAS/f,EAAGxB,IAAKkR,GAAQ1P,EAAGxB,IAAK+E,GAAMA,GACtD4c,EAAU5c,EAAM6c,EAAKxQ,KACrBrN,EAAMuB,KAAKsc,EACb,CACA,OAAO7d,CACT,CAEA,IAAI8d,GAAiB,KAwCrB,IAAIC,GAAyB,KAS7B,SAASC,GAAYhX,EAAShC,GAC5B,IAAIvD,EAAM4F,GAAYL,EAAShC,GAC/B,GAAKvD,EAAIlH,OAAT,CACA,IAAqD0jB,EAAjDhgB,EAAOC,MAAMC,UAAU9D,MAAM+D,KAAKC,UAAW,GAC7Cyf,GACFG,EAAOH,GAAeI,iBACbH,GACTE,EAAOF,IAEPE,EAAOF,GAAyB,GAChC5d,WAAWge,GAAmB,IAMhC,IAJA,IAAIrM,EAAO,SAAWtW,GACpByiB,EAAK1c,MAAK,WAAc,OAAOE,EAAIjG,GAAG8C,MAAM,KAAML,EAAO,GAC3D,EAESzC,EAAI,EAAGA,EAAIiG,EAAIlH,SAAUiB,EAChCsW,EAAMtW,EAfkB,CAgB5B,CAEA,SAAS2iB,KACP,IAAIC,EAAUL,GACdA,GAAyB,KACzB,IAAK,IAAIviB,EAAI,EAAGA,EAAI4iB,EAAQ7jB,SAAUiB,EAAK4iB,EAAQ5iB,IACrD,CAKA,SAAS6iB,GAAqB5gB,EAAI2c,EAAUzB,EAAO2F,GACjD,IAAK,IAAI7Y,EAAI,EAAGA,EAAI2U,EAASmE,QAAQhkB,OAAQkL,IAAK,CAChD,IAAIT,EAAOoV,EAASmE,QAAQ9Y,GAChB,QAART,EAAkBwZ,GAAe/gB,EAAI2c,GACxB,UAARpV,EAAoByZ,GAAiBhhB,EAAI2c,EAAUzB,EAAO2F,GAClD,SAARtZ,EAAmB0Z,GAAkBjhB,EAAI2c,GACjC,UAARpV,GAAoB2Z,GAAkBlhB,EAAI2c,EAAUkE,EAC/D,CACAlE,EAASmE,QAAU,IACrB,CAIA,SAASK,GAAkBxE,GAQzB,OAPIA,EAASngB,MAAQmgB,EAASvT,OAC5BuT,EAASngB,KAAOgB,EAAI,MAAO,KAAM,KAAM,sBACnCmf,EAASvT,KAAK/K,YACdse,EAASvT,KAAK/K,WAAW+iB,aAAazE,EAASngB,KAAMmgB,EAASvT,MAClEuT,EAASngB,KAAKe,YAAYof,EAASvT,MAC/B1O,GAAMC,EAAa,IAAKgiB,EAASngB,KAAKmB,MAAM0jB,OAAS,IAEpD1E,EAASngB,IAClB,CAiBA,SAAS8kB,GAAethB,EAAI2c,GAC1B,IAAI4E,EAAMvhB,EAAGC,QAAQqd,iBACrB,OAAIiE,GAAOA,EAAIpY,MAAQwT,EAASxT,MAC9BnJ,EAAGC,QAAQqd,iBAAmB,KAC9BX,EAAS3Q,QAAUuV,EAAIvV,QAChBuV,EAAIC,OAEN9E,GAAiB1c,EAAI2c,EAC9B,CAKA,SAASoE,GAAe/gB,EAAI2c,GAC1B,IAAIvgB,EAAMugB,EAASvT,KAAK1M,UACpB8kB,EAAQF,GAAethB,EAAI2c,GAC3BA,EAASvT,MAAQuT,EAASngB,OAAQmgB,EAASngB,KAAOglB,EAAM3E,KAC5DF,EAASvT,KAAK/K,WAAW+iB,aAAaI,EAAM3E,IAAKF,EAASvT,MAC1DuT,EAASvT,KAAOoY,EAAM3E,IAClB2E,EAAM3M,SAAW8H,EAAS9H,SAAW2M,EAAM1M,WAAa6H,EAAS7H,WACnE6H,EAAS9H,QAAU2M,EAAM3M,QACzB8H,EAAS7H,UAAY0M,EAAM1M,UAC3BmM,GAAkBjhB,EAAI2c,IACbvgB,IACTugB,EAASvT,KAAK1M,UAAYN,EAE9B,CAEA,SAAS6kB,GAAkBjhB,EAAI2c,IA3C/B,SAA8B3c,EAAI2c,GAChC,IAAIvgB,EAAMugB,EAAS9H,QAAU8H,EAAS9H,QAAU,KAAO8H,EAASxT,KAAK0L,SAAW,IAAM8H,EAASxT,KAAK0L,QAEpG,GADIzY,IAAOA,GAAO,8BACdugB,EAAS8E,WACPrlB,EAAOugB,EAAS8E,WAAW/kB,UAAYN,GACpCugB,EAAS8E,WAAWpjB,WAAWlB,YAAYwf,EAAS8E,YAAa9E,EAAS8E,WAAa,WACzF,GAAIrlB,EAAK,CACd,IAAIslB,EAAOP,GAAkBxE,GAC7BA,EAAS8E,WAAaC,EAAKC,aAAankB,EAAI,MAAO,KAAMpB,GAAMslB,EAAKtkB,YACpE4C,EAAGC,QAAQif,MAAME,cAAczC,EAAS8E,WAC1C,CACF,EAiCEG,CAAqB5hB,EAAI2c,GACrBA,EAASxT,KAAK0Y,UACdV,GAAkBxE,GAAUjgB,UAAYigB,EAASxT,KAAK0Y,UACjDlF,EAASngB,MAAQmgB,EAASvT,OAC/BuT,EAASngB,KAAKE,UAAY,IAC9B,IAAIoY,EAAY6H,EAAS7H,UAAY6H,EAAS7H,UAAY,KAAO6H,EAASxT,KAAK2L,WAAa,IAAM6H,EAASxT,KAAK2L,UAChH6H,EAASvT,KAAK1M,UAAYoY,GAAa,EACzC,CAEA,SAASkM,GAAiBhhB,EAAI2c,EAAUzB,EAAO2F,GAS7C,GARIlE,EAASmF,SACXnF,EAASngB,KAAKW,YAAYwf,EAASmF,QACnCnF,EAASmF,OAAS,MAEhBnF,EAASoF,mBACXpF,EAASngB,KAAKW,YAAYwf,EAASoF,kBACnCpF,EAASoF,iBAAmB,MAE1BpF,EAASxT,KAAK6Y,YAAa,CAC7B,IAAIN,EAAOP,GAAkBxE,GAC7BA,EAASoF,iBAAmBvkB,EAAI,MAAO,KAAM,gCAAkCmf,EAASxT,KAAK6Y,YAC5D,UAAYhiB,EAAGkO,QAAQ+T,YAAcpB,EAAKqB,UAAYrB,EAAKsB,kBAAoB,cAAiBtB,EAAqB,iBAAI,MAC1J7gB,EAAGC,QAAQif,MAAME,cAAczC,EAASoF,kBACxCL,EAAKC,aAAahF,EAASoF,iBAAkBpF,EAASvT,KACxD,CACA,IAAIgZ,EAAUzF,EAASxT,KAAKkZ,cAC5B,GAAIriB,EAAGkO,QAAQoU,aAAeF,EAAS,CACrC,IAAIG,EAASpB,GAAkBxE,GAC3B6F,EAAa7F,EAASmF,OAAStkB,EAAI,MAAO,KAAM,4BAA8B,UAAYwC,EAAGkO,QAAQ+T,YAAcpB,EAAKqB,UAAYrB,EAAKsB,kBAAoB,MAWjK,GAVAK,EAAWvkB,aAAa,cAAe,QACvC+B,EAAGC,QAAQif,MAAME,cAAcoD,GAC/BD,EAAOZ,aAAaa,EAAY7F,EAASvT,MACrCuT,EAASxT,KAAK6Y,cACdQ,EAAW9lB,WAAa,IAAMigB,EAASxT,KAAK6Y,cAC5ChiB,EAAGkO,QAAQoU,aAAiBF,GAAYA,EAAQ,4BAChDzF,EAAS8F,WAAaD,EAAWjlB,YACjCC,EAAI,MAAOwT,GAAchR,EAAGkO,QAASgN,GACjC,8CACC,SAAY2F,EAAK6B,WAAW,0BAA6B,cAAiB1iB,EAAGC,QAAyB,kBAAI,QAC/GmiB,EAAW,IAAK,IAAIO,EAAI,EAAGA,EAAI3iB,EAAGC,QAAQ2iB,YAAY9lB,SAAU6lB,EAAG,CACrE,IAAIxgB,EAAKnC,EAAGC,QAAQ2iB,YAAYD,GAAGjmB,UAAW4J,EAAQ8b,EAAQjhB,eAAegB,IAAOigB,EAAQjgB,GACxFmE,GACAkc,EAAWjlB,YAAYC,EAAI,MAAO,CAAC8I,GAAQ,wBACjB,SAAYua,EAAK6B,WAAWvgB,GAAO,cAAiB0e,EAAKgC,YAAY1gB,GAAO,MAC5G,CACF,CACF,CAEA,SAAS+e,GAAkBlhB,EAAI2c,EAAUkE,GACnClE,EAASmG,YAAanG,EAASmG,UAAY,MAE/C,IADA,IAAIC,EAAW5mB,EAAU,yBAChBK,EAAOmgB,EAASngB,KAAKY,WAAYkV,OAAO,EAAU9V,EAAMA,EAAO8V,EACtEA,EAAO9V,EAAKwmB,YACRD,EAAS1oB,KAAKmC,EAAKE,YAAcigB,EAASngB,KAAKW,YAAYX,GAEjEymB,GAAkBjjB,EAAI2c,EAAUkE,EAClC,CAGA,SAASqC,GAAiBljB,EAAI2c,EAAUzB,EAAO2F,GAC7C,IAAIW,EAAQF,GAAethB,EAAI2c,GAQ/B,OAPAA,EAASvT,KAAOuT,EAASngB,KAAOglB,EAAM3E,IAClC2E,EAAM3M,UAAW8H,EAAS9H,QAAU2M,EAAM3M,SAC1C2M,EAAM1M,YAAa6H,EAAS7H,UAAY0M,EAAM1M,WAElDmM,GAAkBjhB,EAAI2c,GACtBqE,GAAiBhhB,EAAI2c,EAAUzB,EAAO2F,GACtCoC,GAAkBjjB,EAAI2c,EAAUkE,GACzBlE,EAASngB,IAClB,CAIA,SAASymB,GAAkBjjB,EAAI2c,EAAUkE,GAEvC,GADAsC,GAAqBnjB,EAAI2c,EAASxT,KAAMwT,EAAUkE,GAAM,GACpDlE,EAASM,KAAQ,IAAK,IAAIlf,EAAI,EAAGA,EAAI4e,EAASM,KAAKngB,OAAQiB,IAC3DolB,GAAqBnjB,EAAI2c,EAASM,KAAKlf,GAAI4e,EAAUkE,GAAM,EACjE,CAEA,SAASsC,GAAqBnjB,EAAImJ,EAAMwT,EAAUkE,EAAMuC,GACtD,GAAKja,EAAKka,QAEV,IADA,IAAI3B,EAAOP,GAAkBxE,GACpB5e,EAAI,EAAGulB,EAAKna,EAAKka,QAAStlB,EAAIulB,EAAGxmB,SAAUiB,EAAG,CACrD,IAAIkhB,EAASqE,EAAGvlB,GAAIvB,EAAOgB,EAAI,MAAO,CAACyhB,EAAOziB,MAAO,yBAA2ByiB,EAAOviB,UAAY,IAAMuiB,EAAOviB,UAAY,KACvHuiB,EAAOsE,mBAAqB/mB,EAAKyB,aAAa,mBAAoB,QACvEulB,GAAmBvE,EAAQziB,EAAMmgB,EAAUkE,GAC3C7gB,EAAGC,QAAQif,MAAME,cAAc5iB,GAC3B4mB,GAAcnE,EAAOwE,MACrB/B,EAAKC,aAAanlB,EAAMmgB,EAASmF,QAAUnF,EAASvT,MAEpDsY,EAAKnkB,YAAYf,GACrB+jB,GAAYtB,EAAQ,SACtB,CACF,CAEA,SAASuE,GAAmBvE,EAAQziB,EAAMmgB,EAAUkE,GAClD,GAAI5B,EAAOyE,UAAW,EACvB/G,EAASmG,YAAcnG,EAASmG,UAAY,KAAKhf,KAAKtH,GACnD,IAAImnB,EAAQ9C,EAAK+C,aACjBpnB,EAAKmB,MAAM6O,KAAOqU,EAAKqB,SAAW,KAC7BjD,EAAO4E,cACVF,GAAS9C,EAAKsB,iBACd3lB,EAAKmB,MAAMmmB,YAAcjD,EAAKsB,iBAAmB,MAEnD3lB,EAAKmB,MAAMgmB,MAAQA,EAAQ,IAC7B,CACI1E,EAAO4E,cACTrnB,EAAKmB,MAAM0jB,OAAS,EACpB7kB,EAAKmB,MAAMomB,SAAW,WACjB9E,EAAOyE,YAAalnB,EAAKmB,MAAMqmB,YAAcnD,EAAKsB,iBAAmB,MAE9E,CAEA,SAAS8B,GAAahF,GACpB,GAAqB,MAAjBA,EAAO1O,OAAkB,OAAO0O,EAAO1O,OAC3C,IAAIvQ,EAAKif,EAAOzgB,IAAIwB,GACpB,IAAKA,EAAM,OAAO,EAClB,IAAK9B,EAAStD,SAAS8D,KAAMugB,EAAOziB,MAAO,CACzC,IAAI0nB,EAAc,sBACdjF,EAAO4E,cACPK,GAAe,iBAAmBlkB,EAAGC,QAAQkkB,QAAQjY,YAAc,OACnE+S,EAAOyE,YACPQ,GAAe,UAAYlkB,EAAGC,QAAQC,QAAQkkB,YAAc,OAChE/mB,EAAqB2C,EAAGC,QAAQ+L,QAASxO,EAAI,MAAO,CAACyhB,EAAOziB,MAAO,KAAM0nB,GAC3E,CACA,OAAOjF,EAAO1O,OAAS0O,EAAOziB,KAAK6B,WAAW4N,YAChD,CAGA,SAASoY,GAAcpkB,EAASjD,GAC9B,IAAK,IAAI0E,EAAI2J,GAASrO,GAAI0E,GAAKzB,EAAQC,QAASwB,EAAIA,EAAErD,WACpD,IAAKqD,GAAoB,GAAdA,EAAEtD,UAAuD,QAAtCsD,EAAE4iB,aAAa,qBACxC5iB,EAAErD,YAAc4B,EAAQskB,OAAS7iB,GAAKzB,EAAQukB,MAC/C,OAAO,CAEf,CAIA,SAASC,GAAWxkB,GAAU,OAAOA,EAAQykB,UAAUC,SAAS,CAChE,SAASC,GAAY3kB,GAAU,OAAOA,EAAQukB,MAAMvY,aAAehM,EAAQykB,UAAUzY,YAAY,CACjG,SAAS4Y,GAAS5kB,GAChB,GAAIA,EAAQ6kB,eAAkB,OAAO7kB,EAAQ6kB,eAC7C,IAAI9nB,EAAIK,EAAqB4C,EAAQ+L,QAASxO,EAAI,MAAO,IAAK,yBAC1DG,EAAQqP,OAAO+X,iBAAmB/X,OAAO+X,iBAAiB/nB,GAAKA,EAAEgoB,aACjEC,EAAO,CAACzY,KAAM0Y,SAASvnB,EAAMmmB,aAAcrX,MAAOyY,SAASvnB,EAAMwnB,eAErE,OADKC,MAAMH,EAAKzY,OAAU4Y,MAAMH,EAAKxY,SAAUxM,EAAQ6kB,eAAiBG,GACjEA,CACT,CAEA,SAASI,GAAUrlB,GAAM,OA/jEP,GA+jE4BA,EAAGC,QAAQqlB,cAAe,CACxE,SAASC,GAAavlB,GACpB,OAAOA,EAAGC,QAAQulB,SAASpB,YAAciB,GAAUrlB,GAAMA,EAAGC,QAAQwlB,QACtE,CACA,SAASC,GAAc1lB,GACrB,OAAOA,EAAGC,QAAQulB,SAASG,aAAeN,GAAUrlB,GAAMA,EAAGC,QAAQ2lB,SACvE,CA2BA,SAASC,GAAgBlJ,EAAUxT,EAAM+R,GACvC,GAAIyB,EAASxT,MAAQA,EACjB,MAAO,CAAClF,IAAK0Y,EAAS3Q,QAAQ/H,IAAKwY,MAAOE,EAAS3Q,QAAQyQ,OAC/D,GAAIE,EAASM,KAAM,CACjB,IAAK,IAAIlf,EAAI,EAAGA,EAAI4e,EAASM,KAAKngB,OAAQiB,IACtC,GAAI4e,EAASM,KAAKlf,IAAMoL,EACtB,MAAO,CAAClF,IAAK0Y,EAAS3Q,QAAQuR,KAAKxf,GAAI0e,MAAOE,EAAS3Q,QAAQwR,OAAOzf,IAC5E,IAAK,IAAIsJ,EAAM,EAAGA,EAAMsV,EAASM,KAAKngB,OAAQuK,IAC1C,GAAIoJ,GAAOkM,EAASM,KAAK5V,IAAQ6T,EAC/B,MAAO,CAACjX,IAAK0Y,EAAS3Q,QAAQuR,KAAKlW,GAAMoV,MAAOE,EAAS3Q,QAAQwR,OAAOnW,GAAMiB,QAAQ,EAC9F,CACF,CAiBA,SAASwd,GAAY9lB,EAAImJ,EAAMvE,EAAImhB,GACjC,OAAOC,GAAoBhmB,EAAIimB,GAAsBjmB,EAAImJ,GAAOvE,EAAImhB,EACtE,CAGA,SAASG,GAAgBlmB,EAAIkb,GAC3B,GAAIA,GAASlb,EAAGC,QAAQiW,UAAYgF,EAAQlb,EAAGC,QAAQkW,OACnD,OAAOnW,EAAGC,QAAQmgB,KAAK+F,GAAcnmB,EAAIkb,IAC7C,IAAIqG,EAAMvhB,EAAGC,QAAQqd,iBACrB,OAAIiE,GAAOrG,GAASqG,EAAIrG,OAASA,EAAQqG,EAAIrG,MAAQqG,EAAI3R,KAC9C2R,OADX,CAEF,CAOA,SAAS0E,GAAsBjmB,EAAImJ,GACjC,IAAI+R,EAAQzK,GAAOtH,GACfiX,EAAO8F,GAAgBlmB,EAAIkb,GAC3BkF,IAASA,EAAKhX,KAChBgX,EAAO,KACEA,GAAQA,EAAKU,UACtBF,GAAqB5gB,EAAIogB,EAAMlF,EAAOkL,GAAcpmB,IACpDA,EAAG0K,MAAM2b,aAAc,GAEpBjG,IACDA,EAzCN,SAAmCpgB,EAAImJ,GAErC,IAAI+R,EAAQzK,GADZtH,EAAO4R,GAAW5R,IAEdiX,EAAOpgB,EAAGC,QAAQqd,iBAAmB,IAAIyC,GAAS/f,EAAGxB,IAAK2K,EAAM+R,GACpEkF,EAAKlF,MAAQA,EACb,IAAIsG,EAAQpB,EAAKoB,MAAQ9E,GAAiB1c,EAAIogB,GAG9C,OAFAA,EAAKhX,KAAOoY,EAAM3E,IAClBxf,EAAqB2C,EAAGC,QAAQqmB,YAAa9E,EAAM3E,KAC5CuD,CACT,CAgCamG,CAA0BvmB,EAAImJ,IAEzC,IAAI8F,EAAO4W,GAAgBzF,EAAMjX,EAAM+R,GACvC,MAAO,CACL/R,KAAMA,EAAMiX,KAAMA,EAAMoG,KAAM,KAC9BviB,IAAKgL,EAAKhL,IAAKwY,MAAOxN,EAAKwN,MAAOnU,OAAQ2G,EAAK3G,OAC/Cme,YAAY,EAEhB,CAIA,SAAST,GAAoBhmB,EAAI0mB,EAAU9hB,EAAImhB,EAAMY,GAC/CD,EAASpe,SAAU1D,GAAM,GAC7B,IAA6B0B,EAAzBsgB,EAAMhiB,GAAMmhB,GAAQ,IAaxB,OAZIW,EAASjK,MAAMtb,eAAeylB,GAChCtgB,EAAQogB,EAASjK,MAAMmK,IAElBF,EAASF,OACVE,EAASF,KAAOE,EAAStG,KAAKhX,KAAKkD,yBAClCoa,EAASD,aAjGlB,SAA2BzmB,EAAI2c,EAAU6J,GACvC,IAAIK,EAAW7mB,EAAGkO,QAAQ4Y,aACtBC,EAAWF,GAAYtB,GAAavlB,GACxC,IAAK2c,EAAS3Q,QAAQgb,SAAWH,GAAYlK,EAAS3Q,QAAQ2X,OAASoD,EAAU,CAC/E,IAAIC,EAAUrK,EAAS3Q,QAAQgb,QAAU,GACzC,GAAIH,EAAU,CACZlK,EAAS3Q,QAAQ2X,MAAQoD,EAEzB,IADA,IAAIE,EAAQtK,EAASvT,KAAKhM,WAAW8pB,iBAC5BnpB,EAAI,EAAGA,EAAIkpB,EAAMnqB,OAAS,EAAGiB,IAAK,CACzC,IAAIwI,EAAM0gB,EAAMlpB,GAAIuU,EAAO2U,EAAMlpB,EAAI,GACjC2F,KAAKyjB,IAAI5gB,EAAI6gB,OAAS9U,EAAK8U,QAAU,GACrCJ,EAAQljB,MAAMyC,EAAI6gB,OAAS9U,EAAK+U,KAAO,EAAIb,EAAKa,IACtD,CACF,CACAL,EAAQljB,KAAK0iB,EAAKY,OAASZ,EAAKa,IAClC,CACF,CAkFMC,CAAkBtnB,EAAI0mB,EAAStG,KAAMsG,EAASF,MAC9CE,EAASD,YAAa,IAExBngB,EA0DJ,SAA0BtG,EAAI0mB,EAAU9hB,EAAImhB,GAC1C,IAGIS,EAHAe,EAAQC,GAAuBd,EAASziB,IAAKW,EAAImhB,GACjDvpB,EAAO+qB,EAAM/qB,KAAM2C,EAAQooB,EAAMpoB,MAAOC,EAAMmoB,EAAMnoB,IAAKO,EAAW4nB,EAAM5nB,SAG9E,GAAqB,GAAjBnD,EAAK4B,SAAe,CACtB,IAAK,IAAIiJ,EAAM,EAAGA,EAAM,EAAGA,IAAO,CAChC,KAAOlI,GAASiG,GAAgBshB,EAASvd,KAAKC,KAAK3D,OAAO8hB,EAAME,WAAatoB,OAAaA,EAC1F,KAAOooB,EAAME,WAAaroB,EAAMmoB,EAAMG,UAAYtiB,GAAgBshB,EAASvd,KAAKC,KAAK3D,OAAO8hB,EAAME,WAAaroB,OAAWA,EAK1H,IAHIonB,EADA9rB,GAAMC,EAAa,GAAc,GAATwE,GAAcC,GAAOmoB,EAAMG,SAAWH,EAAME,WAC7DjrB,EAAK6B,WAAWiO,wBAEhBqb,GAAcrrB,EAAME,EAAM2C,EAAOC,GAAK8nB,iBAAkBnB,IAC1DvZ,MAAQga,EAAK/Z,OAAkB,GAATtN,EAAc,MAC7CC,EAAMD,EACNA,GAAgB,EAChBQ,EAAW,OACb,CACIjF,GAAMC,EAAa,KAAM6rB,EAmCjC,SAAmCxa,EAASwa,GAC1C,IAAKxZ,OAAO4a,QAAgC,MAAtBA,OAAOC,aACzBD,OAAOC,aAAeD,OAAOE,aAlzDnC,SAA2B9b,GACzB,GAAsB,MAAlBwB,GAA0B,OAAOA,GACrC,IAAIhR,EAAOa,EAAqB2O,EAASxO,EAAI,OAAQ,MACjDuqB,EAASvrB,EAAK8P,wBACd0b,EAAY1rB,EAAME,EAAM,EAAG,GAAG8P,wBAClC,OAAOkB,GAAiB9J,KAAKyjB,IAAIY,EAAOvb,KAAOwb,EAAUxb,MAAQ,CACnE,CA4yDkDyb,CAAkBjc,GAC9D,OAAOwa,EACX,IAAI0B,EAASN,OAAOC,YAAcD,OAAOE,WACrCK,EAASP,OAAOQ,YAAcR,OAAOS,WACzC,MAAO,CAAC7b,KAAMga,EAAKha,KAAO0b,EAAQzb,MAAO+Z,EAAK/Z,MAAQyb,EAC9Cb,IAAKb,EAAKa,IAAMc,EAAQf,OAAQZ,EAAKY,OAASe,EACxD,CA3CwCG,CAA0BtoB,EAAGC,QAAQ+L,QAASwa,GACpF,KAAO,CAEL,IAAIS,EADA9nB,EAAQ,IAAKQ,EAAWomB,EAAO,SAG/BS,EADAxmB,EAAGkO,QAAQ4Y,eAAiBG,EAAQzqB,EAAK0qB,kBAAkBpqB,OAAS,EAC7DmqB,EAAc,SAARlB,EAAkBkB,EAAMnqB,OAAS,EAAI,GAE3CN,EAAK8P,uBAClB,CACA,GAAI5R,GAAMC,EAAa,IAAMwE,KAAWqnB,IAASA,EAAKha,OAASga,EAAK/Z,OAAQ,CAC1E,IAAI8b,EAAQ/rB,EAAK6B,WAAW6oB,iBAAiB,GAEzCV,EADA+B,EACO,CAAC/b,KAAM+b,EAAM/b,KAAMC,MAAO8b,EAAM/b,KAAOgc,GAAUxoB,EAAGC,SAAUonB,IAAKkB,EAAMlB,IAAKD,OAAQmB,EAAMnB,QAE5FqB,EACb,CAMA,IAJA,IAAIC,EAAOlC,EAAKa,IAAMX,EAASF,KAAKa,IAAKsB,EAAOnC,EAAKY,OAASV,EAASF,KAAKa,IACxEthB,GAAO2iB,EAAOC,GAAQ,EACtB3B,EAAUN,EAAStG,KAAKpU,QAAQgb,QAChCjpB,EAAI,EACDA,EAAIipB,EAAQlqB,OAAS,KACpBiJ,EAAMihB,EAAQjpB,IADSA,KAE/B,IAAIspB,EAAMtpB,EAAIipB,EAAQjpB,EAAI,GAAK,EAAG6qB,EAAM5B,EAAQjpB,GAC5C4O,EAAS,CAACH,MAAmB,SAAZ7M,EAAsB6mB,EAAK/Z,MAAQ+Z,EAAKha,MAAQka,EAASF,KAAKha,KACrEC,OAAoB,QAAZ9M,EAAqB6mB,EAAKha,KAAOga,EAAK/Z,OAASia,EAASF,KAAKha,KACrE6a,IAAKA,EAAKD,OAAQwB,GAIhC,OAHKpC,EAAKha,MAASga,EAAK/Z,QAASE,EAAOkc,OAAQ,GAC3C7oB,EAAGkO,QAAQ4a,4BAA6Bnc,EAAO+b,KAAOA,EAAM/b,EAAOoc,QAAUJ,GAE3Ehc,CACT,CA3GYqc,CAAiBhpB,EAAI0mB,EAAU9hB,EAAImhB,IAChC8C,QAASnC,EAASjK,MAAMmK,GAAOtgB,IAErC,CAACkG,KAAMlG,EAAMkG,KAAMC,MAAOnG,EAAMmG,MAC/B4a,IAAKV,EAAYrgB,EAAMoiB,KAAOpiB,EAAM+gB,IACpCD,OAAQT,EAAYrgB,EAAMyiB,QAAUziB,EAAM8gB,OACpD,CAEA,IAwbI6B,GAxbAR,GAAW,CAACjc,KAAM,EAAGC,MAAO,EAAG4a,IAAK,EAAGD,OAAQ,GAEnD,SAASI,GAAuBvjB,EAAKW,EAAImhB,GAIvC,IAHA,IAAIvpB,EAAM2C,EAAOC,EAAKO,EAAUupB,EAAQC,EAG/BprB,EAAI,EAAGA,EAAIkG,EAAInH,OAAQiB,GAAK,EAcnC,GAbAmrB,EAASjlB,EAAIlG,GACborB,EAAOllB,EAAIlG,EAAI,GACX6G,EAAKskB,GACP/pB,EAAQ,EAAGC,EAAM,EACjBO,EAAW,QACFiF,EAAKukB,EAEd/pB,EAAc,GADdD,EAAQyF,EAAKskB,IAEJnrB,GAAKkG,EAAInH,OAAS,GAAK8H,GAAMukB,GAAQllB,EAAIlG,EAAI,GAAK6G,KAE3DzF,GADAC,EAAM+pB,EAAOD,GACC,EACVtkB,GAAMukB,IAAQxpB,EAAW,UAElB,MAATR,EAAe,CAIjB,GAHA3C,EAAOyH,EAAIlG,EAAI,GACXmrB,GAAUC,GAAQpD,IAASvpB,EAAKoc,WAAa,OAAS,WACtDjZ,EAAWomB,GACH,QAARA,GAA2B,GAAT5mB,EAClB,KAAOpB,GAAKkG,EAAIlG,EAAI,IAAMkG,EAAIlG,EAAI,IAAMkG,EAAIlG,EAAI,GAAG6a,YACnDpc,EAAOyH,EAAe,GAAVlG,GAAK,IACjB4B,EAAW,OAEf,GAAY,SAARomB,GAAmB5mB,GAASgqB,EAAOD,EACnC,KAAOnrB,EAAIkG,EAAInH,OAAS,GAAKmH,EAAIlG,EAAI,IAAMkG,EAAIlG,EAAI,KAAOkG,EAAIlG,EAAI,GAAG6a,YACrEpc,EAAOyH,GAAKlG,GAAK,GAAK,GACtB4B,EAAW,QAEf,KACF,CAEF,MAAO,CAACnD,KAAMA,EAAM2C,MAAOA,EAAOC,IAAKA,EAAKO,SAAUA,EAAU8nB,WAAYyB,EAAQxB,SAAUyB,EAChG,CAEA,SAASxB,GAAcV,EAAOlB,GAC5B,IAAIS,EAAOiC,GACX,GAAY,QAAR1C,EAAkB,IAAK,IAAIhoB,EAAI,EAAGA,EAAIkpB,EAAMnqB,SACzC0pB,EAAOS,EAAMlpB,IAAIyO,MAAQga,EAAK/Z,MADmB1O,UAE7C,IAAK,IAAIsJ,EAAM4f,EAAMnqB,OAAS,EAAGuK,GAAO,IAC5Cmf,EAAOS,EAAM5f,IAAMmF,MAAQga,EAAK/Z,MADepF,KAGtD,OAAOmf,CACT,CAiEA,SAAS4C,GAA6BzM,GACpC,GAAIA,EAAS3Q,UACX2Q,EAAS3Q,QAAQyQ,MAAQ,CAAC,EAC1BE,EAAS3Q,QAAQgb,QAAU,KACvBrK,EAASM,MAAQ,IAAK,IAAIlf,EAAI,EAAGA,EAAI4e,EAASM,KAAKngB,OAAQiB,IAC3D4e,EAAS3Q,QAAQwR,OAAOzf,GAAK,CAAC,CAEtC,CAEA,SAASsrB,GAA0BrpB,GACjCA,EAAGC,QAAQqpB,gBAAkB,KAC7BvsB,EAAeiD,EAAGC,QAAQqmB,aAC1B,IAAK,IAAIvoB,EAAI,EAAGA,EAAIiC,EAAGC,QAAQmgB,KAAKtjB,OAAQiB,IACxCqrB,GAA6BppB,EAAGC,QAAQmgB,KAAKriB,GACnD,CAEA,SAASwrB,GAAYvpB,GACnBqpB,GAA0BrpB,GAC1BA,EAAGC,QAAQupB,gBAAkBxpB,EAAGC,QAAQwpB,iBAAmBzpB,EAAGC,QAAQ6kB,eAAiB,KAClF9kB,EAAGkO,QAAQ4Y,eAAgB9mB,EAAGC,QAAQic,gBAAiB,GAC5Dlc,EAAGC,QAAQypB,aAAe,IAC5B,CAEA,SAASC,GAAYnrB,GAInB,OAAIxD,GAAUS,IAAoB+C,EAAIE,KAAK4N,wBAAwBE,KAAO0Y,SAASH,iBAAiBvmB,EAAIE,MAAMslB,aACvGxlB,EAAI6B,YAAYupB,cAAgBprB,EAAIqrB,iBAAmBrrB,EAAIE,MAAMorB,UAC1E,CACA,SAASC,GAAYvrB,GACnB,OAAIxD,GAAUS,IAAoB+C,EAAIE,KAAK4N,wBAAwB+a,IAAMnC,SAASH,iBAAiBvmB,EAAIE,MAAMsrB,YACtGxrB,EAAI6B,YAAY4pB,cAAgBzrB,EAAIqrB,iBAAmBrrB,EAAIE,MAAMwrB,SAC1E,CAEA,SAASC,GAAgBzO,GACvB,IACI2H,EADMtI,GAAWW,GACH2H,QACd9S,EAAS,EACb,GAAI8S,EAAW,IAAK,IAAItlB,EAAI,EAAGA,EAAIslB,EAAQvmB,SAAUiB,EAASslB,EAAQtlB,GAAG0lB,QACrElT,GAAU0T,GAAaZ,EAAQtlB,KACnC,OAAOwS,CACT,CAMA,SAAS6Z,GAAgBpqB,EAAI0b,EAAS8K,EAAMzS,EAASsW,GACnD,IAAKA,EAAgB,CACnB,IAAI9Z,EAAS4Z,GAAgBzO,GAC7B8K,EAAKa,KAAO9W,EAAQiW,EAAKY,QAAU7W,CACrC,CACA,GAAe,QAAXwD,EAAqB,OAAOyS,EAC3BzS,IAAWA,EAAU,SAC1B,IAAIuW,EAAO7O,GAAaC,GAGxB,GAFe,SAAX3H,EAAsBuW,GAAQ7F,GAAWzkB,EAAGC,SACzCqqB,GAAQtqB,EAAGC,QAAQsqB,WACX,QAAXxW,GAAgC,UAAXA,EAAqB,CAC5C,IAAIyW,EAAOxqB,EAAGC,QAAQykB,UAAUpY,wBAChCge,GAAQE,EAAKnD,KAAkB,UAAXtT,EAAsB,EAAIgW,GAAYvrB,EAAIwB,KAC9D,IAAIyqB,EAAOD,EAAKhe,MAAmB,UAAXuH,EAAsB,EAAI4V,GAAYnrB,EAAIwB,KAClEwmB,EAAKha,MAAQie,EAAMjE,EAAK/Z,OAASge,CACnC,CAEA,OADAjE,EAAKa,KAAOiD,EAAM9D,EAAKY,QAAUkD,EAC1B9D,CACT,CAIA,SAASkE,GAAgB1qB,EAAI2qB,EAAQ5W,GACnC,GAAe,OAAXA,EAAoB,OAAO4W,EAC/B,IAAIne,EAAOme,EAAOne,KAAM6a,EAAMsD,EAAOtD,IAErC,GAAe,QAAXtT,EACFvH,GAAQmd,GAAYnrB,EAAIwB,IACxBqnB,GAAO0C,GAAYvrB,EAAIwB,SAClB,GAAe,SAAX+T,IAAuBA,EAAS,CACzC,IAAI6W,EAAW5qB,EAAGC,QAAQskB,MAAMjY,wBAChCE,GAAQoe,EAASpe,KACjB6a,GAAOuD,EAASvD,GAClB,CAEA,IAAIwD,EAAe7qB,EAAGC,QAAQykB,UAAUpY,wBACxC,MAAO,CAACE,KAAMA,EAAOqe,EAAare,KAAM6a,IAAKA,EAAMwD,EAAaxD,IAClE,CAEA,SAASyD,GAAW9qB,EAAIuD,EAAKwQ,EAAS2H,EAASqK,GAE7C,OADKrK,IAAWA,EAAUhM,GAAQ1P,EAAGxB,IAAK+E,EAAI4F,OACvCihB,GAAgBpqB,EAAI0b,EAASoK,GAAY9lB,EAAI0b,EAASnY,EAAIqB,GAAImhB,GAAOhS,EAC9E,CAkBA,SAASgX,GAAa/qB,EAAIuD,EAAKwQ,EAAS2H,EAASsP,EAAiBrE,GAGhE,SAASsE,EAAIrmB,EAAI6H,GACf,IAAIhE,EAAIud,GAAoBhmB,EAAIgrB,EAAiBpmB,EAAI6H,EAAQ,QAAU,OAAQka,GAE/E,OADIla,EAAShE,EAAE+D,KAAO/D,EAAEgE,MAAgBhE,EAAEgE,MAAQhE,EAAE+D,KAC7C4d,GAAgBpqB,EAAI0b,EAASjT,EAAGsL,EACzC,CANA2H,EAAUA,GAAWhM,GAAQ1P,EAAGxB,IAAK+E,EAAI4F,MACpC6hB,IAAmBA,EAAkB/E,GAAsBjmB,EAAI0b,IAMpE,IAAItV,EAAQ8C,GAASwS,EAAS1b,EAAGxB,IAAIwI,WAAYpC,EAAKrB,EAAIqB,GAAIyB,EAAS9C,EAAI8C,OAQ3E,GAPIzB,GAAM8W,EAAQtS,KAAKtM,QACrB8H,EAAK8W,EAAQtS,KAAKtM,OAClBuJ,EAAS,UACAzB,GAAM,IACfA,EAAK,EACLyB,EAAS,UAEND,EAAS,OAAO6kB,EAAc,UAAV5kB,EAAqBzB,EAAK,EAAIA,EAAc,UAAVyB,GAE3D,SAAS6kB,EAAQtmB,EAAIumB,EAASC,GAE5B,OAAOH,EAAIG,EAASxmB,EAAK,EAAIA,EADoB,GAAtCwB,EAAM+kB,GAAuBpkB,OACEqkB,EAC5C,CACA,IAAID,EAAUhlB,GAAcC,EAAOxB,EAAIyB,GACnCglB,EAAQnlB,GACR6I,EAAMmc,EAAQtmB,EAAIumB,EAAmB,UAAV9kB,GAE/B,OADa,MAATglB,IAAiBtc,EAAIsc,MAAQH,EAAQtmB,EAAIymB,EAAiB,UAAVhlB,IAC7C0I,CACT,CAIA,SAASuc,GAAetrB,EAAIuD,GAC1B,IAAIiJ,EAAO,EACXjJ,EAAMsO,GAAQ7R,EAAGxB,IAAK+E,GACjBvD,EAAGkO,QAAQ4Y,eAAgBta,EAAOgc,GAAUxoB,EAAGC,SAAWsD,EAAIqB,IACnE,IAAI8W,EAAUhM,GAAQ1P,EAAGxB,IAAK+E,EAAI4F,MAC9Bke,EAAM5L,GAAaC,GAAW+I,GAAWzkB,EAAGC,SAChD,MAAO,CAACuM,KAAMA,EAAMC,MAAOD,EAAM6a,IAAKA,EAAKD,OAAQC,EAAM3L,EAAQnL,OACnE,CAQA,SAASgb,GAAYpiB,EAAMvE,EAAIyB,EAAQmlB,EAASC,GAC9C,IAAIloB,EAAM6N,GAAIjI,EAAMvE,EAAIyB,GAGxB,OAFA9C,EAAIkoB,KAAOA,EACPD,IAAWjoB,EAAIioB,QAAUA,GACtBjoB,CACT,CAIA,SAASmoB,GAAW1rB,EAAIwR,EAAGma,GACzB,IAAIntB,EAAMwB,EAAGxB,IAEb,IADAmtB,GAAK3rB,EAAGC,QAAQsqB,YACR,EAAK,OAAOgB,GAAY/sB,EAAImR,MAAO,EAAG,MAAO,GAAI,GACzD,IAAIuL,EAAQvK,GAAanS,EAAKmtB,GAAI7Z,EAAOtT,EAAImR,MAAQnR,EAAIoR,KAAO,EAChE,GAAIsL,EAAQpJ,EACR,OAAOyZ,GAAY/sB,EAAImR,MAAQnR,EAAIoR,KAAO,EAAGF,GAAQlR,EAAKsT,GAAM1I,KAAKtM,OAAQ,KAAM,EAAG,GACtF0U,EAAI,IAAKA,EAAI,GAGjB,IADA,IAAIkK,EAAUhM,GAAQlR,EAAK0c,KAClB,CACP,IAAI5U,EAAQslB,GAAgB5rB,EAAI0b,EAASR,EAAO1J,EAAGma,GAC/ClR,EAAYG,GAAoBc,EAASpV,EAAM1B,IAAM0B,EAAMmlB,KAAO,GAAKnlB,EAAMklB,QAAU,EAAI,EAAI,IACnG,IAAK/Q,EAAa,OAAOnU,EACzB,IAAIulB,EAAWpR,EAAUN,KAAK,GAC9B,GAAI0R,EAAS1iB,MAAQ+R,EAAS,OAAO2Q,EACrCnQ,EAAUhM,GAAQlR,EAAK0c,EAAQ2Q,EAAS1iB,KAC1C,CACF,CAEA,SAAS2iB,GAAkB9rB,EAAI0b,EAASsP,EAAiBW,GACvDA,GAAKxB,GAAgBzO,GACrB,IAAItc,EAAMsc,EAAQtS,KAAKtM,OACnBivB,EAAQrmB,IAAU,SAAUd,GAAM,OAAOohB,GAAoBhmB,EAAIgrB,EAAiBpmB,EAAK,GAAGwiB,QAAUuE,CAAG,GAAGvsB,EAAK,GAEnH,MAAO,CAAC2sB,MAAOA,EAAO3sB,IADtBA,EAAMsG,IAAU,SAAUd,GAAM,OAAOohB,GAAoBhmB,EAAIgrB,EAAiBpmB,GAAIyiB,IAAMsE,CAAG,GAAGI,EAAO3sB,GAEzG,CAEA,SAAS4sB,GAAsBhsB,EAAI0b,EAASsP,EAAiBhqB,GAG3D,OAFKgqB,IAAmBA,EAAkB/E,GAAsBjmB,EAAI0b,IAE7DoQ,GAAkB9rB,EAAI0b,EAASsP,EADtBZ,GAAgBpqB,EAAI0b,EAASsK,GAAoBhmB,EAAIgrB,EAAiBhqB,GAAS,QAAQqmB,IAEzG,CAIA,SAAS4E,GAAWC,EAAK1a,EAAGma,EAAGnf,GAC7B,QAAO0f,EAAI9E,QAAUuE,KAAYO,EAAI7E,IAAMsE,IAAYnf,EAAO0f,EAAI1f,KAAO0f,EAAIzf,OAAS+E,EACxF,CAEA,SAASoa,GAAgB5rB,EAAI0b,EAASjL,EAAQe,EAAGma,GAE/CA,GAAKlQ,GAAaC,GAClB,IAAIsP,EAAkB/E,GAAsBjmB,EAAI0b,GAG5CuI,EAAekG,GAAgBzO,GAC/BqQ,EAAQ,EAAG3sB,EAAMsc,EAAQtS,KAAKtM,OAAQqvB,GAAM,EAE5C/lB,EAAQ8C,GAASwS,EAAS1b,EAAGxB,IAAIwI,WAGrC,GAAIZ,EAAO,CACT,IAAI0Y,GAAQ9e,EAAGkO,QAAQ4Y,aAAesF,GAAwBC,IAChDrsB,EAAI0b,EAASjL,EAAQua,EAAiB5kB,EAAOoL,EAAGma,GAM9DI,GALAI,EAAoB,GAAdrN,EAAK/X,OAKG+X,EAAKlZ,KAAOkZ,EAAKjZ,GAAK,EACpCzG,EAAM+sB,EAAMrN,EAAKjZ,GAAKiZ,EAAKlZ,KAAO,CACpC,CAKA,IAYI0mB,EAAOjmB,EAZPkmB,EAAW,KAAMC,EAAY,KAC7B5nB,EAAKc,IAAU,SAAUd,GAC3B,IAAIsnB,EAAMlG,GAAoBhmB,EAAIgrB,EAAiBpmB,GAEnD,OADAsnB,EAAI7E,KAAOpD,EAAciI,EAAI9E,QAAUnD,IAClCgI,GAAWC,EAAK1a,EAAGma,GAAG,KACvBO,EAAI7E,KAAOsE,GAAKO,EAAI1f,MAAQgF,IAC9B+a,EAAW3nB,EACX4nB,EAAYN,IAEP,EACT,GAAGH,EAAO3sB,GAESosB,GAAU,EAE7B,GAAIgB,EAAW,CAEb,IAAIC,EAASjb,EAAIgb,EAAUhgB,KAAOggB,EAAU/f,MAAQ+E,EAAGkb,EAAUD,GAAUN,EAC3EvnB,EAAK2nB,GAAYG,EAAU,EAAI,GAC/BrmB,EAASqmB,EAAU,QAAU,SAC7BJ,EAAQG,EAASD,EAAUhgB,KAAOggB,EAAU/f,KAC9C,KAAO,CAEA0f,GAAQvnB,GAAMxF,GAAOwF,GAAMmnB,GAAUnnB,IAI1CyB,EAAe,GAANzB,EAAU,QAAUA,GAAM8W,EAAQtS,KAAKtM,OAAS,SACtDkpB,GAAoBhmB,EAAIgrB,EAAiBpmB,GAAMunB,EAAM,EAAI,IAAI/E,OAASnD,GAAgB0H,GAAMQ,EAC7F,QAAU,SAGZ,IAAIxB,EAASI,GAAa/qB,EAAIoR,GAAIX,EAAQ7L,EAAIyB,GAAS,OAAQqV,EAASsP,GACxEsB,EAAQ3B,EAAOne,KACfgf,EAAUG,EAAIhB,EAAOtD,KAAO,EAAIsE,GAAKhB,EAAOvD,OAAS,EAAI,CAC3D,CAGA,OAAOmE,GAAY9a,EADnB7L,EAAKU,GAAmBoW,EAAQtS,KAAMxE,EAAI,GACXyB,EAAQmlB,EAASha,EAAI8a,EACtD,CAEA,SAASD,GAAersB,EAAI0b,EAASjL,EAAQua,EAAiB5kB,EAAOoL,EAAGma,GAKtE,IAAI9uB,EAAQ6I,IAAU,SAAU3H,GAC9B,IAAI+gB,EAAO1Y,EAAMrI,GAAIouB,EAAoB,GAAdrN,EAAK/X,MAChC,OAAOklB,GAAWlB,GAAa/qB,EAAIoR,GAAIX,EAAQ0b,EAAMrN,EAAKjZ,GAAKiZ,EAAKlZ,KAAMumB,EAAM,SAAW,SAC5D,OAAQzQ,EAASsP,GAAkBxZ,EAAGma,GAAG,EAC1E,GAAG,EAAGvlB,EAAMtJ,OAAS,GACjBgiB,EAAO1Y,EAAMvJ,GAIjB,GAAIA,EAAQ,EAAG,CACb,IAAIsvB,EAAoB,GAAdrN,EAAK/X,MACX5H,EAAQ4rB,GAAa/qB,EAAIoR,GAAIX,EAAQ0b,EAAMrN,EAAKlZ,KAAOkZ,EAAKjZ,GAAIsmB,EAAM,QAAU,UAC3D,OAAQzQ,EAASsP,GACtCiB,GAAW9sB,EAAOqS,EAAGma,GAAG,IAASxsB,EAAMkoB,IAAMsE,IAC7C7M,EAAO1Y,EAAMvJ,EAAQ,GAC3B,CACA,OAAOiiB,CACT,CAEA,SAASsN,GAAsBpsB,EAAI0b,EAASiR,EAAS3B,EAAiB5kB,EAAOoL,EAAGma,GAQ9E,IAAIiB,EAAMd,GAAkB9rB,EAAI0b,EAASsP,EAAiBW,GACtDI,EAAQa,EAAIb,MACZ3sB,EAAMwtB,EAAIxtB,IACV,KAAK/E,KAAKqhB,EAAQtS,KAAK3D,OAAOrG,EAAM,KAAOA,IAE/C,IADA,IAAI0f,EAAO,KAAM+N,EAAc,KACtB9uB,EAAI,EAAGA,EAAIqI,EAAMtJ,OAAQiB,IAAK,CACrC,IAAI4d,EAAIvV,EAAMrI,GACd,KAAI4d,EAAE/V,MAAQxG,GAAOuc,EAAE9V,IAAMkmB,GAA7B,CACA,IACIe,EAAO9G,GAAoBhmB,EAAIgrB,EADd,GAAXrP,EAAE5U,MAC8CrD,KAAKC,IAAIvE,EAAKuc,EAAE9V,IAAM,EAAInC,KAAKkO,IAAIma,EAAOpQ,EAAE/V,OAAO6G,MAGzGsgB,EAAOD,EAAOtb,EAAIA,EAAIsb,EAAO,IAAMA,EAAOtb,IACzCsN,GAAQ+N,EAAcE,KACzBjO,EAAOnD,EACPkR,EAAcE,EAR+B,CAUjD,CAKA,OAJKjO,IAAQA,EAAO1Y,EAAMA,EAAMtJ,OAAS,IAErCgiB,EAAKlZ,KAAOmmB,IAASjN,EAAO,CAAClZ,KAAMmmB,EAAOlmB,GAAIiZ,EAAKjZ,GAAIkB,MAAO+X,EAAK/X,QACnE+X,EAAKjZ,GAAKzG,IAAO0f,EAAO,CAAClZ,KAAMkZ,EAAKlZ,KAAMC,GAAIzG,EAAK2H,MAAO+X,EAAK/X,QAC5D+X,CACT,CAIA,SAASkO,GAAW/sB,GAClB,GAAgC,MAA5BA,EAAQwpB,iBAA4B,OAAOxpB,EAAQwpB,iBACvD,GAAmB,MAAfR,GAAqB,CACvBA,GAAczrB,EAAI,MAAO,KAAM,wBAG/B,IAAK,IAAIO,EAAI,EAAGA,EAAI,KAAMA,EACxBkrB,GAAY1rB,YAAY3C,SAASkD,eAAe,MAChDmrB,GAAY1rB,YAAYC,EAAI,OAE9ByrB,GAAY1rB,YAAY3C,SAASkD,eAAe,KAClD,CACAT,EAAqB4C,EAAQ+L,QAASid,IACtC,IAAI1Y,EAAS0Y,GAAYhd,aAAe,GAGxC,OAFIsE,EAAS,IAAKtQ,EAAQwpB,iBAAmBlZ,GAC7CxT,EAAekD,EAAQ+L,SAChBuE,GAAU,CACnB,CAGA,SAASiY,GAAUvoB,GACjB,GAA+B,MAA3BA,EAAQupB,gBAA2B,OAAOvpB,EAAQupB,gBACtD,IAAIyD,EAASzvB,EAAI,OAAQ,cACrBqf,EAAMrf,EAAI,MAAO,CAACyvB,GAAS,wBAC/B5vB,EAAqB4C,EAAQ+L,QAAS6Q,GACtC,IAAI2J,EAAOyG,EAAO3gB,wBAAyBqX,GAAS6C,EAAK/Z,MAAQ+Z,EAAKha,MAAQ,GAE9E,OADImX,EAAQ,IAAK1jB,EAAQupB,gBAAkB7F,GACpCA,GAAS,EAClB,CAIA,SAASyC,GAAcpmB,GAGrB,IAFA,IAAI+b,EAAI/b,EAAGC,QAASuM,EAAO,CAAC,EAAGmX,EAAQ,CAAC,EACpCjB,EAAa3G,EAAEoI,QAAQ+I,WAClBxrB,EAAIqa,EAAEoI,QAAQ/mB,WAAYW,EAAI,EAAG2D,EAAGA,EAAIA,EAAEshB,cAAejlB,EAAG,CACnE,IAAIoE,EAAKnC,EAAGC,QAAQ2iB,YAAY7kB,GAAGrB,UACnC8P,EAAKrK,GAAMT,EAAEyrB,WAAazrB,EAAEwrB,WAAaxK,EACzCiB,EAAMxhB,GAAMT,EAAE0iB,WAChB,CACA,MAAO,CAAClC,SAAUkL,GAAqBrR,GAC/BoG,iBAAkBpG,EAAEoI,QAAQjY,YAC5BwW,WAAYlW,EACZqW,YAAac,EACbC,aAAc7H,EAAE7b,QAAQkkB,YAClC,CAKA,SAASgJ,GAAqBntB,GAC5B,OAAOA,EAAQulB,SAASlZ,wBAAwBE,KAAOvM,EAAQskB,MAAMjY,wBAAwBE,IAC/F,CAKA,SAAS4P,GAAepc,GACtB,IAAIqtB,EAAKL,GAAWhtB,EAAGC,SAAU4mB,EAAW7mB,EAAGkO,QAAQ4Y,aACnDwG,EAAUzG,GAAYnjB,KAAKkO,IAAI,EAAG5R,EAAGC,QAAQulB,SAASpB,YAAcoE,GAAUxoB,EAAGC,SAAW,GAChG,OAAO,SAAUkJ,GACf,GAAImS,GAAatb,EAAGxB,IAAK2K,GAAS,OAAO,EAEzC,IAAIokB,EAAgB,EACpB,GAAIpkB,EAAKka,QAAW,IAAK,IAAItlB,EAAI,EAAGA,EAAIoL,EAAKka,QAAQvmB,OAAQiB,IACvDoL,EAAKka,QAAQtlB,GAAGwS,SAAUgd,GAAiBpkB,EAAKka,QAAQtlB,GAAGwS,QAGjE,OAAIsW,EACO0G,GAAiB7pB,KAAKsC,KAAKmD,EAAKC,KAAKtM,OAASwwB,IAAY,GAAKD,EAE/DE,EAAgBF,CAC7B,CACF,CAEA,SAASG,GAAoBxtB,GAC3B,IAAIxB,EAAMwB,EAAGxB,IAAKivB,EAAMrR,GAAepc,GACvCxB,EAAI4R,MAAK,SAAUjH,GACjB,IAAIukB,EAAYD,EAAItkB,GAChBukB,GAAavkB,EAAKoH,QAAUD,GAAiBnH,EAAMukB,EACzD,GACF,CAOA,SAASC,GAAa3tB,EAAIhD,EAAG4wB,EAASC,GACpC,IAAI5tB,EAAUD,EAAGC,QACjB,IAAK2tB,GAAyD,QAA9CviB,GAASrO,GAAGsnB,aAAa,kBAA+B,OAAO,KAE/E,IAAI9S,EAAGma,EAAGmC,EAAQ7tB,EAAQykB,UAAUpY,wBAEpC,IAAMkF,EAAIxU,EAAE+wB,QAAUD,EAAMthB,KAAMmf,EAAI3uB,EAAEgxB,QAAUF,EAAMzG,GAAK,CAC7D,MAAO4G,GAAO,OAAO,IAAK,CAC1B,IAAmC9kB,EAA/BwhB,EAASe,GAAW1rB,EAAIwR,EAAGma,GAC/B,GAAIkC,GAAWlD,EAAOc,KAAO,IAAMtiB,EAAOuG,GAAQ1P,EAAGxB,IAAKmsB,EAAOxhB,MAAMC,MAAMtM,QAAU6tB,EAAO/lB,GAAI,CAChG,IAAIspB,EAAU9sB,EAAY+H,EAAMA,EAAKrM,OAAQkD,EAAGkO,QAAQ5M,SAAW6H,EAAKrM,OACxE6tB,EAASvZ,GAAIuZ,EAAOxhB,KAAMzF,KAAKkO,IAAI,EAAGlO,KAAKyqB,OAAO3c,EAAIqT,GAAS7kB,EAAGC,SAASuM,MAAQgc,GAAUxoB,EAAGC,UAAYiuB,GAC9G,CACA,OAAOvD,CACT,CAIA,SAASxE,GAAcnmB,EAAI0B,GACzB,GAAIA,GAAK1B,EAAGC,QAAQkW,OAAU,OAAO,KAErC,IADAzU,GAAK1B,EAAGC,QAAQiW,UACR,EAAK,OAAO,KAEpB,IADA,IAAIkK,EAAOpgB,EAAGC,QAAQmgB,KACbriB,EAAI,EAAGA,EAAIqiB,EAAKtjB,OAAQiB,IAE/B,IADA2D,GAAK0e,EAAKriB,GAAG6R,MACL,EAAK,OAAO7R,CAExB,CAQA,SAASqwB,GAAUpuB,EAAI4F,EAAMC,EAAIwoB,GACnB,MAARzoB,IAAgBA,EAAO5F,EAAGxB,IAAImR,OACxB,MAAN9J,IAAcA,EAAK7F,EAAGxB,IAAImR,MAAQ3P,EAAGxB,IAAIoR,MACxCye,IAAWA,EAAU,GAE1B,IAAIpuB,EAAUD,EAAGC,QAOjB,GANIouB,GAAWxoB,EAAK5F,EAAQkW,SACM,MAA7BlW,EAAQquB,mBAA6BruB,EAAQquB,kBAAoB1oB,KAClE3F,EAAQquB,kBAAoB1oB,GAEhC5F,EAAG0K,MAAM6jB,aAAc,EAEnB3oB,GAAQ3F,EAAQkW,OACdsB,IAAqBwD,GAAajb,EAAGxB,IAAKoH,GAAQ3F,EAAQkW,QAC1DqY,GAAUxuB,QACT,GAAI6F,GAAM5F,EAAQiW,SACnBuB,IAAqB2D,GAAgBpb,EAAGxB,IAAKqH,EAAKwoB,GAAWpuB,EAAQiW,SACvEsY,GAAUxuB,IAEVC,EAAQiW,UAAYmY,EACpBpuB,EAAQkW,QAAUkY,QAEf,GAAIzoB,GAAQ3F,EAAQiW,UAAYrQ,GAAM5F,EAAQkW,OACnDqY,GAAUxuB,QACL,GAAI4F,GAAQ3F,EAAQiW,SAAU,CACnC,IAAIuY,EAAMC,GAAiB1uB,EAAI6F,EAAIA,EAAKwoB,EAAS,GAC7CI,GACFxuB,EAAQmgB,KAAOngB,EAAQmgB,KAAKxjB,MAAM6xB,EAAI5xB,OACtCoD,EAAQiW,SAAWuY,EAAIvT,MACvBjb,EAAQkW,QAAUkY,GAElBG,GAAUxuB,EAEd,MAAO,GAAI6F,GAAM5F,EAAQkW,OAAQ,CAC/B,IAAIwY,EAAQD,GAAiB1uB,EAAI4F,EAAMA,GAAO,GAC1C+oB,GACF1uB,EAAQmgB,KAAOngB,EAAQmgB,KAAKxjB,MAAM,EAAG+xB,EAAM9xB,OAC3CoD,EAAQkW,OAASwY,EAAMzT,OAEvBsT,GAAUxuB,EAEd,KAAO,CACL,IAAI4uB,EAASF,GAAiB1uB,EAAI4F,EAAMA,GAAO,GAC3CipB,EAASH,GAAiB1uB,EAAI6F,EAAIA,EAAKwoB,EAAS,GAChDO,GAAUC,GACZ5uB,EAAQmgB,KAAOngB,EAAQmgB,KAAKxjB,MAAM,EAAGgyB,EAAO/xB,OACzC8M,OAAOuW,GAAelgB,EAAI4uB,EAAO1T,MAAO2T,EAAO3T,QAC/CvR,OAAO1J,EAAQmgB,KAAKxjB,MAAMiyB,EAAOhyB,QACpCoD,EAAQkW,QAAUkY,GAElBG,GAAUxuB,EAEd,CAEA,IAAIuhB,EAAMthB,EAAQqd,iBACdiE,IACE1b,EAAK0b,EAAIrG,MACTqG,EAAIrG,OAASmT,EACRzoB,EAAO2b,EAAIrG,MAAQqG,EAAI3R,OAC5B3P,EAAQqd,iBAAmB,MAEnC,CAIA,SAASwR,GAAc9uB,EAAImJ,EAAM5B,GAC/BvH,EAAG0K,MAAM6jB,aAAc,EACvB,IAAItuB,EAAUD,EAAGC,QAASshB,EAAMvhB,EAAGC,QAAQqd,iBAI3C,GAHIiE,GAAOpY,GAAQoY,EAAIrG,OAAS/R,EAAOoY,EAAIrG,MAAQqG,EAAI3R,OACnD3P,EAAQqd,iBAAmB,QAE3BnU,EAAOlJ,EAAQiW,UAAY/M,GAAQlJ,EAAQkW,QAA/C,CACA,IAAIwG,EAAW1c,EAAQmgB,KAAK+F,GAAcnmB,EAAImJ,IAC9C,GAAqB,MAAjBwT,EAASngB,KAAb,CACA,IAAIwH,EAAM2Y,EAASmE,UAAYnE,EAASmE,QAAU,KACvB,GAAvBlf,EAAQoC,EAAKuD,IAAevD,EAAIF,KAAKyD,EAFL,CAF4B,CAKlE,CAGA,SAASinB,GAAUxuB,GACjBA,EAAGC,QAAQiW,SAAWlW,EAAGC,QAAQkW,OAASnW,EAAGxB,IAAImR,MACjD3P,EAAGC,QAAQmgB,KAAO,GAClBpgB,EAAGC,QAAQsqB,WAAa,CAC1B,CAEA,SAASmE,GAAiB1uB,EAAI+uB,EAAMC,EAAMxpB,GACxC,IAAqCgL,EAAjC3T,EAAQspB,GAAcnmB,EAAI+uB,GAAa3O,EAAOpgB,EAAGC,QAAQmgB,KAC7D,IAAK3I,IAAqBuX,GAAQhvB,EAAGxB,IAAImR,MAAQ3P,EAAGxB,IAAIoR,KACpD,MAAO,CAAC/S,MAAOA,EAAOqe,MAAO8T,GAEjC,IADA,IAAIttB,EAAI1B,EAAGC,QAAQiW,SACVnY,EAAI,EAAGA,EAAIlB,EAAOkB,IACvB2D,GAAK0e,EAAKriB,GAAG6R,KACjB,GAAIlO,GAAKqtB,EAAM,CACb,GAAIvpB,EAAM,EAAG,CACX,GAAI3I,GAASujB,EAAKtjB,OAAS,EAAK,OAAO,KACvC0T,EAAQ9O,EAAI0e,EAAKvjB,GAAO+S,KAAQmf,EAChClyB,GACF,MACE2T,EAAO9O,EAAIqtB,EAEbA,GAAQve,EAAMwe,GAAQxe,CACxB,CACA,KAAOyK,GAAajb,EAAGxB,IAAKwwB,IAASA,GAAM,CACzC,GAAInyB,IAAU2I,EAAM,EAAI,EAAI4a,EAAKtjB,OAAS,GAAM,OAAO,KACvDkyB,GAAQxpB,EAAM4a,EAAKvjB,GAAS2I,EAAM,EAAI,EAAI,IAAIoK,KAC9C/S,GAAS2I,CACX,CACA,MAAO,CAAC3I,MAAOA,EAAOqe,MAAO8T,EAC/B,CAyBA,SAASC,GAAejvB,GAEtB,IADA,IAAIogB,EAAOpgB,EAAGC,QAAQmgB,KAAM8O,EAAQ,EAC3BnxB,EAAI,EAAGA,EAAIqiB,EAAKtjB,OAAQiB,IAAK,CACpC,IAAI4e,EAAWyD,EAAKriB,GACf4e,EAASsD,QAAYtD,EAASngB,OAAQmgB,EAASmE,WAAcoO,CACpE,CACA,OAAOA,CACT,CAEA,SAASC,GAAgBnvB,GACvBA,EAAGC,QAAQif,MAAMkQ,cAAcpvB,EAAGC,QAAQif,MAAMmQ,mBAClD,CAEA,SAASA,GAAiBrvB,EAAIsvB,QACX,IAAZA,IAAqBA,GAAU,GAEpC,IAAI9wB,EAAMwB,EAAGxB,IAAKmO,EAAS,CAAC,EACxB4iB,EAAc5iB,EAAO6iB,QAAU50B,SAAS2jB,yBACxCkR,EAAc9iB,EAAOQ,UAAYvS,SAAS2jB,yBAE1CmR,EAAe1vB,EAAGkO,QAAQyhB,cAC1BD,IAAgBJ,GAAU,GAC9B,IAAK,IAAIvxB,EAAI,EAAGA,EAAIS,EAAIoxB,IAAIC,OAAO/yB,OAAQiB,IACzC,GAAKuxB,GAAWvxB,GAAKS,EAAIoxB,IAAIE,UAA7B,CACA,IAAIxzB,EAAQkC,EAAIoxB,IAAIC,OAAO9xB,GAC3B,KAAIzB,EAAMsJ,OAAOuD,MAAQnJ,EAAGC,QAAQkW,QAAU7Z,EAAMuJ,KAAKsD,KAAOnJ,EAAGC,QAAQiW,UAA3E,CACA,IAAIuE,EAAYne,EAAMyzB,QACtB,GAAIL,EAAc,CAChB,IAAIM,EAAON,EAAa1vB,EAAI1D,GACxB0zB,GAAQC,GAAoBjwB,EAAIgwB,EAAMT,EAC5C,MAAW9U,GAAaza,EAAGkO,QAAQgiB,0BACjCD,GAAoBjwB,EAAI1D,EAAM0zB,KAAMT,GAEjC9U,GACD0V,GAAmBnwB,EAAI1D,EAAOmzB,EAT8D,CAF7C,CAarD,OAAO9iB,CACT,CAGA,SAASsjB,GAAoBjwB,EAAIgwB,EAAM/Y,GACrC,IAAI1T,EAAMwnB,GAAa/qB,EAAIgwB,EAAM,MAAO,KAAM,MAAOhwB,EAAGkO,QAAQ4a,2BAE5DsH,EAASnZ,EAAO1Z,YAAYC,EAAI,MAAO,IAAU,sBAKrD,GAJA4yB,EAAOzyB,MAAM6O,KAAOjJ,EAAIiJ,KAAO,KAC/B4jB,EAAOzyB,MAAM0pB,IAAM9jB,EAAI8jB,IAAM,KAC7B+I,EAAOzyB,MAAM4S,OAAS7M,KAAKkO,IAAI,EAAGrO,EAAI6jB,OAAS7jB,EAAI8jB,KAAOrnB,EAAGkO,QAAQmiB,aAAe,KAEhF,oBAAoBh2B,KAAK2F,EAAGswB,oBAAoB5zB,WAAY,CAC9D,IAAI6zB,EAAUzF,GAAW9qB,EAAIgwB,EAAM,MAAO,KAAM,MAC5CrM,EAAQ4M,EAAQ9jB,MAAQ8jB,EAAQ/jB,KACpC4jB,EAAOzyB,MAAMgmB,OAASA,EAAQ,EAAIA,EAAQ3jB,EAAGwwB,oBAAsB,IACrE,CAEA,GAAIjtB,EAAI8nB,MAAO,CAEb,IAAIoF,EAAcxZ,EAAO1Z,YAAYC,EAAI,MAAO,IAAU,iDAC1DizB,EAAY9yB,MAAMsC,QAAU,GAC5BwwB,EAAY9yB,MAAM6O,KAAOjJ,EAAI8nB,MAAM7e,KAAO,KAC1CikB,EAAY9yB,MAAM0pB,IAAM9jB,EAAI8nB,MAAMhE,IAAM,KACxCoJ,EAAY9yB,MAAM4S,OAA8C,KAApChN,EAAI8nB,MAAMjE,OAAS7jB,EAAI8nB,MAAMhE,KAAa,IACxE,CACF,CAEA,SAASqJ,GAAU5xB,EAAGC,GAAK,OAAOD,EAAEuoB,IAAMtoB,EAAEsoB,KAAOvoB,EAAE0N,KAAOzN,EAAEyN,IAAK,CAGnE,SAAS2jB,GAAmBnwB,EAAI1D,EAAO2a,GACrC,IAAIhX,EAAUD,EAAGC,QAASzB,EAAMwB,EAAGxB,IAC/BmyB,EAAW/1B,SAAS2jB,yBACpBqS,EAAU/L,GAAS7kB,EAAGC,SAAU4wB,EAAWD,EAAQpkB,KACnDskB,EAAYptB,KAAKkO,IAAI3R,EAAQ8wB,WAAYxL,GAAavlB,GAAMC,EAAQskB,MAAM4I,YAAcyD,EAAQnkB,MAChGukB,EAA0B,OAAjBxyB,EAAIwI,UAEjB,SAASiqB,EAAIzkB,EAAM6a,EAAK1D,EAAOyD,GACzBC,EAAM,IAAKA,EAAM,GACrBA,EAAM3jB,KAAKyqB,MAAM9G,GACjBD,EAAS1jB,KAAKyqB,MAAM/G,GACpBuJ,EAASpzB,YAAYC,EAAI,MAAO,KAAM,sBAAwB,6BAA+BgP,EAAO,0CAA4C6a,EAAM,eAA0B,MAAT1D,EAAgBmN,EAAYtkB,EAAOmX,GAAS,8CAAgDyD,EAASC,GAAO,MACrR,CAEA,SAAS6J,EAAY/nB,EAAMgoB,EAASC,GAClC,IAEIjyB,EAAOC,EAFPsc,EAAUhM,GAAQlR,EAAK2K,GACvBkoB,EAAU3V,EAAQtS,KAAKtM,OAE3B,SAAS6tB,EAAO/lB,EAAImhB,GAClB,OAAO+E,GAAW9qB,EAAIoR,GAAIjI,EAAMvE,GAAK,MAAO8W,EAASqK,EACvD,CAEA,SAASuL,EAAM/tB,EAAKiC,EAAK+rB,GACvB,IAAIC,EAASxF,GAAsBhsB,EAAI0b,EAAS,KAAMnY,GAClDrC,EAAe,OAAPsE,IAA0B,SAAR+rB,GAAmB,OAAS,QAE1D,OAAO5G,EADU,SAAR4G,EAAkBC,EAAOzF,MAAQyF,EAAOpyB,KAAO,KAAK/E,KAAKqhB,EAAQtS,KAAK3D,OAAO+rB,EAAOpyB,IAAM,IAAM,EAAI,GAC3F8B,GAAMA,EAC1B,CAEA,IAAIkF,EAAQ8C,GAASwS,EAASld,EAAIwI,WAqClC,OA34FJ,SAA6BZ,EAAOR,EAAMC,EAAItF,GAC5C,IAAK6F,EAAS,OAAO7F,EAAEqF,EAAMC,EAAI,MAAO,GAExC,IADA,IAAIS,GAAQ,EACHvI,EAAI,EAAGA,EAAIqI,EAAMtJ,SAAUiB,EAAG,CACrC,IAAI+gB,EAAO1Y,EAAMrI,IACb+gB,EAAKlZ,KAAOC,GAAMiZ,EAAKjZ,GAAKD,GAAQA,GAAQC,GAAMiZ,EAAKjZ,IAAMD,KAC/DrF,EAAEmD,KAAKkO,IAAIkN,EAAKlZ,KAAMA,GAAOlC,KAAKC,IAAImb,EAAKjZ,GAAIA,GAAmB,GAAdiZ,EAAK/X,MAAa,MAAQ,MAAOhJ,GACrFuI,GAAQ,EAEZ,CACKA,GAAS/F,EAAEqF,EAAMC,EAAI,MAC5B,CA41FI4rB,CAAoBrrB,EAAO+qB,GAAW,EAAY,MAATC,EAAgBC,EAAUD,GAAO,SAAUxrB,EAAMC,EAAIL,EAAKzH,GACjG,IAAIouB,EAAa,OAAP3mB,EACNksB,EAAU/G,EAAO/kB,EAAMumB,EAAM,OAAS,SACtCwF,EAAQhH,EAAO9kB,EAAK,EAAGsmB,EAAM,QAAU,QAEvCyF,EAAuB,MAAXT,GAA2B,GAARvrB,EAAWisB,EAAmB,MAATT,GAAiBvrB,GAAMwrB,EAC3E1hB,EAAa,GAAL5R,EAAQ+T,GAAQ1L,GAASrI,GAAKqI,EAAMtJ,OAAS,EACzD,GAAI60B,EAAMtK,IAAMqK,EAAQrK,KAAO,EAAG,CAChC,IACIyK,GAAad,EAASa,EAAUD,IAAc9f,EAC9CtF,GAFYwkB,EAASY,EAAYC,IAAYliB,EAE3BkhB,GAAY1E,EAAMuF,EAAUC,GAAOnlB,KACrDC,EAAQqlB,EAAYhB,GAAa3E,EAAMwF,EAAQD,GAASjlB,MAC5DwkB,EAAIzkB,EAAMklB,EAAQrK,IAAK5a,EAAQD,EAAMklB,EAAQtK,OAC/C,KAAO,CACL,IAAI2K,EAASC,EAAUC,EAASC,EAC5B/F,GACF4F,EAAUf,GAAUY,GAAajiB,EAAQkhB,EAAWa,EAAQllB,KAC5DwlB,EAAWhB,EAASF,EAAYQ,EAAM1rB,EAAMJ,EAAK,UACjDysB,EAAUjB,EAASH,EAAWS,EAAMzrB,EAAIL,EAAK,SAC7C0sB,EAAWlB,GAAUa,GAAW/f,EAAOgf,EAAYa,EAAMllB,QAEzDslB,EAAWf,EAAoBM,EAAM1rB,EAAMJ,EAAK,UAA5BqrB,EACpBmB,GAAYhB,GAAUY,GAAajiB,EAAQmhB,EAAYY,EAAQjlB,MAC/DwlB,GAAWjB,GAAUa,GAAW/f,EAAO+e,EAAWc,EAAMnlB,KACxD0lB,EAAYlB,EAAqBM,EAAMzrB,EAAIL,EAAK,SAA3BsrB,GAEvBG,EAAIc,EAASL,EAAQrK,IAAK2K,EAAWD,EAASL,EAAQtK,QAClDsK,EAAQtK,OAASuK,EAAMtK,KAAO4J,EAAIJ,EAAUa,EAAQtK,OAAQ,KAAMuK,EAAMtK,KAC5E4J,EAAIgB,EAASN,EAAMtK,IAAK6K,EAAWD,EAASN,EAAMvK,OACpD,GAEKjoB,GAASuxB,GAAUgB,EAASvyB,GAAS,KAAKA,EAAQuyB,GACnDhB,GAAUiB,EAAOxyB,GAAS,IAAKA,EAAQwyB,KACtCvyB,GAAOsxB,GAAUgB,EAAStyB,GAAO,KAAKA,EAAMsyB,GAC7ChB,GAAUiB,EAAOvyB,GAAO,IAAKA,EAAMuyB,EACzC,IACO,CAACxyB,MAAOA,EAAOC,IAAKA,EAC7B,CAEA,IAAI+yB,EAAQ71B,EAAMsJ,OAAQwsB,EAAM91B,EAAMuJ,KACtC,GAAIssB,EAAMhpB,MAAQipB,EAAIjpB,KACpB+nB,EAAYiB,EAAMhpB,KAAMgpB,EAAMvtB,GAAIwtB,EAAIxtB,QACjC,CACL,IAAIytB,EAAW3iB,GAAQlR,EAAK2zB,EAAMhpB,MAAOmpB,EAAS5iB,GAAQlR,EAAK4zB,EAAIjpB,MAC/DopB,EAAcxX,GAAWsX,IAAatX,GAAWuX,GACjDE,EAAUtB,EAAYiB,EAAMhpB,KAAMgpB,EAAMvtB,GAAI2tB,EAAcF,EAASjpB,KAAKtM,OAAS,EAAI,MAAMsC,IAC3FqzB,EAAavB,EAAYkB,EAAIjpB,KAAMopB,EAAc,EAAI,KAAMH,EAAIxtB,IAAIzF,MACnEozB,IACEC,EAAQnL,IAAMoL,EAAWpL,IAAM,GACjC4J,EAAIuB,EAAQ/lB,MAAO+lB,EAAQnL,IAAK,KAAMmL,EAAQpL,QAC9C6J,EAAIJ,EAAU4B,EAAWpL,IAAKoL,EAAWjmB,KAAMimB,EAAWrL,SAE1D6J,EAAIuB,EAAQ/lB,MAAO+lB,EAAQnL,IAAKoL,EAAWjmB,KAAOgmB,EAAQ/lB,MAAO+lB,EAAQpL,SAGzEoL,EAAQpL,OAASqL,EAAWpL,KAC5B4J,EAAIJ,EAAU2B,EAAQpL,OAAQ,KAAMqL,EAAWpL,IACrD,CAEApQ,EAAO1Z,YAAYozB,EACrB,CAGA,SAAS+B,GAAa1yB,GACpB,GAAKA,EAAG6O,MAAM8jB,QAAd,CACA,IAAI1yB,EAAUD,EAAGC,QACjB2yB,cAAc3yB,EAAQ4yB,SACtB,IAAIvpB,GAAK,EACTrJ,EAAQ6yB,UAAUn1B,MAAMo1B,WAAa,GACjC/yB,EAAGkO,QAAQ8kB,gBAAkB,EAC7B/yB,EAAQ4yB,QAAUI,aAAY,WACzBjzB,EAAGkzB,YAAcC,GAAOnzB,GAC7BC,EAAQ6yB,UAAUn1B,MAAMo1B,YAAczpB,GAAMA,GAAM,GAAK,QACzD,GAAGtJ,EAAGkO,QAAQ8kB,iBACPhzB,EAAGkO,QAAQ8kB,gBAAkB,IAClC/yB,EAAQ6yB,UAAUn1B,MAAMo1B,WAAa,SAXT,CAYlC,CAEA,SAASK,GAAYpzB,GACdA,EAAGkzB,aACNlzB,EAAGC,QAAQif,MAAMmU,QACZrzB,EAAG6O,MAAM8jB,SAAWW,GAAQtzB,GAErC,CAEA,SAASuzB,GAAevzB,GACtBA,EAAG6O,MAAM2kB,mBAAoB,EAC7B9wB,YAAW,WAAkB1C,EAAG6O,MAAM2kB,oBACpCxzB,EAAG6O,MAAM2kB,mBAAoB,EACzBxzB,EAAG6O,MAAM8jB,SAAWQ,GAAOnzB,GAC/B,GAAG,IACP,CAEA,SAASszB,GAAQtzB,EAAIhD,GACfgD,EAAG6O,MAAM2kB,oBAAsBxzB,EAAG6O,MAAM4kB,eAAgBzzB,EAAG6O,MAAM2kB,mBAAoB,GAE9D,YAAvBxzB,EAAGkO,QAAQwlB,WACV1zB,EAAG6O,MAAM8jB,UACZ3oB,GAAOhK,EAAI,QAASA,EAAIhD,GACxBgD,EAAG6O,MAAM8jB,SAAU,EACnB/zB,EAASoB,EAAGC,QAAQC,QAAS,sBAIxBF,EAAG0K,OAAS1K,EAAGC,QAAQ0zB,mBAAqB3zB,EAAGxB,IAAIoxB,MACtD5vB,EAAGC,QAAQif,MAAM0U,QACb94B,GAAU4H,YAAW,WAAc,OAAO1C,EAAGC,QAAQif,MAAM0U,OAAM,EAAO,GAAG,KAEjF5zB,EAAGC,QAAQif,MAAM2U,iBAEnBnB,GAAa1yB,GACf,CACA,SAASmzB,GAAOnzB,EAAIhD,GACdgD,EAAG6O,MAAM2kB,oBAETxzB,EAAG6O,MAAM8jB,UACX3oB,GAAOhK,EAAI,OAAQA,EAAIhD,GACvBgD,EAAG6O,MAAM8jB,SAAU,EACnBp2B,EAAQyD,EAAGC,QAAQC,QAAS,uBAE9B0yB,cAAc5yB,EAAGC,QAAQ4yB,SACzBnwB,YAAW,WAAmB1C,EAAG6O,MAAM8jB,UAAW3yB,EAAGC,QAAQ6zB,OAAQ,EAAS,GAAG,KACnF,CAIA,SAASC,GAAwB/zB,GAM/B,IALA,IAAIC,EAAUD,EAAGC,QACb+zB,EAAa/zB,EAAQg0B,QAAQtP,UAC7BuP,EAAUxwB,KAAKkO,IAAI,EAAG3R,EAAQulB,SAASlZ,wBAAwB+a,KAC/D8M,EAAYl0B,EAAQg0B,QAAQ3nB,wBAAwB+a,IACpD+M,EAAa,EACRr2B,EAAI,EAAGA,EAAIkC,EAAQmgB,KAAKtjB,OAAQiB,IAAK,CAC5C,IAAIwI,EAAMtG,EAAQmgB,KAAKriB,GAAI8oB,EAAW7mB,EAAGkO,QAAQ4Y,aAC7CvW,OAAS,EAAUoT,EAAQ,EAC/B,IAAIpd,EAAI0Z,OAAR,CAEA,GADAkU,GAAa5tB,EAAI4C,KAAKoH,OAClB7V,GAAMC,EAAa,EAAG,CACxB,IAAIiuB,EAAMriB,EAAI/J,KAAKmoB,UAAYpe,EAAI/J,KAAKyP,aACxCsE,EAASqY,EAAMoL,EACfA,EAAapL,CACf,KAAO,CACL,IAAIsD,EAAM3lB,EAAI/J,KAAK8P,wBACnBiE,EAAS2b,EAAI9E,OAAS8E,EAAI7E,KAGrBR,GAAYtgB,EAAI6C,KAAKhM,aACtBumB,EAAQpd,EAAI6C,KAAKhM,WAAWkP,wBAAwBG,MAAQyf,EAAI1f,KAAO,EAC7E,CACA,IAAIgE,EAAOjK,EAAI4C,KAAKoH,OAASA,EAC7B,IAAIC,EAAO,MAAQA,GAAQ,QACrB2jB,EAAYD,IAAWE,GAAc5jB,GACzCF,GAAiB/J,EAAI4C,KAAMoH,GAC3B8jB,GAAmB9tB,EAAI4C,MACnB5C,EAAI0W,MAAQ,IAAK,IAAIjV,EAAI,EAAGA,EAAIzB,EAAI0W,KAAKngB,OAAQkL,IACjDqsB,GAAmB9tB,EAAI0W,KAAKjV,IAElC,GAAI2b,EAAQ3jB,EAAGC,QAAQ8wB,WAAY,CACjC,IAAIuD,EAAU5wB,KAAKsC,KAAK2d,EAAQ6E,GAAUxoB,EAAGC,UACzCq0B,EAAUt0B,EAAGC,QAAQgc,gBACvBjc,EAAGC,QAAQgc,cAAgBqY,EAC3Bt0B,EAAGC,QAAQ+b,QAAUzV,EAAI4C,KACzBnJ,EAAGC,QAAQic,gBAAiB,EAEhC,CA7B2B,CA8B7B,CACIxY,KAAKyjB,IAAIiN,GAAc,IAAKn0B,EAAQulB,SAAS0E,WAAakK,EAChE,CAIA,SAASC,GAAmBlrB,GAC1B,GAAIA,EAAKka,QAAW,IAAK,IAAItlB,EAAI,EAAGA,EAAIoL,EAAKka,QAAQvmB,SAAUiB,EAAG,CAChE,IAAIw2B,EAAIprB,EAAKka,QAAQtlB,GAAIT,EAASi3B,EAAE/3B,KAAK6B,WACrCf,IAAUi3B,EAAEhkB,OAASjT,EAAO2O,aAClC,CACF,CAKA,SAASuoB,GAAav0B,EAASzB,EAAKi2B,GAClC,IAAIpN,EAAMoN,GAA4B,MAAhBA,EAASpN,IAAc3jB,KAAKkO,IAAI,EAAG6iB,EAASpN,KAAOpnB,EAAQulB,SAAS0E,UAC1F7C,EAAM3jB,KAAKuC,MAAMohB,EAAM5C,GAAWxkB,IAClC,IAAImnB,EAASqN,GAA+B,MAAnBA,EAASrN,OAAiBqN,EAASrN,OAASC,EAAMpnB,EAAQC,QAAQylB,aAEvF/f,EAAO+K,GAAanS,EAAK6oB,GAAMxhB,EAAK8K,GAAanS,EAAK4oB,GAG1D,GAAIqN,GAAYA,EAASC,OAAQ,CAC/B,IAAIC,EAAaF,EAASC,OAAO9uB,KAAKuD,KAAMyrB,EAAWH,EAASC,OAAO7uB,GAAGsD,KACtEwrB,EAAa/uB,GACfA,EAAO+uB,EACP9uB,EAAK8K,GAAanS,EAAKid,GAAa/L,GAAQlR,EAAKm2B,IAAe10B,EAAQC,QAAQylB,eACvEjiB,KAAKC,IAAIixB,EAAUp2B,EAAI6c,aAAexV,IAC/CD,EAAO+K,GAAanS,EAAKid,GAAa/L,GAAQlR,EAAKo2B,IAAa30B,EAAQC,QAAQylB,cAChF9f,EAAK+uB,EAET,CACA,MAAO,CAAChvB,KAAMA,EAAMC,GAAInC,KAAKkO,IAAI/L,EAAID,EAAO,GAC9C,CAoEA,SAASivB,GAAmB70B,EAAIwmB,GAC9B,IAAIvmB,EAAUD,EAAGC,QAAS60B,EAAa9H,GAAWhtB,EAAGC,SACjDumB,EAAKa,IAAM,IAAKb,EAAKa,IAAM,GAC/B,IAAI0N,EAAY/0B,EAAG0K,OAA+B,MAAtB1K,EAAG0K,MAAMwf,UAAoBlqB,EAAG0K,MAAMwf,UAAYjqB,EAAQulB,SAAS0E,UAC3FtC,EAASlC,GAAc1lB,GAAK2M,EAAS,CAAC,EACtC6Z,EAAKY,OAASZ,EAAKa,IAAMO,IAAUpB,EAAKY,OAASZ,EAAKa,IAAMO,GAChE,IAAIoN,EAAYh1B,EAAGxB,IAAI+R,OAASqU,GAAY3kB,GACxCg1B,EAAQzO,EAAKa,IAAMyN,EAAYI,EAAW1O,EAAKY,OAAS4N,EAAYF,EACxE,GAAItO,EAAKa,IAAM0N,EACbpoB,EAAOud,UAAY+K,EAAQ,EAAIzO,EAAKa,SAC/B,GAAIb,EAAKY,OAAS2N,EAAYnN,EAAQ,CAC3C,IAAIuN,EAASzxB,KAAKC,IAAI6iB,EAAKa,KAAM6N,EAAWF,EAAYxO,EAAKY,QAAUQ,GACnEuN,GAAUJ,IAAapoB,EAAOud,UAAYiL,EAChD,CAEA,IAAIC,EAAcp1B,EAAGkO,QAAQ+T,YAAc,EAAIhiB,EAAQkkB,QAAQjY,YAC3DmpB,EAAar1B,EAAG0K,OAAgC,MAAvB1K,EAAG0K,MAAMof,WAAqB9pB,EAAG0K,MAAMof,WAAa7pB,EAAQulB,SAASsE,WAAasL,EAC3GE,EAAU/P,GAAavlB,GAAMC,EAAQkkB,QAAQjY,YAC7CqpB,EAAU/O,EAAK/Z,MAAQ+Z,EAAKha,KAAO8oB,EAQvC,OAPIC,IAAW/O,EAAK/Z,MAAQ+Z,EAAKha,KAAO8oB,GACpC9O,EAAKha,KAAO,GACZG,EAAOmd,WAAa,EACftD,EAAKha,KAAO6oB,EACjB1oB,EAAOmd,WAAapmB,KAAKkO,IAAI,EAAG4U,EAAKha,KAAO4oB,GAAeG,EAAU,EAAI,KACpE/O,EAAK/Z,MAAQ6oB,EAAUD,EAAa,IACzC1oB,EAAOmd,WAAatD,EAAK/Z,OAAS8oB,EAAU,EAAI,IAAMD,GACnD3oB,CACT,CAIA,SAAS6oB,GAAex1B,EAAIqnB,GACf,MAAPA,IACJoO,GAAmBz1B,GACnBA,EAAG0K,MAAMwf,WAAmC,MAAtBlqB,EAAG0K,MAAMwf,UAAoBlqB,EAAGxB,IAAI0rB,UAAYlqB,EAAG0K,MAAMwf,WAAa7C,EAC9F,CAIA,SAASqO,GAAoB11B,GAC3By1B,GAAmBz1B,GACnB,IAAIuG,EAAMvG,EAAG21B,YACb31B,EAAG0K,MAAMkrB,YAAc,CAAChwB,KAAMW,EAAKV,GAAIU,EAAKsvB,OAAQ71B,EAAGkO,QAAQ4nB,mBACjE,CAEA,SAASC,GAAe/1B,EAAIwR,EAAGma,GACpB,MAALna,GAAkB,MAALma,GAAa8J,GAAmBz1B,GACxC,MAALwR,IAAaxR,EAAG0K,MAAMof,WAAatY,GAC9B,MAALma,IAAa3rB,EAAG0K,MAAMwf,UAAYyB,EACxC,CAWA,SAAS8J,GAAmBz1B,GAC1B,IAAI1D,EAAQ0D,EAAG0K,MAAMkrB,YACjBt5B,IACF0D,EAAG0K,MAAMkrB,YAAc,KAEvBI,GAAoBh2B,EADTsrB,GAAetrB,EAAI1D,EAAMsJ,MAAY0lB,GAAetrB,EAAI1D,EAAMuJ,IACvCvJ,EAAMu5B,QAE5C,CAEA,SAASG,GAAoBh2B,EAAI4F,EAAMC,EAAIgwB,GACzC,IAAII,EAAOpB,GAAmB70B,EAAI,CAChCwM,KAAM9I,KAAKC,IAAIiC,EAAK4G,KAAM3G,EAAG2G,MAC7B6a,IAAK3jB,KAAKC,IAAIiC,EAAKyhB,IAAKxhB,EAAGwhB,KAAOwO,EAClCppB,MAAO/I,KAAKkO,IAAIhM,EAAK6G,MAAO5G,EAAG4G,OAC/B2a,OAAQ1jB,KAAKkO,IAAIhM,EAAKwhB,OAAQvhB,EAAGuhB,QAAUyO,IAE7CE,GAAe/1B,EAAIi2B,EAAKnM,WAAYmM,EAAK/L,UAC3C,CAIA,SAASgM,GAAgBl2B,EAAI+O,GACvBrL,KAAKyjB,IAAInnB,EAAGxB,IAAI0rB,UAAYnb,GAAO,IAClC3U,GAAS+7B,GAAoBn2B,EAAI,CAACqnB,IAAKtY,IAC5CqnB,GAAap2B,EAAI+O,GAAK,GAClB3U,GAAS+7B,GAAoBn2B,GACjCq2B,GAAYr2B,EAAI,KAClB,CAEA,SAASo2B,GAAap2B,EAAI+O,EAAKunB,GAC7BvnB,EAAMrL,KAAKkO,IAAI,EAAGlO,KAAKC,IAAI3D,EAAGC,QAAQulB,SAAS+Q,aAAev2B,EAAGC,QAAQulB,SAASG,aAAc5W,KAC5F/O,EAAGC,QAAQulB,SAAS0E,WAAanb,GAAQunB,KAC7Ct2B,EAAGxB,IAAI0rB,UAAYnb,EACnB/O,EAAGC,QAAQu2B,WAAWJ,aAAarnB,GAC/B/O,EAAGC,QAAQulB,SAAS0E,WAAanb,IAAO/O,EAAGC,QAAQulB,SAAS0E,UAAYnb,GAC9E,CAIA,SAAS0nB,GAAcz2B,EAAI+O,EAAK2nB,EAAYJ,GAC1CvnB,EAAMrL,KAAKkO,IAAI,EAAGlO,KAAKC,IAAIoL,EAAK/O,EAAGC,QAAQulB,SAASmR,YAAc32B,EAAGC,QAAQulB,SAASpB,eACjFsS,EAAa3nB,GAAO/O,EAAGxB,IAAIsrB,WAAapmB,KAAKyjB,IAAInnB,EAAGxB,IAAIsrB,WAAa/a,GAAO,KAAOunB,IACxFt2B,EAAGxB,IAAIsrB,WAAa/a,EACpB6nB,GAAkB52B,GACdA,EAAGC,QAAQulB,SAASsE,YAAc/a,IAAO/O,EAAGC,QAAQulB,SAASsE,WAAa/a,GAC9E/O,EAAGC,QAAQu2B,WAAWC,cAAc1nB,GACtC,CAMA,SAAS8nB,GAAqB72B,GAC5B,IAAI+b,EAAI/b,EAAGC,QAAS62B,EAAU/a,EAAEoI,QAAQjY,YACpC6qB,EAAOrzB,KAAKyqB,MAAMnuB,EAAGxB,IAAI+R,OAASqU,GAAY5kB,EAAGC,UACrD,MAAO,CACL0lB,aAAc5J,EAAEyJ,SAASG,aACzBqR,WAAYjb,EAAE7b,QAAQylB,aACtBgR,YAAa5a,EAAEyJ,SAASmR,YAAavS,YAAarI,EAAEyJ,SAASpB,YAC7D6S,UAAWlb,EAAE7b,QAAQkkB,YACrB8S,QAASl3B,EAAGkO,QAAQ+T,YAAc6U,EAAU,EAC5CK,UAAWJ,EACXR,aAAcQ,EAAO1R,GAAUrlB,GAAM+b,EAAE6J,UACvCN,eAAgBvJ,EAAEuJ,eAClBzC,YAAaiU,EAEjB,CAEA,IAAIM,GAAmB,SAAS7P,EAAOtkB,EAAQjD,GAC7CkC,KAAKlC,GAAKA,EACV,IAAIq3B,EAAOn1B,KAAKm1B,KAAO75B,EAAI,MAAO,CAACA,EAAI,MAAO,KAAM,KAAM,mBAAoB,yBAC1E85B,EAAQp1B,KAAKo1B,MAAQ95B,EAAI,MAAO,CAACA,EAAI,MAAO,KAAM,KAAM,kCAAmC,yBAC/F65B,EAAKE,SAAWD,EAAMC,UAAY,EAClChQ,EAAM8P,GAAO9P,EAAM+P,GAEnBhuB,GAAG+tB,EAAM,UAAU,WACbA,EAAK1R,cAAgB1iB,EAAOo0B,EAAKnN,UAAW,WAClD,IACA5gB,GAAGguB,EAAO,UAAU,WACdA,EAAMlT,aAAenhB,EAAOq0B,EAAMxN,WAAY,aACpD,IAEA5nB,KAAKs1B,kBAAmB,EAEpB98B,GAAMC,EAAa,IAAKuH,KAAKo1B,MAAM35B,MAAM85B,UAAYv1B,KAAKm1B,KAAK15B,MAAM+5B,SAAW,OACtF,EAEAN,GAAiB12B,UAAUi3B,OAAS,SAAU3rB,GAC5C,IAAI4rB,EAAS5rB,EAAQ2qB,YAAc3qB,EAAQoY,YAAc,EACrDyT,EAAS7rB,EAAQuqB,aAAevqB,EAAQ2Z,aAAe,EACvDmS,EAAS9rB,EAAQsZ,eAErB,GAAIuS,EAAQ,CACV31B,KAAKm1B,KAAK15B,MAAMsC,QAAU,QAC1BiC,KAAKm1B,KAAK15B,MAAMypB,OAASwQ,EAASE,EAAS,KAAO,IAClD,IAAIC,EAAc/rB,EAAQgrB,YAAcY,EAASE,EAAS,GAE1D51B,KAAKm1B,KAAKj6B,WAAWO,MAAM4S,OACzB7M,KAAKkO,IAAI,EAAG5F,EAAQuqB,aAAevqB,EAAQ2Z,aAAeoS,GAAe,IAC7E,MACE71B,KAAKm1B,KAAKnN,UAAY,EACtBhoB,KAAKm1B,KAAK15B,MAAMsC,QAAU,GAC1BiC,KAAKm1B,KAAKj6B,WAAWO,MAAM4S,OAAS,IAGtC,GAAIqnB,EAAQ,CACV11B,KAAKo1B,MAAM35B,MAAMsC,QAAU,QAC3BiC,KAAKo1B,MAAM35B,MAAM8O,MAAQorB,EAASC,EAAS,KAAO,IAClD51B,KAAKo1B,MAAM35B,MAAM6O,KAAOR,EAAQkrB,QAAU,KAC1C,IAAIc,EAAahsB,EAAQirB,UAAYjrB,EAAQkrB,SAAWW,EAASC,EAAS,GAC1E51B,KAAKo1B,MAAMl6B,WAAWO,MAAMgmB,MAC1BjgB,KAAKkO,IAAI,EAAG5F,EAAQ2qB,YAAc3qB,EAAQoY,YAAc4T,GAAc,IAC1E,MACE91B,KAAKo1B,MAAM35B,MAAMsC,QAAU,GAC3BiC,KAAKo1B,MAAMl6B,WAAWO,MAAMgmB,MAAQ,IAQtC,OALKzhB,KAAKs1B,kBAAoBxrB,EAAQ2Z,aAAe,IACrC,GAAVmS,GAAe51B,KAAK+1B,gBACxB/1B,KAAKs1B,kBAAmB,GAGnB,CAAC/qB,MAAOorB,EAASC,EAAS,EAAG1Q,OAAQwQ,EAASE,EAAS,EAChE,EAEAV,GAAiB12B,UAAU+1B,cAAgB,SAAUlzB,GAC/CrB,KAAKo1B,MAAMxN,YAAcvmB,IAAOrB,KAAKo1B,MAAMxN,WAAavmB,GACxDrB,KAAKg2B,cAAgBh2B,KAAKi2B,mBAAmBj2B,KAAKo1B,MAAOp1B,KAAKg2B,aAAc,QAClF,EAEAd,GAAiB12B,UAAU01B,aAAe,SAAU7yB,GAC9CrB,KAAKm1B,KAAKnN,WAAa3mB,IAAOrB,KAAKm1B,KAAKnN,UAAY3mB,GACpDrB,KAAKk2B,aAAel2B,KAAKi2B,mBAAmBj2B,KAAKm1B,KAAMn1B,KAAKk2B,YAAa,OAC/E,EAEAhB,GAAiB12B,UAAUu3B,cAAgB,WACzC,IAAI1D,EAAI54B,IAAQN,EAAqB,OAAS,OAC9C6G,KAAKo1B,MAAM35B,MAAM4S,OAASrO,KAAKm1B,KAAK15B,MAAMgmB,MAAQ4Q,EAClDryB,KAAKo1B,MAAM35B,MAAMo1B,WAAa7wB,KAAKm1B,KAAK15B,MAAMo1B,WAAa,SAC3D7wB,KAAKg2B,aAAe,IAAIj2B,EACxBC,KAAKk2B,YAAc,IAAIn2B,CACzB,EAEAm1B,GAAiB12B,UAAUy3B,mBAAqB,SAAUE,EAAKC,EAAO/wB,GACpE8wB,EAAI16B,MAAMo1B,WAAa,GAcvBuF,EAAM31B,IAAI,KAbV,SAAS41B,IAOP,IAAIrM,EAAMmM,EAAI/rB,yBACI,QAAR/E,EAAiB3M,SAAS49B,iBAAiBtM,EAAIzf,MAAQ,GAAIyf,EAAI7E,IAAM6E,EAAI9E,QAAU,GACvFxsB,SAAS49B,kBAAkBtM,EAAIzf,MAAQyf,EAAI1f,MAAQ,EAAG0f,EAAI9E,OAAS,KAC9DiR,EAAOA,EAAI16B,MAAMo1B,WAAa,SAClCuF,EAAM31B,IAAI,IAAM41B,EACzB,GAEF,EAEAnB,GAAiB12B,UAAU+3B,MAAQ,WACjC,IAAIn7B,EAAS4E,KAAKo1B,MAAMj5B,WACxBf,EAAOH,YAAY+E,KAAKo1B,OACxBh6B,EAAOH,YAAY+E,KAAKm1B,KAC1B,EAEA,IAAIqB,GAAiB,WAAa,EAOlC,SAASC,GAAiB34B,EAAIgM,GACvBA,IAAWA,EAAU6qB,GAAqB72B,IAC/C,IAAI44B,EAAa54B,EAAGC,QAAQwlB,SAAUoT,EAAc74B,EAAGC,QAAQ2lB,UAC/DkT,GAAsB94B,EAAIgM,GAC1B,IAAK,IAAIjO,EAAI,EAAGA,EAAI,GAAK66B,GAAc54B,EAAGC,QAAQwlB,UAAYoT,GAAe74B,EAAGC,QAAQ2lB,UAAW7nB,IAC7F66B,GAAc54B,EAAGC,QAAQwlB,UAAYzlB,EAAGkO,QAAQ4Y,cAChDiN,GAAwB/zB,GAC5B84B,GAAsB94B,EAAI62B,GAAqB72B,IAC/C44B,EAAa54B,EAAGC,QAAQwlB,SAAUoT,EAAc74B,EAAGC,QAAQ2lB,SAE/D,CAIA,SAASkT,GAAsB94B,EAAIgM,GACjC,IAAI+P,EAAI/b,EAAGC,QACP84B,EAAQhd,EAAEya,WAAWmB,OAAO3rB,GAEhC+P,EAAEwI,MAAM5mB,MAAMwnB,cAAgBpJ,EAAE0J,SAAWsT,EAAMtsB,OAAS,KAC1DsP,EAAEwI,MAAM5mB,MAAMq7B,eAAiBjd,EAAE6J,UAAYmT,EAAM3R,QAAU,KAC7DrL,EAAEkd,aAAat7B,MAAMu7B,aAAeH,EAAM3R,OAAS,uBAE/C2R,EAAMtsB,OAASssB,EAAM3R,QACvBrL,EAAEod,gBAAgBx7B,MAAMsC,QAAU,QAClC8b,EAAEod,gBAAgBx7B,MAAM4S,OAASwoB,EAAM3R,OAAS,KAChDrL,EAAEod,gBAAgBx7B,MAAMgmB,MAAQoV,EAAMtsB,MAAQ,MACvCsP,EAAEod,gBAAgBx7B,MAAMsC,QAAU,GACvC84B,EAAM3R,QAAUpnB,EAAGkO,QAAQkrB,4BAA8Bp5B,EAAGkO,QAAQ+T,aACtElG,EAAEsd,aAAa17B,MAAMsC,QAAU,QAC/B8b,EAAEsd,aAAa17B,MAAM4S,OAASwoB,EAAM3R,OAAS,KAC7CrL,EAAEsd,aAAa17B,MAAMgmB,MAAQ3X,EAAQ6W,YAAc,MAC5C9G,EAAEsd,aAAa17B,MAAMsC,QAAU,EAC1C,CArCAy4B,GAAeh4B,UAAUi3B,OAAS,WAAc,MAAO,CAACvQ,OAAQ,EAAG3a,MAAO,EAAG,EAC7EisB,GAAeh4B,UAAU+1B,cAAgB,WAAa,EACtDiC,GAAeh4B,UAAU01B,aAAe,WAAa,EACrDsC,GAAeh4B,UAAU+3B,MAAQ,WAAa,EAoC9C,IAAIa,GAAiB,CAAC,OAAUlC,GAAkB,KAAQsB,IAE1D,SAASa,GAAev5B,GAClBA,EAAGC,QAAQu2B,aACbx2B,EAAGC,QAAQu2B,WAAWiC,QAClBz4B,EAAGC,QAAQu2B,WAAW53B,UACtBrC,EAAQyD,EAAGC,QAAQC,QAASF,EAAGC,QAAQu2B,WAAW53B,WAGxDoB,EAAGC,QAAQu2B,WAAa,IAAI8C,GAAet5B,EAAGkO,QAAQsrB,iBAAgB,SAAUh9B,GAC9EwD,EAAGC,QAAQC,QAAQyhB,aAAanlB,EAAMwD,EAAGC,QAAQk5B,iBAEjD7vB,GAAG9M,EAAM,aAAa,WAChBwD,EAAG6O,MAAM8jB,SAAWjwB,YAAW,WAAc,OAAO1C,EAAGC,QAAQif,MAAMmU,OAAS,GAAG,EACvF,IACA72B,EAAKyB,aAAa,iBAAkB,OACtC,IAAG,SAAUsF,EAAKk2B,GACJ,cAARA,EAAwBhD,GAAcz2B,EAAIuD,GACvC2yB,GAAgBl2B,EAAIuD,EAC7B,GAAGvD,GACCA,EAAGC,QAAQu2B,WAAW53B,UACtBA,EAASoB,EAAGC,QAAQC,QAASF,EAAGC,QAAQu2B,WAAW53B,SACzD,CAQA,IAAI86B,GAAW,EAEf,SAASC,GAAe35B,GAlvDxB,IAAuB45B,EAmvDrB55B,EAAG0K,MAAQ,CACT1K,GAAIA,EACJuuB,aAAa,EACbsK,YAAa74B,EAAGxB,IAAI+R,OACpB8V,aAAa,EACbwT,YAAa,EACbC,QAAQ,EACRC,WAAY,KACZpvB,uBAAwB,KACxBqvB,qBAAsB,EACtBC,kBAAkB,EAClBC,eAAe,EACfpQ,WAAY,KAAMI,UAAW,KAC7B0L,YAAa,KACbvC,OAAO,EACPlxB,KAAMu3B,GACNS,WAAY,MAnwDOP,EAqwDP55B,EAAG0K,MApwDb2V,GACFA,GAAe+Z,IAAIt2B,KAAK81B,GAExBA,EAAGS,UAAYha,GAAiB,CAC9B+Z,IAAK,CAACR,GACNnZ,iBAAkB,GAgwDxB,CAGA,SAAS6Z,GAAat6B,GACpB,IAAI45B,EAAK55B,EAAG0K,MACRkvB,GAhvDN,SAAyBA,EAAIW,GAC3B,IAAIC,EAAQZ,EAAGS,UACf,GAAKG,EAEL,KApBF,SAA6BA,GAG3B,IAAIC,EAAYD,EAAM/Z,iBAAkB1iB,EAAI,EAC5C,EAAG,CACD,KAAOA,EAAI08B,EAAU39B,OAAQiB,IACzB08B,EAAU18B,GAAG4C,KAAK,MACtB,IAAK,IAAIqH,EAAI,EAAGA,EAAIwyB,EAAMJ,IAAIt9B,OAAQkL,IAAK,CACzC,IAAI4xB,EAAKY,EAAMJ,IAAIpyB,GACnB,GAAI4xB,EAAGjvB,uBACH,KAAOivB,EAAGI,qBAAuBJ,EAAGjvB,uBAAuB7N,QACzD88B,EAAGjvB,uBAAuBivB,EAAGI,wBAAwBr5B,KAAK,KAAMi5B,EAAG55B,GAC3E,CACF,OAASjC,EAAI08B,EAAU39B,OACzB,CAMQ49B,CAAoBF,EAAQ,CAClC,QACEna,GAAiB,KACjBka,EAAMC,EACR,CACF,CAuuDYG,CAAgBf,GAAI,SAAUY,GACtC,IAAK,IAAIz8B,EAAI,EAAGA,EAAIy8B,EAAMJ,IAAIt9B,OAAQiB,IAClCy8B,EAAMJ,IAAIr8B,GAAGiC,GAAG0K,MAAQ,MAOhC,SAAuB8vB,GAErB,IADA,IAAIJ,EAAMI,EAAMJ,IACPr8B,EAAI,EAAGA,EAAIq8B,EAAIt9B,OAAQiB,IAC5B68B,GAAgBR,EAAIr8B,IACxB,IAAK,IAAIsJ,EAAM,EAAGA,EAAM+yB,EAAIt9B,OAAQuK,IAChCwzB,GAAgBT,EAAI/yB,IACxB,IAAK,IAAIG,EAAM,EAAGA,EAAM4yB,EAAIt9B,OAAQ0K,IAChCszB,GAAgBV,EAAI5yB,IACxB,IAAK,IAAIE,EAAM,EAAGA,EAAM0yB,EAAIt9B,OAAQ4K,IAChCqzB,GAAgBX,EAAI1yB,IACxB,IAAK,IAAIG,EAAM,EAAGA,EAAMuyB,EAAIt9B,OAAQ+K,IAChCmzB,GAAoBZ,EAAIvyB,GAC9B,CAlBIozB,CAAcT,EAChB,GACF,CAkBA,SAASI,GAAgBhB,GACvB,IAAI55B,EAAK45B,EAAG55B,GAAIC,EAAUD,EAAGC,SAmN/B,SAA6BD,GAC3B,IAAIC,EAAUD,EAAGC,SACZA,EAAQi7B,mBAAqBj7B,EAAQulB,SAAStZ,cACjDjM,EAAQqlB,eAAiBrlB,EAAQulB,SAAStZ,YAAcjM,EAAQulB,SAASpB,YACzEnkB,EAAQg5B,aAAat7B,MAAM4S,OAAS8U,GAAUrlB,GAAM,KACpDC,EAAQskB,MAAM5mB,MAAMw9B,cAAgBl7B,EAAQqlB,eAAiB,KAC7DrlB,EAAQskB,MAAM5mB,MAAMy9B,iBAAmB/V,GAAUrlB,GAAM,KACvDC,EAAQi7B,mBAAoB,EAEhC,EA3NEG,CAAoBr7B,GAChB45B,EAAGM,eAAiBpe,GAAY9b,GAEpC45B,EAAG0B,WAAa1B,EAAGrL,aAAeqL,EAAGvT,aAA+B,MAAhBuT,EAAG1P,WACrD0P,EAAGhE,cAAgBgE,EAAGhE,YAAYhwB,KAAKuD,KAAOlJ,EAAQiW,UACnC0jB,EAAGhE,YAAY/vB,GAAGsD,MAAQlJ,EAAQkW,SACrDlW,EAAQic,gBAAkBlc,EAAGkO,QAAQ4Y,aACvC8S,EAAGjC,OAASiC,EAAG0B,YACb,IAAIC,GAAcv7B,EAAI45B,EAAG0B,YAAc,CAACjU,IAAKuS,EAAG1P,UAAWwK,OAAQkF,EAAGhE,aAAcgE,EAAGvT,YAC3F,CAEA,SAASwU,GAAgBjB,GACvBA,EAAG4B,eAAiB5B,EAAG0B,YAAcG,GAAsB7B,EAAG55B,GAAI45B,EAAGjC,OACvE,CAEA,SAASmD,GAAgBlB,GACvB,IAAI55B,EAAK45B,EAAG55B,GAAIC,EAAUD,EAAGC,QACzB25B,EAAG4B,gBAAkBzH,GAAwB/zB,GAEjD45B,EAAG8B,WAAa7E,GAAqB72B,GAKjCC,EAAQic,iBAAmBlc,EAAGkO,QAAQ4Y,eACxC8S,EAAG+B,cAAgB7V,GAAY9lB,EAAIC,EAAQ+b,QAAS/b,EAAQ+b,QAAQ5S,KAAKtM,QAAQ0P,KAAO,EACxFxM,EAAGC,QAAQ8wB,WAAa6I,EAAG+B,cAC3B/B,EAAG8B,WAAW/E,YACZjzB,KAAKkO,IAAI3R,EAAQulB,SAASpB,YAAankB,EAAQskB,MAAM4I,WAAayM,EAAG+B,cAAgBtW,GAAUrlB,GAAMA,EAAGC,QAAQwlB,UAClHmU,EAAGgC,cAAgBl4B,KAAKkO,IAAI,EAAG3R,EAAQskB,MAAM4I,WAAayM,EAAG+B,cAAgBpW,GAAavlB,MAGxF45B,EAAG4B,gBAAkB5B,EAAGK,oBACxBL,EAAGiC,kBAAoB57B,EAAQif,MAAMmQ,mBAC3C,CAEA,SAAS0L,GAAgBnB,GACvB,IAAI55B,EAAK45B,EAAG55B,GAEY,MAApB45B,EAAG+B,gBACL37B,EAAGC,QAAQskB,MAAM5mB,MAAM+5B,SAAWkC,EAAG+B,cAAgB,KACjD/B,EAAGgC,cAAgB57B,EAAGxB,IAAIsrB,YAC1B2M,GAAcz2B,EAAI0D,KAAKC,IAAI3D,EAAGC,QAAQulB,SAASsE,WAAY8P,EAAGgC,gBAAgB,GAClF57B,EAAGC,QAAQic,gBAAiB,GAG9B,IAAI4f,EAAYlC,EAAGvG,OAASuG,EAAGvG,OAAS90B,EAAUC,EAAIwB,IAClD45B,EAAGiC,mBACH77B,EAAGC,QAAQif,MAAMkQ,cAAcwK,EAAGiC,kBAAmBC,IACrDlC,EAAG4B,gBAAkB5B,EAAGf,aAAe74B,EAAGxB,IAAI+R,SAC9CooB,GAAiB34B,EAAI45B,EAAG8B,YACxB9B,EAAG4B,gBACHO,GAAkB/7B,EAAI45B,EAAG8B,YAEzB9B,EAAGK,kBAAoBvH,GAAa1yB,GAEpCA,EAAG6O,MAAM8jB,SAAWiH,EAAGC,aACvB75B,EAAGC,QAAQif,MAAM0U,MAAMgG,EAAGE,QAC1BgC,GAAa1I,GAAYwG,EAAG55B,GAClC,CAEA,SAASg7B,GAAoBpB,GAC3B,IAAI55B,EAAK45B,EAAG55B,GAAIC,EAAUD,EAAGC,QAASzB,EAAMwB,EAAGxB,IAE3Co7B,EAAG4B,gBAAkBQ,GAAkBh8B,EAAI45B,EAAGjC,QAGvB,MAAvB13B,EAAQg8B,aAAwC,MAAhBrC,EAAG1P,WAAsC,MAAjB0P,EAAG9P,aAAsB8P,EAAGhE,cACpF31B,EAAQg8B,YAAch8B,EAAQi8B,YAAc,MAG5B,MAAhBtC,EAAG1P,WAAqBkM,GAAap2B,EAAI45B,EAAG1P,UAAW0P,EAAGtD,aAEzC,MAAjBsD,EAAG9P,YAAsB2M,GAAcz2B,EAAI45B,EAAG9P,YAAY,GAAM,GAEhE8P,EAAGhE,aAveT,SAA2B51B,EAAIwmB,GAC7B,IAAItc,GAAelK,EAAI,wBAAvB,CAEA,IAAIC,EAAUD,EAAGC,QAASisB,EAAMjsB,EAAQskB,MAAMjY,wBAAyB6vB,EAAW,KAC9E39B,EAAMyB,EAAQC,QAAQC,cAG1B,GAFIqmB,EAAKa,IAAM6E,EAAI7E,IAAM,EAAK8U,GAAW,EAChC3V,EAAKY,OAAS8E,EAAI7E,KAAO7oB,EAAI6B,YAAY+7B,aAAe59B,EAAIqrB,gBAAgBlE,gBAAiBwW,GAAW,GACjG,MAAZA,IAAqB7gC,EAAS,CAChC,IAAI+gC,EAAa7+B,EAAI,MAAO,IAAU,KAAO,uDAAyDgpB,EAAKa,IAAMpnB,EAAQsqB,WAAa9F,GAAWzkB,EAAGC,UAAY,0CAA4CumB,EAAKY,OAASZ,EAAKa,IAAMhC,GAAUrlB,GAAMC,EAAQ2lB,WAAa,uCAA0CY,EAAS,KAAI,cAAiB9iB,KAAKkO,IAAI,EAAG4U,EAAK/Z,MAAQ+Z,EAAKha,MAAS,OACzXxM,EAAGC,QAAQykB,UAAUnnB,YAAY8+B,GACjCA,EAAWC,eAAeH,GAC1Bn8B,EAAGC,QAAQykB,UAAUvnB,YAAYk/B,EACnC,CAXyD,CAY3D,CA6dIE,CAAkBv8B,EAxdtB,SAA2BA,EAAIuD,EAAKnE,EAAKy2B,GAEvC,IAAIrP,EADU,MAAVqP,IAAkBA,EAAS,GAE1B71B,EAAGkO,QAAQ4Y,cAAgBvjB,GAAOnE,IAIrCA,EAAoB,UAAdmE,EAAI8C,OAAqB+K,GAAI7N,EAAI4F,KAAM5F,EAAIqB,GAAK,EAAG,UAAYrB,EACrEA,EAAMA,EAAIqB,GAAKwM,GAAI7N,EAAI4F,KAAoB,UAAd5F,EAAI8C,OAAqB9C,EAAIqB,GAAK,EAAIrB,EAAIqB,GAAI,SAAWrB,GAExF,IAAK,IAAIi5B,EAAQ,EAAGA,EAAQ,EAAGA,IAAS,CACtC,IAAIC,GAAU,EACV9R,EAASI,GAAa/qB,EAAIuD,GAC1Bm5B,EAAat9B,GAAOA,GAAOmE,EAAewnB,GAAa/qB,EAAIZ,GAA1BurB,EAKjCgS,EAAY9H,GAAmB70B,EAJnCwmB,EAAO,CAACha,KAAM9I,KAAKC,IAAIgnB,EAAOne,KAAMkwB,EAAUlwB,MACtC6a,IAAK3jB,KAAKC,IAAIgnB,EAAOtD,IAAKqV,EAAUrV,KAAOwO,EAC3CppB,MAAO/I,KAAKkO,IAAI+Y,EAAOne,KAAMkwB,EAAUlwB,MACvC4a,OAAQ1jB,KAAKkO,IAAI+Y,EAAOvD,OAAQsV,EAAUtV,QAAUyO,IAExD+G,EAAW58B,EAAGxB,IAAI0rB,UAAW2S,EAAY78B,EAAGxB,IAAIsrB,WASpD,GAR2B,MAAvB6S,EAAUzS,YACZgM,GAAgBl2B,EAAI28B,EAAUzS,WAC1BxmB,KAAKyjB,IAAInnB,EAAGxB,IAAI0rB,UAAY0S,GAAY,IAAKH,GAAU,IAEjC,MAAxBE,EAAU7S,aACZ2M,GAAcz2B,EAAI28B,EAAU7S,YACxBpmB,KAAKyjB,IAAInnB,EAAGxB,IAAIsrB,WAAa+S,GAAa,IAAKJ,GAAU,KAE1DA,EAAW,KAClB,CACA,OAAOjW,CACT,CAubesW,CAAkB98B,EAAI6R,GAAQrT,EAAKo7B,EAAGhE,YAAYhwB,MAChCiM,GAAQrT,EAAKo7B,EAAGhE,YAAY/vB,IAAK+zB,EAAGhE,YAAYC,SAM/E,IAAI5V,EAAS2Z,EAAGmD,mBAAoBC,EAAWpD,EAAGqD,qBAClD,GAAIhd,EAAU,IAAK,IAAIliB,EAAI,EAAGA,EAAIkiB,EAAOnjB,SAAUiB,EAC1CkiB,EAAOliB,GAAGgS,MAAMjT,QAAUkN,GAAOiW,EAAOliB,GAAI,QACrD,GAAIi/B,EAAY,IAAK,IAAI31B,EAAM,EAAGA,EAAM21B,EAASlgC,SAAUuK,EACnD21B,EAAS31B,GAAK0I,MAAMjT,QAAUkN,GAAOgzB,EAAS31B,GAAM,UAExDpH,EAAQC,QAAQ+L,eAChBzN,EAAI0rB,UAAYlqB,EAAGC,QAAQulB,SAAS0E,WAGpC0P,EAAGG,YACH/vB,GAAOhK,EAAI,UAAWA,EAAI45B,EAAGG,YAC7BH,EAAGjC,QACHiC,EAAGjC,OAAOuF,QAChB,CAGA,SAASC,GAAQn9B,EAAIO,GACnB,GAAIP,EAAG0K,MAAS,OAAOnK,IACvBo5B,GAAe35B,GACf,IAAM,OAAOO,GAAI,CACjB,QAAU+5B,GAAat6B,EAAK,CAC9B,CAEA,SAASo9B,GAAUp9B,EAAIO,GACrB,OAAO,WACL,GAAIP,EAAG0K,MAAS,OAAOnK,EAAEM,MAAMb,EAAIY,WACnC+4B,GAAe35B,GACf,IAAM,OAAOO,EAAEM,MAAMb,EAAIY,UAAW,CACpC,QAAU05B,GAAat6B,EAAK,CAC9B,CACF,CAGA,SAASq9B,GAAS98B,GAChB,OAAO,WACL,GAAI2B,KAAKwI,MAAS,OAAOnK,EAAEM,MAAMqB,KAAMtB,WACvC+4B,GAAez3B,MACf,IAAM,OAAO3B,EAAEM,MAAMqB,KAAMtB,UAAW,CACtC,QAAU05B,GAAap4B,KAAO,CAChC,CACF,CACA,SAASo7B,GAAY/8B,GACnB,OAAO,WACL,IAAIP,EAAKkC,KAAKlC,GACd,IAAKA,GAAMA,EAAG0K,MAAS,OAAOnK,EAAEM,MAAMqB,KAAMtB,WAC5C+4B,GAAe35B,GACf,IAAM,OAAOO,EAAEM,MAAMqB,KAAMtB,UAAW,CACtC,QAAU05B,GAAat6B,EAAK,CAC9B,CACF,CAIA,SAASq2B,GAAYr2B,EAAIoC,GACnBpC,EAAGxB,IAAI+W,kBAAoBvV,EAAGC,QAAQkW,QACtCnW,EAAG6O,MAAM0uB,UAAU56B,IAAIP,EAAM9B,EAAKk9B,GAAiBx9B,GACzD,CAEA,SAASw9B,GAAgBx9B,GACvB,IAAIxB,EAAMwB,EAAGxB,IACb,KAAIA,EAAI+W,mBAAqBvV,EAAGC,QAAQkW,QAAxC,CACA,IAAI/W,GAAO,IAAIqD,KAAOzC,EAAGkO,QAAQuvB,SAC7B1pB,EAAUkB,GAAiBjV,EAAIxB,EAAI+W,mBACnCmoB,EAAe,GAEnBl/B,EAAI4R,KAAK2D,EAAQ5K,KAAMzF,KAAKC,IAAInF,EAAImR,MAAQnR,EAAIoR,KAAM5P,EAAGC,QAAQkW,OAAS,MAAM,SAAUhN,GACxF,GAAI4K,EAAQ5K,MAAQnJ,EAAGC,QAAQiW,SAAU,CACvC,IAAIynB,EAAYx0B,EAAKwL,OACjBO,EAAa/L,EAAKC,KAAKtM,OAASkD,EAAGkO,QAAQiH,mBAAqBvG,GAAUpQ,EAAIqP,KAAMkG,EAAQlF,OAAS,KACrG+uB,EAAc9pB,GAAc9T,EAAImJ,EAAM4K,GAAS,GAC/CmB,IAAcnB,EAAQlF,MAAQqG,GAClC/L,EAAKwL,OAASipB,EAAYjpB,OAC1B,IAAIkpB,EAAS10B,EAAKmM,aAAcwoB,EAASF,EAAYhpB,QACjDkpB,EAAU30B,EAAKmM,aAAewoB,EACzBD,IAAU10B,EAAKmM,aAAe,MAGvC,IAFA,IAAIyoB,GAAYJ,GAAaA,EAAU7gC,QAAUqM,EAAKwL,OAAO7X,QAC3D+gC,GAAUC,KAAYD,IAAWC,GAAUD,EAAOhpB,SAAWipB,EAAOjpB,SAAWgpB,EAAO/oB,WAAagpB,EAAOhpB,WACnG/W,EAAI,GAAIggC,GAAYhgC,EAAI4/B,EAAU7gC,SAAUiB,EAAKggC,EAAWJ,EAAU5/B,IAAMoL,EAAKwL,OAAO5W,GAC7FggC,GAAYL,EAAa55B,KAAKiQ,EAAQ5K,MAC1CA,EAAKiM,WAAarB,EAAQsB,OAC1BtB,EAAQqC,UACV,MACMjN,EAAKC,KAAKtM,QAAUkD,EAAGkO,QAAQiH,oBAC/Bc,GAAYjW,EAAImJ,EAAKC,KAAM2K,GAC/B5K,EAAKiM,WAAarB,EAAQ5K,KAAO,GAAK,EAAI4K,EAAQsB,OAAS,KAC3DtB,EAAQqC,WAEV,IAAK,IAAI3T,KAAOrD,EAEd,OADAi3B,GAAYr2B,EAAIA,EAAGkO,QAAQ8vB,YACpB,CAEX,IACAx/B,EAAI+W,kBAAoBxB,EAAQ5K,KAChC3K,EAAIgX,aAAe9R,KAAKkO,IAAIpT,EAAIgX,aAAczB,EAAQ5K,MAClDu0B,EAAa5gC,QAAUqgC,GAAQn9B,GAAI,WACrC,IAAK,IAAIjC,EAAI,EAAGA,EAAI2/B,EAAa5gC,OAAQiB,IACrC+wB,GAAc9uB,EAAI09B,EAAa3/B,GAAI,OACzC,GArCyD,CAsC3D,CAIA,IAAIw9B,GAAgB,SAASv7B,EAAIy0B,EAAUwJ,GACzC,IAAIh+B,EAAUD,EAAGC,QAEjBiC,KAAKuyB,SAAWA,EAEhBvyB,KAAKg8B,QAAU1J,GAAav0B,EAASD,EAAGxB,IAAKi2B,GAC7CvyB,KAAKi8B,gBAAkBl+B,EAAQC,QAAQgM,YACvChK,KAAKk8B,cAAgBn+B,EAAQC,QAAQylB,aACrCzjB,KAAK0hB,aAAe3jB,EAAQC,QAAQkkB,YACpCliB,KAAKm8B,gBAAkB9Y,GAAavlB,GACpCkC,KAAK+7B,MAAQA,EACb/7B,KAAK2e,KAAOuF,GAAcpmB,GAC1BkC,KAAKo8B,OAAS,EAChB,EAsBA,SAASC,GAAkBv+B,GACzB,GAAIA,EAAGkzB,WAAc,OAAO,KAC5B,IAAIsL,EAASjgC,EAAUC,EAAIwB,IAC3B,IAAKw+B,IAAWtgC,EAAS8B,EAAGC,QAAQg0B,QAASuK,GAAW,OAAO,KAC/D,IAAI7xB,EAAS,CAACpO,UAAWigC,GACzB,GAAIxxB,OAAOC,aAAc,CACvB,IAAI2iB,EAAMxvB,EAAIJ,GAAIiN,eACd2iB,EAAI6O,YAAc7O,EAAI8O,QAAUxgC,EAAS8B,EAAGC,QAAQg0B,QAASrE,EAAI6O,cACnE9xB,EAAO8xB,WAAa7O,EAAI6O,WACxB9xB,EAAOgyB,aAAe/O,EAAI+O,aAC1BhyB,EAAOiyB,UAAYhP,EAAIgP,UACvBjyB,EAAOkyB,YAAcjP,EAAIiP,YAE7B,CACA,OAAOlyB,CACT,CAoBA,SAAS8uB,GAAsBz7B,EAAI23B,GACjC,IAAI13B,EAAUD,EAAGC,QAASzB,EAAMwB,EAAGxB,IAEnC,GAAIm5B,EAAOwG,eAET,OADA3P,GAAUxuB,IACH,EAIT,IAAK23B,EAAOsG,OACRtG,EAAOuG,QAAQt4B,MAAQ3F,EAAQiW,UAAYyhB,EAAOuG,QAAQr4B,IAAM5F,EAAQkW,SAC1C,MAA7BlW,EAAQquB,mBAA6BruB,EAAQquB,mBAAqBruB,EAAQkW,SAC3ElW,EAAQ6+B,cAAgB7+B,EAAQmgB,MAA8B,GAAtB6O,GAAejvB,GACvD,OAAO,EAEP++B,GAA2B/+B,KAC7BwuB,GAAUxuB,GACV23B,EAAO9W,KAAOuF,GAAcpmB,IAI9B,IAAIZ,EAAMZ,EAAImR,MAAQnR,EAAIoR,KACtBhK,EAAOlC,KAAKkO,IAAI+lB,EAAOuG,QAAQt4B,KAAO5F,EAAGkO,QAAQ8wB,eAAgBxgC,EAAImR,OACrE9J,EAAKnC,KAAKC,IAAIvE,EAAKu4B,EAAOuG,QAAQr4B,GAAK7F,EAAGkO,QAAQ8wB,gBAClD/+B,EAAQiW,SAAWtQ,GAAQA,EAAO3F,EAAQiW,SAAW,KAAMtQ,EAAOlC,KAAKkO,IAAIpT,EAAImR,MAAO1P,EAAQiW,WAC9FjW,EAAQkW,OAAStQ,GAAM5F,EAAQkW,OAAStQ,EAAK,KAAMA,EAAKnC,KAAKC,IAAIvE,EAAKa,EAAQkW,SAC9EsB,KACF7R,EAAOqV,GAAajb,EAAGxB,IAAKoH,GAC5BC,EAAKuV,GAAgBpb,EAAGxB,IAAKqH,IAG/B,IAAIo5B,EAAYr5B,GAAQ3F,EAAQiW,UAAYrQ,GAAM5F,EAAQkW,QACxDlW,EAAQi/B,gBAAkBvH,EAAOyG,eAAiBn+B,EAAQk/B,eAAiBxH,EAAO/T,cAhgCtF,SAAoB5jB,EAAI4F,EAAMC,GAC5B,IAAI5F,EAAUD,EAAGC,QACE,GADcA,EAAQmgB,KAChCtjB,QAAe8I,GAAQ3F,EAAQkW,QAAUtQ,GAAM5F,EAAQiW,UAC9DjW,EAAQmgB,KAAOF,GAAelgB,EAAI4F,EAAMC,GACxC5F,EAAQiW,SAAWtQ,IAEf3F,EAAQiW,SAAWtQ,EACnB3F,EAAQmgB,KAAOF,GAAelgB,EAAI4F,EAAM3F,EAAQiW,UAAUvM,OAAO1J,EAAQmgB,MACpEngB,EAAQiW,SAAWtQ,IACxB3F,EAAQmgB,KAAOngB,EAAQmgB,KAAKxjB,MAAMupB,GAAcnmB,EAAI4F,KACxD3F,EAAQiW,SAAWtQ,EACf3F,EAAQkW,OAAStQ,EACjB5F,EAAQmgB,KAAOngB,EAAQmgB,KAAKzW,OAAOuW,GAAelgB,EAAIC,EAAQkW,OAAQtQ,IACjE5F,EAAQkW,OAAStQ,IACtB5F,EAAQmgB,KAAOngB,EAAQmgB,KAAKxjB,MAAM,EAAGupB,GAAcnmB,EAAI6F,MAE7D5F,EAAQkW,OAAStQ,CACnB,EAg/BEu5B,CAAWp/B,EAAI4F,EAAMC,GAErB5F,EAAQsqB,WAAa9O,GAAa/L,GAAQ1P,EAAGxB,IAAKyB,EAAQiW,WAE1DlW,EAAGC,QAAQukB,MAAM7mB,MAAM0pB,IAAMpnB,EAAQsqB,WAAa,KAElD,IAAI8U,EAAWpQ,GAAejvB,GAC9B,IAAKi/B,GAAyB,GAAZI,IAAkB1H,EAAOsG,OAASh+B,EAAQ6+B,cAAgB7+B,EAAQmgB,OAClD,MAA7BngB,EAAQquB,mBAA6BruB,EAAQquB,mBAAqBruB,EAAQkW,QAC3E,OAAO,EAIX,IAAImpB,EAAcf,GAAkBv+B,GAuBpC,OAtBIq/B,EAAW,IAAKp/B,EAAQg0B,QAAQt2B,MAAMsC,QAAU,QA0EtD,SAAsBD,EAAIu/B,EAAmB1e,GAC3C,IAAI5gB,EAAUD,EAAGC,QAASqiB,EAActiB,EAAGkO,QAAQoU,YAC/Ckd,EAAYv/B,EAAQg0B,QAAS1tB,EAAMi5B,EAAUpiC,WAEjD,SAASqiC,EAAGjjC,GACV,IAAI8V,EAAO9V,EAAKwmB,YAMhB,OAJIloB,GAAUa,GAAOqE,EAAGC,QAAQy/B,oBAAsBljC,EAClDA,EAAKmB,MAAMsC,QAAU,OAErBzD,EAAK6B,WAAWlB,YAAYX,GACzB8V,CACT,CAKA,IAHA,IAAI8N,EAAOngB,EAAQmgB,KAAMlF,EAAQjb,EAAQiW,SAGhCnY,EAAI,EAAGA,EAAIqiB,EAAKtjB,OAAQiB,IAAK,CACpC,IAAI4e,EAAWyD,EAAKriB,GACpB,GAAI4e,EAASsD,aAAe,GAAKtD,EAASngB,MAAQmgB,EAASngB,KAAK6B,YAAcmhC,EAGvE,CACL,KAAOj5B,GAAOoW,EAASngB,MAAQ+J,EAAMk5B,EAAGl5B,GACxC,IAAIo5B,EAAerd,GAAoC,MAArBid,GAChCA,GAAqBrkB,GAASyB,EAAS8F,WACrC9F,EAASmE,UACPlf,EAAQ+a,EAASmE,QAAS,WAAa,IAAK6e,GAAe,GAC/D/e,GAAqB5gB,EAAI2c,EAAUzB,EAAO2F,IAExC8e,IACF5iC,EAAe4f,EAAS8F,YACxB9F,EAAS8F,WAAWllB,YAAY3C,SAASkD,eAAekT,GAAchR,EAAGkO,QAASgN,MAEpF3U,EAAMoW,EAASngB,KAAKwmB,WACtB,KAhByF,CACvF,IAAIxmB,EAAO0mB,GAAiBljB,EAAI2c,EAAUzB,EAAO2F,GACjD2e,EAAU7d,aAAanlB,EAAM+J,EAC/B,CAcA2U,GAASyB,EAAS/M,IACpB,CACA,KAAOrJ,GAAOA,EAAMk5B,EAAGl5B,EACzB,CAhHEq5B,CAAa5/B,EAAIC,EAAQquB,kBAAmBqJ,EAAO9W,MAC/Cwe,EAAW,IAAKp/B,EAAQg0B,QAAQt2B,MAAMsC,QAAU,IACpDA,EAAQ6+B,aAAe7+B,EAAQmgB,KApEjC,SAA0Byf,GACxB,GAAKA,GAAaA,EAASthC,WAAashC,EAASthC,WAAaA,EAAUshC,EAASthC,UAAU4B,iBAC3F0/B,EAASthC,UAAU80B,SACd,qBAAqBh5B,KAAKwlC,EAASthC,UAAUuhC,WAC9CD,EAASpB,YAAcvgC,EAAStD,SAAS8D,KAAMmhC,EAASpB,aAAevgC,EAAStD,SAAS8D,KAAMmhC,EAASjB,YAAY,CACtH,IAAIpgC,EAAMqhC,EAASthC,UAAU4B,cACzByvB,EAAMpxB,EAAI6B,YAAY4M,eAAgB3Q,EAAQkC,EAAIU,cACtD5C,EAAMiD,OAAOsgC,EAASpB,WAAYoB,EAASlB,cAC3CriC,EAAMqD,UAAS,GACfiwB,EAAImQ,kBACJnQ,EAAIoQ,SAAS1jC,GACbszB,EAAI8O,OAAOmB,EAASjB,UAAWiB,EAAShB,YAC1C,CACF,CA0DEoB,CAAiBX,GAIjBviC,EAAekD,EAAQ6yB,WACvB/1B,EAAekD,EAAQigC,cACvBjgC,EAAQkkB,QAAQxmB,MAAM4S,OAAStQ,EAAQskB,MAAM5mB,MAAM85B,UAAY,EAE3DwH,IACFh/B,EAAQi/B,eAAiBvH,EAAOyG,cAChCn+B,EAAQk/B,cAAgBxH,EAAO/T,aAC/ByS,GAAYr2B,EAAI,MAGlBC,EAAQquB,kBAAoB,MAErB,CACT,CAEA,SAAS0N,GAAkBh8B,EAAI23B,GAG7B,IAFA,IAAIlD,EAAWkD,EAAOlD,SAEb9kB,GAAQ,GAAOA,GAAQ,EAAO,CACrC,GAAKA,GAAU3P,EAAGkO,QAAQ4Y,cAAgB6Q,EAAO0G,iBAAmB9Y,GAAavlB,GAStE2P,IACTgoB,EAAOuG,QAAU1J,GAAax0B,EAAGC,QAASD,EAAGxB,IAAKi2B,SAHlD,GALIA,GAA4B,MAAhBA,EAASpN,MACrBoN,EAAW,CAACpN,IAAK3jB,KAAKC,IAAI3D,EAAGxB,IAAI+R,OAASqU,GAAY5kB,EAAGC,SAAWylB,GAAc1lB,GAAKy0B,EAASpN,OAGpGsQ,EAAOuG,QAAU1J,GAAax0B,EAAGC,QAASD,EAAGxB,IAAKi2B,GAC9CkD,EAAOuG,QAAQt4B,MAAQ5F,EAAGC,QAAQiW,UAAYyhB,EAAOuG,QAAQr4B,IAAM7F,EAAGC,QAAQkW,OAC9E,MAIN,IAAKslB,GAAsBz7B,EAAI23B,GAAW,MAC1C5D,GAAwB/zB,GACxB,IAAI07B,EAAa7E,GAAqB72B,GACtCmvB,GAAgBnvB,GAChB24B,GAAiB34B,EAAI07B,GACrBK,GAAkB/7B,EAAI07B,GACtB/D,EAAOsG,OAAQ,CACjB,CAEAtG,EAAO3tB,OAAOhK,EAAI,SAAUA,GACxBA,EAAGC,QAAQiW,UAAYlW,EAAGC,QAAQkgC,kBAAoBngC,EAAGC,QAAQkW,QAAUnW,EAAGC,QAAQmgC,iBACxFzI,EAAO3tB,OAAOhK,EAAI,iBAAkBA,EAAIA,EAAGC,QAAQiW,SAAUlW,EAAGC,QAAQkW,QACxEnW,EAAGC,QAAQkgC,iBAAmBngC,EAAGC,QAAQiW,SAAUlW,EAAGC,QAAQmgC,eAAiBpgC,EAAGC,QAAQkW,OAE9F,CAEA,SAASggB,GAAoBn2B,EAAIy0B,GAC/B,IAAIkD,EAAS,IAAI4D,GAAcv7B,EAAIy0B,GACnC,GAAIgH,GAAsBz7B,EAAI23B,GAAS,CACrC5D,GAAwB/zB,GACxBg8B,GAAkBh8B,EAAI23B,GACtB,IAAI+D,EAAa7E,GAAqB72B,GACtCmvB,GAAgBnvB,GAChB24B,GAAiB34B,EAAI07B,GACrBK,GAAkB/7B,EAAI07B,GACtB/D,EAAOuF,QACT,CACF,CA+CA,SAASmD,GAAkBpgC,GACzB,IAAI0jB,EAAQ1jB,EAAQkkB,QAAQjY,YAC5BjM,EAAQskB,MAAM5mB,MAAMqmB,WAAaL,EAAQ,KAEzCpD,GAAYtgB,EAAS,gBAAiBA,EACxC,CAEA,SAAS87B,GAAkB/7B,EAAIgM,GAC7BhM,EAAGC,QAAQskB,MAAM5mB,MAAM85B,UAAYzrB,EAAQmrB,UAAY,KACvDn3B,EAAGC,QAAQg5B,aAAat7B,MAAM0pB,IAAMrb,EAAQmrB,UAAY,KACxDn3B,EAAGC,QAAQkkB,QAAQxmB,MAAM4S,OAAUvE,EAAQmrB,UAAYn3B,EAAGC,QAAQ2lB,UAAYP,GAAUrlB,GAAO,IACjG,CAIA,SAAS42B,GAAkB52B,GACzB,IAAIC,EAAUD,EAAGC,QAASmgB,EAAOngB,EAAQmgB,KACzC,GAAKngB,EAAQqgC,cAAkBrgC,EAAQkkB,QAAQ/mB,YAAe4C,EAAGkO,QAAQ+T,YAAzE,CAGA,IAFA,IAAIse,EAAOnT,GAAqBntB,GAAWA,EAAQulB,SAASsE,WAAa9pB,EAAGxB,IAAIsrB,WAC5EgN,EAAU72B,EAAQkkB,QAAQjY,YAAaM,EAAO+zB,EAAO,KAChDxiC,EAAI,EAAGA,EAAIqiB,EAAKtjB,OAAQiB,IAAO,IAAKqiB,EAAKriB,GAAGkiB,OAAQ,CACvDjgB,EAAGkO,QAAQ+T,cACT7B,EAAKriB,GAAG+jB,SACR1B,EAAKriB,GAAG+jB,OAAOnkB,MAAM6O,KAAOA,GAC5B4T,EAAKriB,GAAGgkB,mBACR3B,EAAKriB,GAAGgkB,iBAAiBpkB,MAAM6O,KAAOA,IAE5C,IAAIg0B,EAAQpgB,EAAKriB,GAAG+kB,UACpB,GAAI0d,EAAS,IAAK,IAAIx4B,EAAI,EAAGA,EAAIw4B,EAAM1jC,OAAQkL,IAC3Cw4B,EAAMx4B,GAAGrK,MAAM6O,KAAOA,CAC5B,CACIxM,EAAGkO,QAAQ+T,cACXhiB,EAAQkkB,QAAQxmB,MAAM6O,KAAQ+zB,EAAOzJ,EAAW,KAf4C,CAgBlG,CAKA,SAASiI,GAA2B/+B,GAClC,IAAKA,EAAGkO,QAAQoU,YAAe,OAAO,EACtC,IAAI9jB,EAAMwB,EAAGxB,IAAKsT,EAAOd,GAAchR,EAAGkO,QAAS1P,EAAImR,MAAQnR,EAAIoR,KAAO,GAAI3P,EAAUD,EAAGC,QAC3F,GAAI6R,EAAKhV,QAAUmD,EAAQypB,aAAc,CACvC,IAAIrvB,EAAO4F,EAAQ+L,QAAQzO,YAAYC,EAAI,MAAO,CAACA,EAAI,MAAOsU,IACnB,gDACvC2uB,EAASpmC,EAAK+C,WAAW8O,YAAa0kB,EAAUv2B,EAAK6R,YAAcu0B,EAOvE,OANAxgC,EAAQygC,WAAW/iC,MAAMgmB,MAAQ,GACjC1jB,EAAQ0gC,kBAAoBj9B,KAAKkO,IAAI6uB,EAAQxgC,EAAQygC,WAAWx0B,YAAc0kB,GAAW,EACzF3wB,EAAQ2gC,aAAe3gC,EAAQ0gC,kBAAoB/P,EACnD3wB,EAAQypB,aAAezpB,EAAQ0gC,kBAAoB7uB,EAAKhV,QAAU,EAClEmD,EAAQygC,WAAW/iC,MAAMgmB,MAAQ1jB,EAAQ2gC,aAAe,KACxDP,GAAkBrgC,EAAGC,UACd,CACT,CACA,OAAO,CACT,CAEA,SAAS4gC,GAAW1c,EAAS7B,GAE3B,IADA,IAAI3V,EAAS,GAAIm0B,GAAiB,EACzB/iC,EAAI,EAAGA,EAAIomB,EAAQrnB,OAAQiB,IAAK,CACvC,IAAI6P,EAAOuW,EAAQpmB,GAAIJ,EAAQ,KAE/B,GADmB,iBAARiQ,IAAoBjQ,EAAQiQ,EAAKjQ,MAAOiQ,EAAOA,EAAKlR,WACnD,0BAARkR,EAAkC,CACpC,IAAK0U,EAAe,SACbwe,GAAiB,CAC1B,CACAn0B,EAAO7I,KAAK,CAACpH,UAAWkR,EAAMjQ,MAAOA,GACvC,CAEA,OADI2kB,IAAgBwe,GAAkBn0B,EAAO7I,KAAK,CAACpH,UAAW,yBAA0BiB,MAAO,OACxFgP,CACT,CAIA,SAASo0B,GAAc9gC,GACrB,IAAIkkB,EAAUlkB,EAAQkkB,QAAS6c,EAAQ/gC,EAAQ2iB,YAC/C7lB,EAAeonB,GACflkB,EAAQygC,WAAa,KACrB,IAAK,IAAI3iC,EAAI,EAAGA,EAAIijC,EAAMlkC,SAAUiB,EAAG,CACrC,IAAI6uB,EAAMoU,EAAMjjC,GACZrB,EAAYkwB,EAAIlwB,UAChBiB,EAAQivB,EAAIjvB,MACZsjC,EAAO9c,EAAQ5mB,YAAYC,EAAI,MAAO,KAAM,qBAAuBd,IACnEiB,IAASsjC,EAAKtjC,MAAME,QAAUF,GACjB,0BAAbjB,IACFuD,EAAQygC,WAAaO,EACrBA,EAAKtjC,MAAMgmB,OAAS1jB,EAAQ2gC,cAAgB,GAAK,KAErD,CACAzc,EAAQxmB,MAAMsC,QAAU+gC,EAAMlkC,OAAS,GAAK,OAC5CujC,GAAkBpgC,EACpB,CAEA,SAASihC,GAAclhC,GACrB+gC,GAAc/gC,EAAGC,SACjBmuB,GAAUpuB,GACV42B,GAAkB52B,EACpB,CAMA,SAASmhC,GAAQ5Z,EAAO/oB,EAAK0gB,EAAOhR,GAClC,IAAI6N,EAAI7Z,KACRA,KAAKgd,MAAQA,EAGbnD,EAAEod,gBAAkB37B,EAAI,MAAO,KAAM,+BACrCue,EAAEod,gBAAgBl7B,aAAa,iBAAkB,QAGjD8d,EAAEsd,aAAe77B,EAAI,MAAO,KAAM,4BAClCue,EAAEsd,aAAap7B,aAAa,iBAAkB,QAE9C8d,EAAEkY,QAAUj2B,EAAK,MAAO,KAAM,mBAE9B+d,EAAEmkB,aAAe1iC,EAAI,MAAO,KAAM,KAAM,kCACxCue,EAAE+W,UAAYt1B,EAAI,MAAO,KAAM,sBAE/Bue,EAAE/P,QAAUxO,EAAI,MAAO,KAAM,sBAE7Bue,EAAEuK,YAAc9oB,EAAI,MAAO,KAAM,sBAEjCue,EAAE2I,UAAY1mB,EAAK,MAAO,CAAC+d,EAAE/P,QAAS+P,EAAEuK,YAAavK,EAAEmkB,aAAcnkB,EAAE+W,UAAW/W,EAAEkY,SAClE,KAAM,qCACxB,IAAIlkB,EAAQ/R,EAAK,MAAO,CAAC+d,EAAE2I,WAAY,oBAEvC3I,EAAEyI,MAAQhnB,EAAI,MAAO,CAACuS,GAAQ,KAAM,sBAEpCgM,EAAEwI,MAAQ/mB,EAAI,MAAO,CAACue,EAAEyI,OAAQ,oBAChCzI,EAAEgV,WAAa,KAIfhV,EAAEkd,aAAez7B,EAAI,MAAO,KAAM,KAAM,iDAExCue,EAAEoI,QAAU3mB,EAAI,MAAO,KAAM,sBAC7Bue,EAAE2kB,WAAa,KAEf3kB,EAAEyJ,SAAWhoB,EAAI,MAAO,CAACue,EAAEwI,MAAOxI,EAAEkd,aAAcld,EAAEoI,SAAU,qBAC9DpI,EAAEyJ,SAASvnB,aAAa,WAAY,MAEpC8d,EAAE7b,QAAU1C,EAAI,MAAO,CAACue,EAAEod,gBAAiBpd,EAAEsd,aAActd,EAAEyJ,UAAW,cAIxEzJ,EAAE7b,QAAQjC,aAAa,YAAa,MAGhCvD,GAAMC,EAAa,IAAKohB,EAAEoI,QAAQxmB,MAAM0jB,QAAU,EAAGtF,EAAEyJ,SAAS7nB,MAAMwnB,aAAe,GACpFrqB,GAAYV,GAASsB,IAAWqgB,EAAEyJ,SAAS4b,WAAY,GAExD7Z,IACEA,EAAMhqB,YAAegqB,EAAMhqB,YAAYwe,EAAE7b,SACtCqnB,EAAMxL,EAAE7b,UAIjB6b,EAAE7F,SAAW6F,EAAE5F,OAAS3X,EAAImR,MAC5BoM,EAAEokB,iBAAmBpkB,EAAEqkB,eAAiB5hC,EAAImR,MAE5CoM,EAAEqE,KAAO,GACTrE,EAAE+iB,aAAe,KAGjB/iB,EAAEuB,iBAAmB,KAErBvB,EAAEwO,WAAa,EACfxO,EAAEmjB,eAAiBnjB,EAAEojB,cAAgB,EACrCpjB,EAAEuS,kBAAoB,KAEtBvS,EAAEuJ,eAAiBvJ,EAAE6J,UAAY7J,EAAE0J,SAAW,EAC9C1J,EAAEmf,mBAAoB,EAItBnf,EAAE6kB,aAAe7kB,EAAE4kB,kBAAoB5kB,EAAE2N,aAAe,KAIxD3N,EAAEukB,cAAe,EAEjBvkB,EAAEyN,gBAAkBzN,EAAE0N,iBAAmB1N,EAAE+I,eAAiB,KAI5D/I,EAAEC,QAAU,KACZD,EAAEE,cAAgB,EAClBF,EAAEG,gBAAiB,EAGnBH,EAAEslB,QAAUtlB,EAAEulB,QAAUvlB,EAAEkgB,YAAclgB,EAAEmgB,YAAc,KAGxDngB,EAAE+X,OAAQ,EAIV/X,EAAE4X,kBAAoB,KAEtB5X,EAAEwlB,YAAc,KAEhBxlB,EAAE6G,YAAcie,GAAW3yB,EAAQiW,QAASjW,EAAQoU,aACpDye,GAAchlB,GAEdmD,EAAMsiB,KAAKzlB,EACb,CAvaAwf,GAAc76B,UAAUsJ,OAAS,SAAUT,EAAShC,GAC9CqD,GAAWrB,EAAShC,IACpBrF,KAAKo8B,OAAOx6B,KAAKlD,UACvB,EACA26B,GAAc76B,UAAUw8B,OAAS,WAC/B,IAAK,IAAIn/B,EAAI,EAAGA,EAAImE,KAAKo8B,OAAOxhC,OAAQiB,IACpCiM,GAAOnJ,MAAM,KAAMqB,KAAKo8B,OAAOvgC,GACrC,EA6aA,IAAI0jC,GAAe,EAAGC,GAAqB,KAU3C,SAASC,GAAgB3kC,GACvB,IAAI4kC,EAAK5kC,EAAE6kC,YAAaC,EAAK9kC,EAAE+kC,YAI/B,OAHU,MAANH,GAAc5kC,EAAEglC,QAAUhlC,EAAEy8B,MAAQz8B,EAAEilC,kBAAmBL,EAAK5kC,EAAEglC,QAC1D,MAANF,GAAc9kC,EAAEglC,QAAUhlC,EAAEy8B,MAAQz8B,EAAEklC,cAAiBJ,EAAK9kC,EAAEglC,OACnD,MAANF,IAAcA,EAAK9kC,EAAEmlC,YACvB,CAAC3wB,EAAGowB,EAAIjW,EAAGmW,EACpB,CACA,SAASM,GAAiBplC,GACxB,IAAIqlC,EAAQV,GAAgB3kC,GAG5B,OAFAqlC,EAAM7wB,GAAKkwB,GACXW,EAAM1W,GAAK+V,GACJW,CACT,CAEA,SAASC,GAActiC,EAAIhD,GAIrBhC,GAA4B,KAAlBC,IACuB,MAA/B+E,EAAGC,QAAQsiC,iBAA4BviC,EAAGC,QAAQskB,MAAM5mB,MAAM6kC,cAAgB,OAC3E3/B,aAAa7C,EAAGC,QAAQsiC,kBAC/BviC,EAAGC,QAAQsiC,iBAAmB7/B,YAAW,WACvC1C,EAAGC,QAAQsiC,iBAAmB,KAC9BviC,EAAGC,QAAQskB,MAAM5mB,MAAM6kC,cAAgB,EACzC,GAAG,MAEL,IAAIH,EAAQV,GAAgB3kC,GAAI4kC,EAAKS,EAAM7wB,EAAGswB,EAAKO,EAAM1W,EACrD8W,EAAgBf,GACA,IAAhB1kC,EAAE0lC,YACJd,EAAK5kC,EAAE2lC,OACPb,EAAK9kC,EAAE4lC,OACPH,EAAgB,GAGlB,IAAIxiC,EAAUD,EAAGC,QAASgD,EAAShD,EAAQulB,SAEvCqd,EAAa5/B,EAAO0zB,YAAc1zB,EAAOmhB,YACzC0e,EAAa7/B,EAAOszB,aAAetzB,EAAO0iB,aAC9C,GAAMic,GAAMiB,GAAcf,GAAMgB,EAAhC,CAMA,GAAIhB,GAAMnmC,GAAOb,EACf+V,EAAO,IAAK,IAAItK,EAAMvJ,EAAEgE,OAAQof,EAAOngB,EAAQmgB,KAAM7Z,GAAOtD,EAAQsD,EAAMA,EAAIlI,WAC5E,IAAK,IAAIN,EAAI,EAAGA,EAAIqiB,EAAKtjB,OAAQiB,IAC/B,GAAIqiB,EAAKriB,GAAGvB,MAAQ+J,EAAK,CACvBvG,EAAGC,QAAQy/B,mBAAqBn5B,EAChC,MAAMsK,CACR,CAWN,GAAI+wB,IAAOxnC,IAAUc,GAA2B,MAAjBunC,EAW7B,OAVIX,GAAMgB,GACN5M,GAAgBl2B,EAAI0D,KAAKkO,IAAI,EAAG3O,EAAOinB,UAAY4X,EAAKW,IAC5DhM,GAAcz2B,EAAI0D,KAAKkO,IAAI,EAAG3O,EAAO6mB,WAAa8X,EAAKa,MAKlDX,GAAOA,GAAMgB,IACd/3B,GAAiB/N,QACrBiD,EAAQg8B,YAAc,MAMxB,GAAI6F,GAAuB,MAAjBW,EAAuB,CAC/B,IAAIM,EAASjB,EAAKW,EACdpb,EAAMrnB,EAAGxB,IAAI0rB,UAAWtB,EAAMvB,EAAMpnB,EAAQC,QAAQylB,aACpDod,EAAS,EAAK1b,EAAM3jB,KAAKkO,IAAI,EAAGyV,EAAM0b,EAAS,IAC5Cna,EAAMllB,KAAKC,IAAI3D,EAAGxB,IAAI+R,OAAQqY,EAAMma,EAAS,IACpD5M,GAAoBn2B,EAAI,CAACqnB,IAAKA,EAAKD,OAAQwB,GAC7C,CAEI6Y,GAAe,IAAsB,IAAhBzkC,EAAE0lC,YACE,MAAvBziC,EAAQg8B,aACVh8B,EAAQg8B,YAAch5B,EAAO6mB,WAAY7pB,EAAQi8B,YAAcj5B,EAAOinB,UACtEjqB,EAAQohC,QAAUO,EAAI3hC,EAAQqhC,QAAUQ,EACxCp/B,YAAW,WACT,GAA2B,MAAvBzC,EAAQg8B,YAAZ,CACA,IAAI+G,EAAS//B,EAAO6mB,WAAa7pB,EAAQg8B,YACrCgH,EAAShgC,EAAOinB,UAAYjqB,EAAQi8B,YACpCgH,EAAUD,GAAUhjC,EAAQqhC,SAAW2B,EAAShjC,EAAQqhC,SACzD0B,GAAU/iC,EAAQohC,SAAW2B,EAAS/iC,EAAQohC,QACjDphC,EAAQg8B,YAAch8B,EAAQi8B,YAAc,KACvCgH,IACLxB,IAAsBA,GAAqBD,GAAeyB,IAAWzB,GAAe,KAClFA,GARwC,CAS5C,GAAG,OAEHxhC,EAAQohC,SAAWO,EAAI3hC,EAAQqhC,SAAWQ,GA/DQ,CAkExD,CA7GIpnC,EAAMgnC,IAAsB,IACvBtnC,EAASsnC,GAAqB,GAC9B1mC,EAAU0mC,IAAsB,GAChCvmC,IAAUumC,IAAsB,EAAE,GAiH3C,IAAIyB,GAAY,SAAStT,EAAQC,GAC/B5tB,KAAK2tB,OAASA,EACd3tB,KAAK4tB,UAAYA,CACnB,EAEAqT,GAAUziC,UAAU4uB,QAAU,WAAc,OAAOptB,KAAK2tB,OAAO3tB,KAAK4tB,UAAW,EAE/EqT,GAAUziC,UAAU0iC,OAAS,SAAU/X,GACrC,GAAIA,GAASnpB,KAAQ,OAAO,EAC5B,GAAImpB,EAAMyE,WAAa5tB,KAAK4tB,WAAazE,EAAMwE,OAAO/yB,QAAUoF,KAAK2tB,OAAO/yB,OAAU,OAAO,EAC7F,IAAK,IAAIiB,EAAI,EAAGA,EAAImE,KAAK2tB,OAAO/yB,OAAQiB,IAAK,CAC3C,IAAIslC,EAAOnhC,KAAK2tB,OAAO9xB,GAAIulC,EAAQjY,EAAMwE,OAAO9xB,GAChD,IAAKuT,GAAe+xB,EAAKpW,OAAQqW,EAAMrW,UAAY3b,GAAe+xB,EAAKrT,KAAMsT,EAAMtT,MAAS,OAAO,CACrG,CACA,OAAO,CACT,EAEAmT,GAAUziC,UAAU6iC,SAAW,WAE7B,IADA,IAAIr/B,EAAM,GACDnG,EAAI,EAAGA,EAAImE,KAAK2tB,OAAO/yB,OAAQiB,IACpCmG,EAAInG,GAAK,IAAIylC,GAAMjyB,GAAQrP,KAAK2tB,OAAO9xB,GAAGkvB,QAAS1b,GAAQrP,KAAK2tB,OAAO9xB,GAAGiyB,OAC9E,OAAO,IAAImT,GAAUj/B,EAAKhC,KAAK4tB,UACjC,EAEAqT,GAAUziC,UAAU+iC,kBAAoB,WACtC,IAAK,IAAI1lC,EAAI,EAAGA,EAAImE,KAAK2tB,OAAO/yB,OAAQiB,IACpC,IAAKmE,KAAK2tB,OAAO9xB,GAAGgyB,QAAW,OAAO,EAC1C,OAAO,CACT,EAEAoT,GAAUziC,UAAUxC,SAAW,SAAUqF,EAAKnE,GACvCA,IAAOA,EAAMmE,GAClB,IAAK,IAAIxF,EAAI,EAAGA,EAAImE,KAAK2tB,OAAO/yB,OAAQiB,IAAK,CAC3C,IAAIzB,EAAQ4F,KAAK2tB,OAAO9xB,GACxB,GAAIsT,GAAIjS,EAAK9C,EAAMsJ,SAAW,GAAKyL,GAAI9N,EAAKjH,EAAMuJ,OAAS,EACvD,OAAO9H,CACb,CACA,OAAQ,CACV,EAEA,IAAIylC,GAAQ,SAASvW,EAAQ+C,GAC3B9tB,KAAK+qB,OAASA,EAAQ/qB,KAAK8tB,KAAOA,CACpC,EASA,SAAS0T,GAAmB1jC,EAAI6vB,EAAQC,GACtC,IAAI6T,EAAW3jC,GAAMA,EAAGkO,QAAQ01B,mBAC5BC,EAAOhU,EAAOC,GAClBD,EAAOiU,MAAK,SAAUhlC,EAAGC,GAAK,OAAOsS,GAAIvS,EAAE8G,OAAQ7G,EAAE6G,OAAS,IAC9DkqB,EAAYluB,EAAQiuB,EAAQgU,GAC5B,IAAK,IAAI9lC,EAAI,EAAGA,EAAI8xB,EAAO/yB,OAAQiB,IAAK,CACtC,IAAIwI,EAAMspB,EAAO9xB,GAAIuJ,EAAOuoB,EAAO9xB,EAAI,GACnCyS,EAAOa,GAAI/J,EAAKzB,KAAMU,EAAIX,QAC9B,GAAI+9B,IAAap9B,EAAIwpB,QAAUvf,EAAO,EAAIA,GAAQ,EAAG,CACnD,IAAI5K,EAAO8L,GAAOpK,EAAK1B,OAAQW,EAAIX,QAASC,EAAK4L,GAAOnK,EAAKzB,KAAMU,EAAIV,MACnEk+B,EAAMz8B,EAAKyoB,QAAUxpB,EAAIX,QAAUW,EAAIypB,KAAO1oB,EAAK1B,QAAU0B,EAAK0oB,KAClEjyB,GAAK+xB,KAAeA,EACxBD,EAAO/mB,SAAS/K,EAAG,EAAG,IAAIylC,GAAMO,EAAMl+B,EAAKD,EAAMm+B,EAAMn+B,EAAOC,GAChE,CACF,CACA,OAAO,IAAIs9B,GAAUtT,EAAQC,EAC/B,CAEA,SAASkU,GAAgB/W,EAAQ+C,GAC/B,OAAO,IAAImT,GAAU,CAAC,IAAIK,GAAMvW,EAAQ+C,GAAQ/C,IAAU,EAC5D,CAIA,SAASgX,GAAUhsB,GACjB,OAAKA,EAAO7O,KACLgI,GAAI6G,EAAOrS,KAAKuD,KAAO8O,EAAO7O,KAAKtM,OAAS,EACxCiH,EAAIkU,EAAO7O,MAAMtM,QAAgC,GAAtBmb,EAAO7O,KAAKtM,OAAcmb,EAAOrS,KAAKhB,GAAK,IAFtDqT,EAAOpS,EAGpC,CAIA,SAASq+B,GAAgB3gC,EAAK0U,GAC5B,GAAI5G,GAAI9N,EAAK0U,EAAOrS,MAAQ,EAAK,OAAOrC,EACxC,GAAI8N,GAAI9N,EAAK0U,EAAOpS,KAAO,EAAK,OAAOo+B,GAAUhsB,GAEjD,IAAI9O,EAAO5F,EAAI4F,KAAO8O,EAAO7O,KAAKtM,QAAUmb,EAAOpS,GAAGsD,KAAO8O,EAAOrS,KAAKuD,MAAQ,EAAGvE,EAAKrB,EAAIqB,GAE7F,OADIrB,EAAI4F,MAAQ8O,EAAOpS,GAAGsD,OAAQvE,GAAMq/B,GAAUhsB,GAAQrT,GAAKqT,EAAOpS,GAAGjB,IAClEwM,GAAIjI,EAAMvE,EACnB,CAEA,SAASu/B,GAAsB3lC,EAAKyZ,GAElC,IADA,IAAI/T,EAAM,GACDnG,EAAI,EAAGA,EAAIS,EAAIoxB,IAAIC,OAAO/yB,OAAQiB,IAAK,CAC9C,IAAIzB,EAAQkC,EAAIoxB,IAAIC,OAAO9xB,GAC3BmG,EAAIJ,KAAK,IAAI0/B,GAAMU,GAAgB5nC,EAAM2wB,OAAQhV,GAC9BisB,GAAgB5nC,EAAM0zB,KAAM/X,IACjD,CACA,OAAOyrB,GAAmBllC,EAAIwB,GAAIkE,EAAK1F,EAAIoxB,IAAIE,UACjD,CAEA,SAASsU,GAAU7gC,EAAKkV,EAAKC,GAC3B,OAAInV,EAAI4F,MAAQsP,EAAItP,KACTiI,GAAIsH,EAAGvP,KAAM5F,EAAIqB,GAAK6T,EAAI7T,GAAK8T,EAAG9T,IAElCwM,GAAIsH,EAAGvP,MAAQ5F,EAAI4F,KAAOsP,EAAItP,MAAO5F,EAAIqB,GACtD,CAyBA,SAASy/B,GAASrkC,GAChBA,EAAGxB,IAAIqP,KAAOI,GAAQjO,EAAGkO,QAASlO,EAAGxB,IAAI8lC,YACzCC,GAAevkC,EACjB,CAEA,SAASukC,GAAevkC,GACtBA,EAAGxB,IAAI4R,MAAK,SAAUjH,GAChBA,EAAKiM,aAAcjM,EAAKiM,WAAa,MACrCjM,EAAKwL,SAAUxL,EAAKwL,OAAS,KACnC,IACA3U,EAAGxB,IAAIgX,aAAexV,EAAGxB,IAAI+W,kBAAoBvV,EAAGxB,IAAImR,MACxD0mB,GAAYr2B,EAAI,KAChBA,EAAG6O,MAAMqF,UACLlU,EAAG0K,OAAS0jB,GAAUpuB,EAC5B,CAOA,SAASwkC,GAAkBhmC,EAAKyZ,GAC9B,OAAyB,GAAlBA,EAAOrS,KAAKhB,IAA2B,GAAhBqT,EAAOpS,GAAGjB,IAA+B,IAApBb,EAAIkU,EAAO7O,SAC1D5K,EAAIwB,IAAMxB,EAAIwB,GAAGkO,QAAQu2B,sBAC/B,CAGA,SAASC,GAAUlmC,EAAKyZ,EAAQG,EAAagE,GAC3C,SAASuoB,EAASjjC,GAAI,OAAO0W,EAAcA,EAAY1W,GAAK,IAAI,CAChE,SAASi2B,EAAOxuB,EAAMC,EAAMyO,IA9/F9B,SAAoB1O,EAAMC,EAAMgP,EAAagE,GAC3CjT,EAAKC,KAAOA,EACRD,EAAKiM,aAAcjM,EAAKiM,WAAa,MACrCjM,EAAKwL,SAAUxL,EAAKwL,OAAS,MACf,MAAdxL,EAAK/C,QAAiB+C,EAAK/C,MAAQ,MACvCsT,GAAkBvQ,GAClByQ,GAAkBzQ,EAAMiP,GACxB,IAAIsV,EAAYtR,EAAiBA,EAAejT,GAAQ,EACpDukB,GAAavkB,EAAKoH,QAAUD,GAAiBnH,EAAMukB,EACzD,EAs/FIkX,CAAWz7B,EAAMC,EAAMyO,EAAOuE,GAC9BmE,GAAYpX,EAAM,SAAUA,EAAM8O,EACpC,CACA,SAAS4sB,EAAS1lC,EAAOC,GAEvB,IADA,IAAIuN,EAAS,GACJ5O,EAAIoB,EAAOpB,EAAIqB,IAAOrB,EAC3B4O,EAAO7I,KAAK,IAAIqY,GAAK/S,EAAKrL,GAAI4mC,EAAS5mC,GAAIqe,IAC/C,OAAOzP,CACT,CAEA,IAAI/G,EAAOqS,EAAOrS,KAAMC,EAAKoS,EAAOpS,GAAIuD,EAAO6O,EAAO7O,KAClD07B,EAAYp1B,GAAQlR,EAAKoH,EAAKuD,MAAOkS,EAAW3L,GAAQlR,EAAKqH,EAAGsD,MAChE47B,EAAWhhC,EAAIqF,GAAO47B,EAAYL,EAASv7B,EAAKtM,OAAS,GAAImoC,EAASp/B,EAAGsD,KAAOvD,EAAKuD,KAGzF,GAAI8O,EAAOC,KACT1Z,EAAI0mC,OAAO,EAAGL,EAAS,EAAGz7B,EAAKtM,SAC/B0B,EAAI2mC,OAAO/7B,EAAKtM,OAAQ0B,EAAIoR,KAAOxG,EAAKtM,aACnC,GAAI0nC,GAAkBhmC,EAAKyZ,GAAS,CAGzC,IAAImtB,EAAQP,EAAS,EAAGz7B,EAAKtM,OAAS,GACtC66B,EAAOtc,EAAUA,EAASjS,KAAM47B,GAC5BC,GAAUzmC,EAAI2mC,OAAOv/B,EAAKuD,KAAM87B,GAChCG,EAAMtoC,QAAU0B,EAAI0mC,OAAOt/B,EAAKuD,KAAMi8B,EAC5C,MAAO,GAAIN,GAAazpB,EACtB,GAAmB,GAAfjS,EAAKtM,OACP66B,EAAOmN,EAAWA,EAAU17B,KAAKxM,MAAM,EAAGgJ,EAAKhB,IAAMmgC,EAAWD,EAAU17B,KAAKxM,MAAMiJ,EAAGjB,IAAKogC,OACxF,CACL,IAAIK,EAAUR,EAAS,EAAGz7B,EAAKtM,OAAS,GACxCuoC,EAAQvhC,KAAK,IAAIqY,GAAK4oB,EAAWD,EAAU17B,KAAKxM,MAAMiJ,EAAGjB,IAAKogC,EAAW5oB,IACzEub,EAAOmN,EAAWA,EAAU17B,KAAKxM,MAAM,EAAGgJ,EAAKhB,IAAMwE,EAAK,GAAIu7B,EAAS,IACvEnmC,EAAI0mC,OAAOt/B,EAAKuD,KAAO,EAAGk8B,EAC5B,MACK,GAAmB,GAAfj8B,EAAKtM,OACd66B,EAAOmN,EAAWA,EAAU17B,KAAKxM,MAAM,EAAGgJ,EAAKhB,IAAMwE,EAAK,GAAKiS,EAASjS,KAAKxM,MAAMiJ,EAAGjB,IAAK+/B,EAAS,IACpGnmC,EAAI2mC,OAAOv/B,EAAKuD,KAAO,EAAG87B,OACrB,CACLtN,EAAOmN,EAAWA,EAAU17B,KAAKxM,MAAM,EAAGgJ,EAAKhB,IAAMwE,EAAK,GAAIu7B,EAAS,IACvEhN,EAAOtc,EAAU0pB,EAAW1pB,EAASjS,KAAKxM,MAAMiJ,EAAGjB,IAAKogC,GACxD,IAAIM,EAAUT,EAAS,EAAGz7B,EAAKtM,OAAS,GACpCmoC,EAAS,GAAKzmC,EAAI2mC,OAAOv/B,EAAKuD,KAAO,EAAG87B,EAAS,GACrDzmC,EAAI0mC,OAAOt/B,EAAKuD,KAAO,EAAGm8B,EAC5B,CAEA/kB,GAAY/hB,EAAK,SAAUA,EAAKyZ,EAClC,CAGA,SAASstB,GAAW/mC,EAAK+B,EAAGilC,IAC1B,SAASC,EAAUjnC,EAAKknC,EAAMC,GAC5B,GAAInnC,EAAIonC,OAAU,IAAK,IAAI7nC,EAAI,EAAGA,EAAIS,EAAIonC,OAAO9oC,SAAUiB,EAAG,CAC5D,IAAI8nC,EAAMrnC,EAAIonC,OAAO7nC,GACrB,GAAI8nC,EAAIrnC,KAAOknC,EAAf,CACA,IAAII,EAASH,GAAcE,EAAIF,WAC3BH,IAAmBM,IACvBvlC,EAAEslC,EAAIrnC,IAAKsnC,GACXL,EAAUI,EAAIrnC,IAAKA,EAAKsnC,GAJQ,CAKlC,CACF,CACAL,CAAUjnC,EAAK,MAAM,EACvB,CAGA,SAASunC,GAAU/lC,EAAIxB,GACrB,GAAIA,EAAIwB,GAAM,MAAM,IAAI6P,MAAM,oCAC9B7P,EAAGxB,IAAMA,EACTA,EAAIwB,GAAKA,EACTwtB,GAAoBxtB,GACpBqkC,GAASrkC,GACTgmC,GAAkBhmC,GAClBA,EAAGkO,QAAQlH,UAAYxI,EAAIwI,UACtBhH,EAAGkO,QAAQ4Y,cAAgBhL,GAAY9b,GAC5CA,EAAGkO,QAAQL,KAAOrP,EAAI8lC,WACtBlW,GAAUpuB,EACZ,CAEA,SAASgmC,GAAkBhmC,IACN,OAApBA,EAAGxB,IAAIwI,UAAqBpI,EAAWrC,GAASyD,EAAGC,QAAQg0B,QAAS,iBACrE,CASA,SAASgS,GAAQ3+B,GAIfpF,KAAKgkC,KAAO,GAAIhkC,KAAKikC,OAAS,GAC9BjkC,KAAKkkC,UAAY9+B,EAAOA,EAAK8+B,UAAY1mB,IAGzCxd,KAAKmkC,YAAcnkC,KAAKokC,YAAc,EACtCpkC,KAAKqkC,OAASrkC,KAAKskC,UAAY,KAC/BtkC,KAAKukC,WAAavkC,KAAKwkC,cAAgB,KAEvCxkC,KAAKykC,WAAazkC,KAAK0kC,cAAgBt/B,EAAOA,EAAKs/B,cAAgB,CACrE,CAIA,SAASC,GAAwBroC,EAAKyZ,GACpC,IAAI6uB,EAAa,CAAClhC,KAAM2L,GAAQ0G,EAAOrS,MAAOC,GAAIo+B,GAAUhsB,GAAS7O,KAAM+G,GAAW3R,EAAKyZ,EAAOrS,KAAMqS,EAAOpS,KAG/G,OAFAkhC,GAAiBvoC,EAAKsoC,EAAY7uB,EAAOrS,KAAKuD,KAAM8O,EAAOpS,GAAGsD,KAAO,GACrEo8B,GAAW/mC,GAAK,SAAUA,GAAO,OAAOuoC,GAAiBvoC,EAAKsoC,EAAY7uB,EAAOrS,KAAKuD,KAAM8O,EAAOpS,GAAGsD,KAAO,EAAI,IAAG,GAC7G29B,CACT,CAIA,SAASE,GAAqBzkC,GAC5B,KAAOA,EAAMzF,QACAiH,EAAIxB,GACNstB,QAAUttB,EAAM0kC,KAG7B,CAmBA,SAASC,GAAmB1oC,EAAKyZ,EAAQkvB,EAAUC,GACjD,IAAIC,EAAO7oC,EAAI8oC,QACfD,EAAKlB,OAAOrpC,OAAS,EACrB,IAAsByJ,EAClBuL,EADA1P,GAAQ,IAAIK,KAGhB,IAAK4kC,EAAKd,QAAUa,GACfC,EAAKZ,YAAcxuB,EAAO9U,QAAU8U,EAAO9U,SACd,KAA3B8U,EAAO9U,OAAOsC,OAAO,IAAa4hC,EAAKhB,YAAcjkC,GAAQ5D,EAAIwB,GAAKxB,EAAIwB,GAAGkO,QAAQq5B,kBAAoB,MAC/E,KAA3BtvB,EAAO9U,OAAOsC,OAAO,OACtBc,EAzBP,SAAyB8gC,EAAMpJ,GAC7B,OAAIA,GACF+I,GAAqBK,EAAKnB,MACnBniC,EAAIsjC,EAAKnB,OACPmB,EAAKnB,KAAKppC,SAAWiH,EAAIsjC,EAAKnB,MAAMrW,OACtC9rB,EAAIsjC,EAAKnB,MACPmB,EAAKnB,KAAKppC,OAAS,IAAMuqC,EAAKnB,KAAKmB,EAAKnB,KAAKppC,OAAS,GAAG+yB,QAClEwX,EAAKnB,KAAKe,MACHljC,EAAIsjC,EAAKnB,YAFX,CAIT,CAeasB,CAAgBH,EAAMA,EAAKd,QAAUa,IAE9Ct1B,EAAO/N,EAAIwC,EAAIua,SACoB,GAA/BzP,GAAI4G,EAAOrS,KAAMqS,EAAOpS,KAAyC,GAA7BwL,GAAI4G,EAAOrS,KAAMkM,EAAKjM,IAG5DiM,EAAKjM,GAAKo+B,GAAUhsB,GAGpB1R,EAAIua,QAAQhd,KAAK+iC,GAAwBroC,EAAKyZ,QAE3C,CAEL,IAAI3P,EAASvE,EAAIsjC,EAAKnB,MAMtB,IALK59B,GAAWA,EAAOunB,QACnB4X,GAAuBjpC,EAAIoxB,IAAKyX,EAAKnB,MACzC3/B,EAAM,CAACua,QAAS,CAAC+lB,GAAwBroC,EAAKyZ,IACvC0uB,WAAYU,EAAKV,YACxBU,EAAKnB,KAAKpiC,KAAKyC,GACR8gC,EAAKnB,KAAKppC,OAASuqC,EAAKjB,WAC7BiB,EAAKnB,KAAKpS,QACLuT,EAAKnB,KAAK,GAAGrW,QAAUwX,EAAKnB,KAAKpS,OAE1C,CACAuT,EAAKnB,KAAKpiC,KAAKqjC,GACfE,EAAKV,aAAeU,EAAKT,cACzBS,EAAKhB,YAAcgB,EAAKf,YAAclkC,EACtCilC,EAAKd,OAASc,EAAKb,UAAYY,EAC/BC,EAAKZ,WAAaY,EAAKX,cAAgBzuB,EAAO9U,OAEzC2O,GAAQ9H,GAAOxL,EAAK,eAC3B,CAeA,SAASkpC,GAAsBlpC,EAAKoxB,EAAKwX,EAAMl5B,GAC7C,IAAIm5B,EAAO7oC,EAAI8oC,QAASnkC,EAAS+K,GAAWA,EAAQ/K,OAMhDikC,GAAQC,EAAKb,WACZrjC,GAAUkkC,EAAKX,eAAiBvjC,IAC/BkkC,EAAKhB,aAAegB,EAAKf,aAAee,EAAKZ,YAActjC,GAtBnE,SAAmC3E,EAAK2E,EAAQmE,EAAMsoB,GACpD,IAAIhrB,EAAKzB,EAAOsC,OAAO,GACvB,MAAa,KAANb,GACC,KAANA,GACA0C,EAAKuoB,OAAO/yB,QAAU8yB,EAAIC,OAAO/yB,QACjCwK,EAAKm8B,qBAAuB7T,EAAI6T,qBAChC,IAAIhhC,KAAOjE,EAAI8oC,QAAQhB,cAAgB9nC,EAAIwB,GAAKxB,EAAIwB,GAAGkO,QAAQq5B,kBAAoB,IACvF,CAgBQI,CAA0BnpC,EAAK2E,EAAQY,EAAIsjC,EAAKnB,MAAOtW,IACzDyX,EAAKnB,KAAKmB,EAAKnB,KAAKppC,OAAS,GAAK8yB,EAElC6X,GAAuB7X,EAAKyX,EAAKnB,MAErCmB,EAAKf,aAAe,IAAI7jC,KACxB4kC,EAAKX,cAAgBvjC,EACrBkkC,EAAKb,UAAYY,EACbl5B,IAAiC,IAAtBA,EAAQ05B,WACnBZ,GAAqBK,EAAKlB,OAChC,CAEA,SAASsB,GAAuB7X,EAAKiY,GACnC,IAAIxgB,EAAMtjB,EAAI8jC,GACRxgB,GAAOA,EAAIwI,QAAUxI,EAAI+b,OAAOxT,IAClCiY,EAAK/jC,KAAK8rB,EAChB,CAGA,SAASmX,GAAiBvoC,EAAKyZ,EAAQrS,EAAMC,GAC3C,IAAIiiC,EAAW7vB,EAAO,SAAWzZ,EAAI2D,IAAKT,EAAI,EAC9ClD,EAAI4R,KAAK1M,KAAKkO,IAAIpT,EAAImR,MAAO/J,GAAOlC,KAAKC,IAAInF,EAAImR,MAAQnR,EAAIoR,KAAM/J,IAAK,SAAUsD,GAC5EA,EAAKiP,eACJ0vB,IAAaA,EAAW7vB,EAAO,SAAWzZ,EAAI2D,IAAM,CAAC,IAAIT,GAAKyH,EAAKiP,eACtE1W,CACJ,GACF,CAIA,SAASqmC,GAAmBlwB,GAC1B,IAAKA,EAAS,OAAO,KAErB,IADA,IAAI3T,EACKnG,EAAI,EAAGA,EAAI8Z,EAAM/a,SAAUiB,EAC9B8Z,EAAM9Z,GAAG4Z,OAAOqwB,kBAA0B9jC,IAAOA,EAAM2T,EAAMjb,MAAM,EAAGmB,IACjEmG,GAAOA,EAAIJ,KAAK+T,EAAM9Z,IAEjC,OAAQmG,EAAcA,EAAIpH,OAASoH,EAAM,KAA3B2T,CAChB,CAgBA,SAASowB,GAAczpC,EAAKyZ,GAC1B,IAAIQ,EAdN,SAAqBja,EAAKyZ,GACxB,IAAI3R,EAAQ2R,EAAO,SAAWzZ,EAAI2D,IAClC,IAAKmE,EAAS,OAAO,KAErB,IADA,IAAIoS,EAAK,GACA3a,EAAI,EAAGA,EAAIka,EAAO7O,KAAKtM,SAAUiB,EACtC2a,EAAG5U,KAAKikC,GAAmBzhC,EAAMvI,KACrC,OAAO2a,CACT,CAOYwvB,CAAY1pC,EAAKyZ,GACvBkwB,EAAYnwB,GAAuBxZ,EAAKyZ,GAC5C,IAAKQ,EAAO,OAAO0vB,EACnB,IAAKA,EAAa,OAAO1vB,EAEzB,IAAK,IAAI1a,EAAI,EAAGA,EAAI0a,EAAI3b,SAAUiB,EAAG,CACnC,IAAIqqC,EAAS3vB,EAAI1a,GAAIsqC,EAAaF,EAAUpqC,GAC5C,GAAIqqC,GAAUC,EACZxwB,EAAO,IAAK,IAAI7P,EAAI,EAAGA,EAAIqgC,EAAWvrC,SAAUkL,EAAG,CAEjD,IADA,IAAI8P,EAAOuwB,EAAWrgC,GACb2a,EAAI,EAAGA,EAAIylB,EAAOtrC,SAAU6lB,EACjC,GAAIylB,EAAOzlB,GAAGhL,QAAUG,EAAKH,OAAU,SAASE,EACpDuwB,EAAOtkC,KAAKgU,EACd,MACSuwB,IACT5vB,EAAI1a,GAAKsqC,EAEb,CACA,OAAO5vB,CACT,CAIA,SAAS6vB,GAAiBhK,EAAQiK,EAAUC,GAE1C,IADA,IAAI7xB,EAAO,GACF5Y,EAAI,EAAGA,EAAIugC,EAAOxhC,SAAUiB,EAAG,CACtC,IAAI0qC,EAAQnK,EAAOvgC,GACnB,GAAI0qC,EAAM5Y,OACRlZ,EAAK7S,KAAK0kC,EAAiBrF,GAAUziC,UAAU6iC,SAAS5iC,KAAK8nC,GAASA,OADxE,CAIA,IAAI3nB,EAAU2nB,EAAM3nB,QAAS4nB,EAAa,GAC1C/xB,EAAK7S,KAAK,CAACgd,QAAS4nB,IACpB,IAAK,IAAI1gC,EAAI,EAAGA,EAAI8Y,EAAQhkB,SAAUkL,EAAG,CACvC,IAAIiQ,EAAS6I,EAAQ9Y,GAAIS,OAAI,EAE7B,GADAigC,EAAW5kC,KAAK,CAAC8B,KAAMqS,EAAOrS,KAAMC,GAAIoS,EAAOpS,GAAIuD,KAAM6O,EAAO7O,OAC5Dm/B,EAAY,IAAK,IAAIrnC,KAAQ+W,GAAcxP,EAAIvH,EAAKnF,MAAM,mBACxD6F,EAAQ2mC,EAAUvsC,OAAOyM,EAAE,MAAQ,IACrC1E,EAAI2kC,GAAYxnC,GAAQ+W,EAAO/W,UACxB+W,EAAO/W,GAGpB,CAZA,CAaF,CACA,OAAOyV,CACT,CAUA,SAASgyB,GAAYrsC,EAAO0zB,EAAM3E,EAAOqT,GACvC,GAAIA,EAAQ,CACV,IAAIzR,EAAS3wB,EAAM2wB,OACnB,GAAI5B,EAAO,CACT,IAAIud,EAAYv3B,GAAI2e,EAAM/C,GAAU,EAChC2b,GAAcv3B,GAAIga,EAAO4B,GAAU,GACrCA,EAAS+C,EACTA,EAAO3E,GACEud,GAAcv3B,GAAI2e,EAAM3E,GAAS,IAC1C2E,EAAO3E,EAEX,CACA,OAAO,IAAImY,GAAMvW,EAAQ+C,EAC3B,CACE,OAAO,IAAIwT,GAAMnY,GAAS2E,EAAMA,EAEpC,CAGA,SAAS6Y,GAAgBrqC,EAAKwxB,EAAM3E,EAAOnd,EAASwwB,GACpC,MAAVA,IAAkBA,EAASlgC,EAAIwB,KAAOxB,EAAIwB,GAAGC,QAAQ6zB,OAASt1B,EAAIkgC,SACtEoK,GAAatqC,EAAK,IAAI2kC,GAAU,CAACwF,GAAYnqC,EAAIoxB,IAAIN,UAAWU,EAAM3E,EAAOqT,IAAU,GAAIxwB,EAC7F,CAIA,SAAS66B,GAAiBvqC,EAAKwqC,EAAO96B,GAGpC,IAFA,IAAIhK,EAAM,GACNw6B,EAASlgC,EAAIwB,KAAOxB,EAAIwB,GAAGC,QAAQ6zB,OAASt1B,EAAIkgC,QAC3C3gC,EAAI,EAAGA,EAAIS,EAAIoxB,IAAIC,OAAO/yB,OAAQiB,IACvCmG,EAAInG,GAAK4qC,GAAYnqC,EAAIoxB,IAAIC,OAAO9xB,GAAIirC,EAAMjrC,GAAI,KAAM2gC,GAE5DoK,GAAatqC,EADAklC,GAAmBllC,EAAIwB,GAAIkE,EAAK1F,EAAIoxB,IAAIE,WAC3B5hB,EAC5B,CAGA,SAAS+6B,GAAoBzqC,EAAKT,EAAGzB,EAAO4R,GAC1C,IAAI2hB,EAASrxB,EAAIoxB,IAAIC,OAAOjzB,MAAM,GAClCizB,EAAO9xB,GAAKzB,EACZwsC,GAAatqC,EAAKklC,GAAmBllC,EAAIwB,GAAI6vB,EAAQrxB,EAAIoxB,IAAIE,WAAY5hB,EAC3E,CAGA,SAASg7B,GAAmB1qC,EAAKyuB,EAAQ+C,EAAM9hB,GAC7C46B,GAAatqC,EAAKwlC,GAAgB/W,EAAQ+C,GAAO9hB,EACnD,CAqBA,SAASi7B,GAA2B3qC,EAAKoxB,EAAK1hB,GAC5C,IAAIg4B,EAAO1nC,EAAI8oC,QAAQpB,KAAMp0B,EAAO/N,EAAImiC,GACpCp0B,GAAQA,EAAK+d,QACfqW,EAAKA,EAAKppC,OAAS,GAAK8yB,EACxBwZ,GAAmB5qC,EAAKoxB,EAAK1hB,IAE7B46B,GAAatqC,EAAKoxB,EAAK1hB,EAE3B,CAGA,SAAS46B,GAAatqC,EAAKoxB,EAAK1hB,GAC9Bk7B,GAAmB5qC,EAAKoxB,EAAK1hB,GAC7Bw5B,GAAsBlpC,EAAKA,EAAIoxB,IAAKpxB,EAAIwB,GAAKxB,EAAIwB,GAAG0K,MAAMvI,GAAKknC,IAAKn7B,EACtE,CAEA,SAASk7B,GAAmB5qC,EAAKoxB,EAAK1hB,IAChCtD,GAAWpM,EAAK,0BAA4BA,EAAIwB,IAAM4K,GAAWpM,EAAIwB,GAAI,4BACzE4vB,EAnCN,SAA+BpxB,EAAKoxB,EAAK1hB,GACvC,IAAInN,EAAM,CACR8uB,OAAQD,EAAIC,OACZ8H,OAAQ,SAAS9H,GACf3tB,KAAK2tB,OAAS,GACd,IAAK,IAAI9xB,EAAI,EAAGA,EAAI8xB,EAAO/yB,OAAQiB,IAC/BmE,KAAK2tB,OAAO9xB,GAAK,IAAIylC,GAAM3xB,GAAQrT,EAAKqxB,EAAO9xB,GAAGkvB,QACzBpb,GAAQrT,EAAKqxB,EAAO9xB,GAAGiyB,MACtD,EACA7sB,OAAQ+K,GAAWA,EAAQ/K,QAI7B,OAFA6G,GAAOxL,EAAK,wBAAyBA,EAAKuC,GACtCvC,EAAIwB,IAAMgK,GAAOxL,EAAIwB,GAAI,wBAAyBxB,EAAIwB,GAAIe,GAC1DA,EAAI8uB,QAAUD,EAAIC,OAAiB6T,GAAmBllC,EAAIwB,GAAIe,EAAI8uB,OAAQ9uB,EAAI8uB,OAAO/yB,OAAS,GACpF8yB,CAChB,CAoBY0Z,CAAsB9qC,EAAKoxB,EAAK1hB,IAE1C,IAAI6X,EAAO7X,GAAWA,EAAQ6X,OAC3B1U,GAAIue,EAAIN,UAAUU,KAAMxxB,EAAIoxB,IAAIN,UAAUU,MAAQ,GAAK,EAAI,GAC9DuZ,GAAkB/qC,EAAKgrC,GAAsBhrC,EAAKoxB,EAAK7J,GAAM,IAEvD7X,IAA8B,IAAnBA,EAAQjL,SAAqBzE,EAAIwB,IAAsC,YAAhCxB,EAAIwB,GAAGgd,UAAU,aACrE0Y,GAAoBl3B,EAAIwB,GAC9B,CAEA,SAASupC,GAAkB/qC,EAAKoxB,GAC1BA,EAAIwT,OAAO5kC,EAAIoxB,OAEnBpxB,EAAIoxB,IAAMA,EAENpxB,EAAIwB,KACNxB,EAAIwB,GAAG0K,MAAMmvB,YAAc,EAC3Br7B,EAAIwB,GAAG0K,MAAMuvB,kBAAmB,EAChCzvB,GAAqBhM,EAAIwB,KAE3BugB,GAAY/hB,EAAK,iBAAkBA,GACrC,CAIA,SAASirC,GAAiBjrC,GACxB+qC,GAAkB/qC,EAAKgrC,GAAsBhrC,EAAKA,EAAIoxB,IAAK,MAAM,GACnE,CAIA,SAAS4Z,GAAsBhrC,EAAKoxB,EAAK7J,EAAM2jB,GAE7C,IADA,IAAIxlC,EACKnG,EAAI,EAAGA,EAAI6xB,EAAIC,OAAO/yB,OAAQiB,IAAK,CAC1C,IAAIzB,EAAQszB,EAAIC,OAAO9xB,GACnB0a,EAAMmX,EAAIC,OAAO/yB,QAAU0B,EAAIoxB,IAAIC,OAAO/yB,QAAU0B,EAAIoxB,IAAIC,OAAO9xB,GACnE4rC,EAAYC,GAAWprC,EAAKlC,EAAM2wB,OAAQxU,GAAOA,EAAIwU,OAAQlH,EAAM2jB,GACnEG,EAAUvtC,EAAM0zB,MAAQ1zB,EAAM2wB,OAAS0c,EAAYC,GAAWprC,EAAKlC,EAAM0zB,KAAMvX,GAAOA,EAAIuX,KAAMjK,EAAM2jB,IACtGxlC,GAAOylC,GAAartC,EAAM2wB,QAAU4c,GAAWvtC,EAAM0zB,QAClD9rB,IAAOA,EAAM0rB,EAAIC,OAAOjzB,MAAM,EAAGmB,IACtCmG,EAAInG,GAAK,IAAIylC,GAAMmG,EAAWE,GAElC,CACA,OAAO3lC,EAAMw/B,GAAmBllC,EAAIwB,GAAIkE,EAAK0rB,EAAIE,WAAaF,CAChE,CAEA,SAASka,GAAgBtrC,EAAK+E,EAAKwmC,EAAQvkC,EAAKkkC,GAC9C,IAAIvgC,EAAOuG,GAAQlR,EAAK+E,EAAI4F,MAC5B,GAAIA,EAAKiP,YAAe,IAAK,IAAIra,EAAI,EAAGA,EAAIoL,EAAKiP,YAAYtb,SAAUiB,EAAG,CACxE,IAAIyc,EAAKrR,EAAKiP,YAAYra,GAAI0K,EAAI+R,EAAG7C,OAKjCqyB,EAAqB,eAAgBvhC,GAAMA,EAAEwhC,WAAaxhC,EAAEkQ,cAC5DuxB,EAAsB,gBAAiBzhC,GAAMA,EAAE0hC,YAAc1hC,EAAEqQ,eAEnE,IAAgB,MAAX0B,EAAG5U,OAAiBokC,EAAoBxvB,EAAG5U,MAAQrC,EAAIqB,GAAK4V,EAAG5U,KAAOrC,EAAIqB,OACjE,MAAT4V,EAAG3U,KAAeqkC,EAAqB1vB,EAAG3U,IAAMtC,EAAIqB,GAAK4V,EAAG3U,GAAKtC,EAAIqB,KAAM,CAC9E,GAAI8kC,IACF1/B,GAAOvB,EAAG,qBACNA,EAAEu/B,mBAAmB,CACvB,GAAK7+B,EAAKiP,YACL,GAAGra,EAAG,QAAQ,CADM,KAE3B,CAEF,IAAK0K,EAAE2hC,OAAU,SAEjB,GAAIL,EAAQ,CACV,IAAIM,EAAO5hC,EAAE0R,KAAK3U,EAAM,EAAI,GAAK,GAAIgL,OAAO,EAG5C,IAFIhL,EAAM,EAAI0kC,EAAqBF,KAC/BK,EAAOC,GAAQ9rC,EAAK6rC,GAAO7kC,EAAK6kC,GAAQA,EAAKlhC,MAAQ5F,EAAI4F,KAAOA,EAAO,OACvEkhC,GAAQA,EAAKlhC,MAAQ5F,EAAI4F,OAASqH,EAAOa,GAAIg5B,EAAMN,MAAavkC,EAAM,EAAIgL,EAAO,EAAIA,EAAO,GAC5F,OAAOs5B,GAAgBtrC,EAAK6rC,EAAM9mC,EAAKiC,EAAKkkC,EAClD,CAEA,IAAIa,EAAM9hC,EAAE0R,KAAK3U,EAAM,GAAK,EAAI,GAGhC,OAFIA,EAAM,EAAIwkC,EAAoBE,KAC9BK,EAAMD,GAAQ9rC,EAAK+rC,EAAK/kC,EAAK+kC,EAAIphC,MAAQ5F,EAAI4F,KAAOA,EAAO,OACxDohC,EAAMT,GAAgBtrC,EAAK+rC,EAAKhnC,EAAKiC,EAAKkkC,GAAY,IAC/D,CACF,CACA,OAAOnmC,CACT,CAGA,SAASqmC,GAAWprC,EAAK+E,EAAKwmC,EAAQhkB,EAAM2jB,GAC1C,IAAIlkC,EAAMugB,GAAQ,EAKlB,OAJY+jB,GAAgBtrC,EAAK+E,EAAKwmC,EAAQvkC,EAAKkkC,KAC7CA,GAAYI,GAAgBtrC,EAAK+E,EAAKwmC,EAAQvkC,GAAK,IACrDskC,GAAgBtrC,EAAK+E,EAAKwmC,GAASvkC,EAAKkkC,KACtCA,GAAYI,GAAgBtrC,EAAK+E,EAAKwmC,GAASvkC,GAAK,KAExDhH,EAAIgsC,UAAW,EACRp5B,GAAI5S,EAAImR,MAAO,GAG1B,CAEA,SAAS26B,GAAQ9rC,EAAK+E,EAAKiC,EAAK2D,GAC9B,OAAI3D,EAAM,GAAe,GAAVjC,EAAIqB,GACbrB,EAAI4F,KAAO3K,EAAImR,MAAgBkC,GAAQrT,EAAK4S,GAAI7N,EAAI4F,KAAO,IACjD,KACL3D,EAAM,GAAKjC,EAAIqB,KAAOuE,GAAQuG,GAAQlR,EAAK+E,EAAI4F,OAAOC,KAAKtM,OAChEyG,EAAI4F,KAAO3K,EAAImR,MAAQnR,EAAIoR,KAAO,EAAYwB,GAAI7N,EAAI4F,KAAO,EAAG,GACtD,KAEP,IAAIiI,GAAI7N,EAAI4F,KAAM5F,EAAIqB,GAAKY,EAEtC,CAEA,SAASilC,GAAUzqC,GACjBA,EAAG8oC,aAAa13B,GAAIpR,EAAG8kC,YAAa,GAAI1zB,GAAIpR,EAAGqb,YAAarY,EAC9D,CAKA,SAAS0nC,GAAalsC,EAAKyZ,EAAQ0f,GACjC,IAAI52B,EAAM,CACR4pC,UAAU,EACV/kC,KAAMqS,EAAOrS,KACbC,GAAIoS,EAAOpS,GACXuD,KAAM6O,EAAO7O,KACbjG,OAAQ8U,EAAO9U,OACfynC,OAAQ,WAAc,OAAO7pC,EAAI4pC,UAAW,CAAM,GAWpD,OATIhT,IAAU52B,EAAI42B,OAAS,SAAU/xB,EAAMC,EAAIuD,EAAMjG,GAC/CyC,IAAQ7E,EAAI6E,KAAOiM,GAAQrT,EAAKoH,IAChCC,IAAM9E,EAAI8E,GAAKgM,GAAQrT,EAAKqH,IAC5BuD,IAAQrI,EAAIqI,KAAOA,QACRiJ,IAAXlP,IAAwBpC,EAAIoC,OAASA,EAC3C,GACA6G,GAAOxL,EAAK,eAAgBA,EAAKuC,GAC7BvC,EAAIwB,IAAMgK,GAAOxL,EAAIwB,GAAI,eAAgBxB,EAAIwB,GAAIe,GAEjDA,EAAI4pC,UACFnsC,EAAIwB,KAAMxB,EAAIwB,GAAG0K,MAAMmvB,YAAc,GAClC,MAEF,CAACj0B,KAAM7E,EAAI6E,KAAMC,GAAI9E,EAAI8E,GAAIuD,KAAMrI,EAAIqI,KAAMjG,OAAQpC,EAAIoC,OAClE,CAIA,SAAS0nC,GAAWrsC,EAAKyZ,EAAQ6yB,GAC/B,GAAItsC,EAAIwB,GAAI,CACV,IAAKxB,EAAIwB,GAAG0K,MAAS,OAAO0yB,GAAU5+B,EAAIwB,GAAI6qC,GAAlBzN,CAA8B5+B,EAAKyZ,EAAQ6yB,GACvE,GAAItsC,EAAIwB,GAAG6O,MAAMk8B,cAAiB,MACpC,CAEA,KAAIngC,GAAWpM,EAAK,iBAAmBA,EAAIwB,IAAM4K,GAAWpM,EAAIwB,GAAI,mBAClEiY,EAASyyB,GAAalsC,EAAKyZ,GAAQ,IADrC,CAOA,IAAIhZ,EAAQuY,KAAqBszB,GA5yHnC,SAA8BtsC,EAAKoH,EAAMC,GACvC,IAAIuc,EAAU,KAQd,GAPA5jB,EAAI4R,KAAKxK,EAAKuD,KAAMtD,EAAGsD,KAAO,GAAG,SAAUA,GACzC,GAAIA,EAAKiP,YAAe,IAAK,IAAIra,EAAI,EAAGA,EAAIoL,EAAKiP,YAAYtb,SAAUiB,EAAG,CACxE,IAAIitC,EAAO7hC,EAAKiP,YAAYra,GAAG4Z,QAC3BqzB,EAAKtX,UAActR,IAAsC,GAA3BxgB,EAAQwgB,EAAS4oB,KAC9C5oB,IAAYA,EAAU,KAAKte,KAAKknC,EACvC,CACF,KACK5oB,EAAW,OAAO,KAEvB,IADA,IAAI6oB,EAAQ,CAAC,CAACrlC,KAAMA,EAAMC,GAAIA,IACrB9H,EAAI,EAAGA,EAAIqkB,EAAQtlB,SAAUiB,EAEpC,IADA,IAAImtC,EAAK9oB,EAAQrkB,GAAI0K,EAAIyiC,EAAG/wB,KAAK,GACxBnS,EAAI,EAAGA,EAAIijC,EAAMnuC,SAAUkL,EAAG,CACrC,IAAI2T,EAAIsvB,EAAMjjC,GACd,KAAIqJ,GAAIsK,EAAE9V,GAAI4C,EAAE7C,MAAQ,GAAKyL,GAAIsK,EAAE/V,KAAM6C,EAAE5C,IAAM,GAAjD,CACA,IAAIslC,EAAW,CAACnjC,EAAG,GAAIojC,EAAQ/5B,GAAIsK,EAAE/V,KAAM6C,EAAE7C,MAAOylC,EAAMh6B,GAAIsK,EAAE9V,GAAI4C,EAAE5C,KAClEulC,EAAQ,IAAMF,EAAGvyB,gBAAkByyB,IACnCD,EAASrnC,KAAK,CAAC8B,KAAM+V,EAAE/V,KAAMC,GAAI4C,EAAE7C,QACnCylC,EAAM,IAAMH,EAAGpyB,iBAAmBuyB,IAClCF,EAASrnC,KAAK,CAAC8B,KAAM6C,EAAE5C,GAAIA,GAAI8V,EAAE9V,KACrColC,EAAMniC,OAAOjI,MAAMoqC,EAAOE,GAC1BnjC,GAAKmjC,EAASruC,OAAS,CAPwC,CAQjE,CAEF,OAAOmuC,CACT,CAkxHqDK,CAAqB9sC,EAAKyZ,EAAOrS,KAAMqS,EAAOpS,IACjG,GAAI5G,EACF,IAAK,IAAIlB,EAAIkB,EAAMnC,OAAS,EAAGiB,GAAK,IAAKA,EACrCwtC,GAAgB/sC,EAAK,CAACoH,KAAM3G,EAAMlB,GAAG6H,KAAMC,GAAI5G,EAAMlB,GAAG8H,GAAIuD,KAAMrL,EAAI,CAAC,IAAMka,EAAO7O,KAAMjG,OAAQ8U,EAAO9U,cAE7GooC,GAAgB/sC,EAAKyZ,EATvB,CAWF,CAEA,SAASszB,GAAgB/sC,EAAKyZ,GAC5B,GAA0B,GAAtBA,EAAO7O,KAAKtM,QAAiC,IAAlBmb,EAAO7O,KAAK,IAA2C,GAA/BiI,GAAI4G,EAAOrS,KAAMqS,EAAOpS,IAA/E,CACA,IAAIshC,EAAWhD,GAAsB3lC,EAAKyZ,GAC1CivB,GAAmB1oC,EAAKyZ,EAAQkvB,EAAU3oC,EAAIwB,GAAKxB,EAAIwB,GAAG0K,MAAMvI,GAAKknC,KAErEmC,GAAoBhtC,EAAKyZ,EAAQkvB,EAAUnvB,GAAuBxZ,EAAKyZ,IACvE,IAAIwzB,EAAU,GAEdlG,GAAW/mC,GAAK,SAAUA,EAAKmnC,GACxBA,IAAgD,GAAlC/jC,EAAQ6pC,EAASjtC,EAAI8oC,WACtCoE,GAAWltC,EAAI8oC,QAASrvB,GACxBwzB,EAAQ3nC,KAAKtF,EAAI8oC,UAEnBkE,GAAoBhtC,EAAKyZ,EAAQ,KAAMD,GAAuBxZ,EAAKyZ,GACrE,GAbkG,CAcpG,CAGA,SAAS0zB,GAAsBntC,EAAK+I,EAAMqkC,GACxC,IAAIC,EAAWrtC,EAAIwB,IAAMxB,EAAIwB,GAAG6O,MAAMk8B,cACtC,IAAIc,GAAaD,EAAjB,CAQA,IANA,IAAwBnD,EAApBpB,EAAO7oC,EAAI8oC,QAAgBH,EAAW3oC,EAAIoxB,IAC1C3qB,EAAiB,QAARsC,EAAiB8/B,EAAKnB,KAAOmB,EAAKlB,OAAQ0B,EAAe,QAARtgC,EAAiB8/B,EAAKlB,OAASkB,EAAKnB,KAI9FnoC,EAAI,EACDA,EAAIkH,EAAOnI,SAChB2rC,EAAQxjC,EAAOlH,GACX6tC,GAAqBnD,EAAM5Y,QAAW4Y,EAAMrF,OAAO5kC,EAAIoxB,KAAQ6Y,EAAM5Y,QAFjD9xB,KAK1B,GAAIA,GAAKkH,EAAOnI,OAAhB,CAGA,IAFAuqC,EAAKZ,WAAaY,EAAKX,cAAgB,OAE9B,CAEP,KADA+B,EAAQxjC,EAAOgiC,OACLpX,OAOH,IAAIgc,EAET,YADA5mC,EAAOnB,KAAK2kC,GAEL,KAAM,CARb,GADAhB,GAAuBgB,EAAOZ,GAC1B+D,IAAuBnD,EAAMrF,OAAO5kC,EAAIoxB,KAE1C,YADAkZ,GAAatqC,EAAKiqC,EAAO,CAACb,WAAW,IAGvCT,EAAWsB,CAKf,CAIA,IAAIqD,EAAc,GAClBrE,GAAuBN,EAAUU,GACjCA,EAAK/jC,KAAK,CAACgd,QAASgrB,EAAanF,WAAYU,EAAKV,aAClDU,EAAKV,WAAa8B,EAAM9B,cAAgBU,EAAKT,cA6B7C,IA3BA,IAAImF,EAASnhC,GAAWpM,EAAK,iBAAmBA,EAAIwB,IAAM4K,GAAWpM,EAAIwB,GAAI,gBAEzEqU,EAAO,SAAWtW,GACpB,IAAIka,EAASwwB,EAAM3nB,QAAQ/iB,GAE3B,GADAka,EAAO9U,OAASoE,EACZwkC,IAAWrB,GAAalsC,EAAKyZ,GAAQ,GAEvC,OADAhT,EAAOnI,OAAS,EACT,CAAC,EAGVgvC,EAAYhoC,KAAK+iC,GAAwBroC,EAAKyZ,IAE9C,IAAItb,EAAQoB,EAAIomC,GAAsB3lC,EAAKyZ,GAAUlU,EAAIkB,GACzDumC,GAAoBhtC,EAAKyZ,EAAQtb,EAAOsrC,GAAczpC,EAAKyZ,KACtDla,GAAKS,EAAIwB,IAAMxB,EAAIwB,GAAGs8B,eAAe,CAAC12B,KAAMqS,EAAOrS,KAAMC,GAAIo+B,GAAUhsB,KAC5E,IAAIwzB,EAAU,GAGdlG,GAAW/mC,GAAK,SAAUA,EAAKmnC,GACxBA,IAAgD,GAAlC/jC,EAAQ6pC,EAASjtC,EAAI8oC,WACtCoE,GAAWltC,EAAI8oC,QAASrvB,GACxBwzB,EAAQ3nC,KAAKtF,EAAI8oC,UAEnBkE,GAAoBhtC,EAAKyZ,EAAQ,KAAMgwB,GAAczpC,EAAKyZ,GAC5D,GACF,EAES5Q,EAAMohC,EAAM3nB,QAAQhkB,OAAS,EAAGuK,GAAO,IAAKA,EAAK,CACxD,IAAI2kC,EAAW33B,EAAMhN,GAErB,GAAK2kC,EAAW,OAAOA,EAASC,CAClC,CAxDiC,CAba,CAsEhD,CAIA,SAASC,GAAS1tC,EAAK2tC,GACrB,GAAgB,GAAZA,IACJ3tC,EAAImR,OAASw8B,EACb3tC,EAAIoxB,IAAM,IAAIuT,GAAUl/B,EAAIzF,EAAIoxB,IAAIC,QAAQ,SAAUvzB,GAAS,OAAO,IAAIknC,GACxEpyB,GAAI9U,EAAM2wB,OAAO9jB,KAAOgjC,EAAU7vC,EAAM2wB,OAAOroB,IAC/CwM,GAAI9U,EAAM0zB,KAAK7mB,KAAOgjC,EAAU7vC,EAAM0zB,KAAKprB,IAC1C,IAAIpG,EAAIoxB,IAAIE,WACXtxB,EAAIwB,IAAI,CACVouB,GAAU5vB,EAAIwB,GAAIxB,EAAImR,MAAOnR,EAAImR,MAAQw8B,EAAUA,GACnD,IAAK,IAAIpwB,EAAIvd,EAAIwB,GAAGC,QAAS2M,EAAImP,EAAE7F,SAAUtJ,EAAImP,EAAE5F,OAAQvJ,IACvDkiB,GAActwB,EAAIwB,GAAI4M,EAAG,SAC/B,CACF,CAIA,SAAS4+B,GAAoBhtC,EAAKyZ,EAAQkvB,EAAUtvB,GAClD,GAAIrZ,EAAIwB,KAAOxB,EAAIwB,GAAG0K,MAClB,OAAO0yB,GAAU5+B,EAAIwB,GAAIwrC,GAAlBpO,CAAuC5+B,EAAKyZ,EAAQkvB,EAAUtvB,GAEzE,GAAII,EAAOpS,GAAGsD,KAAO3K,EAAImR,MACvBu8B,GAAS1tC,EAAKyZ,EAAO7O,KAAKtM,OAAS,GAAKmb,EAAOpS,GAAGsD,KAAO8O,EAAOrS,KAAKuD,YAGvE,KAAI8O,EAAOrS,KAAKuD,KAAO3K,EAAI6c,YAA3B,CAGA,GAAIpD,EAAOrS,KAAKuD,KAAO3K,EAAImR,MAAO,CAChC,IAAImkB,EAAQ7b,EAAO7O,KAAKtM,OAAS,GAAK0B,EAAImR,MAAQsI,EAAOrS,KAAKuD,MAC9D+iC,GAAS1tC,EAAKs1B,GACd7b,EAAS,CAACrS,KAAMwL,GAAI5S,EAAImR,MAAO,GAAI9J,GAAIuL,GAAI6G,EAAOpS,GAAGsD,KAAO2qB,EAAO7b,EAAOpS,GAAGjB,IACnEwE,KAAM,CAACrF,EAAIkU,EAAO7O,OAAQjG,OAAQ8U,EAAO9U,OACrD,CACA,IAAI2O,EAAOtT,EAAI6c,WACXpD,EAAOpS,GAAGsD,KAAO2I,IACnBmG,EAAS,CAACrS,KAAMqS,EAAOrS,KAAMC,GAAIuL,GAAIU,EAAMpC,GAAQlR,EAAKsT,GAAM1I,KAAKtM,QACzDsM,KAAM,CAAC6O,EAAO7O,KAAK,IAAKjG,OAAQ8U,EAAO9U,SAGnD8U,EAAOm0B,QAAUj8B,GAAW3R,EAAKyZ,EAAOrS,KAAMqS,EAAOpS,IAEhDshC,IAAYA,EAAWhD,GAAsB3lC,EAAKyZ,IACnDzZ,EAAIwB,GAUV,SAAqCA,EAAIiY,EAAQJ,GAC/C,IAAIrZ,EAAMwB,EAAGxB,IAAKyB,EAAUD,EAAGC,QAAS2F,EAAOqS,EAAOrS,KAAMC,EAAKoS,EAAOpS,GAEpEwmC,GAAqB,EAAOC,EAAkB1mC,EAAKuD,KAClDnJ,EAAGkO,QAAQ4Y,eACdwlB,EAAkB77B,GAAOsK,GAAWrL,GAAQlR,EAAKoH,EAAKuD,QACtD3K,EAAI4R,KAAKk8B,EAAiBzmC,EAAGsD,KAAO,GAAG,SAAUA,GAC/C,GAAIA,GAAQlJ,EAAQ+b,QAElB,OADAqwB,GAAqB,GACd,CAEX,KAGE7tC,EAAIoxB,IAAI1xB,SAAS+Z,EAAOrS,KAAMqS,EAAOpS,KAAO,GAC5C2E,GAAqBxK,GAEzB0kC,GAAUlmC,EAAKyZ,EAAQJ,EAAOuE,GAAepc,IAExCA,EAAGkO,QAAQ4Y,eACdtoB,EAAI4R,KAAKk8B,EAAiB1mC,EAAKuD,KAAO8O,EAAO7O,KAAKtM,QAAQ,SAAUqM,GAClE,IAAIhC,EAAMyU,GAAWzS,GACjBhC,EAAMlH,EAAQgc,gBAChBhc,EAAQ+b,QAAU7S,EAClBlJ,EAAQgc,cAAgB9U,EACxBlH,EAAQic,gBAAiB,EACzBmwB,GAAqB,EAEzB,IACIA,IAAsBrsC,EAAG0K,MAAMwvB,eAAgB,IAjpIvD,SAAyB17B,EAAKkD,GAE5B,GADAlD,EAAIgX,aAAe9R,KAAKC,IAAInF,EAAIgX,aAAc9T,KAC1ClD,EAAI+W,kBAAoB7T,EAAI,IAAhC,CAEA,IADA,IAAIvC,EAAQX,EAAImR,MACPxG,EAAOzH,EAAI,EAAGyH,EAAOhK,EAAOgK,IAAQ,CAC3C,IAAI4M,EAAQrG,GAAQlR,EAAK2K,GAAMiM,WAI/B,GAAIW,MAAYA,aAAiBtC,KAAiBtK,EAAO4M,EAAMzC,UAAY5R,GAAI,CAC7EvC,EAAQgK,EAAO,EACf,KACF,CACF,CACA3K,EAAI+W,kBAAoB7R,KAAKC,IAAInF,EAAI+W,kBAAmBpW,EAZX,CAa/C,CAqoIEotC,CAAgB/tC,EAAKoH,EAAKuD,MAC1BktB,GAAYr2B,EAAI,KAEhB,IAAIquB,EAAUpW,EAAO7O,KAAKtM,QAAU+I,EAAGsD,KAAOvD,EAAKuD,MAAQ,EAEvD8O,EAAOC,KACPkW,GAAUpuB,GACL4F,EAAKuD,MAAQtD,EAAGsD,MAA8B,GAAtB8O,EAAO7O,KAAKtM,QAAgB0nC,GAAkBxkC,EAAGxB,IAAKyZ,GAGnFmW,GAAUpuB,EAAI4F,EAAKuD,KAAMtD,EAAGsD,KAAO,EAAGklB,GAFtCS,GAAc9uB,EAAI4F,EAAKuD,KAAM,QAIjC,IAAIqjC,EAAiB5hC,GAAW5K,EAAI,WAAYysC,EAAgB7hC,GAAW5K,EAAI,UAC/E,GAAIysC,GAAiBD,EAAgB,CACnC,IAAIzrC,EAAM,CACR6E,KAAMA,EAAMC,GAAIA,EAChBuD,KAAM6O,EAAO7O,KACbgjC,QAASn0B,EAAOm0B,QAChBjpC,OAAQ8U,EAAO9U,QAEbspC,GAAiBlsB,GAAYvgB,EAAI,SAAUA,EAAIe,GAC/CyrC,IAAmBxsC,EAAG0K,MAAMqvB,aAAe/5B,EAAG0K,MAAMqvB,WAAa,KAAKj2B,KAAK/C,EACjF,CACAf,EAAGC,QAAQ0zB,kBAAoB,IACjC,CAlEgB+Y,CAA4BluC,EAAIwB,GAAIiY,EAAQJ,GACnD6sB,GAAUlmC,EAAKyZ,EAAQJ,GAC9BuxB,GAAmB5qC,EAAK2oC,EAAUnkC,GAE9BxE,EAAIgsC,UAAYZ,GAAWprC,EAAK4S,GAAI5S,EAAIsmC,YAAa,MACrDtmC,EAAIgsC,UAAW,EAvB6B,CAwBlD,CA8DA,SAASmC,GAAanuC,EAAKyI,EAAMrB,EAAMC,EAAI1C,GACzC,IAAIypC,EAEC/mC,IAAMA,EAAKD,GACZyL,GAAIxL,EAAID,GAAQ,IAA2BA,GAArBgnC,EAAS,CAAC/mC,EAAID,IAAqB,GAAIC,EAAK+mC,EAAO,IAC1D,iBAAR3lC,IAAoBA,EAAOzI,EAAIquC,WAAW5lC,IACrD4jC,GAAWrsC,EAAK,CAACoH,KAAMA,EAAMC,GAAIA,EAAIuD,KAAMnC,EAAM9D,OAAQA,GAC3D,CAIA,SAAS2pC,GAAoBvpC,EAAKqC,EAAMC,EAAI2K,GACtC3K,EAAKtC,EAAI4F,KACX5F,EAAI4F,MAAQqH,EACH5K,EAAOrC,EAAI4F,OACpB5F,EAAI4F,KAAOvD,EACXrC,EAAIqB,GAAK,EAEb,CASA,SAASmoC,GAAgBxqC,EAAOqD,EAAMC,EAAI2K,GACxC,IAAK,IAAIzS,EAAI,EAAGA,EAAIwE,EAAMzF,SAAUiB,EAAG,CACrC,IAAIivC,EAAMzqC,EAAMxE,GAAIkvC,GAAK,EACzB,GAAID,EAAInd,OAAR,CACOmd,EAAIE,UAAUF,EAAMzqC,EAAMxE,GAAKivC,EAAIzJ,YAAgB2J,QAAS,GACjE,IAAK,IAAIllC,EAAI,EAAGA,EAAIglC,EAAInd,OAAO/yB,OAAQkL,IACrC8kC,GAAoBE,EAAInd,OAAO7nB,GAAGilB,OAAQrnB,EAAMC,EAAI2K,GACpDs8B,GAAoBE,EAAInd,OAAO7nB,GAAGgoB,KAAMpqB,EAAMC,EAAI2K,EAGtD,KAPA,CAQA,IAAK,IAAIhI,EAAM,EAAGA,EAAMwkC,EAAIlsB,QAAQhkB,SAAU0L,EAAK,CACjD,IAAIjC,EAAMymC,EAAIlsB,QAAQtY,GACtB,GAAI3C,EAAKU,EAAIX,KAAKuD,KAChB5C,EAAIX,KAAOwL,GAAI7K,EAAIX,KAAKuD,KAAOqH,EAAMjK,EAAIX,KAAKhB,IAC9C2B,EAAIV,GAAKuL,GAAI7K,EAAIV,GAAGsD,KAAOqH,EAAMjK,EAAIV,GAAGjB,SACnC,GAAIgB,GAAQW,EAAIV,GAAGsD,KAAM,CAC9B8jC,GAAK,EACL,KACF,CACF,CACKA,IACH1qC,EAAMuG,OAAO,EAAG/K,EAAI,GACpBA,EAAI,EAbN,CAeF,CACF,CAEA,SAAS2tC,GAAWrE,EAAMpvB,GACxB,IAAIrS,EAAOqS,EAAOrS,KAAKuD,KAAMtD,EAAKoS,EAAOpS,GAAGsD,KAAMqH,EAAOyH,EAAO7O,KAAKtM,QAAU+I,EAAKD,GAAQ,EAC5FmnC,GAAgB1F,EAAKnB,KAAMtgC,EAAMC,EAAI2K,GACrCu8B,GAAgB1F,EAAKlB,OAAQvgC,EAAMC,EAAI2K,EACzC,CAKA,SAAS28B,GAAW3uC,EAAK4uC,EAAQC,EAAYzT,GAC3C,IAAIlpB,EAAK08B,EAAQjkC,EAAOikC,EAGxB,MAFqB,iBAAVA,EAAsBjkC,EAAOuG,GAAQlR,EAAKmT,GAASnT,EAAK4uC,IAC5D18B,EAAKD,GAAO28B,GACT,MAAN18B,EAAqB,MACrBkpB,EAAGzwB,EAAMuH,IAAOlS,EAAIwB,IAAM8uB,GAActwB,EAAIwB,GAAI0Q,EAAI28B,GACjDlkC,EACT,CAeA,SAASmkC,GAAUv9B,GACjB7N,KAAK6N,MAAQA,EACb7N,KAAK5E,OAAS,KAEd,IADA,IAAIiT,EAAS,EACJxS,EAAI,EAAGA,EAAIgS,EAAMjT,SAAUiB,EAClCgS,EAAMhS,GAAGT,OAAS4E,KAClBqO,GAAUR,EAAMhS,GAAGwS,OAErBrO,KAAKqO,OAASA,CAChB,CAoCA,SAASg9B,GAAYv9B,GACnB9N,KAAK8N,SAAWA,EAEhB,IADA,IAAIJ,EAAO,EAAGW,EAAS,EACdxS,EAAI,EAAGA,EAAIiS,EAASlT,SAAUiB,EAAG,CACxC,IAAI6G,EAAKoL,EAASjS,GAClB6R,GAAQhL,EAAGsL,YAAaK,GAAU3L,EAAG2L,OACrC3L,EAAGtH,OAAS4E,IACd,CACAA,KAAK0N,KAAOA,EACZ1N,KAAKqO,OAASA,EACdrO,KAAK5E,OAAS,IAChB,CAtgCAkmC,GAAM9iC,UAAUkF,KAAO,WAAc,OAAO8L,GAAOxP,KAAK+qB,OAAQ/qB,KAAK8tB,KAAM,EAC3EwT,GAAM9iC,UAAUmF,GAAK,WAAc,OAAO4L,GAAOvP,KAAK+qB,OAAQ/qB,KAAK8tB,KAAM,EACzEwT,GAAM9iC,UAAUqvB,MAAQ,WAAc,OAAO7tB,KAAK8tB,KAAK7mB,MAAQjH,KAAK+qB,OAAO9jB,MAAQjH,KAAK8tB,KAAKprB,IAAM1C,KAAK+qB,OAAOroB,EAAG,EAu9BlH0oC,GAAU5sC,UAAY,CACpBwP,UAAW,WAAa,OAAOhO,KAAK6N,MAAMjT,MAAO,EAGjD0wC,YAAa,SAAS7kC,EAAIjH,GACxB,IAAK,IAAI3D,EAAI4K,EAAI3L,EAAI2L,EAAKjH,EAAG3D,EAAIf,IAAKe,EAAG,CACvC,IAAIoL,EAAOjH,KAAK6N,MAAMhS,GACtBmE,KAAKqO,QAAUpH,EAAKoH,OACpB8L,GAAYlT,GACZoX,GAAYpX,EAAM,SACpB,CACAjH,KAAK6N,MAAMjH,OAAOH,EAAIjH,EACxB,EAGA/B,SAAU,SAASoQ,GACjBA,EAAMjM,KAAKjD,MAAMkP,EAAO7N,KAAK6N,MAC/B,EAIA09B,YAAa,SAAS9kC,EAAIoH,EAAOQ,GAC/BrO,KAAKqO,QAAUA,EACfrO,KAAK6N,MAAQ7N,KAAK6N,MAAMnT,MAAM,EAAG+L,GAAIgB,OAAOoG,GAAOpG,OAAOzH,KAAK6N,MAAMnT,MAAM+L,IAC3E,IAAK,IAAI5K,EAAI,EAAGA,EAAIgS,EAAMjT,SAAUiB,EAAKgS,EAAMhS,GAAGT,OAAS4E,IAC7D,EAGAwrC,MAAO,SAAS/kC,EAAIjH,EAAGk4B,GACrB,IAAK,IAAI58B,EAAI2L,EAAKjH,EAAGiH,EAAK3L,IAAK2L,EAC3B,GAAIixB,EAAG13B,KAAK6N,MAAMpH,IAAQ,OAAO,CACvC,GAgBF4kC,GAAY7sC,UAAY,CACtBwP,UAAW,WAAa,OAAOhO,KAAK0N,IAAK,EAEzC49B,YAAa,SAAS7kC,EAAIjH,GACxBQ,KAAK0N,MAAQlO,EACb,IAAK,IAAI3D,EAAI,EAAGA,EAAImE,KAAK8N,SAASlT,SAAUiB,EAAG,CAC7C,IAAII,EAAQ+D,KAAK8N,SAASjS,GAAIkS,EAAK9R,EAAM+R,YACzC,GAAIvH,EAAKsH,EAAI,CACX,IAAIwvB,EAAK/7B,KAAKC,IAAIjC,EAAGuO,EAAKtH,GAAKwrB,EAAYh2B,EAAMoS,OAIjD,GAHApS,EAAMqvC,YAAY7kC,EAAI82B,GACtBv9B,KAAKqO,QAAU4jB,EAAYh2B,EAAMoS,OAC7BN,GAAMwvB,IAAMv9B,KAAK8N,SAASlH,OAAO/K,IAAK,GAAII,EAAMb,OAAS,MAC5C,IAAZoE,GAAK+9B,GAAY,MACtB92B,EAAK,CACP,MAASA,GAAMsH,CACjB,CAGA,GAAI/N,KAAK0N,KAAOlO,EAAI,KACfQ,KAAK8N,SAASlT,OAAS,KAAOoF,KAAK8N,SAAS,aAAcs9B,KAAa,CAC1E,IAAIv9B,EAAQ,GACZ7N,KAAKvC,SAASoQ,GACd7N,KAAK8N,SAAW,CAAC,IAAIs9B,GAAUv9B,IAC/B7N,KAAK8N,SAAS,GAAG1S,OAAS4E,IAC5B,CACF,EAEAvC,SAAU,SAASoQ,GACjB,IAAK,IAAIhS,EAAI,EAAGA,EAAImE,KAAK8N,SAASlT,SAAUiB,EAAKmE,KAAK8N,SAASjS,GAAG4B,SAASoQ,EAC7E,EAEA09B,YAAa,SAAS9kC,EAAIoH,EAAOQ,GAC/BrO,KAAK0N,MAAQG,EAAMjT,OACnBoF,KAAKqO,QAAUA,EACf,IAAK,IAAIxS,EAAI,EAAGA,EAAImE,KAAK8N,SAASlT,SAAUiB,EAAG,CAC7C,IAAII,EAAQ+D,KAAK8N,SAASjS,GAAIkS,EAAK9R,EAAM+R,YACzC,GAAIvH,GAAMsH,EAAI,CAEZ,GADA9R,EAAMsvC,YAAY9kC,EAAIoH,EAAOQ,GACzBpS,EAAM4R,OAAS5R,EAAM4R,MAAMjT,OAAS,GAAI,CAI1C,IADA,IAAI6wC,EAAYxvC,EAAM4R,MAAMjT,OAAS,GAAK,GACjCyG,EAAMoqC,EAAWpqC,EAAMpF,EAAM4R,MAAMjT,QAAS,CACnD,IAAI8wC,EAAO,IAAIN,GAAUnvC,EAAM4R,MAAMnT,MAAM2G,EAAKA,GAAO,KACvDpF,EAAMoS,QAAUq9B,EAAKr9B,OACrBrO,KAAK8N,SAASlH,SAAS/K,EAAG,EAAG6vC,GAC7BA,EAAKtwC,OAAS4E,IAChB,CACA/D,EAAM4R,MAAQ5R,EAAM4R,MAAMnT,MAAM,EAAG+wC,GACnCzrC,KAAK2rC,YACP,CACA,KACF,CACAllC,GAAMsH,CACR,CACF,EAGA49B,WAAY,WACV,KAAI3rC,KAAK8N,SAASlT,QAAU,IAA5B,CACA,IAAIgxC,EAAK5rC,KACT,EAAG,CACD,IACI6rC,EAAU,IAAIR,GADJO,EAAG99B,SAASlH,OAAOglC,EAAG99B,SAASlT,OAAS,EAAG,IAEzD,GAAKgxC,EAAGxwC,OAKF,CACJwwC,EAAGl+B,MAAQm+B,EAAQn+B,KACnBk+B,EAAGv9B,QAAUw9B,EAAQx9B,OACrB,IAAIy9B,EAAUpsC,EAAQksC,EAAGxwC,OAAO0S,SAAU89B,GAC1CA,EAAGxwC,OAAO0S,SAASlH,OAAOklC,EAAU,EAAG,EAAGD,EAC5C,KAVgB,CACd,IAAIp3B,EAAO,IAAI42B,GAAYO,EAAG99B,UAC9B2G,EAAKrZ,OAASwwC,EACdA,EAAG99B,SAAW,CAAC2G,EAAMo3B,GACrBD,EAAKn3B,CACR,CAMCo3B,EAAQzwC,OAASwwC,EAAGxwC,MACtB,OAASwwC,EAAG99B,SAASlT,OAAS,IAC9BgxC,EAAGxwC,OAAOuwC,YAlB+B,CAmB3C,EAEAH,MAAO,SAAS/kC,EAAIjH,EAAGk4B,GACrB,IAAK,IAAI77B,EAAI,EAAGA,EAAImE,KAAK8N,SAASlT,SAAUiB,EAAG,CAC7C,IAAII,EAAQ+D,KAAK8N,SAASjS,GAAIkS,EAAK9R,EAAM+R,YACzC,GAAIvH,EAAKsH,EAAI,CACX,IAAIg+B,EAAOvqC,KAAKC,IAAIjC,EAAGuO,EAAKtH,GAC5B,GAAIxK,EAAMuvC,MAAM/kC,EAAIslC,EAAMrU,GAAO,OAAO,EACxC,GAAmB,IAAdl4B,GAAKusC,GAAc,MACxBtlC,EAAK,CACP,MAASA,GAAMsH,CACjB,CACF,GAKF,IAAIi+B,GAAa,SAAS1vC,EAAKhC,EAAM0R,GACnC,GAAIA,EAAW,IAAK,IAAIigC,KAAOjgC,EAAeA,EAAQ/M,eAAegtC,KACjEjsC,KAAKisC,GAAOjgC,EAAQigC,IACxBjsC,KAAK1D,IAAMA,EACX0D,KAAK1F,KAAOA,CACd,EAoCA,SAAS4xC,GAA6BpuC,EAAImJ,EAAMqH,GAC1CiL,GAAatS,IAAUnJ,EAAG0K,OAAS1K,EAAG0K,MAAMwf,WAAclqB,EAAGxB,IAAI0rB,YACjEsL,GAAex1B,EAAIwQ,EACzB,CArCA09B,GAAWxtC,UAAU+3B,MAAQ,WAC3B,IAAIz4B,EAAKkC,KAAK1D,IAAIwB,GAAIsjB,EAAKphB,KAAKiH,KAAKka,QAASla,EAAOjH,KAAKiH,KAAMuH,EAAKD,GAAOtH,GAC5E,GAAU,MAANuH,GAAe4S,EAAnB,CACA,IAAK,IAAIvlB,EAAI,EAAGA,EAAIulB,EAAGxmB,SAAUiB,EAASulB,EAAGvlB,IAAMmE,MAAQohB,EAAGxa,OAAO/K,IAAK,GACrEulB,EAAGxmB,SAAUqM,EAAKka,QAAU,MACjC,IAAI9S,EAAS0T,GAAa/hB,MAC1BoO,GAAiBnH,EAAMzF,KAAKkO,IAAI,EAAGzI,EAAKoH,OAASA,IAC7CvQ,IACFm9B,GAAQn9B,GAAI,WACVouC,GAA6BpuC,EAAImJ,GAAOoH,GACxCue,GAAc9uB,EAAI0Q,EAAI,SACxB,IACA6P,GAAYvgB,EAAI,oBAAqBA,EAAIkC,KAAMwO,GAVjB,CAYlC,EAEAw9B,GAAWxtC,UAAU+7B,QAAU,WAC3B,IAAI4R,EAASnsC,KAEXosC,EAAOpsC,KAAKqO,OAAQvQ,EAAKkC,KAAK1D,IAAIwB,GAAImJ,EAAOjH,KAAKiH,KACtDjH,KAAKqO,OAAS,KACd,IAAIC,EAAOyT,GAAa/hB,MAAQosC,EAC3B99B,IACA8K,GAAapZ,KAAK1D,IAAK2K,IAASmH,GAAiBnH,EAAMA,EAAKoH,OAASC,GACtExQ,GACFm9B,GAAQn9B,GAAI,WACVA,EAAG0K,MAAM2b,aAAc,EACvB+nB,GAA6BpuC,EAAImJ,EAAMqH,GACvC+P,GAAYvgB,EAAI,oBAAqBA,EAAIquC,EAAQ59B,GAAOtH,GAC1D,IAEJ,EACA0B,GAAWqjC,IA2CX,IAAIK,GAAe,EAEfC,GAAa,SAAShwC,EAAK+I,GAC7BrF,KAAK6N,MAAQ,GACb7N,KAAKqF,KAAOA,EACZrF,KAAK1D,IAAMA,EACX0D,KAAKC,KAAOosC,EACd,EAiHA,SAASE,GAASjwC,EAAKoH,EAAMC,EAAIqI,EAAS3G,GAIxC,GAAI2G,GAAWA,EAAQ43B,OAAU,OA2FnC,SAAwBtnC,EAAKoH,EAAMC,EAAIqI,EAAS3G,IAC9C2G,EAAUpN,EAAQoN,IACV43B,QAAS,EACjB,IAAI1jB,EAAU,CAACqsB,GAASjwC,EAAKoH,EAAMC,EAAIqI,EAAS3G,IAAQ+nB,EAAUlN,EAAQ,GACtEnD,EAAS/Q,EAAQqN,WAQrB,OAPAgqB,GAAW/mC,GAAK,SAAUA,GACpBygB,IAAU/Q,EAAQqN,WAAa0D,EAAOyvB,WAAU,IACpDtsB,EAAQte,KAAK2qC,GAASjwC,EAAKqT,GAAQrT,EAAKoH,GAAOiM,GAAQrT,EAAKqH,GAAKqI,EAAS3G,IAC1E,IAAK,IAAIxJ,EAAI,EAAGA,EAAIS,EAAIonC,OAAO9oC,SAAUiB,EACrC,GAAIS,EAAIonC,OAAO7nC,GAAG4wC,SAAY,OAClCrf,EAAUvrB,EAAIqe,EAChB,IACO,IAAIwsB,GAAiBxsB,EAASkN,EACvC,CAxG0Cuf,CAAerwC,EAAKoH,EAAMC,EAAIqI,EAAS3G,GAE/E,GAAI/I,EAAIwB,KAAOxB,EAAIwB,GAAG0K,MAAS,OAAO0yB,GAAU5+B,EAAIwB,GAAIyuC,GAAlBrR,CAA4B5+B,EAAKoH,EAAMC,EAAIqI,EAAS3G,GAE1F,IAAIoQ,EAAS,IAAI62B,GAAWhwC,EAAK+I,GAAOiJ,EAAOa,GAAIzL,EAAMC,GAGzD,GAFIqI,GAAWpN,EAAQoN,EAASyJ,GAAQ,GAEpCnH,EAAO,GAAa,GAARA,IAAuC,IAA1BmH,EAAO8B,eAChC,OAAO9B,EAQX,GAPIA,EAAOm3B,eAETn3B,EAAO8C,WAAY,EACnB9C,EAAO4D,WAAavd,EAAK,OAAQ,CAAC2Z,EAAOm3B,cAAe,qBACnD5gC,EAAQqV,mBAAqB5L,EAAO4D,WAAWtd,aAAa,mBAAoB,QACjFiQ,EAAQ0K,aAAcjB,EAAO4D,WAAW3C,YAAa,IAEvDjB,EAAO8C,UAAW,CACpB,GAAII,GAA0Brc,EAAKoH,EAAKuD,KAAMvD,EAAMC,EAAI8R,IACpD/R,EAAKuD,MAAQtD,EAAGsD,MAAQ0R,GAA0Brc,EAAKqH,EAAGsD,KAAMvD,EAAMC,EAAI8R,GAC1E,MAAM,IAAI9H,MAAM,oEArmJtB4H,IAAoB,CAumJpB,CAEIE,EAAOo3B,cACP7H,GAAmB1oC,EAAK,CAACoH,KAAMA,EAAMC,GAAIA,EAAI1C,OAAQ,YAAa3E,EAAIoxB,IAAKyZ,KAE/E,IAAsCnP,EAAlC8U,EAAUppC,EAAKuD,KAAMnJ,EAAKxB,EAAIwB,GA0BlC,GAzBAxB,EAAI4R,KAAK4+B,EAASnpC,EAAGsD,KAAO,GAAG,SAAUA,GACnCnJ,GAAM2X,EAAO8C,YAAcza,EAAGkO,QAAQ4Y,cAAgB/L,GAAW5R,IAASnJ,EAAGC,QAAQ+b,UACrFke,GAAgB,GAChBviB,EAAO8C,WAAau0B,GAAWppC,EAAKuD,MAAQmH,GAAiBnH,EAAM,GAplJ3E,SAAuBA,EAAM2O,EAAM8hB,GACjC,IAAIqV,EAAWrV,GAAM5sB,OAAOkiC,UAAYtV,EAAGxhB,cAAgBwhB,EAAGxhB,YAAc,IAAI82B,UAC5ED,GAAY9lC,EAAKiP,aAAe62B,EAASE,IAAIhmC,EAAKiP,aACpDjP,EAAKiP,YAAYtU,KAAKgU,IAEtB3O,EAAKiP,YAAcjP,EAAKiP,YAAcjP,EAAKiP,YAAYzO,OAAO,CAACmO,IAAS,CAACA,GACrEm3B,GAAYA,EAAShe,IAAI9nB,EAAKiP,cAEpCN,EAAKH,OAAOkC,WAAW1Q,EACzB,CA4kJIimC,CAAcjmC,EAAM,IAAIuO,GAAWC,EACAq3B,GAAWppC,EAAKuD,KAAOvD,EAAKhB,GAAK,KACjCoqC,GAAWnpC,EAAGsD,KAAOtD,EAAGjB,GAAK,MAAOpG,EAAIwB,IAAMxB,EAAIwB,GAAG0K,SACtFskC,CACJ,IAEIr3B,EAAO8C,WAAajc,EAAI4R,KAAKxK,EAAKuD,KAAMtD,EAAGsD,KAAO,GAAG,SAAUA,GAC7DmS,GAAa9c,EAAK2K,IAASmH,GAAiBnH,EAAM,EACxD,IAEIwO,EAAO03B,cAAgB/lC,GAAGqO,EAAQ,qBAAqB,WAAc,OAAOA,EAAO8gB,OAAS,IAE5F9gB,EAAO+b,WAjoJXlc,IAAmB,GAmoJbhZ,EAAI8oC,QAAQpB,KAAKppC,QAAU0B,EAAI8oC,QAAQnB,OAAOrpC,SAC9C0B,EAAI8wC,gBAEN33B,EAAO8C,YACT9C,EAAOxV,KAAOosC,GACd52B,EAAOyyB,QAAS,GAEdpqC,EAAI,CAGN,GADIk6B,IAAiBl6B,EAAG0K,MAAMwvB,eAAgB,GAC1CviB,EAAO8C,UACP2T,GAAUpuB,EAAI4F,EAAKuD,KAAMtD,EAAGsD,KAAO,QAClC,GAAIwO,EAAOjb,WAAaib,EAAOkG,YAAclG,EAAOmG,UAAYnG,EAAOoG,KACnEpG,EAAOqG,YAAcrG,EAAOiG,MACjC,IAAK,IAAI7f,EAAI6H,EAAKuD,KAAMpL,GAAK8H,EAAGsD,KAAMpL,IAAO+wB,GAAc9uB,EAAIjC,EAAG,QAClE4Z,EAAOyyB,QAAUX,GAAiBzpC,EAAGxB,KACzC+hB,GAAYvgB,EAAI,cAAeA,EAAI2X,EACrC,CACA,OAAOA,CACT,CAlLA62B,GAAW9tC,UAAU+3B,MAAQ,WAC3B,IAAIv2B,KAAK8lC,kBAAT,CACA,IAAIhoC,EAAKkC,KAAK1D,IAAIwB,GAAIuvC,EAASvvC,IAAOA,EAAG0K,MAEzC,GADI6kC,GAAU5V,GAAe35B,GACzB4K,GAAW1I,KAAM,SAAU,CAC7B,IAAIoE,EAAQpE,KAAKiY,OACb7T,GAASia,GAAYre,KAAM,QAASoE,EAAMV,KAAMU,EAAMT,GAC5D,CAEA,IADA,IAAIlC,EAAM,KAAMiO,EAAM,KACb7T,EAAI,EAAGA,EAAImE,KAAK6N,MAAMjT,SAAUiB,EAAG,CAC1C,IAAIoL,EAAOjH,KAAK6N,MAAMhS,GAClB+Z,EAAOF,GAAiBzO,EAAKiP,YAAalW,MAC1ClC,IAAOkC,KAAKuY,UAAaqU,GAAc9uB,EAAIyQ,GAAOtH,GAAO,QACpDnJ,IACQ,MAAX8X,EAAKjS,KAAc+L,EAAMnB,GAAOtH,IACnB,MAAb2O,EAAKlS,OAAgBjC,EAAM8M,GAAOtH,KAExCA,EAAKiP,YAAcL,GAAiB5O,EAAKiP,YAAaN,GACrC,MAAbA,EAAKlS,MAAgB1D,KAAKuY,YAAca,GAAapZ,KAAK1D,IAAK2K,IAASnJ,GACxEsQ,GAAiBnH,EAAM6jB,GAAWhtB,EAAGC,SAC3C,CACA,GAAID,GAAMkC,KAAKuY,YAAcza,EAAGkO,QAAQ4Y,aAAgB,IAAK,IAAIzf,EAAM,EAAGA,EAAMnF,KAAK6N,MAAMjT,SAAUuK,EAAK,CACxG,IAAImoC,EAASz0B,GAAW7Y,KAAK6N,MAAM1I,IAAOF,EAAMyU,GAAW4zB,GACvDroC,EAAMnH,EAAGC,QAAQgc,gBACnBjc,EAAGC,QAAQ+b,QAAUwzB,EACrBxvC,EAAGC,QAAQgc,cAAgB9U,EAC3BnH,EAAGC,QAAQic,gBAAiB,EAEhC,CAEW,MAAPvY,GAAe3D,GAAMkC,KAAKuY,WAAa2T,GAAUpuB,EAAI2D,EAAKiO,EAAM,GACpE1P,KAAK6N,MAAMjT,OAAS,EACpBoF,KAAK8lC,mBAAoB,EACrB9lC,KAAKkoC,QAAUloC,KAAK1D,IAAIgsC,WAC1BtoC,KAAK1D,IAAIgsC,UAAW,EAChBxqC,GAAMypC,GAAiBzpC,EAAGxB,MAE5BwB,GAAMugB,GAAYvgB,EAAI,gBAAiBA,EAAIkC,KAAMyB,EAAKiO,GACtD29B,GAAUjV,GAAat6B,GACvBkC,KAAK5E,QAAU4E,KAAK5E,OAAOm7B,OAtCM,CAuCvC,EAOA+V,GAAW9tC,UAAUyZ,KAAO,SAAUoX,EAAM7V,GAE1C,IAAI9V,EAAMC,EADE,MAAR0rB,GAA6B,YAAbrvB,KAAKqF,OAAsBgqB,EAAO,GAEtD,IAAK,IAAIxzB,EAAI,EAAGA,EAAImE,KAAK6N,MAAMjT,SAAUiB,EAAG,CAC1C,IAAIoL,EAAOjH,KAAK6N,MAAMhS,GAClB+Z,EAAOF,GAAiBzO,EAAKiP,YAAalW,MAC9C,GAAiB,MAAb4V,EAAKlS,OACPA,EAAOwL,GAAIsK,EAAUvS,EAAOsH,GAAOtH,GAAO2O,EAAKlS,OAClC,GAAT2rB,GAAc,OAAO3rB,EAE3B,GAAe,MAAXkS,EAAKjS,KACPA,EAAKuL,GAAIsK,EAAUvS,EAAOsH,GAAOtH,GAAO2O,EAAKjS,IACjC,GAAR0rB,GAAa,OAAO1rB,CAE5B,CACA,OAAOD,GAAQ,CAACA,KAAMA,EAAMC,GAAIA,EAClC,EAIA2oC,GAAW9tC,UAAU+7B,QAAU,WAC3B,IAAI4R,EAASnsC,KAEXqB,EAAMrB,KAAKiY,MAAM,GAAG,GAAO8E,EAAS/c,KAAMlC,EAAKkC,KAAK1D,IAAIwB,GACvDuD,GAAQvD,GACbm9B,GAAQn9B,GAAI,WACV,IAAImJ,EAAO5F,EAAI4F,KAAM+R,EAAQzK,GAAOlN,EAAI4F,MACpCiX,EAAO8F,GAAgBlmB,EAAIkb,GAM/B,GALIkF,IACFgJ,GAA6BhJ,GAC7BpgB,EAAG0K,MAAMuvB,iBAAmBj6B,EAAG0K,MAAM2b,aAAc,GAErDrmB,EAAG0K,MAAMwvB,eAAgB,GACpB5e,GAAa2D,EAAOzgB,IAAK2K,IAA0B,MAAjB8V,EAAO1O,OAAgB,CAC5D,IAAI4jB,EAAYlV,EAAO1O,OACvB0O,EAAO1O,OAAS,KAChB,IAAIk/B,EAAUxrB,GAAahF,GAAUkV,EACjCsb,GACAn/B,GAAiBnH,EAAMA,EAAKoH,OAASk/B,EAC3C,CACAlvB,GAAYvgB,EAAI,gBAAiBA,EAAIquC,EACvC,GACF,EAEAG,GAAW9tC,UAAUmZ,WAAa,SAAU1Q,GAC1C,IAAKjH,KAAK6N,MAAMjT,QAAUoF,KAAK1D,IAAIwB,GAAI,CACrC,IAAI45B,EAAK13B,KAAK1D,IAAIwB,GAAG0K,MAChBkvB,EAAGmD,qBAA+D,GAAzCn7B,EAAQg4B,EAAGmD,mBAAoB76B,QACxD03B,EAAGqD,uBAAyBrD,EAAGqD,qBAAuB,KAAKn5B,KAAK5B,KACvE,CACAA,KAAK6N,MAAMjM,KAAKqF,EAClB,EAEAqlC,GAAW9tC,UAAUiZ,WAAa,SAAUxQ,GAE1C,GADAjH,KAAK6N,MAAMjH,OAAOlH,EAAQM,KAAK6N,MAAO5G,GAAO,IACxCjH,KAAK6N,MAAMjT,QAAUoF,KAAK1D,IAAIwB,GAAI,CACrC,IAAI45B,EAAK13B,KAAK1D,IAAIwB,GAAG0K,OACnBkvB,EAAGmD,qBAAuBnD,EAAGmD,mBAAqB,KAAKj5B,KAAK5B,KAChE,CACF,EACA2I,GAAW2jC,IA8EX,IAAII,GAAmB,SAASxsB,EAASkN,GACvCptB,KAAKkgB,QAAUA,EACflgB,KAAKotB,QAAUA,EACf,IAAK,IAAIvxB,EAAI,EAAGA,EAAIqkB,EAAQtlB,SAAUiB,EAClCqkB,EAAQrkB,GAAGT,OAAS4E,IAC1B,EA8BA,SAASwtC,GAAkBlxC,GACzB,OAAOA,EAAImxC,UAAUv+B,GAAI5S,EAAImR,MAAO,GAAInR,EAAIqT,QAAQT,GAAI5S,EAAI6c,cAAc,SAAU5S,GAAK,OAAOA,EAAEnL,MAAQ,GAC5G,CAcA,SAASsyC,GAAoBxtB,GAa3B,IAZA,IAAI/N,EAAO,SAAWtW,GACpB,IAAI4Z,EAASyK,EAAQrkB,GAAI6nC,EAAS,CAACjuB,EAAO2X,QAAQ9wB,KAClD+mC,GAAW5tB,EAAO2X,QAAQ9wB,KAAK,SAAUud,GAAK,OAAO6pB,EAAO9hC,KAAKiY,EAAI,IACrE,IAAK,IAAI/T,EAAI,EAAGA,EAAI2P,EAAOyK,QAAQtlB,OAAQkL,IAAK,CAC9C,IAAI6nC,EAAYl4B,EAAOyK,QAAQpa,IACQ,GAAnCpG,EAAQgkC,EAAQiK,EAAUrxC,OAC5BqxC,EAAUvyC,OAAS,KACnBqa,EAAOyK,QAAQtZ,OAAOd,IAAK,GAE/B,CACF,EAESjK,EAAI,EAAGA,EAAIqkB,EAAQtlB,OAAQiB,IAAKsW,EAAMtW,EACjD,CA1DA6wC,GAAiBluC,UAAU+3B,MAAQ,WACjC,IAAIv2B,KAAK8lC,kBAAT,CACA9lC,KAAK8lC,mBAAoB,EACzB,IAAK,IAAIjqC,EAAI,EAAGA,EAAImE,KAAKkgB,QAAQtlB,SAAUiB,EACvCmE,KAAKkgB,QAAQrkB,GAAG06B,QACpBlY,GAAYre,KAAM,QAJmB,CAKvC,EAEA0sC,GAAiBluC,UAAUyZ,KAAO,SAAUoX,EAAM7V,GAChD,OAAOxZ,KAAKotB,QAAQnV,KAAKoX,EAAM7V,EACjC,EACA7Q,GAAW+jC,IAiDX,IAAIkB,GAAY,EACZC,GAAM,SAAS3mC,EAAMyE,EAAMi3B,EAAWkL,EAAShpC,GACjD,KAAM9E,gBAAgB6tC,IAAQ,OAAO,IAAIA,GAAI3mC,EAAMyE,EAAMi3B,EAAWkL,EAAShpC,GAC5D,MAAb89B,IAAqBA,EAAY,GAErCyI,GAAY5sC,KAAKuB,KAAM,CAAC,IAAIorC,GAAU,CAAC,IAAInxB,GAAK,GAAI,UACpDja,KAAKyN,MAAQm1B,EACb5iC,KAAKgoB,UAAYhoB,KAAK4nB,WAAa,EACnC5nB,KAAKsoC,UAAW,EAChBtoC,KAAK+tC,gBAAkB,EACvB/tC,KAAKsT,aAAetT,KAAKqT,kBAAoBuvB,EAC7C,IAAI3lC,EAAQiS,GAAI0zB,EAAW,GAC3B5iC,KAAK0tB,IAAMoU,GAAgB7kC,GAC3B+C,KAAKolC,QAAU,IAAIrB,GAAQ,MAC3B/jC,KAAKC,KAAO2tC,GACZ5tC,KAAKoiC,WAAaz2B,EAClB3L,KAAK8tC,QAAUA,EACf9tC,KAAK8E,UAA0B,OAAbA,EAAsB,MAAQ,MAChD9E,KAAKw8B,QAAS,EAEK,iBAARt1B,IAAoBA,EAAOlH,KAAK2qC,WAAWzjC,IACtDs7B,GAAUxiC,KAAM,CAAC0D,KAAMzG,EAAO0G,GAAI1G,EAAOiK,KAAMA,IAC/C0/B,GAAa5mC,KAAM8hC,GAAgB7kC,GAAQ6D,EAC7C,EAEA+sC,GAAIrvC,UAAY0D,GAAUmpC,GAAY7sC,UAAW,CAC/CwvC,YAAaH,GAKb3/B,KAAM,SAASxK,EAAMC,EAAI+zB,GACnBA,EAAM13B,KAAKwrC,MAAM9nC,EAAO1D,KAAKyN,MAAO9J,EAAKD,EAAMg0B,GAC5C13B,KAAKwrC,MAAMxrC,KAAKyN,MAAOzN,KAAKyN,MAAQzN,KAAK0N,KAAMhK,EACxD,EAGAs/B,OAAQ,SAASv8B,EAAIoH,GAEnB,IADA,IAAIQ,EAAS,EACJxS,EAAI,EAAGA,EAAIgS,EAAMjT,SAAUiB,EAAKwS,GAAUR,EAAMhS,GAAGwS,OAC5DrO,KAAKurC,YAAY9kC,EAAKzG,KAAKyN,MAAOI,EAAOQ,EAC3C,EACA40B,OAAQ,SAASx8B,EAAIjH,GAAKQ,KAAKsrC,YAAY7kC,EAAKzG,KAAKyN,MAAOjO,EAAI,EAKhEyuC,SAAU,SAASH,GACjB,IAAIjgC,EAAQM,GAASnO,KAAMA,KAAKyN,MAAOzN,KAAKyN,MAAQzN,KAAK0N,MACzD,OAAgB,IAAZogC,EAA4BjgC,EACzBA,EAAMqgC,KAAKJ,GAAW9tC,KAAKmuC,gBACpC,EACAC,SAAUhT,IAAY,SAASr2B,GAC7B,IAAIogB,EAAMjW,GAAIlP,KAAKyN,MAAO,GAAImC,EAAO5P,KAAKyN,MAAQzN,KAAK0N,KAAO,EAC9Di7B,GAAW3oC,KAAM,CAAC0D,KAAMyhB,EAAKxhB,GAAIuL,GAAIU,EAAMpC,GAAQxN,KAAM4P,GAAM1I,KAAKtM,QAClDsM,KAAMlH,KAAK2qC,WAAW5lC,GAAO9D,OAAQ,WAAY+U,MAAM,IAAO,GAC5EhW,KAAKlC,IAAM+1B,GAAe7zB,KAAKlC,GAAI,EAAG,GAC1C8oC,GAAa5mC,KAAM8hC,GAAgB3c,GAAMrkB,EAC3C,IACA2pC,aAAc,SAAS1lC,EAAMrB,EAAMC,EAAI1C,GAGrCwpC,GAAazqC,KAAM+E,EAFnBrB,EAAOiM,GAAQ3P,KAAM0D,GACrBC,EAAKA,EAAKgM,GAAQ3P,KAAM2D,GAAMD,EACKzC,EACrC,EACAotC,SAAU,SAAS3qC,EAAMC,EAAImqC,GAC3B,IAAIjgC,EAAQI,GAAWjO,KAAM2P,GAAQ3P,KAAM0D,GAAOiM,GAAQ3P,KAAM2D,IAChE,OAAgB,IAAZmqC,EAA4BjgC,EAChB,KAAZigC,EAAyBjgC,EAAMqgC,KAAK,IACjCrgC,EAAMqgC,KAAKJ,GAAW9tC,KAAKmuC,gBACpC,EAEA3gC,QAAS,SAASvG,GAAO,IAAIyD,EAAI1K,KAAKsuC,cAAcrnC,GAAO,OAAOyD,GAAKA,EAAExD,IAAI,EAE7EonC,cAAe,SAASrnC,GAAO,GAAI4H,GAAO7O,KAAMiH,GAAS,OAAOuG,GAAQxN,KAAMiH,EAAO,EACrFsnC,cAAe,SAAStnC,GAAO,OAAOsH,GAAOtH,EAAK,EAElDunC,yBAA0B,SAASvnC,GAEjC,MADmB,iBAARA,IAAoBA,EAAOuG,GAAQxN,KAAMiH,IAC7C4R,GAAW5R,EACpB,EAEAwnC,UAAW,WAAY,OAAOzuC,KAAK0N,IAAI,EACvCk1B,UAAW,WAAY,OAAO5iC,KAAKyN,KAAK,EACxC0L,SAAU,WAAY,OAAOnZ,KAAKyN,MAAQzN,KAAK0N,KAAO,CAAC,EAEvDiC,QAAS,SAAStO,GAAM,OAAOsO,GAAQ3P,KAAMqB,EAAI,EAEjDoyB,UAAW,SAASx2B,GAClB,IAAI7C,EAAQ4F,KAAK0tB,IAAIN,UAKrB,OAJa,MAATnwB,GAA0B,QAATA,EAAyB7C,EAAM0zB,KAClC,UAAT7wB,EAA2B7C,EAAM2wB,OACxB,OAAT9tB,GAA2B,MAATA,IAA2B,IAAVA,EAAyB7C,EAAMuJ,KAC9DvJ,EAAMsJ,MAErB,EACAgrC,eAAgB,WAAa,OAAO1uC,KAAK0tB,IAAIC,MAAO,EACpD4T,kBAAmB,WAAY,OAAOvhC,KAAK0tB,IAAI6T,mBAAmB,EAElEoN,UAAWvT,IAAY,SAASn0B,EAAMvE,EAAIsJ,GACxCg7B,GAAmBhnC,KAAM2P,GAAQ3P,KAAqB,iBAARiH,EAAmBiI,GAAIjI,EAAMvE,GAAM,GAAKuE,GAAO,KAAM+E,EACrG,IACA46B,aAAcxL,IAAY,SAASrQ,EAAQ+C,EAAM9hB,GAC/Cg7B,GAAmBhnC,KAAM2P,GAAQ3P,KAAM+qB,GAASpb,GAAQ3P,KAAM8tB,GAAQ/C,GAAS/e,EACjF,IACA26B,gBAAiBvL,IAAY,SAAStN,EAAM3E,EAAOnd,GACjD26B,GAAgB3mC,KAAM2P,GAAQ3P,KAAM8tB,GAAO3E,GAASxZ,GAAQ3P,KAAMmpB,GAAQnd,EAC5E,IACA66B,iBAAkBzL,IAAY,SAAS0L,EAAO96B,GAC5C66B,GAAiB7mC,KAAM+P,GAAa/P,KAAM8mC,GAAQ96B,EACpD,IACA4iC,mBAAoBxT,IAAY,SAAS/8B,EAAG2N,GAE1C66B,GAAiB7mC,KAAM+P,GAAa/P,KADxB+B,EAAI/B,KAAK0tB,IAAIC,OAAQtvB,IACiB2N,EACpD,IACA6iC,cAAezT,IAAY,SAASzN,EAAQP,EAASphB,GACnD,GAAK2hB,EAAO/yB,OAAZ,CAEA,IADA,IAAIoH,EAAM,GACDnG,EAAI,EAAGA,EAAI8xB,EAAO/yB,OAAQiB,IAC/BmG,EAAInG,GAAK,IAAIylC,GAAM3xB,GAAQ3P,KAAM2tB,EAAO9xB,GAAGkvB,QAC1Bpb,GAAQ3P,KAAM2tB,EAAO9xB,GAAGiyB,MAAQH,EAAO9xB,GAAGkvB,SAChD,MAAXqC,IAAmBA,EAAU5rB,KAAKC,IAAIksB,EAAO/yB,OAAS,EAAGoF,KAAK0tB,IAAIE,YACtEgZ,GAAa5mC,KAAMwhC,GAAmBxhC,KAAKlC,GAAIkE,EAAKorB,GAAUphB,EANjC,CAO/B,IACA8iC,aAAc1T,IAAY,SAASrQ,EAAQ+C,EAAM9hB,GAC/C,IAAI2hB,EAAS3tB,KAAK0tB,IAAIC,OAAOjzB,MAAM,GACnCizB,EAAO/rB,KAAK,IAAI0/B,GAAM3xB,GAAQ3P,KAAM+qB,GAASpb,GAAQ3P,KAAM8tB,GAAQ/C,KACnE6b,GAAa5mC,KAAMwhC,GAAmBxhC,KAAKlC,GAAI6vB,EAAQA,EAAO/yB,OAAS,GAAIoR,EAC7E,IAEAjB,aAAc,SAAS+iC,GAErB,IADA,IAA8BjgC,EAA1B8f,EAAS3tB,KAAK0tB,IAAIC,OACb9xB,EAAI,EAAGA,EAAI8xB,EAAO/yB,OAAQiB,IAAK,CACtC,IAAI6xB,EAAMzf,GAAWjO,KAAM2tB,EAAO9xB,GAAG6H,OAAQiqB,EAAO9xB,GAAG8H,MACvDkK,EAAQA,EAAQA,EAAMpG,OAAOimB,GAAOA,CACtC,CACA,OAAgB,IAAZogB,EAA4BjgC,EAClBA,EAAMqgC,KAAKJ,GAAW9tC,KAAKmuC,gBAC3C,EACAY,cAAe,SAASjB,GAEtB,IADA,IAAI/E,EAAQ,GAAIpb,EAAS3tB,KAAK0tB,IAAIC,OACzB9xB,EAAI,EAAGA,EAAI8xB,EAAO/yB,OAAQiB,IAAK,CACtC,IAAI6xB,EAAMzf,GAAWjO,KAAM2tB,EAAO9xB,GAAG6H,OAAQiqB,EAAO9xB,GAAG8H,OACvC,IAAZmqC,IAAqBpgB,EAAMA,EAAIwgB,KAAKJ,GAAW9tC,KAAKmuC,kBACxDpF,EAAMltC,GAAK6xB,CACb,CACA,OAAOqb,CACT,EACAiG,iBAAkB,SAASjqC,EAAMtH,EAAUwD,GAEzC,IADA,IAAIguC,EAAM,GACDpzC,EAAI,EAAGA,EAAImE,KAAK0tB,IAAIC,OAAO/yB,OAAQiB,IACxCozC,EAAIpzC,GAAKkJ,EACb/E,KAAKkvC,kBAAkBD,EAAKxxC,EAAUwD,GAAU,SAClD,EACAiuC,kBAAmB9T,IAAY,SAASr2B,EAAMtH,EAAUwD,GAEtD,IADA,IAAI2d,EAAU,GAAI8O,EAAM1tB,KAAK0tB,IACpB7xB,EAAI,EAAGA,EAAI6xB,EAAIC,OAAO/yB,OAAQiB,IAAK,CAC1C,IAAIzB,EAAQszB,EAAIC,OAAO9xB,GACvB+iB,EAAQ/iB,GAAK,CAAC6H,KAAMtJ,EAAMsJ,OAAQC,GAAIvJ,EAAMuJ,KAAMuD,KAAMlH,KAAK2qC,WAAW5lC,EAAKlJ,IAAKoF,OAAQA,EAC5F,CAEA,IADA,IAAIkuC,EAAS1xC,GAAwB,OAAZA,GA3hD7B,SAA4BnB,EAAKsiB,EAASwwB,GAGxC,IAFA,IAAIptC,EAAM,GACNqtC,EAAUngC,GAAI5S,EAAImR,MAAO,GAAI6hC,EAAUD,EAClCxzC,EAAI,EAAGA,EAAI+iB,EAAQhkB,OAAQiB,IAAK,CACvC,IAAIka,EAAS6I,EAAQ/iB,GACjB6H,EAAOw+B,GAAUnsB,EAAOrS,KAAM2rC,EAASC,GACvC3rC,EAAKu+B,GAAUH,GAAUhsB,GAASs5B,EAASC,GAG/C,GAFAD,EAAUt5B,EAAOpS,GACjB2rC,EAAU3rC,EACE,UAARyrC,EAAkB,CACpB,IAAIh1C,EAAQkC,EAAIoxB,IAAIC,OAAO9xB,GAAIgmC,EAAM1yB,GAAI/U,EAAM0zB,KAAM1zB,EAAM2wB,QAAU,EACrE/oB,EAAInG,GAAK,IAAIylC,GAAMO,EAAMl+B,EAAKD,EAAMm+B,EAAMn+B,EAAOC,EACnD,MACE3B,EAAInG,GAAK,IAAIylC,GAAM59B,EAAMA,EAE7B,CACA,OAAO,IAAIu9B,GAAUj/B,EAAK1F,EAAIoxB,IAAIE,UACpC,CA0gDkD2hB,CAAmBvvC,KAAM4e,EAASnhB,GACvE0H,EAAMyZ,EAAQhkB,OAAS,EAAGuK,GAAO,EAAGA,IACzCwjC,GAAW3oC,KAAM4e,EAAQzZ,IACzBgqC,EAAUlI,GAA2BjnC,KAAMmvC,GACtCnvC,KAAKlC,IAAM01B,GAAoBxzB,KAAKlC,GAC/C,IACA0xC,KAAMpU,IAAY,WAAYqO,GAAsBzpC,KAAM,OAAQ,IAClEyvC,KAAMrU,IAAY,WAAYqO,GAAsBzpC,KAAM,OAAQ,IAClE0vC,cAAetU,IAAY,WAAYqO,GAAsBzpC,KAAM,QAAQ,EAAM,IACjF2vC,cAAevU,IAAY,WAAYqO,GAAsBzpC,KAAM,QAAQ,EAAM,IAEjF4vC,aAAc,SAAS/iC,GAAM7M,KAAKw8B,OAAS3vB,CAAI,EAC/CgjC,aAAc,WAAY,OAAO7vC,KAAKw8B,MAAM,EAE5CsT,YAAa,WAEX,IADA,IAAI3K,EAAOnlC,KAAKolC,QAASpB,EAAO,EAAGC,EAAS,EACnCpoC,EAAI,EAAGA,EAAIspC,EAAKnB,KAAKppC,OAAQiB,IAAYspC,EAAKnB,KAAKnoC,GAAG8xB,UAAYqW,EAC3E,IAAK,IAAI7+B,EAAM,EAAGA,EAAMggC,EAAKlB,OAAOrpC,OAAQuK,IAAcggC,EAAKlB,OAAO9+B,GAAKwoB,UAAYsW,EACvF,MAAO,CAACuL,KAAMxL,EAAMyL,KAAMxL,EAC5B,EACAmJ,aAAc,WACZ,IAAIjB,EAASnsC,KAEbA,KAAKolC,QAAU,IAAIrB,GAAQ/jC,KAAKolC,SAChC/B,GAAWrjC,MAAM,SAAU1D,GAAO,OAAOA,EAAI8oC,QAAU+G,EAAO/G,OAAS,IAAG,EAC5E,EAEA2K,UAAW,WACT/vC,KAAK+tC,gBAAkB/tC,KAAKgwC,kBAAiB,EAC/C,EACAA,iBAAkB,SAASC,GAGzB,OAFIA,IACAjwC,KAAKolC,QAAQf,OAASrkC,KAAKolC,QAAQd,UAAYtkC,KAAKolC,QAAQb,WAAa,MACtEvkC,KAAKolC,QAAQX,UACtB,EACAyL,QAAS,SAAUC,GACjB,OAAOnwC,KAAKolC,QAAQX,aAAe0L,GAAOnwC,KAAK+tC,gBACjD,EAEAqC,WAAY,WACV,MAAO,CAACpM,KAAMoC,GAAiBpmC,KAAKolC,QAAQpB,MACpCC,OAAQmC,GAAiBpmC,KAAKolC,QAAQnB,QAChD,EACAoM,WAAY,SAASC,GACnB,IAAInL,EAAOnlC,KAAKolC,QAAU,IAAIrB,GAAQ/jC,KAAKolC,SAC3CD,EAAKnB,KAAOoC,GAAiBkK,EAAStM,KAAKtpC,MAAM,GAAI,MAAM,GAC3DyqC,EAAKlB,OAASmC,GAAiBkK,EAASrM,OAAOvpC,MAAM,GAAI,MAAM,EACjE,EAEA61C,gBAAiBnV,IAAY,SAASn0B,EAAMupC,EAAU3wC,GACpD,OAAOorC,GAAWjrC,KAAMiH,EAAM,UAAU,SAAUA,GAChD,IAAIiZ,EAAUjZ,EAAKkZ,gBAAkBlZ,EAAKkZ,cAAgB,CAAC,GAG3D,OAFAD,EAAQswB,GAAY3wC,GACfA,GAASmD,GAAQkd,KAAYjZ,EAAKkZ,cAAgB,OAChD,CACT,GACF,IAEAswB,YAAarV,IAAY,SAASoV,GAChC,IAAIrE,EAASnsC,KAEbA,KAAKkO,MAAK,SAAUjH,GACdA,EAAKkZ,eAAiBlZ,EAAKkZ,cAAcqwB,IAC3CvF,GAAWkB,EAAQllC,EAAM,UAAU,WAGjC,OAFAA,EAAKkZ,cAAcqwB,GAAY,KAC3BxtC,GAAQiE,EAAKkZ,iBAAkBlZ,EAAKkZ,cAAgB,OACjD,CACT,GAEJ,GACF,IAEAuwB,SAAU,SAASzpC,GACjB,IAAIzH,EACJ,GAAmB,iBAARyH,EAAkB,CAC3B,IAAK4H,GAAO7O,KAAMiH,GAAS,OAAO,KAGlC,GAFAzH,EAAIyH,IACJA,EAAOuG,GAAQxN,KAAMiH,IACR,OAAO,IACtB,MAEE,GAAS,OADTzH,EAAI+O,GAAOtH,IACM,OAAO,KAE1B,MAAO,CAACA,KAAMzH,EAAG0rC,OAAQjkC,EAAMC,KAAMD,EAAKC,KAAMiZ,cAAelZ,EAAKkZ,cAC5DvN,UAAW3L,EAAK2L,UAAWD,QAAS1L,EAAK0L,QAASgN,UAAW1Y,EAAK0Y,UAClEwB,QAASla,EAAKka,QACxB,EAEAwvB,aAAcvV,IAAY,SAAS8P,EAAQ0F,EAAO12C,GAChD,OAAO+wC,GAAWjrC,KAAMkrC,EAAiB,UAAT0F,EAAoB,SAAW,SAAS,SAAU3pC,GAChF,IAAIjI,EAAgB,QAAT4xC,EAAkB,YACT,cAATA,EAAwB,UACf,UAATA,EAAoB,cAAgB,YAC/C,GAAK3pC,EAAKjI,GACL,IAAI/E,EAAUC,GAAK/B,KAAK8O,EAAKjI,IAAU,OAAO,EAC5CiI,EAAKjI,IAAS,IAAM9E,CAAK,MAFb+M,EAAKjI,GAAQ9E,EAGhC,OAAO,CACT,GACF,IACA22C,gBAAiBzV,IAAY,SAAS8P,EAAQ0F,EAAO12C,GACnD,OAAO+wC,GAAWjrC,KAAMkrC,EAAiB,UAAT0F,EAAoB,SAAW,SAAS,SAAU3pC,GAChF,IAAIjI,EAAgB,QAAT4xC,EAAkB,YACT,cAATA,EAAwB,UACf,UAATA,EAAoB,cAAgB,YAC3CvsC,EAAM4C,EAAKjI,GACf,IAAKqF,EAAO,OAAO,EACd,GAAW,MAAPnK,EAAe+M,EAAKjI,GAAQ,SAChC,CACH,IAAIoF,EAAQC,EAAIxK,MAAMI,EAAUC,IAChC,IAAKkK,EAAS,OAAO,EACrB,IAAIlH,EAAMkH,EAAMzJ,MAAQyJ,EAAM,GAAGxJ,OACjCqM,EAAKjI,GAAQqF,EAAI3J,MAAM,EAAG0J,EAAMzJ,QAAWyJ,EAAMzJ,OAASuC,GAAOmH,EAAIzJ,OAAc,IAAL,IAAYyJ,EAAI3J,MAAMwC,IAAQ,IAC9G,CACA,OAAO,CACT,GACF,IAEA4zC,cAAe1V,IAAY,SAAS8P,EAAQ5wC,EAAM0R,GAChD,OA/jBJ,SAAuB1P,EAAK4uC,EAAQ5wC,EAAM0R,GACxC,IAAI+Q,EAAS,IAAIivB,GAAW1vC,EAAKhC,EAAM0R,GACnClO,EAAKxB,EAAIwB,GAgBb,OAfIA,GAAMif,EAAOyE,YAAa1jB,EAAGC,QAAQqgC,cAAe,GACxD6M,GAAW3uC,EAAK4uC,EAAQ,UAAU,SAAUjkC,GAC1C,IAAIka,EAAUla,EAAKka,UAAYla,EAAKka,QAAU,IAI9C,GAHuB,MAAnBpE,EAAOg0B,SAAoB5vB,EAAQvf,KAAKmb,GACrCoE,EAAQva,OAAOpF,KAAKC,IAAI0f,EAAQvmB,OAAQ4G,KAAKkO,IAAI,EAAGqN,EAAOg0B,WAAY,EAAGh0B,GACjFA,EAAO9V,KAAOA,EACVnJ,IAAOsb,GAAa9c,EAAK2K,GAAO,CAClC,IAAI+pC,EAAez3B,GAAatS,GAAQ3K,EAAI0rB,UAC5C5Z,GAAiBnH,EAAMA,EAAKoH,OAAS0T,GAAahF,IAC9Ci0B,GAAgB1d,GAAex1B,EAAIif,EAAO1O,QAC9CvQ,EAAG0K,MAAM2b,aAAc,CACzB,CACA,OAAO,CACT,IACIrmB,GAAMugB,GAAYvgB,EAAI,kBAAmBA,EAAIif,EAAyB,iBAAVmuB,EAAqBA,EAAS38B,GAAO28B,IAC9FnuB,CACT,CA4iBW+zB,CAAc9wC,KAAMkrC,EAAQ5wC,EAAM0R,EAC3C,IACAilC,iBAAkB,SAASl0B,GAAUA,EAAOwZ,OAAS,EAErDgW,SAAU,SAAS7oC,EAAMC,EAAIqI,GAC3B,OAAOugC,GAASvsC,KAAM2P,GAAQ3P,KAAM0D,GAAOiM,GAAQ3P,KAAM2D,GAAKqI,EAASA,GAAWA,EAAQ3G,MAAQ,QACpG,EACA6rC,YAAa,SAAS7vC,EAAK2K,GACzB,IAAImlC,EAAW,CAACvE,aAAc5gC,IAAgC,MAApBA,EAAQ9P,SAAmB8P,EAAQ+Q,OAAS/Q,GACtE0K,WAAY1K,GAAWA,EAAQ0K,WAC/Ba,gBAAgB,EAAOqsB,OAAQ53B,GAAWA,EAAQ43B,OAClDviB,kBAAmBrV,GAAWA,EAAQqV,mBAEtD,OAAOkrB,GAASvsC,KADhBqB,EAAMsO,GAAQ3P,KAAMqB,GACOA,EAAK8vC,EAAU,WAC5C,EACAC,YAAa,SAAS/vC,GAEpB,IAAI6e,EAAU,GAAIvK,EAAQnI,GAAQxN,MADlCqB,EAAMsO,GAAQ3P,KAAMqB,IACwB4F,MAAMiP,YAClD,GAAIP,EAAS,IAAK,IAAI9Z,EAAI,EAAGA,EAAI8Z,EAAM/a,SAAUiB,EAAG,CAClD,IAAI+Z,EAAOD,EAAM9Z,IACC,MAAb+Z,EAAKlS,MAAgBkS,EAAKlS,MAAQrC,EAAIqB,MAC3B,MAAXkT,EAAKjS,IAAciS,EAAKjS,IAAMtC,EAAIqB,KACnCwd,EAAQte,KAAKgU,EAAKH,OAAOra,QAAUwa,EAAKH,OAC9C,CACA,OAAOyK,CACT,EACAutB,UAAW,SAAS/pC,EAAMC,EAAIkmC,GAC5BnmC,EAAOiM,GAAQ3P,KAAM0D,GAAOC,EAAKgM,GAAQ3P,KAAM2D,GAC/C,IAAIS,EAAQ,GAAImK,EAAS7K,EAAKuD,KAa9B,OAZAjH,KAAKkO,KAAKxK,EAAKuD,KAAMtD,EAAGsD,KAAO,GAAG,SAAUA,GAC1C,IAAI0O,EAAQ1O,EAAKiP,YACjB,GAAIP,EAAS,IAAK,IAAI9Z,EAAI,EAAGA,EAAI8Z,EAAM/a,OAAQiB,IAAK,CAClD,IAAI+Z,EAAOD,EAAM9Z,GACA,MAAX+Z,EAAKjS,IAAc4K,GAAU7K,EAAKuD,MAAQvD,EAAKhB,IAAMkT,EAAKjS,IAC7C,MAAbiS,EAAKlS,MAAgB6K,GAAU7K,EAAKuD,MACvB,MAAb2O,EAAKlS,MAAgB6K,GAAU5K,EAAGsD,MAAQ2O,EAAKlS,MAAQC,EAAGjB,IAC1DmnC,IAAUA,EAAOj0B,EAAKH,SACxBrR,EAAMxC,KAAKgU,EAAKH,OAAOra,QAAUwa,EAAKH,OAC5C,GACElH,CACJ,IACOnK,CACT,EACAitC,YAAa,WACX,IAAInxB,EAAU,GAMd,OALAlgB,KAAKkO,MAAK,SAAUjH,GAClB,IAAIoR,EAAMpR,EAAKiP,YACf,GAAImC,EAAO,IAAK,IAAIxc,EAAI,EAAGA,EAAIwc,EAAIzd,SAAUiB,EACtB,MAAfwc,EAAIxc,GAAG6H,MAAgBwc,EAAQte,KAAKyW,EAAIxc,GAAG4Z,OACrD,IACOyK,CACT,EAEAoxB,aAAc,SAAS3pC,GACrB,IAAIjF,EAAI6L,EAASvO,KAAKyN,MAAO8jC,EAAUvxC,KAAKmuC,gBAAgBvzC,OAO5D,OANAoF,KAAKkO,MAAK,SAAUjH,GAClB,IAAI8G,EAAK9G,EAAKC,KAAKtM,OAAS22C,EAC5B,GAAIxjC,EAAKpG,EAAiB,OAAVjF,EAAKiF,GAAY,EACjCA,GAAOoG,IACLQ,CACJ,IACOoB,GAAQ3P,KAAMkP,GAAIX,EAAQ7L,GACnC,EACA8uC,aAAc,SAAU/oB,GAEtB,IAAI9tB,GADJ8tB,EAAS9Y,GAAQ3P,KAAMyoB,IACJ/lB,GACnB,GAAI+lB,EAAOxhB,KAAOjH,KAAKyN,OAASgb,EAAO/lB,GAAK,EAAK,OAAO,EACxD,IAAI6uC,EAAUvxC,KAAKmuC,gBAAgBvzC,OAInC,OAHAoF,KAAKkO,KAAKlO,KAAKyN,MAAOgb,EAAOxhB,MAAM,SAAUA,GAC3CtM,GAASsM,EAAKC,KAAKtM,OAAS22C,CAC9B,IACO52C,CACT,EAEA8Z,KAAM,SAASg9B,GACb,IAAIn1C,EAAM,IAAIuxC,GAAI1/B,GAASnO,KAAMA,KAAKyN,MAAOzN,KAAKyN,MAAQzN,KAAK0N,MAC7C1N,KAAKoiC,WAAYpiC,KAAKyN,MAAOzN,KAAK8tC,QAAS9tC,KAAK8E,WAQlE,OAPAxI,EAAI0rB,UAAYhoB,KAAKgoB,UAAW1rB,EAAIsrB,WAAa5nB,KAAK4nB,WACtDtrB,EAAIoxB,IAAM1tB,KAAK0tB,IACfpxB,EAAIkgC,QAAS,EACTiV,IACFn1C,EAAI8oC,QAAQlB,UAAYlkC,KAAKolC,QAAQlB,UACrC5nC,EAAI+zC,WAAWrwC,KAAKowC,eAEf9zC,CACT,EAEAo1C,UAAW,SAAS1lC,GACbA,IAAWA,EAAU,CAAC,GAC3B,IAAItI,EAAO1D,KAAKyN,MAAO9J,EAAK3D,KAAKyN,MAAQzN,KAAK0N,KAC1B,MAAhB1B,EAAQtI,MAAgBsI,EAAQtI,KAAOA,IAAQA,EAAOsI,EAAQtI,MAChD,MAAdsI,EAAQrI,IAAcqI,EAAQrI,GAAKA,IAAMA,EAAKqI,EAAQrI,IAC1D,IAAI8Q,EAAO,IAAIo5B,GAAI1/B,GAASnO,KAAM0D,EAAMC,GAAKqI,EAAQL,MAAQ3L,KAAKoiC,WAAY1+B,EAAM1D,KAAK8tC,QAAS9tC,KAAK8E,WAKvG,OAJIkH,EAAQy3B,aAAchvB,EAAK2wB,QAAUplC,KAAKolC,UAC1CplC,KAAK0jC,SAAW1jC,KAAK0jC,OAAS,KAAK9hC,KAAK,CAACtF,IAAKmY,EAAMgvB,WAAYz3B,EAAQy3B,aAC5EhvB,EAAKivB,OAAS,CAAC,CAACpnC,IAAK0D,KAAMysC,UAAU,EAAMhJ,WAAYz3B,EAAQy3B,aAhZnE,SAA2BnnC,EAAK4jB,GAC9B,IAAK,IAAIrkB,EAAI,EAAGA,EAAIqkB,EAAQtlB,OAAQiB,IAAK,CACvC,IAAI4Z,EAASyK,EAAQrkB,GAAIwF,EAAMoU,EAAOwC,OAClC05B,EAAQr1C,EAAIqT,QAAQtO,EAAIqC,MAAOkuC,EAAMt1C,EAAIqT,QAAQtO,EAAIsC,IACzD,GAAIwL,GAAIwiC,EAAOC,GAAM,CACnB,IAAIC,EAAUtF,GAASjwC,EAAKq1C,EAAOC,EAAKn8B,EAAO2X,QAAS3X,EAAO2X,QAAQ/nB,MACvEoQ,EAAOyK,QAAQte,KAAKiwC,GACpBA,EAAQz2C,OAASqa,CACnB,CACF,CACF,CAuYIq8B,CAAkBr9B,EAAM+4B,GAAkBxtC,OACnCyU,CACT,EACAs9B,UAAW,SAAS5oB,GAElB,GADIA,aAAiB6oB,KAAc7oB,EAAQA,EAAM7sB,KAC7C0D,KAAK0jC,OAAU,IAAK,IAAI7nC,EAAI,EAAGA,EAAImE,KAAK0jC,OAAO9oC,SAAUiB,EAE3D,GADWmE,KAAK0jC,OAAO7nC,GACdS,KAAO6sB,EAAhB,CACAnpB,KAAK0jC,OAAO98B,OAAO/K,EAAG,GACtBstB,EAAM4oB,UAAU/xC,MAChB0tC,GAAoBF,GAAkBxtC,OACtC,KAJkC,CAOpC,GAAImpB,EAAMic,SAAWplC,KAAKolC,QAAS,CACjC,IAAI6M,EAAW,CAAC9oB,EAAMlpB,IACtBojC,GAAWla,GAAO,SAAU7sB,GAAO,OAAO21C,EAASrwC,KAAKtF,EAAI2D,GAAK,IAAG,GACpEkpB,EAAMic,QAAU,IAAIrB,GAAQ,MAC5B5a,EAAMic,QAAQpB,KAAOoC,GAAiBpmC,KAAKolC,QAAQpB,KAAMiO,GACzD9oB,EAAMic,QAAQnB,OAASmC,GAAiBpmC,KAAKolC,QAAQnB,OAAQgO,EAC/D,CACF,EACAC,eAAgB,SAAS7zC,GAAIglC,GAAWrjC,KAAM3B,EAAG,EAEjD0N,QAAS,WAAY,OAAO/L,KAAK2L,IAAI,EACrCwmC,UAAW,WAAY,OAAOnyC,KAAKlC,EAAE,EAErC6sC,WAAY,SAAStnC,GACnB,OAAIrD,KAAK8tC,QAAkBzqC,EAAItG,MAAMiD,KAAK8tC,SACnCtjC,GAAenH,EACxB,EACA8qC,cAAe,WAAa,OAAOnuC,KAAK8tC,SAAW,IAAK,EAExDsE,aAAchX,IAAY,SAAU93B,GA9oDtC,IAA0BxF,EA+oDX,OAAPwF,IAAgBA,EAAM,OACtBA,GAAOtD,KAAK8E,YAChB9E,KAAK8E,UAAYxB,EACjBtD,KAAKkO,MAAK,SAAUjH,GAAQ,OAAOA,EAAK/C,MAAQ,IAAM,IAClDlE,KAAKlC,IAlpDXm9B,GADwBn9B,EAmpDUkC,KAAKlC,IAlpD3B,WACVgmC,GAAkBhmC,GAClBouB,GAAUpuB,EACZ,IAgpDA,MAIF+vC,GAAIrvC,UAAU6zC,SAAWxE,GAAIrvC,UAAU0P,KAIvC,IAAIokC,GAAW,EAEf,SAASC,GAAOz3C,GACd,IAAIgD,EAAKkC,KAET,GADAwyC,GAAgB10C,IACZkK,GAAelK,EAAIhD,KAAMqnB,GAAcrkB,EAAGC,QAASjD,GAAvD,CAEA+N,GAAiB/N,GACbtC,IAAM85C,IAAY,IAAI/xC,MAC1B,IAAIc,EAAMoqB,GAAa3tB,EAAIhD,GAAG,GAAO23C,EAAQ33C,EAAE43C,aAAaD,MAC5D,GAAKpxC,IAAOvD,EAAG60C,aAGf,GAAIF,GAASA,EAAM73C,QAAUkQ,OAAO8nC,YAAc9nC,OAAO+nC,KAkCvD,IAjCA,IAAIrzC,EAAIizC,EAAM73C,OAAQsM,EAAO3I,MAAMiB,GAAIszC,EAAO,EAC1CC,EAAsC,aAClCD,GAAQtzC,GACZ07B,GAAUp9B,GAAI,WAEZ,IAAIiY,EAAS,CAACrS,KADdrC,EAAMsO,GAAQ7R,EAAGxB,IAAK+E,GACGsC,GAAItC,EACf6F,KAAMpJ,EAAGxB,IAAIquC,WACTzjC,EAAK2iC,QAAO,SAAUmJ,GAAK,OAAY,MAALA,CAAW,IAAG9E,KAAKpwC,EAAGxB,IAAI6xC,kBAChEltC,OAAQ,SACtB0nC,GAAW7qC,EAAGxB,IAAKyZ,GACnBkxB,GAA2BnpC,EAAGxB,IAAKwlC,GAAgBnyB,GAAQ7R,EAAGxB,IAAK+E,GAAMsO,GAAQ7R,EAAGxB,IAAKylC,GAAUhsB,KACrG,GARAmlB,EAUJ,EACI+X,EAAmB,SAAUC,EAAMr3C,GACrC,GAAIiC,EAAGkO,QAAQmnC,qBAC2C,GAAtDzzC,EAAQ5B,EAAGkO,QAAQmnC,mBAAoBD,EAAK7tC,MAC9C0tC,QAFF,CAKA,IAAIK,EAAS,IAAIR,WACjBQ,EAAOC,QAAU,WAAc,OAAON,GAAuC,EAC7EK,EAAOE,OAAS,WACd,IAAI93C,EAAU43C,EAAO3oC,OACjB,0BAA0BtS,KAAKqD,KAInC0L,EAAKrL,GAAKL,GAHRu3C,GAKJ,EACAK,EAAOG,WAAWL,EAZlB,CAaF,EACSr3C,EAAI,EAAGA,EAAI42C,EAAM73C,OAAQiB,IAAOo3C,EAAiBR,EAAM52C,GAAIA,OAC/D,CAEL,GAAIiC,EAAG6O,MAAM4kB,cAAgBzzB,EAAGxB,IAAIoxB,IAAI1xB,SAASqF,IAAQ,EAIvD,OAHAvD,EAAG6O,MAAM4kB,aAAaz2B,QAEtB0F,YAAW,WAAc,OAAO1C,EAAGC,QAAQif,MAAMmU,OAAS,GAAG,IAG/D,IACE,IAAIqiB,EAAS14C,EAAE43C,aAAae,QAAQ,QACpC,GAAID,EAAQ,CACV,IAAIE,EAIJ,GAHI51C,EAAG6O,MAAM4kB,eAAiBzzB,EAAG6O,MAAM4kB,aAAa9c,OAChDi/B,EAAW51C,EAAG4wC,kBAClBxH,GAAmBppC,EAAGxB,IAAKwlC,GAAgBzgC,EAAKA,IAC5CqyC,EAAY,IAAK,IAAIvuC,EAAM,EAAGA,EAAMuuC,EAAS94C,SAAUuK,EACvDslC,GAAa3sC,EAAGxB,IAAK,GAAIo3C,EAASvuC,GAAK4lB,OAAQ2oB,EAASvuC,GAAK2oB,KAAM,QACvEhwB,EAAGkxC,iBAAiBwE,EAAQ,SAAU,SACtC11C,EAAGC,QAAQif,MAAMmU,OACnB,CACF,CACA,MAAMpF,GAAK,CACb,CAhEW,CAiEb,CAqCA,SAASymB,GAAgB10C,GACnBA,EAAGC,QAAQ41C,aACb71C,EAAGC,QAAQykB,UAAUvnB,YAAY6C,EAAGC,QAAQ41C,YAC5C71C,EAAGC,QAAQ41C,WAAa,KAE5B,CAMA,SAASC,GAAkBv1C,GACzB,GAAK3F,SAASm7C,uBAAd,CAEA,IADA,IAAIC,EAAUp7C,SAASm7C,uBAAuB,cAAeE,EAAU,GAC9Dl4C,EAAI,EAAGA,EAAIi4C,EAAQl5C,OAAQiB,IAAK,CACvC,IAAIiC,EAAKg2C,EAAQj4C,GAAGm2C,WAChBl0C,GAAMi2C,EAAQnyC,KAAK9D,EACzB,CACIi2C,EAAQn5C,QAAUm5C,EAAQ,GAAG7Y,WAAU,WACzC,IAAK,IAAIr/B,EAAI,EAAGA,EAAIk4C,EAAQn5C,OAAQiB,IAAOwC,EAAE01C,EAAQl4C,GACvD,GAR+C,CASjD,CAEA,IAAIm4C,IAAoB,EACxB,SAASC,KAKT,IAEMC,EANAF,KAOJ5sC,GAAG0D,OAAQ,UAAU,WACA,MAAfopC,IAAuBA,EAAc1zC,YAAW,WAClD0zC,EAAc,KACdN,GAAkBO,GACpB,GAAG,KACL,IAEA/sC,GAAG0D,OAAQ,QAAQ,WAAc,OAAO8oC,GAAkB3iB,GAAS,IAZnE+iB,IAAoB,EACtB,CAcA,SAASG,GAASr2C,GAChB,IAAI+b,EAAI/b,EAAGC,QAEX8b,EAAEyN,gBAAkBzN,EAAE0N,iBAAmB1N,EAAE+I,eAAiB,KAC5D/I,EAAEmf,mBAAoB,EACtBl7B,EAAGs2C,SACL,CAcA,IAZA,IAAIC,GAAW,CACb,EAAG,QAAS,EAAG,YAAa,EAAG,MAAO,GAAI,QAAS,GAAI,QAAS,GAAI,OAAQ,GAAI,MAChF,GAAI,QAAS,GAAI,WAAY,GAAI,MAAO,GAAI,QAAS,GAAI,SAAU,GAAI,WAAY,GAAI,MACvF,GAAI,OAAQ,GAAI,OAAQ,GAAI,KAAM,GAAI,QAAS,GAAI,OAAQ,GAAI,YAAa,GAAI,SAChF,GAAI,SAAU,GAAI,IAAK,GAAI,IAAK,GAAI,MAAO,GAAI,MAAO,GAAI,MAC1D,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,aACvD,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAC/F,IAAK,IAAK,IAAK,IAAK,IAAK,MAAO,MAAO,KAAM,MAAO,OAAQ,MAAO,OAAQ,MAAO,QAAS,MAAO,SAClG,MAAO,OAAQ,MAAO,MAAO,MAAO,SAAU,MAAO,WAAY,MAAO,UAIjEx4C,GAAI,EAAGA,GAAI,GAAIA,KAAOw4C,GAASx4C,GAAI,IAAMw4C,GAASx4C,GAAI,IAAMkT,OAAOlT,IAE5E,IAAK,IAAIsJ,GAAM,GAAIA,IAAO,GAAIA,KAASkvC,GAASlvC,IAAO4J,OAAOulC,aAAanvC,IAE3E,IAAK,IAAIG,GAAM,EAAGA,IAAO,GAAIA,KAAS+uC,GAAS/uC,GAAM,KAAO+uC,GAAS/uC,GAAM,OAAS,IAAMA,GAE1F,IAAIivC,GAAS,CAAC,EA4Cd,SAASC,GAAiB9oC,GACxB,IAEI+oC,EAAKC,EAAM9iB,EAAO+iB,EAFlB5L,EAAQr9B,EAAK3O,MAAM,UACvB2O,EAAOq9B,EAAMA,EAAMnuC,OAAS,GAE5B,IAAK,IAAIiB,EAAI,EAAGA,EAAIktC,EAAMnuC,OAAS,EAAGiB,IAAK,CACzC,IAAI+4C,EAAM7L,EAAMltC,GAChB,GAAI,kBAAkB1D,KAAKy8C,GAAQD,GAAM,OACpC,GAAI,YAAYx8C,KAAKy8C,GAAQH,GAAM,OACnC,GAAI,sBAAsBt8C,KAAKy8C,GAAQF,GAAO,MAC9C,KAAI,cAAcv8C,KAAKy8C,GACrB,MAAM,IAAIjnC,MAAM,+BAAiCinC,GADpBhjB,GAAQ,CACiB,CAC/D,CAKA,OAJI6iB,IAAO/oC,EAAO,OAASA,GACvBgpC,IAAQhpC,EAAO,QAAUA,GACzBipC,IAAOjpC,EAAO,OAASA,GACvBkmB,IAASlmB,EAAO,SAAWA,GACxBA,CACT,CAOA,SAASmpC,GAAgBC,GACvB,IAAIrgC,EAAO,CAAC,EACZ,IAAK,IAAIsgC,KAAWD,EAAU,GAAIA,EAAO71C,eAAe81C,GAAU,CAChE,IAAIl1C,EAAQi1C,EAAOC,GACnB,GAAI,mCAAmC58C,KAAK48C,GAAY,SACxD,GAAa,OAATl1C,EAAgB,QAASi1C,EAAOC,GAAU,QAAS,CAGvD,IADA,IAAIC,EAAOjzC,EAAIgzC,EAAQh4C,MAAM,KAAMy3C,IAC1B34C,EAAI,EAAGA,EAAIm5C,EAAKp6C,OAAQiB,IAAK,CACpC,IAAIgR,OAAM,EAAUnB,OAAO,EACvB7P,GAAKm5C,EAAKp6C,OAAS,GACrB8Q,EAAOspC,EAAK9G,KAAK,KACjBrhC,EAAMhN,IAEN6L,EAAOspC,EAAKt6C,MAAM,EAAGmB,EAAI,GAAGqyC,KAAK,KACjCrhC,EAAM,OAER,IAAIzH,EAAOqP,EAAK/I,GAChB,GAAKtG,GACA,GAAIA,GAAQyH,EAAO,MAAM,IAAIc,MAAM,6BAA+BjC,QAD1D+I,EAAK/I,GAAQmB,CAE5B,QACOioC,EAAOC,EAChB,CACA,IAAK,IAAI/1C,KAAQyV,EAAQqgC,EAAO91C,GAAQyV,EAAKzV,GAC7C,OAAO81C,CACT,CAEA,SAASG,GAAUvwB,EAAK3iB,EAAKmpC,EAAQr5B,GAEnC,IAAIzN,GADJrC,EAAMmzC,GAAUnzC,IACAtD,KAAOsD,EAAItD,KAAKimB,EAAK7S,GAAW9P,EAAI2iB,GACpD,IAAc,IAAVtgB,EAAmB,MAAO,UAC9B,GAAc,QAAVA,EAAmB,MAAO,QAC9B,GAAa,MAATA,GAAiB8mC,EAAO9mC,GAAU,MAAO,UAE7C,GAAIrC,EAAIozC,YAAa,CACnB,GAAuD,kBAAnD7yC,OAAO9D,UAAUqC,SAASpC,KAAKsD,EAAIozC,aACnC,OAAOF,GAAUvwB,EAAK3iB,EAAIozC,YAAajK,EAAQr5B,GACnD,IAAK,IAAIhW,EAAI,EAAGA,EAAIkG,EAAIozC,YAAYv6C,OAAQiB,IAAK,CAC/C,IAAI4O,EAASwqC,GAAUvwB,EAAK3iB,EAAIozC,YAAYt5C,GAAIqvC,EAAQr5B,GACxD,GAAIpH,EAAU,OAAOA,CACvB,CACF,CACF,CAIA,SAAS2qC,GAAcv1C,GACrB,IAAI6L,EAAuB,iBAAT7L,EAAoBA,EAAQw0C,GAASx0C,EAAMw1C,SAC7D,MAAe,QAAR3pC,GAA0B,OAARA,GAAyB,SAARA,GAA2B,OAARA,CAC/D,CAEA,SAAS4pC,GAAiB5pC,EAAM66B,EAAOgP,GACrC,IAAIpzC,EAAOuJ,EAKX,OAJI66B,EAAMiP,QAAkB,OAARrzC,IAAiBuJ,EAAO,OAASA,IAChD3R,EAAcwsC,EAAMkP,QAAUlP,EAAM/8B,UAAoB,QAARrH,IAAkBuJ,EAAO,QAAUA,IACnF3R,EAAcwsC,EAAM/8B,QAAU+8B,EAAMkP,UAAoB,OAARtzC,IAAiBuJ,EAAO,OAASA,IACjF6pC,GAAWhP,EAAMmP,UAAoB,SAARvzC,IAAmBuJ,EAAO,SAAWA,GAChEA,CACT,CAGA,SAASiqC,GAAQpP,EAAOgP,GACtB,GAAIv8C,GAA2B,IAAjButC,EAAM8O,SAAiB9O,EAAY,KAAK,OAAO,EAC7D,IAAI76B,EAAO2oC,GAAS9N,EAAM8O,SAC1B,OAAY,MAAR3pC,IAAgB66B,EAAMqP,cAGL,GAAjBrP,EAAM8O,SAAgB9O,EAAMxhC,OAAQ2G,EAAO66B,EAAMxhC,MAC9CuwC,GAAiB5pC,EAAM66B,EAAOgP,GACvC,CAEA,SAASL,GAAUroC,GACjB,MAAqB,iBAAPA,EAAkB0nC,GAAO1nC,GAAOA,CAChD,CAIA,SAASgpC,GAAoB/3C,EAAIg4C,GAI/B,IAHA,IAAInoB,EAAS7vB,EAAGxB,IAAIoxB,IAAIC,OAAQooB,EAAO,GAG9Bl6C,EAAI,EAAGA,EAAI8xB,EAAO/yB,OAAQiB,IAAK,CAEtC,IADA,IAAIm6C,EAASF,EAAQnoB,EAAO9xB,IACrBk6C,EAAKn7C,QAAUuU,GAAI6mC,EAAOtyC,KAAM7B,EAAIk0C,GAAMpyC,KAAO,GAAG,CACzD,IAAIsyC,EAAWF,EAAKhR,MACpB,GAAI51B,GAAI8mC,EAASvyC,KAAMsyC,EAAOtyC,MAAQ,EAAG,CACvCsyC,EAAOtyC,KAAOuyC,EAASvyC,KACvB,KACF,CACF,CACAqyC,EAAKn0C,KAAKo0C,EACZ,CAEA/a,GAAQn9B,GAAI,WACV,IAAK,IAAIjC,EAAIk6C,EAAKn7C,OAAS,EAAGiB,GAAK,EAAGA,IAClC4uC,GAAa3sC,EAAGxB,IAAK,GAAIy5C,EAAKl6C,GAAG6H,KAAMqyC,EAAKl6C,GAAG8H,GAAI,WACvD6vB,GAAoB11B,EACtB,GACF,CAEA,SAASo4C,GAAkBjvC,EAAMvE,EAAIY,GACnC,IAAIxE,EAASsE,GAAmB6D,EAAKC,KAAMxE,EAAKY,EAAKA,GACrD,OAAOxE,EAAS,GAAKA,EAASmI,EAAKC,KAAKtM,OAAS,KAAOkE,CAC1D,CAEA,SAASq3C,GAAclvC,EAAMhK,EAAOqG,GAClC,IAAIZ,EAAKwzC,GAAkBjvC,EAAMhK,EAAMyF,GAAIY,GAC3C,OAAa,MAANZ,EAAa,KAAO,IAAIwM,GAAIjS,EAAMgK,KAAMvE,EAAIY,EAAM,EAAI,QAAU,SACzE,CAEA,SAAS8yC,GAAUC,EAAUv4C,EAAI0b,EAASjL,EAAQjL,GAChD,GAAI+yC,EAAU,CACY,OAApBv4C,EAAGxB,IAAIwI,YAAsBxB,GAAOA,GACxC,IAAIY,EAAQ8C,GAASwS,EAAS1b,EAAGxB,IAAIwI,WACrC,GAAIZ,EAAO,CACT,IAGIxB,EAHAka,EAAOtZ,EAAM,EAAIzB,EAAIqC,GAASA,EAAM,GAEpCC,EADsBb,EAAM,IAAqB,GAAdsZ,EAAK/X,OACV,QAAU,SAQ5C,GAAI+X,EAAK/X,MAAQ,GAAyB,OAApB/G,EAAGxB,IAAIwI,UAAoB,CAC/C,IAAIwxC,EAAOvyB,GAAsBjmB,EAAI0b,GACrC9W,EAAKY,EAAM,EAAIkW,EAAQtS,KAAKtM,OAAS,EAAI,EACzC,IAAI27C,EAAYzyB,GAAoBhmB,EAAIw4C,EAAM5zC,GAAIyiB,IAClDziB,EAAKc,IAAU,SAAUd,GAAM,OAAOohB,GAAoBhmB,EAAIw4C,EAAM5zC,GAAIyiB,KAAOoxB,CAAW,GAAIjzC,EAAM,IAAqB,GAAdsZ,EAAK/X,OAAc+X,EAAKlZ,KAAOkZ,EAAKjZ,GAAK,EAAGjB,GACzI,UAAVyB,IAAsBzB,EAAKwzC,GAAkB18B,EAAS9W,EAAI,GAChE,MAASA,EAAKY,EAAM,EAAIsZ,EAAKjZ,GAAKiZ,EAAKlZ,KACvC,OAAO,IAAIwL,GAAIX,EAAQ7L,EAAIyB,EAC7B,CACF,CACA,OAAO,IAAI+K,GAAIX,EAAQjL,EAAM,EAAIkW,EAAQtS,KAAKtM,OAAS,EAAG0I,EAAM,EAAI,SAAW,QACjF,CA1MAixC,GAAOiC,MAAQ,CACb,KAAQ,aAAc,MAAS,cAAe,GAAM,WAAY,KAAQ,aACxE,IAAO,YAAa,KAAQ,mBAAoB,OAAU,WAAY,SAAY,aAClF,OAAU,eAAgB,UAAa,gBAAiB,kBAAmB,gBAC3E,IAAO,aAAc,YAAa,aAClC,MAAS,mBAAoB,OAAU,kBACvC,IAAO,mBAKTjC,GAAOkC,UAAY,CACjB,SAAU,YAAa,SAAU,aAAc,SAAU,OAAQ,eAAgB,OAAQ,SAAU,OACnG,YAAa,aAAc,WAAY,WAAY,UAAW,WAAY,YAAa,aACvF,YAAa,cAAe,aAAc,eAAgB,WAAY,cAAe,YAAa,YAClG,iBAAkB,iBAAkB,cAAe,gBAAiB,SAAU,OAAQ,SAAU,OAChG,SAAU,WAAY,eAAgB,WAAY,eAAgB,UAAW,eAAgB,aAC7F,SAAU,aAAc,SAAU,aAClC,SAAU,gBAAiB,eAAgB,gBAAiB,QAAS,gBACrE,YAAe,SAGjBlC,GAAOmC,OAAS,CACd,SAAU,cAAe,SAAU,aAAc,SAAU,WAAY,SAAU,aACjF,SAAU,cAAe,SAAU,YAAa,SAAU,aAAc,eAAgB,WACxF,SAAU,eAAgB,SAAU,gBAAiB,gBAAiB,gBAAiB,SAAU,WACjG,SAAU,iBAAkB,SAAU,YAExCnC,GAAOoC,WAAa,CAClB,QAAS,YAAa,QAAS,aAAc,QAAS,OAAQ,cAAe,OAAQ,QAAS,OAC9F,WAAY,aAAc,SAAU,aAAc,UAAW,WAAY,WAAY,WAAY,WAAY,cAC7G,YAAa,eAAgB,WAAY,aAAc,YAAa,cAAe,gBAAiB,iBACpG,qBAAsB,gBAAiB,aAAc,gBAAiB,QAAS,OAAQ,QAAS,OAChG,QAAS,WAAY,cAAe,WAAY,YAAa,UAAW,kBAAmB,aAC3F,QAAS,aAAc,QAAS,aAAc,gBAAiB,qBAAsB,aAAc,sBACnG,QAAS,gBAAiB,cAAe,gBAAiB,UAAW,aAAc,YAAa,WAChG,YAAe,CAAC,QAAS,WAE3BpC,GAAgB,QAAI96C,EAAM86C,GAAOoC,WAAapC,GAAOkC,UA6OrD,IAAIG,GAAW,CACbrO,UAAWA,GACXsO,gBAAiB,SAAU/4C,GAAM,OAAOA,EAAG8oC,aAAa9oC,EAAG21B,UAAU,UAAW31B,EAAG21B,UAAU,QAAS3yB,EAAiB,EACvHg2C,SAAU,SAAUh5C,GAAM,OAAO+3C,GAAoB/3C,GAAI,SAAU1D,GACjE,GAAIA,EAAMyzB,QAAS,CACjB,IAAI5oB,EAAMuI,GAAQ1P,EAAGxB,IAAKlC,EAAM0zB,KAAK7mB,MAAMC,KAAKtM,OAChD,OAAIR,EAAM0zB,KAAKprB,IAAMuC,GAAO7K,EAAM0zB,KAAK7mB,KAAOnJ,EAAGqb,WACtC,CAACzV,KAAMtJ,EAAM0zB,KAAMnqB,GAAIuL,GAAI9U,EAAM0zB,KAAK7mB,KAAO,EAAG,IAEhD,CAACvD,KAAMtJ,EAAM0zB,KAAMnqB,GAAIuL,GAAI9U,EAAM0zB,KAAK7mB,KAAMhC,GACzD,CACE,MAAO,CAACvB,KAAMtJ,EAAMsJ,OAAQC,GAAIvJ,EAAMuJ,KAE1C,GAAI,EACJozC,WAAY,SAAUj5C,GAAM,OAAO+3C,GAAoB/3C,GAAI,SAAU1D,GAAS,MAAO,CACnFsJ,KAAMwL,GAAI9U,EAAMsJ,OAAOuD,KAAM,GAC7BtD,GAAIgM,GAAQ7R,EAAGxB,IAAK4S,GAAI9U,EAAMuJ,KAAKsD,KAAO,EAAG,IAC3C,GAAI,EACR+vC,YAAa,SAAUl5C,GAAM,OAAO+3C,GAAoB/3C,GAAI,SAAU1D,GAAS,MAAO,CACpFsJ,KAAMwL,GAAI9U,EAAMsJ,OAAOuD,KAAM,GAAItD,GAAIvJ,EAAMsJ,OACzC,GAAI,EACRuzC,mBAAoB,SAAUn5C,GAAM,OAAO+3C,GAAoB/3C,GAAI,SAAU1D,GAC3E,IAAI+qB,EAAMrnB,EAAG8qB,WAAWxuB,EAAM0zB,KAAM,OAAO3I,IAAM,EAEjD,MAAO,CAACzhB,KADM5F,EAAG0rB,WAAW,CAAClf,KAAM,EAAG6a,IAAKA,GAAM,OAC1BxhB,GAAIvJ,EAAMsJ,OACnC,GAAI,EACJwzC,oBAAqB,SAAUp5C,GAAM,OAAO+3C,GAAoB/3C,GAAI,SAAU1D,GAC5E,IAAI+qB,EAAMrnB,EAAG8qB,WAAWxuB,EAAM0zB,KAAM,OAAO3I,IAAM,EAC7CgyB,EAAWr5C,EAAG0rB,WAAW,CAAClf,KAAMxM,EAAGC,QAAQg0B,QAAQ/nB,YAAc,IAAKmb,IAAKA,GAAM,OACrF,MAAO,CAACzhB,KAAMtJ,EAAMsJ,OAAQC,GAAIwzC,EAClC,GAAI,EACJ3H,KAAM,SAAU1xC,GAAM,OAAOA,EAAG0xC,MAAQ,EACxCC,KAAM,SAAU3xC,GAAM,OAAOA,EAAG2xC,MAAQ,EACxCC,cAAe,SAAU5xC,GAAM,OAAOA,EAAG4xC,eAAiB,EAC1DC,cAAe,SAAU7xC,GAAM,OAAOA,EAAG6xC,eAAiB,EAC1DyH,WAAY,SAAUt5C,GAAM,OAAOA,EAAG6oC,gBAAgBz3B,GAAIpR,EAAG8kC,YAAa,GAAK,EAC/EyU,SAAU,SAAUv5C,GAAM,OAAOA,EAAG6oC,gBAAgBz3B,GAAIpR,EAAGqb,YAAc,EACzEm+B,YAAa,SAAUx5C,GAAM,OAAOA,EAAG8wC,oBAAmB,SAAUx0C,GAAS,OAAOmT,GAAUzP,EAAI1D,EAAM0zB,KAAK7mB,KAAO,GAClH,CAAChG,OAAQ,QAAS4iB,KAAM,GACvB,EACH0zB,iBAAkB,SAAUz5C,GAAM,OAAOA,EAAG8wC,oBAAmB,SAAUx0C,GAAS,OAAOo9C,GAAe15C,EAAI1D,EAAM0zB,KAAO,GACvH,CAAC7sB,OAAQ,QAAS4iB,KAAM,GACvB,EACH4zB,UAAW,SAAU35C,GAAM,OAAOA,EAAG8wC,oBAAmB,SAAUx0C,GAAS,OAwG7E,SAAiB0D,EAAIkb,GACnB,IAAI/R,EAAOuG,GAAQ1P,EAAGxB,IAAK0c,GACvBs0B,EAj9KN,SAAuBrmC,GAErB,IADA,IAAI6R,EACGA,EAASL,GAAmBxR,IAC/BA,EAAO6R,EAAOb,KAAK,GAAG,GAAMhR,KAChC,OAAOA,CACT,CA48KeywC,CAAczwC,GAE3B,OADIqmC,GAAUrmC,IAAQ+R,EAAQzK,GAAO++B,IAC9B8I,IAAU,EAAMt4C,EAAImJ,EAAM+R,GAAQ,EAC3C,CA7GoF2+B,CAAQ75C,EAAI1D,EAAM0zB,KAAK7mB,KAAO,GAC9G,CAAChG,OAAQ,QAAS4iB,MAAO,GACxB,EACH+zB,YAAa,SAAU95C,GAAM,OAAOA,EAAG8wC,oBAAmB,SAAUx0C,GAClE,IAAI+qB,EAAMrnB,EAAG+qB,aAAazuB,EAAM0zB,KAAM,OAAO3I,IAAM,EACnD,OAAOrnB,EAAG0rB,WAAW,CAAClf,KAAMxM,EAAGC,QAAQg0B,QAAQ/nB,YAAc,IAAKmb,IAAKA,GAAM,MAC/E,GAAGjkB,EAAW,EACd22C,WAAY,SAAU/5C,GAAM,OAAOA,EAAG8wC,oBAAmB,SAAUx0C,GACjE,IAAI+qB,EAAMrnB,EAAG+qB,aAAazuB,EAAM0zB,KAAM,OAAO3I,IAAM,EACnD,OAAOrnB,EAAG0rB,WAAW,CAAClf,KAAM,EAAG6a,IAAKA,GAAM,MAC5C,GAAGjkB,EAAW,EACd42C,gBAAiB,SAAUh6C,GAAM,OAAOA,EAAG8wC,oBAAmB,SAAUx0C,GACtE,IAAI+qB,EAAMrnB,EAAG+qB,aAAazuB,EAAM0zB,KAAM,OAAO3I,IAAM,EAC/C9jB,EAAMvD,EAAG0rB,WAAW,CAAClf,KAAM,EAAG6a,IAAKA,GAAM,OAC7C,OAAI9jB,EAAIqB,GAAK5E,EAAG0P,QAAQnM,EAAI4F,MAAM1H,OAAO,MAAgBi4C,GAAe15C,EAAI1D,EAAM0zB,MAC3EzsB,CACT,GAAGH,EAAW,EACd62C,SAAU,SAAUj6C,GAAM,OAAOA,EAAGk6C,OAAO,EAAG,OAAS,EACvDC,WAAY,SAAUn6C,GAAM,OAAOA,EAAGk6C,MAAM,EAAG,OAAS,EACxDE,SAAU,SAAUp6C,GAAM,OAAOA,EAAGk6C,OAAO,EAAG,OAAS,EACvDG,WAAY,SAAUr6C,GAAM,OAAOA,EAAGk6C,MAAM,EAAG,OAAS,EACxDI,WAAY,SAAUt6C,GAAM,OAAOA,EAAGu6C,OAAO,EAAG,OAAS,EACzDC,YAAa,SAAUx6C,GAAM,OAAOA,EAAGu6C,MAAM,EAAG,OAAS,EACzDE,aAAc,SAAUz6C,GAAM,OAAOA,EAAGu6C,OAAO,EAAG,SAAW,EAC7DG,cAAe,SAAU16C,GAAM,OAAOA,EAAGu6C,MAAM,EAAG,SAAW,EAC7DI,WAAY,SAAU36C,GAAM,OAAOA,EAAGu6C,OAAO,EAAG,OAAS,EACzDK,aAAc,SAAU56C,GAAM,OAAOA,EAAGu6C,MAAM,EAAG,QAAU,EAC3DM,YAAa,SAAU76C,GAAM,OAAOA,EAAGu6C,OAAO,EAAG,QAAU,EAC3DO,YAAa,SAAU96C,GAAM,OAAOA,EAAGu6C,MAAM,EAAG,OAAS,EACzDQ,cAAe,SAAU/6C,GAAM,OAAOA,EAAGg7C,SAAS,EAAG,YAAc,EACnEC,aAAc,SAAUj7C,GAAM,OAAOA,EAAGg7C,QAAQ,EAAG,OAAS,EAC5DE,cAAe,SAAUl7C,GAAM,OAAOA,EAAGg7C,SAAS,EAAG,OAAS,EAC9DG,aAAc,SAAUn7C,GAAM,OAAOA,EAAGg7C,QAAQ,EAAG,OAAS,EAC5DI,eAAgB,SAAUp7C,GAAM,OAAOA,EAAGg7C,SAAS,EAAG,QAAU,EAChEK,cAAe,SAAUr7C,GAAM,OAAOA,EAAGg7C,QAAQ,EAAG,QAAU,EAC9DM,WAAY,SAAUt7C,GAAM,OAAOA,EAAGu7C,gBAAgB,QAAU,EAChEC,WAAY,SAAUx7C,GAAM,OAAOA,EAAGu7C,gBAAgB,MAAQ,EAC9DE,WAAY,SAAUz7C,GAAM,OAAOA,EAAGu7C,gBAAgB,WAAa,EACnEG,UAAW,SAAU17C,GAAM,OAAOA,EAAGkxC,iBAAiB,KAAO,EAC7DyK,cAAe,SAAU37C,GAEvB,IADA,IAAI47C,EAAS,GAAI/rB,EAAS7vB,EAAG4wC,iBAAkBtvC,EAAUtB,EAAGkO,QAAQ5M,QAC3DvD,EAAI,EAAGA,EAAI8xB,EAAO/yB,OAAQiB,IAAK,CACtC,IAAIwF,EAAMssB,EAAO9xB,GAAG6H,OAChBpC,EAAMpC,EAAYpB,EAAG0P,QAAQnM,EAAI4F,MAAO5F,EAAIqB,GAAItD,GACpDs6C,EAAO93C,KAAKD,EAASvC,EAAUkC,EAAMlC,GACvC,CACAtB,EAAGoxC,kBAAkBwK,EACvB,EACAC,WAAY,SAAU77C,GAChBA,EAAGyjC,oBAAuBzjC,EAAGu7C,gBAAgB,OAC1Cv7C,EAAG87C,YAAY,YACxB,EAQAC,eAAgB,SAAU/7C,GAAM,OAAOm9B,GAAQn9B,GAAI,WAEjD,IADA,IAAI6vB,EAAS7vB,EAAG4wC,iBAAkBS,EAAS,GAClCtzC,EAAI,EAAGA,EAAI8xB,EAAO/yB,OAAQiB,IACjC,GAAK8xB,EAAO9xB,GAAGgyB,QAAf,CACA,IAAIxpB,EAAMspB,EAAO9xB,GAAGiyB,KAAM7mB,EAAOuG,GAAQ1P,EAAGxB,IAAK+H,EAAI4C,MAAMC,KAC3D,GAAID,EAEF,GADI5C,EAAI3B,IAAMuE,EAAKrM,SAAUyJ,EAAM,IAAI6K,GAAI7K,EAAI4C,KAAM5C,EAAI3B,GAAK,IAC1D2B,EAAI3B,GAAK,EACX2B,EAAM,IAAI6K,GAAI7K,EAAI4C,KAAM5C,EAAI3B,GAAK,GACjC5E,EAAG2sC,aAAaxjC,EAAK1D,OAAOc,EAAI3B,GAAK,GAAKuE,EAAK1D,OAAOc,EAAI3B,GAAK,GAC/CwM,GAAI7K,EAAI4C,KAAM5C,EAAI3B,GAAK,GAAI2B,EAAK,mBAC3C,GAAIA,EAAI4C,KAAOnJ,EAAGxB,IAAImR,MAAO,CAClC,IAAIrI,EAAOoI,GAAQ1P,EAAGxB,IAAK+H,EAAI4C,KAAO,GAAGC,KACrC9B,IACFf,EAAM,IAAI6K,GAAI7K,EAAI4C,KAAM,GACxBnJ,EAAG2sC,aAAaxjC,EAAK1D,OAAO,GAAKzF,EAAGxB,IAAI6xC,gBACxB/oC,EAAK7B,OAAO6B,EAAKxK,OAAS,GAC1BsU,GAAI7K,EAAI4C,KAAO,EAAG7B,EAAKxK,OAAS,GAAIyJ,EAAK,cAE7D,CAEF8qC,EAAOvtC,KAAK,IAAI0/B,GAAMj9B,EAAKA,GAlBQ,CAoBrCvG,EAAG+wC,cAAcM,EACnB,GAAI,EACJ2K,iBAAkB,SAAUh8C,GAAM,OAAOm9B,GAAQn9B,GAAI,WAEnD,IADA,IAAIi8C,EAAOj8C,EAAG4wC,iBACL7yC,EAAIk+C,EAAKn/C,OAAS,EAAGiB,GAAK,EAAGA,IAClCiC,EAAG2sC,aAAa3sC,EAAGxB,IAAI6xC,gBAAiB4L,EAAKl+C,GAAGkvB,OAAQgvB,EAAKl+C,GAAGiyB,KAAM,UAC1EisB,EAAOj8C,EAAG4wC,iBACV,IAAK,IAAIvpC,EAAM,EAAGA,EAAM40C,EAAKn/C,OAAQuK,IACjCrH,EAAGk8C,WAAWD,EAAK50C,GAAKzB,OAAOuD,KAAM,MAAM,GAC/CusB,GAAoB11B,EACtB,GAAI,EACJm8C,SAAU,SAAUn8C,GAAM,OAAOA,EAAGkxC,iBAAiB,KAAM,QAAU,EACrEkL,gBAAiB,SAAUp8C,GAAM,OAAOA,EAAGo8C,iBAAmB,GAIhE,SAAS3sC,GAAUzP,EAAIkb,GACrB,IAAI/R,EAAOuG,GAAQ1P,EAAGxB,IAAK0c,GACvBs0B,EAASz0B,GAAW5R,GAExB,OADIqmC,GAAUrmC,IAAQ+R,EAAQzK,GAAO++B,IAC9B8I,IAAU,EAAMt4C,EAAIwvC,EAAQt0B,EAAO,EAC5C,CAOA,SAASw+B,GAAe15C,EAAIuD,GAC1B,IAAIpE,EAAQsQ,GAAUzP,EAAIuD,EAAI4F,MAC1BA,EAAOuG,GAAQ1P,EAAGxB,IAAKW,EAAMgK,MAC7B/C,EAAQ8C,GAASC,EAAMnJ,EAAGxB,IAAIwI,WAClC,IAAKZ,GAA2B,GAAlBA,EAAM,GAAGW,MAAY,CACjC,IAAIs1C,EAAa34C,KAAKkO,IAAIzS,EAAMyF,GAAIuE,EAAKC,KAAK3H,OAAO,OACjD66C,EAAO/4C,EAAI4F,MAAQhK,EAAMgK,MAAQ5F,EAAIqB,IAAMy3C,GAAc94C,EAAIqB,GACjE,OAAOwM,GAAIjS,EAAMgK,KAAMmzC,EAAO,EAAID,EAAYl9C,EAAMkH,OACtD,CACA,OAAOlH,CACT,CAGA,SAASo9C,GAAgBv8C,EAAIw8C,EAAOC,GAClC,GAAoB,iBAATD,KACTA,EAAQ1D,GAAS0D,IACH,OAAO,EAIvBx8C,EAAGC,QAAQif,MAAMw9B,eACjB,IAAIC,EAAY38C,EAAGC,QAAQ6zB,MAAOoS,GAAO,EACzC,IACMlmC,EAAG60C,eAAgB70C,EAAG6O,MAAMk8B,eAAgB,GAC5C0R,IAAaz8C,EAAGC,QAAQ6zB,OAAQ,GACpCoS,EAAOsW,EAAMx8C,IAAO8C,CACtB,CAAE,QACA9C,EAAGC,QAAQ6zB,MAAQ6oB,EACnB38C,EAAG6O,MAAMk8B,eAAgB,CAC3B,CACA,OAAO7E,CACT,CAcA,IAAI0W,GAAU,IAAI36C,EAElB,SAAS46C,GAAY78C,EAAI4N,EAAM5Q,EAAGowC,GAChC,IAAI0P,EAAM98C,EAAG6O,MAAMkuC,OACnB,GAAID,EAAK,CACP,GAAIxF,GAAc1pC,GAAS,MAAO,UAUlC,GATI,MAAMvT,KAAKuT,GACX5N,EAAG6O,MAAMkuC,OAAS,KAElBH,GAAQj6C,IAAI,IAAI,WACZ3C,EAAG6O,MAAMkuC,QAAUD,IACrB98C,EAAG6O,MAAMkuC,OAAS,KAClB/8C,EAAGC,QAAQif,MAAM0U,QAErB,IACEopB,GAAiBh9C,EAAI88C,EAAM,IAAMlvC,EAAM5Q,EAAGowC,GAAW,OAAO,CAClE,CACA,OAAO4P,GAAiBh9C,EAAI4N,EAAM5Q,EAAGowC,EACvC,CAEA,SAAS4P,GAAiBh9C,EAAI4N,EAAM5Q,EAAGowC,GACrC,IAAIzgC,EAjCN,SAA4B3M,EAAI4N,EAAMw/B,GACpC,IAAK,IAAIrvC,EAAI,EAAGA,EAAIiC,EAAG6O,MAAMouC,QAAQngD,OAAQiB,IAAK,CAChD,IAAI4O,EAASwqC,GAAUvpC,EAAM5N,EAAG6O,MAAMouC,QAAQl/C,GAAIqvC,EAAQptC,GAC1D,GAAI2M,EAAU,OAAOA,CACvB,CACA,OAAQ3M,EAAGkO,QAAQgvC,WAAa/F,GAAUvpC,EAAM5N,EAAGkO,QAAQgvC,UAAW9P,EAAQptC,IACzEm3C,GAAUvpC,EAAM5N,EAAGkO,QAAQuoC,OAAQrJ,EAAQptC,EAClD,CA0Bem9C,CAAmBn9C,EAAI4N,EAAMw/B,GAY1C,MAVc,SAAVzgC,IACA3M,EAAG6O,MAAMkuC,OAASnvC,GACR,WAAVjB,GACA4T,GAAYvgB,EAAI,aAAcA,EAAI4N,EAAM5Q,GAE9B,WAAV2P,GAAiC,SAAVA,IACzB5B,GAAiB/N,GACjB01B,GAAa1yB,MAGN2M,CACX,CAGA,SAASywC,GAAiBp9C,EAAIhD,GAC5B,IAAI4Q,EAAOiqC,GAAQ76C,GAAG,GACtB,QAAK4Q,IAED5Q,EAAE46C,WAAa53C,EAAG6O,MAAMkuC,OAInBF,GAAY78C,EAAI,SAAW4N,EAAM5Q,GAAG,SAAU+B,GAAK,OAAOw9C,GAAgBv8C,EAAIjB,GAAG,EAAO,KACxF89C,GAAY78C,EAAI4N,EAAM5Q,GAAG,SAAU+B,GACjC,GAAgB,iBAALA,EAAgB,WAAW1E,KAAK0E,GAAKA,EAAEs+C,OAC9C,OAAOd,GAAgBv8C,EAAIjB,EACjC,IAEA89C,GAAY78C,EAAI4N,EAAM5Q,GAAG,SAAU+B,GAAK,OAAOw9C,GAAgBv8C,EAAIjB,EAAI,IAElF,CAOA,IAAIu+C,GAAiB,KACrB,SAASC,GAAUvgD,GACjB,IAAIgD,EAAKkC,KACT,KAAIlF,EAAEgE,QAAUhE,EAAEgE,QAAUhB,EAAGC,QAAQif,MAAMs+B,aAC7Cx9C,EAAG0K,MAAM2oB,MAAQ90B,EAAUC,EAAIwB,IAC3BkK,GAAelK,EAAIhD,KAAvB,CAEItC,GAAMC,EAAa,IAAmB,IAAbqC,EAAEu6C,UAAiBv6C,EAAEgO,aAAc,GAChE,IAAI/D,EAAOjK,EAAEu6C,QACbv3C,EAAGC,QAAQ6zB,MAAgB,IAAR7sB,GAAcjK,EAAE46C,SACnC,IAAI6F,EAAUL,GAAiBp9C,EAAIhD,GAC/B9B,IACFoiD,GAAiBG,EAAUx2C,EAAO,KAE7Bw2C,GAAmB,IAARx2C,GAAeqG,MAAiB3R,EAAMqB,EAAE26C,QAAU36C,EAAE0O,UAChE1L,EAAGkxC,iBAAiB,GAAI,KAAM,QAEhC92C,IAAUuB,IAAQ8hD,GAAmB,IAARx2C,GAAcjK,EAAE46C,WAAa56C,EAAE0O,SAAW9Q,SAASkhD,aAChFlhD,SAASkhD,YAAY,OAGb,IAAR70C,GAAe,2BAA2B5M,KAAK2F,EAAGC,QAAQg0B,QAAQv3B,YAIxE,SAAuBsD,GACrB,IAAIi0B,EAAUj0B,EAAGC,QAAQg0B,QAGzB,SAASypB,EAAG1gD,GACO,IAAbA,EAAEu6C,SAAkBv6C,EAAE06C,SACxBn7C,EAAQ03B,EAAS,wBACjBpqB,GAAIjP,SAAU,QAAS8iD,GACvB7zC,GAAIjP,SAAU,YAAa8iD,GAE/B,CARA9+C,EAASq1B,EAAS,wBASlB3qB,GAAG1O,SAAU,QAAS8iD,GACtBp0C,GAAG1O,SAAU,YAAa8iD,EAC5B,CAhBMC,CAAc39C,EAjBkB,CAkBtC,CAiBA,SAAS49C,GAAQ5gD,GACE,IAAbA,EAAEu6C,UAAiBr1C,KAAK1D,IAAIoxB,IAAIkE,OAAQ,GAC5C5pB,GAAehI,KAAMlF,EACvB,CAEA,SAAS6gD,GAAW7gD,GAClB,IAAIgD,EAAKkC,KACT,KAAIlF,EAAEgE,QAAUhE,EAAEgE,QAAUhB,EAAGC,QAAQif,MAAMs+B,YACzCn5B,GAAcrkB,EAAGC,QAASjD,IAAMkN,GAAelK,EAAIhD,IAAMA,EAAE0O,UAAY1O,EAAE06C,QAAU/7C,GAAOqB,EAAE26C,SAAhG,CACA,IAAIJ,EAAUv6C,EAAEu6C,QAASuG,EAAW9gD,EAAE8gD,SACtC,GAAI5iD,GAAUq8C,GAAW+F,GAA6D,OAA5CA,GAAiB,UAAMvyC,GAAiB/N,GAClF,IAAK9B,GAAY8B,EAAEwO,SAASxO,EAAEwO,MAAQ,MAAQ4xC,GAAiBp9C,EAAIhD,GAAnE,CACA,IAAI4H,EAAKqM,OAAOulC,aAAyB,MAAZsH,EAAmBvG,EAAUuG,GAEhD,MAANl5C,IA1DN,SAA2B5E,EAAIhD,EAAG4H,GAChC,OAAOi4C,GAAY78C,EAAI,IAAM4E,EAAK,IAAK5H,GAAG,SAAU+B,GAAK,OAAOw9C,GAAgBv8C,EAAIjB,GAAG,EAAO,GAChG,CAyDMg/C,CAAkB/9C,EAAIhD,EAAG4H,IAC7B5E,EAAGC,QAAQif,MAAM2+B,WAAW7gD,GALoD,CAHkC,CASpH,CAEA,IAaIghD,GAAWC,GAXXC,GAAY,SAAS97C,EAAMmB,EAAKkI,GAClCvJ,KAAKE,KAAOA,EACZF,KAAKqB,IAAMA,EACXrB,KAAKuJ,OAASA,CAChB,EA6BA,SAAS0yC,GAAYnhD,GACnB,IAAIgD,EAAKkC,KAAMjC,EAAUD,EAAGC,QAC5B,KAAIiK,GAAelK,EAAIhD,IAAMiD,EAAQshC,aAAethC,EAAQif,MAAMk/B,iBAIlE,GAHAn+C,EAAQif,MAAMw9B,eACdz8C,EAAQ6zB,MAAQ92B,EAAE46C,SAEdvzB,GAAcpkB,EAASjD,GACpBlC,IAGHmF,EAAQulB,SAAS4b,WAAY,EAC7B1+B,YAAW,WAAc,OAAOzC,EAAQulB,SAAS4b,WAAY,CAAM,GAAG,WAI1E,IAAIid,GAAcr+C,EAAIhD,GAAtB,CACA,IAAIuG,EAAMoqB,GAAa3tB,EAAIhD,GAAIyO,EAASF,GAASvO,GAAIshD,EAAS/6C,EArChE,SAAqBA,EAAKkI,GACxB,IAAI8yC,GAAO,IAAI97C,KACf,OAAIw7C,IAAmBA,GAAgBO,QAAQD,EAAKh7C,EAAKkI,IACvDuyC,GAAYC,GAAkB,KACvB,UACED,IAAaA,GAAUQ,QAAQD,EAAKh7C,EAAKkI,IAClDwyC,GAAkB,IAAIC,GAAUK,EAAKh7C,EAAKkI,GAC1CuyC,GAAY,KACL,WAEPA,GAAY,IAAIE,GAAUK,EAAKh7C,EAAKkI,GACpCwyC,GAAkB,KACX,SAEX,CAuBsEQ,CAAYl7C,EAAKkI,GAAU,SAC/FrL,EAAIJ,GAAIqzB,QAGM,GAAV5nB,GAAezL,EAAG6O,MAAM6vC,eACxB1+C,EAAG6O,MAAM6vC,cAAc1hD,GAEvBuG,GAcN,SAA4BvD,EAAIyL,EAAQlI,EAAK+6C,EAAQ7V,GACnD,IAAI76B,EAAO,QAKX,MAJc,UAAV0wC,EAAsB1wC,EAAO,SAAWA,EACzB,UAAV0wC,IAAsB1wC,EAAO,SAAWA,GAG1CivC,GAAY78C,EAAKw3C,GAFxB5pC,GAAkB,GAAVnC,EAAc,OAAmB,GAAVA,EAAc,SAAW,SAAWmC,EAEpB66B,GAAQA,GAAO,SAAU+T,GAEtE,GADoB,iBAATA,IAAqBA,EAAQ1D,GAAS0D,KAC5CA,EAAS,OAAO,EACrB,IAAItW,GAAO,EACX,IACMlmC,EAAG60C,eAAgB70C,EAAG6O,MAAMk8B,eAAgB,GAChD7E,EAAOsW,EAAMx8C,EAAIuD,IAAQT,CAC3B,CAAE,QACA9C,EAAG6O,MAAMk8B,eAAgB,CAC3B,CACA,OAAO7E,CACT,GACF,CAhCayY,CAAmB3+C,EAAIyL,EAAQlI,EAAK+6C,EAAQthD,KAEzC,GAAVyO,EACElI,EA4CR,SAAwBvD,EAAIuD,EAAK+6C,EAAQ7V,GACnC/tC,EAAMgI,WAAWpC,EAAK8yB,GAAapzB,GAAK,GACrCA,EAAG0K,MAAM2oB,MAAQ90B,EAAUC,EAAIwB,IAEtC,IAEsB4+C,EAFlBC,EAjBN,SAAwB7+C,EAAIs+C,EAAQ7V,GAClC,IAAIqW,EAAS9+C,EAAGgd,UAAU,kBACtBjb,EAAQ+8C,EAASA,EAAO9+C,EAAIs+C,EAAQ7V,GAAS,CAAC,EAClD,GAAkB,MAAd1mC,EAAMg9C,KAAc,CACtB,IAAIv4B,EAAO5qB,EAAW6sC,EAAMmP,UAAYnP,EAAMkP,QAAUlP,EAAMiP,OAC9D31C,EAAMg9C,KAAOv4B,EAAO,YAAwB,UAAV83B,EAAqB,OAAmB,UAAVA,EAAqB,OAAS,MAChG,CAIA,OAHoB,MAAhBv8C,EAAM28B,QAAkB1+B,EAAGxB,IAAIkgC,UAAU38B,EAAM28B,OAAS1+B,EAAGxB,IAAIkgC,QAAU+J,EAAMmP,UAC/D,MAAhB71C,EAAMi9C,SAAkBj9C,EAAMi9C,OAASrjD,EAAM8sC,EAAMkP,QAAUlP,EAAM/8B,SAC/C,MAApB3J,EAAMk9C,aAAsBl9C,EAAMk9C,aAAetjD,EAAM8sC,EAAMiP,OAASjP,EAAM/8B,UACzE3J,CACT,CAMiBm9C,CAAel/C,EAAIs+C,EAAQ7V,GAEtC7Y,EAAM5vB,EAAGxB,IAAIoxB,IACb5vB,EAAGkO,QAAQixC,UAAYtzC,KAAgB7L,EAAG60C,cAChC,UAAVyJ,IAAuBM,EAAYhvB,EAAI1xB,SAASqF,KAAS,IACxD8N,IAAKutC,EAAYhvB,EAAIC,OAAO+uB,IAAYh5C,OAAQrC,GAAO,GAAKA,EAAIkoB,KAAO,KACvEpa,GAAIutC,EAAU/4C,KAAMtC,GAAO,GAAKA,EAAIkoB,KAAO,GAQlD,SAA6BzrB,EAAIyoC,EAAOllC,EAAKs7C,GAC3C,IAAI5+C,EAAUD,EAAGC,QAASm/C,GAAQ,EAC9BC,EAAUjiB,GAAUp9B,GAAI,SAAUhD,GAChClC,IAAUmF,EAAQulB,SAAS4b,WAAY,GAC3CphC,EAAG6O,MAAM4kB,cAAe,EACpBzzB,EAAG6O,MAAM2kB,oBACPxzB,EAAGkzB,WAAclzB,EAAG6O,MAAM2kB,mBAAoB,EAC3CD,GAAevzB,IAExB6J,GAAI5J,EAAQC,QAAQC,cAAe,UAAWk/C,GAC9Cx1C,GAAI5J,EAAQC,QAAQC,cAAe,YAAam/C,GAChDz1C,GAAI5J,EAAQulB,SAAU,YAAa+5B,GACnC11C,GAAI5J,EAAQulB,SAAU,OAAQ65B,GACzBD,IACHr0C,GAAiB/N,GACZ6hD,EAASG,QACVnW,GAAgB7oC,EAAGxB,IAAK+E,EAAK,KAAM,KAAMs7C,EAASngB,QAEjD5jC,IAAWK,GAAWT,GAAoB,GAAdC,EAC7B+H,YAAW,WAAazC,EAAQC,QAAQC,cAAczB,KAAK20B,MAAM,CAACmsB,eAAe,IAAQv/C,EAAQif,MAAMmU,OAAQ,GAAG,IAElHpzB,EAAQif,MAAMmU,QAEtB,IACIisB,EAAY,SAASG,GACvBL,EAAQA,GAAS17C,KAAKyjB,IAAIshB,EAAM1a,QAAU0xB,EAAG1xB,SAAWrqB,KAAKyjB,IAAIshB,EAAMza,QAAUyxB,EAAGzxB,UAAY,EAClG,EACIuxB,EAAY,WAAc,OAAOH,GAAQ,CAAM,EAE/CtkD,IAAUmF,EAAQulB,SAAS4b,WAAY,GAC3CphC,EAAG6O,MAAM4kB,aAAe4rB,EACxBA,EAAQ1oC,MAAQkoC,EAASI,WACzB31C,GAAGrJ,EAAQC,QAAQC,cAAe,UAAWk/C,GAC7C/1C,GAAGrJ,EAAQC,QAAQC,cAAe,YAAam/C,GAC/Ch2C,GAAGrJ,EAAQulB,SAAU,YAAa+5B,GAClCj2C,GAAGrJ,EAAQulB,SAAU,OAAQ65B,GAE7Br/C,EAAG6O,MAAM2kB,mBAAoB,EAC7B9wB,YAAW,WAAc,OAAOzC,EAAQif,MAAMmU,OAAS,GAAG,IAEtDpzB,EAAQulB,SAAS25B,UAAYl/C,EAAQulB,SAAS25B,UACpD,CAhDMO,CAAoB1/C,EAAIyoC,EAAOllC,EAAKs7C,GA2D1C,SAA0B7+C,EAAIyoC,EAAOtpC,EAAO0/C,GACtCnkD,GAAM64B,GAAevzB,GACzB,IAAIC,EAAUD,EAAGC,QAAS0/C,EAAQ3/C,EAAGxB,IACrCuM,GAAiB09B,GAEjB,IAAImX,EAAUC,EAAUC,EAAWH,EAAM/vB,IAAKC,EAASiwB,EAASjwB,OAYhE,GAXIgvB,EAASG,SAAWH,EAASngB,QAC/BmhB,EAAWF,EAAM/vB,IAAI1xB,SAASiB,GAE1BygD,EADAC,GAAY,EACDhwB,EAAOgwB,GAEP,IAAIrc,GAAMrkC,EAAOA,KAEhCygD,EAAWD,EAAM/vB,IAAIN,UACrBuwB,EAAWF,EAAM/vB,IAAIE,WAGF,aAAjB+uB,EAASE,KACNF,EAASG,SAAUY,EAAW,IAAIpc,GAAMrkC,EAAOA,IACpDA,EAAQwuB,GAAa3tB,EAAIyoC,GAAO,GAAM,GACtCoX,GAAY,MACP,CACL,IAAIvjD,EAAQyjD,GAAa//C,EAAIb,EAAO0/C,EAASE,MAEzCa,EADAf,EAASngB,OACEiK,GAAYiX,EAAUtjD,EAAM2wB,OAAQ3wB,EAAM0zB,KAAM6uB,EAASngB,QAEzDpiC,CACjB,CAEKuiD,EAASG,QAIU,GAAba,GACTA,EAAWhwB,EAAO/yB,OAClBgsC,GAAa6W,EAAOjc,GAAmB1jC,EAAI6vB,EAAOlmB,OAAO,CAACi2C,IAAYC,GACzD,CAAC58C,QAAQ,EAAOE,OAAQ,YAC5B0sB,EAAO/yB,OAAS,GAAK+yB,EAAOgwB,GAAU9vB,SAA4B,QAAjB8uB,EAASE,OAAmBF,EAASngB,QAC/FoK,GAAa6W,EAAOjc,GAAmB1jC,EAAI6vB,EAAOjzB,MAAM,EAAGijD,GAAUl2C,OAAOkmB,EAAOjzB,MAAMijD,EAAW,IAAK,GAC5F,CAAC58C,QAAQ,EAAOE,OAAQ,WACrC28C,EAAWH,EAAM/vB,KAEjBqZ,GAAoB0W,EAAOE,EAAUD,EAAU18C,IAZ/C28C,EAAW,EACX/W,GAAa6W,EAAO,IAAIxc,GAAU,CAACyc,GAAW,GAAI18C,GAClD48C,EAAWH,EAAM/vB,KAanB,IAAIowB,EAAU7gD,EACd,SAAS8gD,EAAS18C,GAChB,GAAyB,GAArB8N,GAAI2uC,EAASz8C,GAGjB,GAFAy8C,EAAUz8C,EAEW,aAAjBs7C,EAASE,KAAqB,CAKhC,IAJA,IAAIlvB,EAAS,GAAIvuB,EAAUtB,EAAGkO,QAAQ5M,QAClC4+C,EAAW9+C,EAAYsO,GAAQiwC,EAAOxgD,EAAMgK,MAAMC,KAAMjK,EAAMyF,GAAItD,GAClE6+C,EAAS/+C,EAAYsO,GAAQiwC,EAAOp8C,EAAI4F,MAAMC,KAAM7F,EAAIqB,GAAItD,GAC5DkL,EAAO9I,KAAKC,IAAIu8C,EAAUC,GAAS1zC,EAAQ/I,KAAKkO,IAAIsuC,EAAUC,GACzDh3C,EAAOzF,KAAKC,IAAIxE,EAAMgK,KAAM5F,EAAI4F,MAAO/J,EAAMsE,KAAKC,IAAI3D,EAAGqb,WAAY3X,KAAKkO,IAAIzS,EAAMgK,KAAM5F,EAAI4F,OAClGA,GAAQ/J,EAAK+J,IAAQ,CACxB,IAAIC,EAAOsG,GAAQiwC,EAAOx2C,GAAMC,KAAMg3C,EAAU/8C,EAAW+F,EAAMoD,EAAMlL,GACnEkL,GAAQC,EACRojB,EAAO/rB,KAAK,IAAI0/B,GAAMpyB,GAAIjI,EAAMi3C,GAAUhvC,GAAIjI,EAAMi3C,KAC/Ch3C,EAAKtM,OAASsjD,GACnBvwB,EAAO/rB,KAAK,IAAI0/B,GAAMpyB,GAAIjI,EAAMi3C,GAAUhvC,GAAIjI,EAAM9F,EAAW+F,EAAMqD,EAAOnL,KAClF,CACKuuB,EAAO/yB,QAAU+yB,EAAO/rB,KAAK,IAAI0/B,GAAMrkC,EAAOA,IACnD2pC,GAAa6W,EAAOjc,GAAmB1jC,EAAI8/C,EAASjwB,OAAOjzB,MAAM,EAAGijD,GAAUl2C,OAAOkmB,GAASgwB,GACjF,CAAC18C,OAAQ,SAAUF,QAAQ,IACxCjD,EAAGs8B,eAAe/4B,EACpB,KAAO,CACL,IAE8BysB,EAF1BqwB,EAAWT,EACXtjD,EAAQyjD,GAAa//C,EAAIuD,EAAKs7C,EAASE,MACvC9xB,EAASozB,EAASpzB,OAClB5b,GAAI/U,EAAM2wB,OAAQA,GAAU,GAC9B+C,EAAO1zB,EAAM0zB,KACb/C,EAASvb,GAAO2uC,EAASz6C,OAAQtJ,EAAM2wB,UAEvC+C,EAAO1zB,EAAM2wB,OACbA,EAASxb,GAAO4uC,EAASx6C,KAAMvJ,EAAM0zB,OAEvC,IAAIswB,EAAWR,EAASjwB,OAAOjzB,MAAM,GACrC0jD,EAAST,GA2Df,SAAsB7/C,EAAI1D,GACxB,IAAI2wB,EAAS3wB,EAAM2wB,OACf+C,EAAO1zB,EAAM0zB,KACbuwB,EAAa7wC,GAAQ1P,EAAGxB,IAAKyuB,EAAO9jB,MACxC,GAAyB,GAArBkI,GAAI4b,EAAQ+C,IAAc/C,EAAO5mB,QAAU2pB,EAAK3pB,OAAU,OAAO/J,EACrE,IAAI8J,EAAQ8C,GAASq3C,GACrB,IAAKn6C,EAAS,OAAO9J,EACrB,IAAIO,EAAQsJ,GAAcC,EAAO6mB,EAAOroB,GAAIqoB,EAAO5mB,QAASyY,EAAO1Y,EAAMvJ,GACzE,GAAIiiB,EAAKlZ,MAAQqnB,EAAOroB,IAAMka,EAAKjZ,IAAMonB,EAAOroB,GAAM,OAAOtI,EAC7D,IAKIu0B,EALA2vB,EAAW3jD,GAAUiiB,EAAKlZ,MAAQqnB,EAAOroB,KAAsB,GAAdka,EAAK/X,OAAc,EAAI,GAC5E,GAAgB,GAAZy5C,GAAiBA,GAAYp6C,EAAMtJ,OAAU,OAAOR,EAKxD,GAAI0zB,EAAK7mB,MAAQ8jB,EAAO9jB,KACtB0nB,GAAYb,EAAK7mB,KAAO8jB,EAAO9jB,OAA6B,OAApBnJ,EAAGxB,IAAIwI,UAAqB,GAAK,GAAK,MACzE,CACL,IAAIy5C,EAAYt6C,GAAcC,EAAO4pB,EAAKprB,GAAIorB,EAAK3pB,QAC/Cb,EAAMi7C,EAAY5jD,IAAUmzB,EAAKprB,GAAKqoB,EAAOroB,KAAqB,GAAdka,EAAK/X,OAAc,EAAI,GAE3E8pB,EADA4vB,GAAaD,EAAW,GAAKC,GAAaD,EAC/Bh7C,EAAM,EAENA,EAAM,CACvB,CAEA,IAAIk7C,EAAUt6C,EAAMo6C,GAAY3vB,GAAY,EAAI,IAC5CjrB,EAAOirB,IAA8B,GAAjB6vB,EAAQ35C,OAC5BnC,EAAKgB,EAAO86C,EAAQ96C,KAAO86C,EAAQ76C,GAAIQ,EAAST,EAAO,QAAU,SACrE,OAAOqnB,EAAOroB,IAAMA,GAAMqoB,EAAO5mB,QAAUA,EAAS/J,EAAQ,IAAIknC,GAAM,IAAIpyB,GAAI6b,EAAO9jB,KAAMvE,EAAIyB,GAAS2pB,EAC1G,CAzF2B2wB,CAAa3gD,EAAI,IAAIwjC,GAAM3xB,GAAQ8tC,EAAO1yB,GAAS+C,IACxE8Y,GAAa6W,EAAOjc,GAAmB1jC,EAAIsgD,EAAUT,GAAW38C,EAClE,CACF,CAEA,IAAI09C,EAAa3gD,EAAQC,QAAQoM,wBAK7Bu0C,EAAU,EAEd,SAASniB,EAAO1hC,GACd,IAAI8jD,IAAaD,EACbt6C,EAAMonB,GAAa3tB,EAAIhD,GAAG,EAAuB,aAAjB6hD,EAASE,MAC7C,GAAKx4C,EACL,GAAyB,GAArB8K,GAAI9K,EAAKy5C,GAAe,CAC1BhgD,EAAG0K,MAAM2oB,MAAQ90B,EAAUC,EAAIwB,IAC/BigD,EAAS15C,GACT,IAAI23B,EAAU1J,GAAav0B,EAAS0/C,IAChCp5C,EAAI4C,MAAQ+0B,EAAQr4B,IAAMU,EAAI4C,KAAO+0B,EAAQt4B,OAC7ClD,WAAW06B,GAAUp9B,GAAI,WAAiB6gD,GAAWC,GAAYpiB,EAAO1hC,EAAK,IAAI,IACvF,KAAO,CACL,IAAIwuB,EAAUxuB,EAAEgxB,QAAU4yB,EAAWv5B,KAAO,GAAKrqB,EAAEgxB,QAAU4yB,EAAWx5B,OAAS,GAAK,EAClFoE,GAAW9oB,WAAW06B,GAAUp9B,GAAI,WAClC6gD,GAAWC,IACf7gD,EAAQulB,SAAS0E,WAAasB,EAC9BkT,EAAO1hC,GACT,IAAI,GACN,CACF,CAEA,SAASkpC,EAAKlpC,GACZgD,EAAG6O,MAAM6vC,eAAgB,EACzBmC,EAAUnhC,IAIN1iB,IACF+N,GAAiB/N,GACjBiD,EAAQif,MAAMmU,SAEhBxpB,GAAI5J,EAAQC,QAAQC,cAAe,YAAa4gD,GAChDl3C,GAAI5J,EAAQC,QAAQC,cAAe,UAAWu9C,GAC9CiC,EAAMrY,QAAQZ,cAAgB,IAChC,CAEA,IAAIqa,EAAO3jB,GAAUp9B,GAAI,SAAUhD,GACf,IAAdA,EAAEgkD,SAAkBz1C,GAASvO,GAC1B0hC,EAAO1hC,GADyBkpC,EAAKlpC,EAE9C,IACI0gD,EAAKtgB,GAAUp9B,EAAIkmC,GACvBlmC,EAAG6O,MAAM6vC,cAAgBhB,EACzBp0C,GAAGrJ,EAAQC,QAAQC,cAAe,YAAa4gD,GAC/Cz3C,GAAGrJ,EAAQC,QAAQC,cAAe,UAAWu9C,EAC/C,CA/LMuD,CAAiBjhD,EAAIyoC,EAAOllC,EAAKs7C,EACvC,CA1DeqC,CAAelhD,EAAIuD,EAAK+6C,EAAQthD,GAClCqO,GAASrO,IAAMiD,EAAQulB,UAAYza,GAAiB/N,GAC1C,GAAVyO,GACLlI,GAAOslC,GAAgB7oC,EAAGxB,IAAK+E,GACnCb,YAAW,WAAc,OAAOzC,EAAQif,MAAMmU,OAAS,GAAG,KACvC,GAAV5nB,IACLvP,EAAqB8D,EAAGC,QAAQif,MAAMiiC,cAAcnkD,GACjDu2B,GAAevzB,IAlBW,CAoBrC,CAgGA,SAAS+/C,GAAa//C,EAAIuD,EAAKw7C,GAC7B,GAAY,QAARA,EAAkB,OAAO,IAAIvb,GAAMjgC,EAAKA,GAC5C,GAAY,QAARw7C,EAAkB,OAAO/+C,EAAGohD,WAAW79C,GAC3C,GAAY,QAARw7C,EAAkB,OAAO,IAAIvb,GAAMpyB,GAAI7N,EAAI4F,KAAM,GAAI0I,GAAQ7R,EAAGxB,IAAK4S,GAAI7N,EAAI4F,KAAO,EAAG,KAC3F,IAAIwD,EAASoyC,EAAK/+C,EAAIuD,GACtB,OAAO,IAAIigC,GAAM72B,EAAO/G,KAAM+G,EAAO9G,GACvC,CAgLA,SAASw7C,GAAYrhD,EAAIhD,EAAGuK,EAAM+5C,GAChC,IAAIC,EAAIC,EACR,GAAIxkD,EAAEykD,QACJF,EAAKvkD,EAAEykD,QAAQ,GAAG1zB,QAClByzB,EAAKxkD,EAAEykD,QAAQ,GAAGzzB,aAElB,IAAMuzB,EAAKvkD,EAAE+wB,QAASyzB,EAAKxkD,EAAEgxB,OAAS,CACtC,MAAMC,GAAO,OAAO,CAAM,CAE5B,GAAIszB,GAAM79C,KAAKuC,MAAMjG,EAAGC,QAAQkkB,QAAQ7X,wBAAwBG,OAAU,OAAO,EAC7E60C,GAAWv2C,GAAiB/N,GAEhC,IAAIiD,EAAUD,EAAGC,QACbyhD,EAAUzhD,EAAQg0B,QAAQ3nB,wBAE9B,GAAIk1C,EAAKE,EAAQt6B,SAAWxc,GAAW5K,EAAIuH,GAAS,OAAO+C,GAAmBtN,GAC9EwkD,GAAME,EAAQr6B,IAAMpnB,EAAQsqB,WAE5B,IAAK,IAAIxsB,EAAI,EAAGA,EAAIiC,EAAGC,QAAQ2iB,YAAY9lB,SAAUiB,EAAG,CACtD,IAAI4jD,EAAI1hD,EAAQkkB,QAAQjnB,WAAWa,GACnC,GAAI4jD,GAAKA,EAAEr1C,wBAAwBG,OAAS80C,EAI1C,OADAv3C,GAAOhK,EAAIuH,EAAMvH,EAFN2Q,GAAa3Q,EAAGxB,IAAKgjD,GACnBxhD,EAAGC,QAAQ2iB,YAAY7kB,GACFrB,UAAWM,GACtCsN,GAAmBtN,EAE9B,CACF,CAEA,SAASqhD,GAAcr+C,EAAIhD,GACzB,OAAOqkD,GAAYrhD,EAAIhD,EAAG,eAAe,EAC3C,CAOA,SAASmkD,GAAcnhD,EAAIhD,GACrBqnB,GAAcrkB,EAAGC,QAASjD,IAKhC,SAA6BgD,EAAIhD,GAC/B,QAAK4N,GAAW5K,EAAI,sBACbqhD,GAAYrhD,EAAIhD,EAAG,qBAAqB,EACjD,CARsC4kD,CAAoB5hD,EAAIhD,IACxDkN,GAAelK,EAAIhD,EAAG,gBACrBd,GAAqB8D,EAAGC,QAAQif,MAAMiiC,cAAcnkD,EAC3D,CAOA,SAAS6kD,GAAa7hD,GACpBA,EAAGC,QAAQC,QAAQxD,UAAYsD,EAAGC,QAAQC,QAAQxD,UAAUqL,QAAQ,eAAgB,IAClF/H,EAAGkO,QAAQ4zC,MAAM/5C,QAAQ,aAAc,UACzCwhB,GAAYvpB,EACd,CAzYAk+C,GAAUx9C,UAAU89C,QAAU,SAAUp8C,EAAMmB,EAAKkI,GACjD,OAAOvJ,KAAKE,KATU,IASiBA,GACf,GAAtBiP,GAAI9N,EAAKrB,KAAKqB,MAAakI,GAAUvJ,KAAKuJ,MAC9C,EAwYA,IAAIs2C,GAAO,CAACh/C,SAAU,WAAW,MAAO,iBAAiB,GAErDi/C,GAAW,CAAC,EACZC,GAAiB,CAAC,EAkJtB,SAASC,GAAgBliD,EAAI+B,EAAO0W,GAElC,IAAK1W,KADO0W,GAAOA,GAAOspC,IACJ,CACpB,IAAII,EAAQniD,EAAGC,QAAQmiD,cACnBC,EAAStgD,EAAQuH,GAAKO,GAC1Bw4C,EAAOriD,EAAGC,QAAQulB,SAAU,YAAa28B,EAAMhjD,OAC/CkjD,EAAOriD,EAAGC,QAAQulB,SAAU,YAAa28B,EAAMG,OAC/CD,EAAOriD,EAAGC,QAAQulB,SAAU,WAAY28B,EAAMI,MAC9CF,EAAOriD,EAAGC,QAAQulB,SAAU,YAAa28B,EAAMK,OAC/CH,EAAOriD,EAAGC,QAAQulB,SAAU,OAAQ28B,EAAMM,KAC5C,CACF,CAEA,SAASC,GAAgB1iD,GACnBA,EAAGkO,QAAQ4Y,cACbloB,EAASoB,EAAGC,QAAQC,QAAS,mBAC7BF,EAAGC,QAAQskB,MAAM5mB,MAAM+5B,SAAW,GAClC13B,EAAGC,QAAQ8wB,WAAa,OAExBx0B,EAAQyD,EAAGC,QAAQC,QAAS,mBAC5B4b,GAAY9b,IAEdwtB,GAAoBxtB,GACpBouB,GAAUpuB,GACVupB,GAAYvpB,GACZ0C,YAAW,WAAc,OAAOi2B,GAAiB34B,EAAK,GAAG,IAC3D,CAKA,SAASk0C,GAAW3sB,EAAOrZ,GACzB,IAAImgC,EAASnsC,KAEb,KAAMA,gBAAgBgyC,IAAe,OAAO,IAAIA,GAAW3sB,EAAOrZ,GAElEhM,KAAKgM,QAAUA,EAAUA,EAAUpN,EAAQoN,GAAW,CAAC,EAEvDpN,EAAQkhD,GAAU9zC,GAAS,GAE3B,IAAI1P,EAAM0P,EAAQnM,MACA,iBAAPvD,EAAmBA,EAAM,IAAIuxC,GAAIvxC,EAAK0P,EAAQL,KAAM,KAAMK,EAAQmiC,cAAeniC,EAAQlH,WAC3FkH,EAAQL,OAAQrP,EAAI8lC,WAAap2B,EAAQL,MAClD3L,KAAK1D,IAAMA,EAEX,IAAI0gB,EAAQ,IAAIg1B,GAAWyO,YAAYz0C,EAAQ00C,YAAY1gD,MACvDjC,EAAUiC,KAAKjC,QAAU,IAAIkhC,GAAQ5Z,EAAO/oB,EAAK0gB,EAAOhR,GA2C5D,IAAK,IAAIigC,KA1CTluC,EAAQC,QAAQg0C,WAAahyC,KAC7B2/C,GAAa3/C,MACTgM,EAAQ4Y,eACR5kB,KAAKjC,QAAQC,QAAQxD,WAAa,oBACtC68B,GAAer3B,MAEfA,KAAK2M,MAAQ,CACXouC,QAAS,GACTzoC,SAAU,GACVN,QAAS,EACTjT,WAAW,EACXuyB,mBAAmB,EACnBb,SAAS,EACToY,eAAe,EACf8X,eAAgB,EAAGC,aAAc,EACjCpE,eAAe,EACfjrB,cAAc,EACd8J,UAAW,IAAIt7B,EACf86C,OAAQ,KACR1+B,aAAc,MAGZnQ,EAAQ60C,YAAcrnD,GAAUuE,EAAQif,MAAMmU,QAI9C34B,GAAMC,EAAa,IAAM+H,YAAW,WAAc,OAAO2rC,EAAOpuC,QAAQif,MAAM0U,OAAM,EAAO,GAAG,IAmCpG,SAA+B5zB,GAC7B,IAAI+b,EAAI/b,EAAGC,QACXqJ,GAAGyS,EAAEyJ,SAAU,YAAa4X,GAAUp9B,EAAIm+C,KAGtC70C,GAAGyS,EAAEyJ,SAAU,WADf9qB,GAAMC,EAAa,GACQyiC,GAAUp9B,GAAI,SAAUhD,GACnD,IAAIkN,GAAelK,EAAIhD,GAAvB,CACA,IAAIuG,EAAMoqB,GAAa3tB,EAAIhD,GAC3B,GAAKuG,IAAO86C,GAAcr+C,EAAIhD,KAAMqnB,GAAcrkB,EAAGC,QAASjD,GAA9D,CACA+N,GAAiB/N,GACjB,IAAIgmD,EAAOhjD,EAAGohD,WAAW79C,GACzBslC,GAAgB7oC,EAAGxB,IAAKwkD,EAAK/1B,OAAQ+1B,EAAKhzB,KAHiC,CAFvC,CAMtC,IAE6B,SAAUhzB,GAAK,OAAOkN,GAAelK,EAAIhD,IAAM+N,GAAiB/N,EAAI,GAInGsM,GAAGyS,EAAEyJ,SAAU,eAAe,SAAUxoB,GAAK,OAAOmkD,GAAcnhD,EAAIhD,EAAI,IAC1EsM,GAAGyS,EAAEmD,MAAMs+B,WAAY,eAAe,SAAUxgD,GACzC+e,EAAEyJ,SAAStnB,SAASlB,EAAEgE,SAAWmgD,GAAcnhD,EAAIhD,EAC1D,IAGA,IAAIimD,EAAeC,EAAY,CAAC9jD,IAAK,GACrC,SAAS+jD,IACHpnC,EAAEwlB,cACJ0hB,EAAgBvgD,YAAW,WAAc,OAAOqZ,EAAEwlB,YAAc,IAAM,GAAG,MACzE2hB,EAAYnnC,EAAEwlB,aACJniC,KAAO,IAAIqD,KAEzB,CACA,SAAS2gD,EAAsBpmD,GAC7B,GAAwB,GAApBA,EAAEykD,QAAQ3kD,OAAe,OAAO,EACpC,IAAIumD,EAAQrmD,EAAEykD,QAAQ,GACtB,OAAO4B,EAAMC,SAAW,GAAKD,EAAME,SAAW,CAChD,CACA,SAASC,EAAQH,EAAOh4B,GACtB,GAAkB,MAAdA,EAAM7e,KAAgB,OAAO,EACjC,IAAIo1B,EAAKvW,EAAM7e,KAAO62C,EAAM72C,KAAMs1B,EAAKzW,EAAMhE,IAAMg8B,EAAMh8B,IACzD,OAAOua,EAAKA,EAAKE,EAAKA,EAAK,GAC7B,CACAx4B,GAAGyS,EAAEyJ,SAAU,cAAc,SAAUxoB,GACrC,IAAKkN,GAAelK,EAAIhD,KAAOomD,EAAsBpmD,KAAOqhD,GAAcr+C,EAAIhD,GAAI,CAChF+e,EAAEmD,MAAMw9B,eACR75C,aAAaogD,GACb,IAAI1E,GAAO,IAAI97C,KACfsZ,EAAEwlB,YAAc,CAACpiC,MAAOo/C,EAAKa,OAAO,EACnB93C,KAAMi3C,EAAM2E,EAAU9jD,KAAO,IAAM8jD,EAAY,MACxC,GAApBlmD,EAAEykD,QAAQ3kD,SACZif,EAAEwlB,YAAY/0B,KAAOxP,EAAEykD,QAAQ,GAAGgC,MAClC1nC,EAAEwlB,YAAYla,IAAMrqB,EAAEykD,QAAQ,GAAGiC,MAErC,CACF,IACAp6C,GAAGyS,EAAEyJ,SAAU,aAAa,WACtBzJ,EAAEwlB,cAAexlB,EAAEwlB,YAAY6d,OAAQ,EAC7C,IACA91C,GAAGyS,EAAEyJ,SAAU,YAAY,SAAUxoB,GACnC,IAAIqmD,EAAQtnC,EAAEwlB,YACd,GAAI8hB,IAAUh/B,GAActI,EAAG/e,IAAoB,MAAdqmD,EAAM72C,OACtC62C,EAAMjE,OAAS,IAAI38C,KAAO4gD,EAAMlkD,MAAQ,IAAK,CAChD,IAAgD7C,EAA5CiH,EAAMvD,EAAG0rB,WAAW3P,EAAEwlB,YAAa,QAEnCjlC,GADC+mD,EAAM/7C,MAAQk8C,EAAQH,EAAOA,EAAM/7C,MAC5B,IAAIk8B,GAAMjgC,EAAKA,IACjB8/C,EAAM/7C,KAAKA,MAAQk8C,EAAQH,EAAOA,EAAM/7C,KAAKA,MAC3CtH,EAAGohD,WAAW79C,GAEd,IAAIigC,GAAMpyB,GAAI7N,EAAI4F,KAAM,GAAI0I,GAAQ7R,EAAGxB,IAAK4S,GAAI7N,EAAI4F,KAAO,EAAG,KAC1EnJ,EAAG8oC,aAAaxsC,EAAM2wB,OAAQ3wB,EAAM0zB,MACpChwB,EAAGqzB,QACHtoB,GAAiB/N,EACnB,CACAmmD,GACF,IACA75C,GAAGyS,EAAEyJ,SAAU,cAAe29B,GAI9B75C,GAAGyS,EAAEyJ,SAAU,UAAU,WACnBzJ,EAAEyJ,SAASG,eACbuQ,GAAgBl2B,EAAI+b,EAAEyJ,SAAS0E,WAC/BuM,GAAcz2B,EAAI+b,EAAEyJ,SAASsE,YAAY,GACzC9f,GAAOhK,EAAI,SAAUA,GAEzB,IAGAsJ,GAAGyS,EAAEyJ,SAAU,cAAc,SAAUxoB,GAAK,OAAOslC,GAActiC,EAAIhD,EAAI,IACzEsM,GAAGyS,EAAEyJ,SAAU,kBAAkB,SAAUxoB,GAAK,OAAOslC,GAActiC,EAAIhD,EAAI,IAG7EsM,GAAGyS,EAAE7b,QAAS,UAAU,WAAc,OAAO6b,EAAE7b,QAAQgqB,UAAYnO,EAAE7b,QAAQ4pB,WAAa,CAAG,IAE7F/N,EAAEqmC,cAAgB,CAChBE,MAAO,SAAUtlD,GAASkN,GAAelK,EAAIhD,IAAMoO,GAAOpO,EAAK,EAC/DulD,KAAM,SAAUvlD,GAASkN,GAAelK,EAAIhD,KAt5ChD,SAAoBgD,EAAIhD,GACtB,IAAIuG,EAAMoqB,GAAa3tB,EAAIhD,GAC3B,GAAKuG,EAAL,CACA,IAAIogD,EAAO/oD,SAAS2jB,yBACpB0R,GAAoBjwB,EAAIuD,EAAKogD,GACxB3jD,EAAGC,QAAQ41C,aACd71C,EAAGC,QAAQ41C,WAAar4C,EAAI,MAAO,KAAM,6CACzCwC,EAAGC,QAAQykB,UAAU/C,aAAa3hB,EAAGC,QAAQ41C,WAAY71C,EAAGC,QAAQ6yB,YAEtEz1B,EAAqB2C,EAAGC,QAAQ41C,WAAY8N,EAPzB,CAQrB,CA44CsDC,CAAW5jD,EAAIhD,GAAIoO,GAAOpO,GAAK,EACjFmC,MAAO,SAAUnC,GAAK,OA96C1B,SAAqBgD,EAAIhD,GACvB,GAAItC,KAAQsF,EAAG6O,MAAM4kB,eAAiB,IAAIhxB,KAAO+xC,GAAW,KAAQppC,GAAOpO,QAC3E,IAAIkN,GAAelK,EAAIhD,KAAMqnB,GAAcrkB,EAAGC,QAASjD,KAEvDA,EAAE43C,aAAaiP,QAAQ,OAAQ7jD,EAAGiN,gBAClCjQ,EAAE43C,aAAakP,cAAgB,WAI3B9mD,EAAE43C,aAAamP,eAAiB5oD,GAAQ,CAC1C,IAAI6oD,EAAMxmD,EAAI,MAAO,KAAM,KAAM,qCACjCwmD,EAAIC,IAAM,6EACN/oD,IACF8oD,EAAIrgC,MAAQqgC,EAAIzzC,OAAS,EACzBvQ,EAAGC,QAAQC,QAAQ3C,YAAYymD,GAE/BA,EAAIE,KAAOF,EAAIr/B,WAEjB3nB,EAAE43C,aAAamP,aAAaC,EAAK,EAAG,GAChC9oD,GAAU8oD,EAAI3lD,WAAWlB,YAAY6mD,EAC3C,CACF,CAy5CiCG,CAAYnkD,EAAIhD,EAAI,EACjDylD,KAAMrlB,GAAUp9B,EAAIy0C,IACpB+N,MAAO,SAAUxlD,GAASkN,GAAelK,EAAIhD,IAAM03C,GAAgB10C,EAAM,GAG3E,IAAIokD,EAAMroC,EAAEmD,MAAMs+B,WAClBl0C,GAAG86C,EAAK,SAAS,SAAUpnD,GAAK,OAAO4gD,GAAQj9C,KAAKX,EAAIhD,EAAI,IAC5DsM,GAAG86C,EAAK,UAAWhnB,GAAUp9B,EAAIu9C,KACjCj0C,GAAG86C,EAAK,WAAYhnB,GAAUp9B,EAAI69C,KAClCv0C,GAAG86C,EAAK,SAAS,SAAUpnD,GAAK,OAAOs2B,GAAQtzB,EAAIhD,EAAI,IACvDsM,GAAG86C,EAAK,QAAQ,SAAUpnD,GAAK,OAAOm2B,GAAOnzB,EAAIhD,EAAI,GACvD,CA7IEqnD,CAAsBniD,MACtBi0C,KAEAxc,GAAez3B,MACfA,KAAKwI,MAAM2b,aAAc,EACzB0f,GAAU7jC,KAAM1D,GAEX0P,EAAQ60C,YAAcrnD,GAAWwG,KAAKgxB,WACvCxwB,YAAW,WACP2rC,EAAOnb,aAAemb,EAAOx/B,MAAM8jB,SAAWW,GAAQ+a,EAC5D,GAAG,IAEDlb,GAAOjxB,MAEK+/C,GAAsBA,GAAe9gD,eAAegtC,IAChE8T,GAAe9T,GAAKjsC,KAAMgM,EAAQigC,GAAM4T,IAC5ChjB,GAA2B78B,MACvBgM,EAAQo2C,YAAcp2C,EAAQo2C,WAAWpiD,MAC7C,IAAK,IAAInE,EAAI,EAAGA,EAAIwmD,GAAUznD,SAAUiB,EAAKwmD,GAAUxmD,GAAGmE,MAC1Do4B,GAAap4B,MAGTpH,GAAUoT,EAAQ4Y,cACiC,sBAAnD/B,iBAAiB9kB,EAAQg0B,SAASuwB,gBAClCvkD,EAAQg0B,QAAQt2B,MAAM6mD,cAAgB,OAC5C,CAGAtQ,GAAW8N,SAAWA,GAEtB9N,GAAW+N,eAAiBA,GAiH5B,IAAIsC,GAAY,GAQhB,SAASrI,GAAWl8C,EAAI0B,EAAG+iD,EAAKC,GAC9B,IAAkB71C,EAAdrQ,EAAMwB,EAAGxB,IACF,MAAPimD,IAAeA,EAAM,OACd,SAAPA,IAGGjmD,EAAIqP,KAAK82C,OACP91C,EAAQoG,GAAiBjV,EAAI0B,GAAGmN,MADf41C,EAAM,QAIhC,IAAInjD,EAAUtB,EAAGkO,QAAQ5M,QACrB6H,EAAOuG,GAAQlR,EAAKkD,GAAIkjD,EAAWxjD,EAAY+H,EAAKC,KAAM,KAAM9H,GAChE6H,EAAKiM,aAAcjM,EAAKiM,WAAa,MACzC,IAAiDtC,EAA7C+xC,EAAiB17C,EAAKC,KAAKrN,MAAM,QAAQ,GAC7C,GAAK2oD,GAAe,KAAKrqD,KAAK8O,EAAKC,OAG5B,GAAW,SAAPq7C,KACT3xC,EAActU,EAAIqP,KAAK82C,OAAO91C,EAAO1F,EAAKC,KAAKxM,MAAMioD,EAAe/nD,QAASqM,EAAKC,QAC/DtG,GAAQgQ,EAAc,KAAK,CAC5C,IAAK4xC,EAAc,OACnBD,EAAM,MACR,OAPA3xC,EAAc,EACd2xC,EAAM,MAQG,QAAPA,EACmB3xC,EAAjBpR,EAAIlD,EAAImR,MAAuBvO,EAAYsO,GAAQlR,EAAKkD,EAAE,GAAG0H,KAAM,KAAM9H,GACxD,EACL,OAAPmjD,EACT3xC,EAAc8xC,EAAW5kD,EAAGkO,QAAQ42C,WACpB,YAAPL,EACT3xC,EAAc8xC,EAAW5kD,EAAGkO,QAAQ42C,WACb,iBAAPL,IAChB3xC,EAAc8xC,EAAWH,GAE3B3xC,EAAcpP,KAAKkO,IAAI,EAAGkB,GAE1B,IAAIiyC,EAAe,GAAIxhD,EAAM,EAC7B,GAAIvD,EAAGkO,QAAQ82C,eACX,IAAK,IAAIjnD,EAAI2F,KAAKuC,MAAM6M,EAAcxR,GAAUvD,IAAKA,EAAIwF,GAAOjC,EAASyjD,GAAgB,KAG7F,GAFIxhD,EAAMuP,IAAeiyC,GAAgBlhD,EAASiP,EAAcvP,IAE5DwhD,GAAgBF,EAGlB,OAFAlY,GAAanuC,EAAKumD,EAAc3zC,GAAI1P,EAAG,GAAI0P,GAAI1P,EAAGmjD,EAAe/nD,QAAS,UAC1EqM,EAAKiM,WAAa,MACX,EAIP,IAAK,IAAI/N,EAAM,EAAGA,EAAM7I,EAAIoxB,IAAIC,OAAO/yB,OAAQuK,IAAO,CACpD,IAAI/K,EAAQkC,EAAIoxB,IAAIC,OAAOxoB,GAC3B,GAAI/K,EAAM0zB,KAAK7mB,MAAQzH,GAAKpF,EAAM0zB,KAAKprB,GAAKigD,EAAe/nD,OAAQ,CACjE,IAAImoD,EAAQ7zC,GAAI1P,EAAGmjD,EAAe/nD,QAClCmsC,GAAoBzqC,EAAK6I,EAAK,IAAIm8B,GAAMyhB,EAAOA,IAC/C,KACF,CACF,CAEJ,CAhEA/Q,GAAWgR,eAAiB,SAAU3kD,GAAK,OAAOgkD,GAAUzgD,KAAKvD,EAAI,EAqErE,IAAI4kD,GAAa,KAEjB,SAASC,GAAcC,GACrBF,GAAaE,CACf,CAEA,SAASC,GAAetlD,EAAIulD,EAAUC,EAAS51B,EAAKzsB,GAClD,IAAI3E,EAAMwB,EAAGxB,IACbwB,EAAGC,QAAQ6zB,OAAQ,EACdlE,IAAOA,EAAMpxB,EAAIoxB,KAEtB,IAAI61B,GAAU,IAAIhjD,KAAO,IACrBijD,EAAkB,SAAVviD,GAAqBnD,EAAG6O,MAAMg0C,cAAgB4C,EACtDE,EAAYj5C,GAAe64C,GAAWK,EAAa,KAEvD,GAAIF,GAAS91B,EAAIC,OAAO/yB,OAAS,EAC/B,GAAIqoD,IAAcA,GAAW/7C,KAAKgnC,KAAK,OAASmV,GAC9C,GAAI31B,EAAIC,OAAO/yB,OAASqoD,GAAW/7C,KAAKtM,QAAU,EAAG,CACnD8oD,EAAa,GACb,IAAK,IAAI7nD,EAAI,EAAGA,EAAIonD,GAAW/7C,KAAKtM,OAAQiB,IACxC6nD,EAAW9hD,KAAKtF,EAAIquC,WAAWsY,GAAW/7C,KAAKrL,IACrD,OACS4nD,EAAU7oD,QAAU8yB,EAAIC,OAAO/yB,QAAUkD,EAAGkO,QAAQ23C,yBAC7DD,EAAa3hD,EAAI0hD,GAAW,SAAU/4C,GAAK,MAAO,CAACA,EAAI,KAM3D,IAFA,IAAIitB,EAAc75B,EAAG0K,MAAMmvB,YAElBxyB,EAAMuoB,EAAIC,OAAO/yB,OAAS,EAAGuK,GAAO,EAAGA,IAAO,CACrD,IAAI/K,EAAQszB,EAAIC,OAAOxoB,GACnBzB,EAAOtJ,EAAMsJ,OAAQC,EAAKvJ,EAAMuJ,KAChCvJ,EAAMyzB,UACJy1B,GAAWA,EAAU,EACrB5/C,EAAOwL,GAAIxL,EAAKuD,KAAMvD,EAAKhB,GAAK4gD,GAC3BxlD,EAAG6O,MAAM5N,YAAcykD,EAC5B7/C,EAAKuL,GAAIvL,EAAGsD,KAAMzF,KAAKC,IAAI+L,GAAQlR,EAAKqH,EAAGsD,MAAMC,KAAKtM,OAAQ+I,EAAGjB,GAAKb,EAAI4hD,GAAW7oD,SAChF4oD,GAASP,IAAcA,GAAWW,UAAYX,GAAW/7C,KAAKgnC,KAAK,OAASuV,EAAUvV,KAAK,QAChGxqC,EAAOC,EAAKuL,GAAIxL,EAAKuD,KAAM,KAEjC,IAAI48C,EAAc,CAACngD,KAAMA,EAAMC,GAAIA,EAAIuD,KAAMw8C,EAAaA,EAAWv+C,EAAMu+C,EAAW9oD,QAAU6oD,EAC7ExiD,OAAQA,IAAWuiD,EAAQ,QAAU1lD,EAAG6O,MAAMi0C,YAAc2C,EAAS,MAAQ,WAChG5a,GAAW7qC,EAAGxB,IAAKunD,GACnBxlC,GAAYvgB,EAAI,YAAaA,EAAI+lD,EACnC,CACIR,IAAaG,GACbM,GAAgBhmD,EAAIulD,GAExB7vB,GAAoB11B,GAChBA,EAAG0K,MAAMmvB,YAAc,IAAK75B,EAAG0K,MAAMmvB,YAAcA,GACvD75B,EAAG0K,MAAMovB,QAAS,EAClB95B,EAAG6O,MAAMg0C,cAAgB7iD,EAAG6O,MAAMi0C,aAAe,CACnD,CAEA,SAASmD,GAAYjpD,EAAGgD,GACtB,IAAIkmD,EAASlpD,EAAEmpD,eAAiBnpD,EAAEmpD,cAAcxQ,QAAQ,QACxD,GAAIuQ,EAIF,OAHAlpD,EAAEoN,iBACGpK,EAAG60C,cAAiB70C,EAAGkO,QAAQk4C,eAAgBpmD,EAAGkzB,YACnDiK,GAAQn9B,GAAI,WAAc,OAAOslD,GAAetlD,EAAIkmD,EAAQ,EAAG,KAAM,QAAU,KAC5E,CAEX,CAEA,SAASF,GAAgBhmD,EAAIulD,GAE3B,GAAKvlD,EAAGkO,QAAQm4C,eAAkBrmD,EAAGkO,QAAQo4C,YAG7C,IAFA,IAAI12B,EAAM5vB,EAAGxB,IAAIoxB,IAER7xB,EAAI6xB,EAAIC,OAAO/yB,OAAS,EAAGiB,GAAK,EAAGA,IAAK,CAC/C,IAAIzB,EAAQszB,EAAIC,OAAO9xB,GACvB,KAAIzB,EAAM0zB,KAAKprB,GAAK,KAAQ7G,GAAK6xB,EAAIC,OAAO9xB,EAAI,GAAGiyB,KAAK7mB,MAAQ7M,EAAM0zB,KAAK7mB,MAA3E,CACA,IAAI0E,EAAO7N,EAAGumD,UAAUjqD,EAAM0zB,MAC1Bna,GAAW,EACf,GAAIhI,EAAKw4C,eACP,IAAK,IAAIr+C,EAAI,EAAGA,EAAI6F,EAAKw4C,cAAcvpD,OAAQkL,IAC3C,GAAIu9C,EAAS3jD,QAAQiM,EAAKw4C,cAAc5gD,OAAOuC,KAAO,EAAG,CACzD6N,EAAWqmC,GAAWl8C,EAAI1D,EAAM0zB,KAAK7mB,KAAM,SAC3C,KACF,OACO0E,EAAK24C,eACV34C,EAAK24C,cAAcnsD,KAAKqV,GAAQ1P,EAAGxB,IAAKlC,EAAM0zB,KAAK7mB,MAAMC,KAAKxM,MAAM,EAAGN,EAAM0zB,KAAKprB,OAClFiR,EAAWqmC,GAAWl8C,EAAI1D,EAAM0zB,KAAK7mB,KAAM,UAE7C0M,GAAY0K,GAAYvgB,EAAI,gBAAiBA,EAAI1D,EAAM0zB,KAAK7mB,KAb6B,CAc/F,CACF,CAEA,SAASs9C,GAAezmD,GAEtB,IADA,IAAIoJ,EAAO,GAAIymB,EAAS,GACf9xB,EAAI,EAAGA,EAAIiC,EAAGxB,IAAIoxB,IAAIC,OAAO/yB,OAAQiB,IAAK,CACjD,IAAIoL,EAAOnJ,EAAGxB,IAAIoxB,IAAIC,OAAO9xB,GAAGiyB,KAAK7mB,KACjCu9C,EAAY,CAACz5B,OAAQ7b,GAAIjI,EAAM,GAAI6mB,KAAM5e,GAAIjI,EAAO,EAAG,IAC3D0mB,EAAO/rB,KAAK4iD,GACZt9C,EAAKtF,KAAK9D,EAAGuwC,SAASmW,EAAUz5B,OAAQy5B,EAAU12B,MACpD,CACA,MAAO,CAAC5mB,KAAMA,EAAMymB,OAAQA,EAC9B,CAEA,SAAS82B,GAAoBC,EAAOC,EAAYC,EAAaC,GAC3DH,EAAM3oD,aAAa,cAAe6oD,EAAc,GAAK,OACrDF,EAAM3oD,aAAa,iBAAkB8oD,EAAiB,GAAK,OAC3DH,EAAM3oD,aAAa,eAAgB4oD,EACrC,CAEA,SAASG,KACP,IAAI95C,EAAK1P,EAAI,WAAY,KAAM,KAAM,yGACjCsO,EAAMtO,EAAI,MAAO,CAAC0P,GAAK,KAAM,kEAUjC,OALIpS,EAAUoS,EAAGvP,MAAMgmB,MAAQ,SACxBzW,EAAGjP,aAAa,OAAQ,OAE3B1C,IAAO2R,EAAGvP,MAAMspD,OAAS,mBAC7BN,GAAoBz5C,GACbpB,CACT,CAkcA,SAASo7C,GAAS1oD,EAAK+E,EAAKiC,EAAKu5C,EAAMxG,GACrC,IAAIxO,EAASxmC,EACT4jD,EAAU3hD,EACVkW,EAAUhM,GAAQlR,EAAK+E,EAAI4F,MAC3Bi+C,EAAU7O,GAA6B,OAAjB/5C,EAAIwI,WAAsBxB,EAAMA,EAO1D,SAAS6hD,EAASC,GAChB,IAAIh1C,EANA1F,EAOJ,GAAY,aAARmyC,EAAqB,CACvB,IAAIn6C,EAAK8W,EAAQtS,KAAK/D,WAAW9B,EAAIqB,IAAMY,EAAM,EAAI,GAAK,IAC1D,GAAI4f,MAAMxgB,GACR0N,EAAO,SACF,CACL,IAAIi1C,EAAS/hD,EAAM,EAAIZ,GAAM,OAAUA,EAAK,MAASA,GAAM,OAAUA,EAAK,MAC1E0N,EAAO,IAAIlB,GAAI7N,EAAI4F,KAAMzF,KAAKkO,IAAI,EAAGlO,KAAKC,IAAI+X,EAAQtS,KAAKtM,OAAQyG,EAAIqB,GAAKY,GAAO+hD,EAAS,EAAI,MAAO/hD,EACzG,CACF,MACE8M,EADSimC,EAzxDf,SAAsBv4C,EAAImJ,EAAMhK,EAAOqG,GACrC,IAAIgiD,EAAOt+C,GAASC,EAAMnJ,EAAGxB,IAAIwI,WACjC,IAAKwgD,EAAQ,OAAOnP,GAAclvC,EAAMhK,EAAOqG,GAC3CrG,EAAMyF,IAAMuE,EAAKC,KAAKtM,QACxBqC,EAAMyF,GAAKuE,EAAKC,KAAKtM,OACrBqC,EAAMkH,OAAS,UACNlH,EAAMyF,IAAM,IACrBzF,EAAMyF,GAAK,EACXzF,EAAMkH,OAAS,SAEjB,IAAI8kB,EAAUhlB,GAAcqhD,EAAMroD,EAAMyF,GAAIzF,EAAMkH,QAASyY,EAAO0oC,EAAKr8B,GACvE,GAAwB,OAApBnrB,EAAGxB,IAAIwI,WAAsB8X,EAAK/X,MAAQ,GAAK,IAAMvB,EAAM,EAAIsZ,EAAKjZ,GAAK1G,EAAMyF,GAAKka,EAAKlZ,KAAOzG,EAAMyF,IAGxG,OAAOyzC,GAAclvC,EAAMhK,EAAOqG,GAGpC,IACIgzC,EADAiP,EAAK,SAAUlkD,EAAKiC,GAAO,OAAO4yC,GAAkBjvC,EAAM5F,aAAe6N,GAAM7N,EAAIqB,GAAKrB,EAAKiC,EAAM,EAEnGkiD,EAAuB,SAAU9iD,GACnC,OAAK5E,EAAGkO,QAAQ4Y,cAChB0xB,EAAOA,GAAQvyB,GAAsBjmB,EAAImJ,GAClC6iB,GAAsBhsB,EAAImJ,EAAMqvC,EAAM5zC,IAFN,CAACmnB,MAAO,EAAG3sB,IAAK+J,EAAKC,KAAKtM,OAGnE,EACIgvB,EAAoB47B,EAAqC,UAAhBvoD,EAAMkH,OAAqBohD,EAAGtoD,GAAQ,GAAKA,EAAMyF,IAE9F,GAAwB,OAApB5E,EAAGxB,IAAIwI,WAAoC,GAAd8X,EAAK/X,MAAY,CAChD,IAAI4gD,EAAoC,GAAd7oC,EAAK/X,OAAgBvB,EAAM,EACjDZ,EAAK6iD,EAAGtoD,EAAOwoD,EAAqB,GAAK,GAC7C,GAAU,MAAN/iD,IAAgB+iD,EAAwE/iD,GAAMka,EAAKjZ,IAAMjB,GAAMknB,EAAkB1sB,IAA5FwF,GAAMka,EAAKlZ,MAAQhB,GAAMknB,EAAkBC,OAAuD,CAEzI,IAAI1lB,EAASshD,EAAqB,SAAW,QAC7C,OAAO,IAAIv2C,GAAIjS,EAAMgK,KAAMvE,EAAIyB,EACjC,CACF,CAKA,IAAIuhD,EAAqB,SAAUz8B,EAAS3lB,EAAKsmB,GAK/C,IAJA,IAAI+7B,EAAS,SAAUjjD,EAAI+iD,GAAsB,OAAOA,EACpD,IAAIv2C,GAAIjS,EAAMgK,KAAMs+C,EAAG7iD,EAAI,GAAI,UAC/B,IAAIwM,GAAIjS,EAAMgK,KAAMvE,EAAI,QAAU,EAE/BumB,GAAW,GAAKA,EAAUq8B,EAAK1qD,OAAQquB,GAAW3lB,EAAK,CAC5D,IAAIsZ,EAAO0oC,EAAKr8B,GACZw8B,EAAsBniD,EAAM,IAAqB,GAAdsZ,EAAK/X,OACxCnC,EAAK+iD,EAAqB77B,EAAkBC,MAAQ07B,EAAG37B,EAAkB1sB,KAAM,GACnF,GAAI0f,EAAKlZ,MAAQhB,GAAMA,EAAKka,EAAKjZ,GAAM,OAAOgiD,EAAOjjD,EAAI+iD,GAEzD,GADA/iD,EAAK+iD,EAAqB7oC,EAAKlZ,KAAO6hD,EAAG3oC,EAAKjZ,IAAK,GAC/CimB,EAAkBC,OAASnnB,GAAMA,EAAKknB,EAAkB1sB,IAAO,OAAOyoD,EAAOjjD,EAAI+iD,EACvF,CACF,EAGIG,EAAMF,EAAmBz8B,EAAU3lB,EAAKA,EAAKsmB,GACjD,GAAIg8B,EAAO,OAAOA,EAGlB,IAAIC,EAASviD,EAAM,EAAIsmB,EAAkB1sB,IAAMqoD,EAAG37B,EAAkBC,OAAQ,GAC5E,OAAc,MAAVg8B,GAAoBviD,EAAM,GAAKuiD,GAAU5+C,EAAKC,KAAKtM,UACrDgrD,EAAMF,EAAmBpiD,EAAM,EAAI,EAAIgiD,EAAK1qD,OAAS,EAAG0I,EAAKkiD,EAAqBK,KAK7E,KAJaD,CAKtB,CAutDaE,CAAaxpD,EAAIwB,GAAI0b,EAASnY,EAAKiC,GAEnC6yC,GAAc38B,EAASnY,EAAKiC,GAErC,GAAY,MAAR8M,EAAc,CAChB,GAAKg1C,KArBH16C,EAAIrJ,EAAI4F,KAAOi+C,GACX5oD,EAAImR,OAAS/C,GAAKpO,EAAImR,MAAQnR,EAAIoR,OAC1CrM,EAAM,IAAI6N,GAAIxE,EAAGrJ,EAAIqB,GAAIrB,EAAI8C,UACtBqV,EAAUhM,GAAQlR,EAAKoO,MAqBxB,OAAO,EAFPrJ,EAAM+0C,GAAUC,EAAU/5C,EAAIwB,GAAI0b,EAASnY,EAAI4F,KAAMi+C,EAG3D,MACE7jD,EAAM+O,EAER,OAAO,CACT,CAEA,GAAY,QAARysC,GAA0B,aAARA,EACpBsI,SACK,GAAY,UAARtI,EACTsI,GAAS,QACJ,GAAY,QAARtI,GAA0B,SAARA,EAG3B,IAFA,IAAIkJ,EAAU,KAAMztB,EAAgB,SAARukB,EACxB/5C,EAASxG,EAAIwB,IAAMxB,EAAIwB,GAAGkoD,UAAU3kD,EAAK,aACpCoM,GAAQ,IACXnK,EAAM,IAAM6hD,GAAU13C,GADJA,GAAQ,EAAO,CAErC,IAAIpJ,EAAMmV,EAAQtS,KAAK3D,OAAOlC,EAAIqB,KAAO,KACrC2C,EAAOxC,GAAWwB,EAAKvB,GAAU,IACjCw1B,GAAgB,MAAPj0B,EAAc,KACtBi0B,GAAS,KAAKngC,KAAKkM,GAAO,KAC3B,IAEJ,IADIi0B,GAAU7qB,GAAUpI,IAAQA,EAAO,KACnC0gD,GAAWA,GAAW1gD,EAAM,CAC1B/B,EAAM,IAAIA,EAAM,EAAG6hD,IAAY9jD,EAAI8C,OAAS,SAChD,KACF,CAGA,GADIkB,IAAQ0gD,EAAU1gD,GAClB/B,EAAM,IAAM6hD,GAAU13C,GAAU,KACtC,CAEF,IAAIhD,EAASi9B,GAAWprC,EAAK+E,EAAKwmC,EAAQod,GAAS,GAEnD,OADI71C,GAAey4B,EAAQp9B,KAAWA,EAAOw7C,SAAU,GAChDx7C,CACT,CAKA,SAASy7C,GAASpoD,EAAIuD,EAAKiC,EAAKu5C,GAC9B,IAAgCpzB,EAS5B3qB,EATAxC,EAAMwB,EAAGxB,IAAKgT,EAAIjO,EAAIiJ,KAC1B,GAAY,QAARuyC,EAAgB,CAClB,IAAIsJ,EAAW3kD,KAAKC,IAAI3D,EAAGC,QAAQC,QAAQylB,aAAcvlB,EAAIJ,GAAIo8B,aAAe59B,EAAIwB,GAAI6pB,gBAAgBlE,cACpG2iC,EAAa5kD,KAAKkO,IAAIy2C,EAAW,GAAKr7B,GAAWhtB,EAAGC,SAAU,GAClE0rB,GAAKnmB,EAAM,EAAIjC,EAAI6jB,OAAS7jB,EAAI8jB,KAAO7hB,EAAM8iD,CAE/C,KAAmB,QAARvJ,IACTpzB,EAAInmB,EAAM,EAAIjC,EAAI6jB,OAAS,EAAI7jB,EAAI8jB,IAAM,GAG3C,MACErmB,EAAS0qB,GAAW1rB,EAAIwR,EAAGma,IACfH,SAFL,CAGP,GAAIhmB,EAAM,EAAImmB,GAAK,EAAIA,GAAKntB,EAAI+R,OAAQ,CAAEvP,EAAOmnD,SAAU,EAAM,KAAM,CACvEx8B,GAAW,EAANnmB,CACP,CACA,OAAOxE,CACT,CAIA,IAAIunD,GAAuB,SAASvoD,GAClCkC,KAAKlC,GAAKA,EACVkC,KAAKsmD,eAAiBtmD,KAAKumD,iBAAmBvmD,KAAKwmD,cAAgBxmD,KAAKymD,gBAAkB,KAC1FzmD,KAAK0mD,QAAU,IAAI3mD,EACnBC,KAAK2mD,UAAY,KACjB3mD,KAAK4mD,aAAc,EACnB5mD,KAAK6mD,eAAiB,IACxB,EA0XA,SAASC,GAAShpD,EAAIuD,GACpB,IAAI6c,EAAO8F,GAAgBlmB,EAAIuD,EAAI4F,MACnC,IAAKiX,GAAQA,EAAKH,OAAU,OAAO,KACnC,IAAI9W,EAAOuG,GAAQ1P,EAAGxB,IAAK+E,EAAI4F,MAC3B8F,EAAO4W,GAAgBzF,EAAMjX,EAAM5F,EAAI4F,MAEvC/C,EAAQ8C,GAASC,EAAMnJ,EAAGxB,IAAIwI,WAAYuqB,EAAO,OACjDnrB,IAEFmrB,EADcprB,GAAcC,EAAO7C,EAAIqB,IACtB,EAAI,QAAU,QAEjC,IAAI+H,EAAS6a,GAAuBvY,EAAKhL,IAAKV,EAAIqB,GAAI2sB,GAEtD,OADA5kB,EAAOwM,OAA4B,SAAnBxM,EAAOhN,SAAsBgN,EAAOvN,IAAMuN,EAAOxN,MAC1DwN,CACT,CAQA,SAASs8C,GAAO1lD,EAAK2lD,GAAoC,OAAzBA,IAAO3lD,EAAI2lD,KAAM,GAAe3lD,CAAI,CAuDpE,SAAS4lD,GAASnpD,EAAIxD,EAAM2c,GAC1B,IAAIiwC,EACJ,GAAI5sD,GAAQwD,EAAGC,QAAQg0B,QAAS,CAE9B,KADAm1B,EAAWppD,EAAGC,QAAQg0B,QAAQ/2B,WAAWic,IACxB,OAAO8vC,GAAOjpD,EAAG6R,QAAQT,GAAIpR,EAAGC,QAAQkW,OAAS,KAAK,GACvE3Z,EAAO,KAAM2c,EAAS,CACxB,MACE,IAAKiwC,EAAW5sD,GAAO4sD,EAAWA,EAAS/qD,WAAY,CACrD,IAAK+qD,GAAYA,GAAYppD,EAAGC,QAAQg0B,QAAW,OAAO,KAC1D,GAAIm1B,EAAS/qD,YAAc+qD,EAAS/qD,YAAc2B,EAAGC,QAAQg0B,QAAW,KAC1E,CAEF,IAAK,IAAIl2B,EAAI,EAAGA,EAAIiC,EAAGC,QAAQmgB,KAAKtjB,OAAQiB,IAAK,CAC/C,IAAI4e,EAAW3c,EAAGC,QAAQmgB,KAAKriB,GAC/B,GAAI4e,EAASngB,MAAQ4sD,EACjB,OAAOC,GAAqB1sC,EAAUngB,EAAM2c,EAClD,CACF,CAEA,SAASkwC,GAAqB1sC,EAAUngB,EAAM2c,GAC5C,IAAIjZ,EAAUyc,EAASvT,KAAKhM,WAAY8rD,GAAM,EAC9C,IAAK1sD,IAAS0B,EAASgC,EAAS1D,GAAS,OAAOysD,GAAO73C,GAAIX,GAAOkM,EAASxT,MAAO,IAAI,GACtF,GAAI3M,GAAQ0D,IACVgpD,GAAM,EACN1sD,EAAO0D,EAAQhD,WAAWic,GAC1BA,EAAS,GACJ3c,GAAM,CACT,IAAI2M,EAAOwT,EAASM,KAAOlZ,EAAI4Y,EAASM,MAAQN,EAASxT,KACzD,OAAO8/C,GAAO73C,GAAIX,GAAOtH,GAAOA,EAAKC,KAAKtM,QAASosD,EACrD,CAGF,IAAII,EAA4B,GAAjB9sD,EAAK4B,SAAgB5B,EAAO,KAAM+sD,EAAU/sD,EAK3D,IAJK8sD,GAAsC,GAA1B9sD,EAAKU,WAAWJ,QAA2C,GAA5BN,EAAKY,WAAWgB,WAC9DkrD,EAAW9sD,EAAKY,WACZ+b,IAAUA,EAASmwC,EAASE,UAAU1sD,SAErCysD,EAAQlrD,YAAc6B,GAAWqpD,EAAUA,EAAQlrD,WAC1D,IAAI2N,EAAU2Q,EAAS3Q,QAASuR,EAAOvR,EAAQuR,KAE/C,SAASpD,EAAKmvC,EAAUC,EAASpwC,GAC/B,IAAK,IAAIpb,GAAK,EAAGA,GAAKwf,EAAOA,EAAKzgB,OAAS,GAAIiB,IAE7C,IADA,IAAIkG,EAAMlG,EAAI,EAAIiO,EAAQ/H,IAAMsZ,EAAKxf,GAC5BiK,EAAI,EAAGA,EAAI/D,EAAInH,OAAQkL,GAAK,EAAG,CACtC,IAAIyhD,EAAUxlD,EAAI+D,EAAI,GACtB,GAAIyhD,GAAWH,GAAYG,GAAWF,EAAS,CAC7C,IAAIpgD,EAAOsH,GAAO1S,EAAI,EAAI4e,EAASxT,KAAOwT,EAASM,KAAKlf,IACpD6G,EAAKX,EAAI+D,GAAKmR,EAElB,OADIA,EAAS,GAAKswC,GAAWH,KAAY1kD,EAAKX,EAAI+D,GAAKmR,EAAS,EAAI,KAC7D/H,GAAIjI,EAAMvE,EACnB,CACF,CAEJ,CACA,IAAI0B,EAAQ6T,EAAKmvC,EAAUC,EAASpwC,GACpC,GAAI7S,EAAS,OAAO2iD,GAAO3iD,EAAO4iD,GAGlC,IAAK,IAAIvsD,EAAQ4sD,EAAQvmC,YAAa+J,EAAOu8B,EAAWA,EAASE,UAAU1sD,OAASqc,EAAS,EAAGxc,EAAOA,EAAQA,EAAMqmB,YAAa,CAEhI,GADA1c,EAAQ6T,EAAKxd,EAAOA,EAAMS,WAAY,GAElC,OAAO6rD,GAAO73C,GAAI9K,EAAM6C,KAAM7C,EAAM1B,GAAKmoB,GAAOm8B,GAEhDn8B,GAAQpwB,EAAM+sD,YAAY5sD,MAChC,CACA,IAAK,IAAIwL,EAASihD,EAAQI,gBAAiBC,EAASzwC,EAAQ7Q,EAAQA,EAASA,EAAOqhD,gBAAiB,CAEnG,GADArjD,EAAQ6T,EAAK7R,EAAQA,EAAOlL,YAAa,GAErC,OAAO6rD,GAAO73C,GAAI9K,EAAM6C,KAAM7C,EAAM1B,GAAKglD,GAASV,GAElDU,GAAUthD,EAAOohD,YAAY5sD,MACnC,CACF,CA7gBAyrD,GAAqB7nD,UAAU8gC,KAAO,SAAUvhC,GAC5C,IAAIouC,EAASnsC,KAEXgd,EAAQhd,KAAMlC,EAAKkf,EAAMlf,GACzB8L,EAAMoT,EAAMpT,IAAM7L,EAAQg0B,QAI9B,SAAS41B,EAAe7sD,GACtB,IAAK,IAAIk4C,EAAIl4C,EAAEgE,OAAQk0C,EAAGA,EAAIA,EAAE72C,WAAY,CAC1C,GAAI62C,GAAKppC,EAAO,OAAO,EACvB,GAAI,iCAAiCzR,KAAK66C,EAAEx4C,WAAc,KAC5D,CACA,OAAO,CACT,CA2BA,SAASotD,EAAU9sD,GACjB,GAAK6sD,EAAe7sD,KAAMkN,GAAelK,EAAIhD,GAA7C,CACA,GAAIgD,EAAGyjC,oBACL2hB,GAAc,CAACU,UAAU,EAAO18C,KAAMpJ,EAAGixC,kBAC3B,OAAVj0C,EAAEuK,MAAiBvH,EAAGkxC,iBAAiB,GAAI,KAAM,WAChD,KAAKlxC,EAAGkO,QAAQ67C,gBACrB,OAEA,IAAIl6B,EAAS42B,GAAezmD,GAC5BolD,GAAc,CAACU,UAAU,EAAM18C,KAAMymB,EAAOzmB,OAC9B,OAAVpM,EAAEuK,MACJvH,EAAGo9B,WAAU,WACXp9B,EAAG+wC,cAAclhB,EAAOA,OAAQ,EAAG7sB,GACnChD,EAAGkxC,iBAAiB,GAAI,KAAM,MAChC,GAEJ,CACA,GAAIl0C,EAAEmpD,cAAe,CACnBnpD,EAAEmpD,cAAc6D,YAChB,IAAItsD,EAAUynD,GAAW/7C,KAAKgnC,KAAK,MAGnC,GADApzC,EAAEmpD,cAActC,QAAQ,OAAQnmD,GAC5BV,EAAEmpD,cAAcxQ,QAAQ,SAAWj4C,EAErC,YADAV,EAAEoN,gBAGN,CAEA,IAAI6/C,EAASjD,KAAkB95C,EAAK+8C,EAAO7sD,WAC3C4C,EAAGC,QAAQykB,UAAU/C,aAAasoC,EAAQjqD,EAAGC,QAAQykB,UAAUtnB,YAC/D8P,EAAGnL,MAAQojD,GAAW/7C,KAAKgnC,KAAK,MAChC,IAAI8Z,EAAW3rD,EAAUuN,EAAI3L,eAC7BL,EAAYoN,GACZxK,YAAW,WACT1C,EAAGC,QAAQykB,UAAUvnB,YAAY8sD,GACjCC,EAAS72B,QACL62B,GAAYp+C,GAAOoT,EAAMirC,sBAC/B,GAAG,GApCuD,CAqC5D,CA1EAr+C,EAAIs+C,iBAAkB,EACtBzD,GAAoB76C,EAAK9L,EAAGkO,QAAQ24C,WAAY7mD,EAAGkO,QAAQ44C,YAAa9mD,EAAGkO,QAAQ64C,gBAUnFz9C,GAAGwC,EAAK,SAAS,SAAU9O,IACpB6sD,EAAe7sD,IAAMkN,GAAelK,EAAIhD,IAAMipD,GAAYjpD,EAAGgD,IAE9DrF,GAAc,IAAM+H,WAAW06B,GAAUp9B,GAAI,WAAc,OAAOquC,EAAOgc,eAAiB,IAAI,GACpG,IAEA/gD,GAAGwC,EAAK,oBAAoB,SAAU9O,GACpCqxC,EAAOwa,UAAY,CAAC5jC,KAAMjoB,EAAEioB,KAAMihB,MAAM,EAC1C,IACA58B,GAAGwC,EAAK,qBAAqB,SAAU9O,GAChCqxC,EAAOwa,YAAaxa,EAAOwa,UAAY,CAAC5jC,KAAMjoB,EAAEioB,KAAMihB,MAAM,GACnE,IACA58B,GAAGwC,EAAK,kBAAkB,SAAU9O,GAC9BqxC,EAAOwa,YACL7rD,EAAEioB,MAAQopB,EAAOwa,UAAU5jC,MAAQopB,EAAOic,kBAC9Cjc,EAAOwa,UAAU3iB,MAAO,EAE5B,IAEA58B,GAAGwC,EAAK,cAAc,WAAc,OAAOoT,EAAMqrC,qBAAuB,IAExEjhD,GAAGwC,EAAK,SAAS,WACVuiC,EAAOwa,WAAaxa,EAAOic,iBAClC,IAyCAhhD,GAAGwC,EAAK,OAAQg+C,GAChBxgD,GAAGwC,EAAK,MAAOg+C,EACjB,EAEAvB,GAAqB7nD,UAAU8pD,yBAA2B,SAAUC,GAE/DA,EACDvoD,KAAK4J,IAAI7N,aAAa,aAAcwsD,GAEpCvoD,KAAK4J,IAAI4+C,gBAAgB,aAE7B,EAEAnC,GAAqB7nD,UAAU2uB,iBAAmB,WAChD,IAAI1iB,EAAS0iB,GAAiBntB,KAAKlC,IAAI,GAEvC,OADA2M,EAAO0mB,MAAQ90B,EAAU2D,KAAK4J,IAAI3L,gBAAkB+B,KAAK4J,IAClDa,CACT,EAEA47C,GAAqB7nD,UAAU0uB,cAAgB,SAAUngB,EAAM6sB,GACxD7sB,GAAS/M,KAAKlC,GAAGC,QAAQmgB,KAAKtjB,UAC/BmS,EAAKokB,OAASyI,IAAa55B,KAAKioD,uBACpCjoD,KAAKyoD,uBAAuB17C,GAC9B,EAEAs5C,GAAqB7nD,UAAUuM,aAAe,WAC5C,OAAO/K,KAAKlC,GAAGC,QAAQC,QAAQC,cAAc8M,cAC/C,EAEAs7C,GAAqB7nD,UAAUypD,qBAAuB,WACpD,IAAIv6B,EAAM1tB,KAAK+K,eAAgBjN,EAAKkC,KAAKlC,GAAI6jC,EAAO7jC,EAAGxB,IAAIoxB,IAAIN,UAC3D1pB,EAAOi+B,EAAKj+B,OAAQC,EAAKg+B,EAAKh+B,KAElC,GAAI7F,EAAGC,QAAQkW,QAAUnW,EAAGC,QAAQiW,UAAYtQ,EAAKuD,MAAQnJ,EAAGC,QAAQkW,QAAUtQ,EAAGsD,KAAOnJ,EAAGC,QAAQiW,SACrG0Z,EAAImQ,sBADN,CAKA,IAAI6qB,EAAYzB,GAASnpD,EAAI4vB,EAAI6O,WAAY7O,EAAI+O,cAC7CksB,EAAW1B,GAASnpD,EAAI4vB,EAAIgP,UAAWhP,EAAIiP,aAC/C,IAAI+rB,GAAcA,EAAU1B,MAAO2B,GAAaA,EAAS3B,KACX,GAA1C73C,GAAIK,GAAOk5C,EAAWC,GAAWjlD,IACO,GAAxCyL,GAAII,GAAOm5C,EAAWC,GAAWhlD,GAFrC,CAKA,IAAIua,EAAOpgB,EAAGC,QAAQmgB,KAClBjhB,EAASyG,EAAKuD,MAAQnJ,EAAGC,QAAQiW,UAAY8yC,GAAShpD,EAAI4F,IAC1D,CAACpJ,KAAM4jB,EAAK,GAAGpU,QAAQ/H,IAAI,GAAIkV,OAAQ,GACvC/Z,EAAMyG,EAAGsD,KAAOnJ,EAAGC,QAAQkW,QAAU6yC,GAAShpD,EAAI6F,GACtD,IAAKzG,EAAK,CACR,IAAI4M,EAAUoU,EAAKA,EAAKtjB,OAAS,GAAGkP,QAChC/H,EAAM+H,EAAQuR,KAAOvR,EAAQuR,KAAKvR,EAAQuR,KAAKzgB,OAAS,GAAKkP,EAAQ/H,IACzE7E,EAAM,CAAC5C,KAAMyH,EAAIA,EAAInH,OAAS,GAAIqc,OAAQlV,EAAIA,EAAInH,OAAS,GAAKmH,EAAIA,EAAInH,OAAS,GACnF,CAEA,GAAKqC,GAAUC,EAAf,CAKA,IAA+C0rD,EAA3CryC,EAAMmX,EAAIm7B,YAAcn7B,EAAIo7B,WAAW,GAC3C,IAAMF,EAAMxuD,EAAM6C,EAAM3C,KAAM2C,EAAMga,OAAQ/Z,EAAI+Z,OAAQ/Z,EAAI5C,KAAO,CACnE,MAAMQ,GAAI,CACN8tD,KACG1wD,GAAS4F,EAAG6O,MAAM8jB,SACrB/C,EAAIjwB,SAASR,EAAM3C,KAAM2C,EAAMga,QAC1B2xC,EAAIrwC,YACPmV,EAAImQ,kBACJnQ,EAAIoQ,SAAS8qB,MAGfl7B,EAAImQ,kBACJnQ,EAAIoQ,SAAS8qB,IAEXryC,GAAyB,MAAlBmX,EAAI6O,WAAsB7O,EAAIoQ,SAASvnB,GACzCre,GAAS8H,KAAK+oD,oBAEzB/oD,KAAKgpD,mBAnBL,MAFEt7B,EAAImQ,iBAbK,CAPX,CA0CF,EAEAwoB,GAAqB7nD,UAAUuqD,iBAAmB,WAC9C,IAAI5c,EAASnsC,KAEfW,aAAaX,KAAK4mD,aAClB5mD,KAAK4mD,YAAcpmD,YAAW,WAC5B2rC,EAAOya,aAAc,EACjBza,EAAOpU,oBACPoU,EAAOruC,GAAGo9B,WAAU,WAAc,OAAOiR,EAAOruC,GAAG0K,MAAMuvB,kBAAmB,CAAM,GACxF,GAAG,GACL,EAEAsuB,GAAqB7nD,UAAUiqD,uBAAyB,SAAU17C,GAChE5R,EAAqB6E,KAAKlC,GAAGC,QAAQ6yB,UAAW7jB,EAAKugB,SACrDnyB,EAAqB6E,KAAKlC,GAAGC,QAAQigC,aAAcjxB,EAAK9B,UAC1D,EAEAo7C,GAAqB7nD,UAAUwqD,kBAAoB,WACjD,IAAIt7B,EAAM1tB,KAAK+K,eACf/K,KAAKsmD,eAAiB54B,EAAI6O,WAAYv8B,KAAKumD,iBAAmB74B,EAAI+O,aAClEz8B,KAAKwmD,cAAgB94B,EAAIgP,UAAW18B,KAAKymD,gBAAkB/4B,EAAIiP,WACjE,EAEA0pB,GAAqB7nD,UAAUyqD,kBAAoB,WACjD,IAAIv7B,EAAM1tB,KAAK+K,eACf,IAAK2iB,EAAIm7B,WAAc,OAAO,EAC9B,IAAIvuD,EAAOozB,EAAIo7B,WAAW,GAAGI,wBAC7B,OAAOltD,EAASgE,KAAK4J,IAAKtP,EAC5B,EAEA+rD,GAAqB7nD,UAAU2yB,MAAQ,WACL,YAA5BnxB,KAAKlC,GAAGkO,QAAQwlB,WACbxxB,KAAKipD,qBAAuB5sD,EAAU2D,KAAK4J,IAAI3L,gBAAkB+B,KAAK4J,KACvE5J,KAAKktB,cAAcltB,KAAKmtB,oBAAoB,GAChDntB,KAAK4J,IAAIunB,QAEb,EACAk1B,GAAqB7nD,UAAU2qD,KAAO,WAAcnpD,KAAK4J,IAAIu/C,MAAQ,EACrE9C,GAAqB7nD,UAAU88C,SAAW,WAAc,OAAOt7C,KAAK4J,GAAI,EAExEy8C,GAAqB7nD,UAAU09C,cAAgB,WAAc,OAAO,CAAK,EAEzEmK,GAAqB7nD,UAAUmzB,cAAgB,WAC3C,IAAIwa,EAASnsC,KAEXgd,EAAQhd,KACRA,KAAKipD,oBACLzoD,YAAW,WAAc,OAAO2rC,EAAOid,eAAiB,GAAG,IAE3DnuB,GAAQj7B,KAAKlC,IAAI,WAAc,OAAOkf,EAAMlf,GAAG0K,MAAMuvB,kBAAmB,CAAM,IAQlF/3B,KAAK0mD,QAAQjmD,IAAIT,KAAKlC,GAAGkO,QAAQq9C,cANjC,SAASC,IACHtsC,EAAMlf,GAAG6O,MAAM8jB,UACjBzT,EAAMosC,gBACNpsC,EAAM0pC,QAAQjmD,IAAIuc,EAAMlf,GAAGkO,QAAQq9C,aAAcC,GAErD,GAEF,EAEAjD,GAAqB7nD,UAAUu5B,iBAAmB,WAChD,IAAIrK,EAAM1tB,KAAK+K,eACf,OAAO2iB,EAAI6O,YAAcv8B,KAAKsmD,gBAAkB54B,EAAI+O,cAAgBz8B,KAAKumD,kBACvE74B,EAAIgP,WAAa18B,KAAKwmD,eAAiB94B,EAAIiP,aAAe38B,KAAKymD,eACnE,EAEAJ,GAAqB7nD,UAAU4qD,cAAgB,WAC7C,GAA2B,MAAvBppD,KAAK6mD,iBAA0B7mD,KAAK4mD,aAAgB5mD,KAAK+3B,mBAA7D,CACA,IAAIrK,EAAM1tB,KAAK+K,eAAgBjN,EAAKkC,KAAKlC,GAOzC,GAAIvE,GAAWT,GAAUkH,KAAKlC,GAAGC,QAAQ2iB,YAAY9lB,QA8JvD,SAAoBN,GAClB,IAAK,IAAIivD,EAAOjvD,EAAMivD,EAAMA,EAAOA,EAAKptD,WACpC,GAAI,4BAA4BhE,KAAKoxD,EAAK/uD,WAAc,OAAO,EACnE,OAAO,CACT,CAlKiEgvD,CAAW97B,EAAI6O,YAI5E,OAHAv8B,KAAKlC,GAAG2rD,iBAAiB,CAACpkD,KAAM,UAAWgwC,QAAS,EAAGntC,eAAgB1G,KAAKyjB,MAC5EjlB,KAAKmpD,YACLnpD,KAAKmxB,QAGP,IAAInxB,KAAK2mD,UAAT,CACA3mD,KAAKgpD,oBACL,IAAIj+B,EAASk8B,GAASnpD,EAAI4vB,EAAI6O,WAAY7O,EAAI+O,cAC1C3O,EAAOm5B,GAASnpD,EAAI4vB,EAAIgP,UAAWhP,EAAIiP,aACvC5R,GAAU+C,GAAQmN,GAAQn9B,GAAI,WAChC8oC,GAAa9oC,EAAGxB,IAAKwlC,GAAgB/W,EAAQ+C,GAAOhtB,IAChDiqB,EAAOi8B,KAAOl5B,EAAKk5B,OAAOlpD,EAAG0K,MAAMuvB,kBAAmB,EAC5D,GAP6B,CAd6D,CAsB5F,EAEAsuB,GAAqB7nD,UAAUkrD,YAAc,WAChB,MAAvB1pD,KAAK6mD,iBACPlmD,aAAaX,KAAK6mD,gBAClB7mD,KAAK6mD,eAAiB,MAGxB,IAQI8C,EAAWx5B,EAAUy5B,EARrB9rD,EAAKkC,KAAKlC,GAAIC,EAAUD,EAAGC,QAAS2vB,EAAM5vB,EAAGxB,IAAIoxB,IAAIN,UACrD1pB,EAAOgqB,EAAIhqB,OAAQC,EAAK+pB,EAAI/pB,KAKhC,GAJe,GAAXD,EAAKhB,IAAWgB,EAAKuD,KAAOnJ,EAAG8kC,cAC/Bl/B,EAAOwL,GAAIxL,EAAKuD,KAAO,EAAGuG,GAAQ1P,EAAGxB,IAAKoH,EAAKuD,KAAO,GAAGrM,SACzD+I,EAAGjB,IAAM8K,GAAQ1P,EAAGxB,IAAKqH,EAAGsD,MAAMC,KAAKtM,QAAU+I,EAAGsD,KAAOnJ,EAAGqb,aAC9DxV,EAAKuL,GAAIvL,EAAGsD,KAAO,EAAG,IACtBvD,EAAKuD,KAAOlJ,EAAQiW,UAAYrQ,EAAGsD,KAAOlJ,EAAQkW,OAAS,EAAK,OAAO,EAGvEvQ,EAAKuD,MAAQlJ,EAAQiW,UAA0D,IAA7C21C,EAAY1lC,GAAcnmB,EAAI4F,EAAKuD,QACvEkpB,EAAW5hB,GAAOxQ,EAAQmgB,KAAK,GAAGjX,MAClC2iD,EAAW7rD,EAAQmgB,KAAK,GAAG5jB,OAE3B61B,EAAW5hB,GAAOxQ,EAAQmgB,KAAKyrC,GAAW1iD,MAC1C2iD,EAAW7rD,EAAQmgB,KAAKyrC,EAAY,GAAGrvD,KAAKwmB,aAE9C,IACIsP,EAAQy5B,EADRC,EAAU7lC,GAAcnmB,EAAI6F,EAAGsD,MAUnC,GARI6iD,GAAW/rD,EAAQmgB,KAAKtjB,OAAS,GACnCw1B,EAASryB,EAAQkW,OAAS,EAC1B41C,EAAS9rD,EAAQg0B,QAAQxW,YAEzB6U,EAAS7hB,GAAOxQ,EAAQmgB,KAAK4rC,EAAU,GAAG7iD,MAAQ,EAClD4iD,EAAS9rD,EAAQmgB,KAAK4rC,EAAU,GAAGxvD,KAAKmtD,kBAGrCmC,EAAY,OAAO,EAGxB,IAFA,IAAIG,EAAUjsD,EAAGxB,IAAIquC,WAqHvB,SAAwB7sC,EAAI4F,EAAMC,EAAIwsB,EAAUC,GAC9C,IAAIlpB,EAAO,GAAI8iD,GAAU,EAAOlc,EAAUhwC,EAAGxB,IAAI6xC,gBAAiB8b,GAAiB,EAEnF,SAASC,IACHF,IACF9iD,GAAQ4mC,EACJmc,IAAkB/iD,GAAQ4mC,GAC9Bkc,EAAUC,GAAiB,EAE/B,CACA,SAASE,EAAQ9mD,GACXA,IACF6mD,IACAhjD,GAAQ7D,EAEZ,CACA,SAAS+mD,EAAK9vD,GACZ,GAAqB,GAAjBA,EAAK4B,SAAe,CACtB,IAAImuD,EAAS/vD,EAAK8nB,aAAa,WAC/B,GAAIioC,EAEF,YADAF,EAAQE,GAGV,IAA+CjwD,EAA3CkwD,EAAWhwD,EAAK8nB,aAAa,aACjC,GAAIkoC,EAAU,CACZ,IAAIlmD,EAAQtG,EAAG2vC,UAAUv+B,GAAIihB,EAAU,GAAIjhB,GAAIkhB,EAAS,EAAG,IAvBxCnwB,GAuB6DqqD,EAvBhD,SAAU70C,GAAU,OAAOA,EAAOxV,IAAMA,CAAI,IA0B5E,YAFImE,EAAMxJ,SAAWR,EAAQgK,EAAM,GAAG6T,KAAK,KACvCkyC,EAAQl8C,GAAWnQ,EAAGxB,IAAKlC,EAAMsJ,KAAMtJ,EAAMuJ,IAAIuqC,KAAKJ,IAE5D,CACA,GAA4C,SAAxCxzC,EAAK8nB,aAAa,mBAAiC,OACvD,IAAImoC,EAAU,6BAA6BpyD,KAAKmC,EAAKsjC,UACrD,IAAK,QAAQzlC,KAAKmC,EAAKsjC,WAAwC,GAA3BtjC,EAAKktD,YAAY5sD,OAAe,OAEhE2vD,GAAWL,IACf,IAAK,IAAIruD,EAAI,EAAGA,EAAIvB,EAAKU,WAAWJ,OAAQiB,IACxCuuD,EAAK9vD,EAAKU,WAAWa,IAErB,aAAa1D,KAAKmC,EAAKsjC,YAAaqsB,GAAiB,GACrDM,IAAWP,GAAU,EAC3B,MAA4B,GAAjB1vD,EAAK4B,UACdiuD,EAAQ7vD,EAAKgtD,UAAUzhD,QAAQ,UAAW,IAAIA,QAAQ,UAAW,MAvCrE,IAAyB5F,CAyCzB,CACA,KACEmqD,EAAK1mD,GACDA,GAAQC,GACZD,EAAOA,EAAKod,YACZmpC,GAAiB,EAEnB,OAAO/iD,CACT,CAxKkCsjD,CAAe1sD,EAAI8rD,EAAUC,EAAQ15B,EAAUC,IAC3Eq6B,EAAUx8C,GAAWnQ,EAAGxB,IAAK4S,GAAIihB,EAAU,GAAIjhB,GAAIkhB,EAAQ5iB,GAAQ1P,EAAGxB,IAAK8zB,GAAQlpB,KAAKtM,SACrFmvD,EAAQnvD,OAAS,GAAK6vD,EAAQ7vD,OAAS,GAC5C,GAAIiH,EAAIkoD,IAAYloD,EAAI4oD,GAAYV,EAAQhlB,MAAO0lB,EAAQ1lB,MAAO3U,QAC7D,IAAI25B,EAAQ,IAAMU,EAAQ,GACxB,MAD8BV,EAAQn4B,QAAS64B,EAAQ74B,QAASzB,GAC1D,CAKf,IAFA,IAAIu6B,EAAW,EAAGC,EAAS,EACvB13B,EAAS82B,EAAQ,GAAIa,EAASH,EAAQ,GAAII,EAAcrpD,KAAKC,IAAIwxB,EAAOr4B,OAAQgwD,EAAOhwD,QACpF8vD,EAAWG,GAAe53B,EAAO9vB,WAAWunD,IAAaE,EAAOznD,WAAWunD,MAC5EA,EAIN,IAHA,IAAII,EAASjpD,EAAIkoD,GAAUgB,EAASlpD,EAAI4oD,GACpCO,EAAYxpD,KAAKC,IAAIqpD,EAAOlwD,QAA4B,GAAlBmvD,EAAQnvD,OAAc8vD,EAAW,GAClDK,EAAOnwD,QAA4B,GAAlB6vD,EAAQ7vD,OAAc8vD,EAAW,IACpEC,EAASK,GACTF,EAAO3nD,WAAW2nD,EAAOlwD,OAAS+vD,EAAS,IAAMI,EAAO5nD,WAAW4nD,EAAOnwD,OAAS+vD,EAAS,MAC7FA,EAEN,GAAsB,GAAlBZ,EAAQnvD,QAAiC,GAAlB6vD,EAAQ7vD,QAAeu1B,GAAYzsB,EAAKuD,KACjE,KAAOyjD,GAAYA,EAAWhnD,EAAKhB,IAC5BooD,EAAO3nD,WAAW2nD,EAAOlwD,OAAS+vD,EAAS,IAAMI,EAAO5nD,WAAW4nD,EAAOnwD,OAAS+vD,EAAS,IACjGD,IACAC,IAIJZ,EAAQA,EAAQnvD,OAAS,GAAKkwD,EAAOpwD,MAAM,EAAGowD,EAAOlwD,OAAS+vD,GAAQ9kD,QAAQ,WAAY,IAC1FkkD,EAAQ,GAAKA,EAAQ,GAAGrvD,MAAMgwD,GAAU7kD,QAAQ,WAAY,IAE5D,IAAIolD,EAAS/7C,GAAIihB,EAAUu6B,GACvBQ,EAAOh8C,GAAIkhB,EAAQq6B,EAAQ7vD,OAASiH,EAAI4oD,GAAS7vD,OAAS+vD,EAAS,GACvE,OAAIZ,EAAQnvD,OAAS,GAAKmvD,EAAQ,IAAM56C,GAAI87C,EAAQC,IAClDzgB,GAAa3sC,EAAGxB,IAAKytD,EAASkB,EAAQC,EAAM,WACrC,QAFT,CAIF,EAEA7E,GAAqB7nD,UAAUg8C,aAAe,WAC5Cx6C,KAAKqoD,qBACP,EACAhC,GAAqB7nD,UAAUkzB,MAAQ,WACrC1xB,KAAKqoD,qBACP,EACAhC,GAAqB7nD,UAAU6pD,oBAAsB,WAC9CroD,KAAK2mD,YACVhmD,aAAaX,KAAK6mD,gBAClB7mD,KAAK2mD,UAAY,KACjB3mD,KAAKmoD,gBACLnoD,KAAK4J,IAAIu/C,OACTnpD,KAAK4J,IAAIunB,QACX,EACAk1B,GAAqB7nD,UAAU4pD,gBAAkB,WAC7C,IAAIjc,EAASnsC,KAEY,MAAvBA,KAAK6mD,iBACT7mD,KAAK6mD,eAAiBrmD,YAAW,WAE/B,GADA2rC,EAAO0a,eAAiB,KACpB1a,EAAOwa,UAAW,CACpB,IAAIxa,EAAOwa,UAAU3iB,KACd,OADsBmI,EAAOwa,UAAY,IAElD,CACAxa,EAAOgc,eACT,GAAG,IACL,EAEA9B,GAAqB7nD,UAAU2pD,cAAgB,WAC3C,IAAIhc,EAASnsC,MAEXA,KAAKlC,GAAG60C,cAAiB3yC,KAAK0pD,eAC9BzuB,GAAQj7B,KAAKlC,IAAI,WAAc,OAAOouB,GAAUigB,EAAOruC,GAAK,GAClE,EAEAuoD,GAAqB7nD,UAAU0e,cAAgB,SAAU5iB,GACvDA,EAAK4tD,gBAAkB,OACzB,EAEA7B,GAAqB7nD,UAAUm9C,WAAa,SAAU7gD,GAClC,GAAdA,EAAE8gD,UAAiB57C,KAAK2mD,YAC5B7rD,EAAEoN,iBACGlI,KAAKlC,GAAG60C,cACTzX,GAAUl7B,KAAKlC,GAAIslD,GAAnBloB,CAAmCl7B,KAAKlC,GAAIiR,OAAOulC,aAA2B,MAAdx5C,EAAE8gD,SAAmB9gD,EAAEu6C,QAAUv6C,EAAE8gD,UAAW,GACpH,EAEAyK,GAAqB7nD,UAAU2sD,gBAAkB,SAAUt+C,GACzD7M,KAAK4J,IAAIs+C,gBAAkBn5C,OAAc,YAAPlC,EACpC,EAEAw5C,GAAqB7nD,UAAUygD,cAAgB,WAAa,EAC5DoH,GAAqB7nD,UAAU4sD,cAAgB,WAAa,EAE5D/E,GAAqB7nD,UAAUye,uBAAwB,EA2JvD,IAAIouC,GAAgB,SAASvtD,GAC3BkC,KAAKlC,GAAKA,EAEVkC,KAAKsrD,UAAY,GAKjBtrD,KAAKurD,aAAc,EAEnBvrD,KAAK0mD,QAAU,IAAI3mD,EAEnBC,KAAK6K,cAAe,EACpB7K,KAAK2mD,UAAY,KACjB3mD,KAAKwrD,WAAY,CACnB,EAEAH,GAAc7sD,UAAU8gC,KAAO,SAAUvhC,GACrC,IAAIouC,EAASnsC,KAEXgd,EAAQhd,KAAMlC,EAAKkC,KAAKlC,GAC5BkC,KAAKyrD,YAAY1tD,GACjB,IAAIiN,EAAKhL,KAAK0rD,SAmBd,SAASC,EAAe7wD,GACtB,IAAIkN,GAAelK,EAAIhD,GAAvB,CACA,GAAIgD,EAAGyjC,oBACL2hB,GAAc,CAACU,UAAU,EAAO18C,KAAMpJ,EAAGixC,sBACpC,KAAKjxC,EAAGkO,QAAQ67C,gBACrB,OAEA,IAAIl6B,EAAS42B,GAAezmD,GAC5BolD,GAAc,CAACU,UAAU,EAAM18C,KAAMymB,EAAOzmB,OAC9B,OAAVpM,EAAEuK,KACJvH,EAAG+wC,cAAclhB,EAAOA,OAAQ,KAAM7sB,IAEtCkc,EAAMsuC,UAAY,GAClBtgD,EAAGnL,MAAQ8tB,EAAOzmB,KAAKgnC,KAAK,MAC5BtwC,EAAYoN,GAEhB,CACc,OAAVlQ,EAAEuK,OAAiBvH,EAAG6O,MAAMi0C,aAAe,IAAIrgD,KAhBf,CAiBtC,CAnCAxC,EAAQC,QAAQyhB,aAAazf,KAAKhC,QAASD,EAAQC,QAAQ9C,YAGvD7B,IAAO2R,EAAGvP,MAAMgmB,MAAQ,OAE5Bra,GAAG4D,EAAI,SAAS,WACVxS,GAAMC,GAAc,GAAK0zC,EAAOthC,eAAgBshC,EAAOthC,aAAe,MAC1EmS,EAAMssC,MACR,IAEAliD,GAAG4D,EAAI,SAAS,SAAUlQ,GACpBkN,GAAelK,EAAIhD,IAAMipD,GAAYjpD,EAAGgD,KAE5CA,EAAG6O,MAAMg0C,eAAiB,IAAIpgD,KAC9Byc,EAAM4uC,WACR,IAqBAxkD,GAAG4D,EAAI,MAAO2gD,GACdvkD,GAAG4D,EAAI,OAAQ2gD,GAEfvkD,GAAGrJ,EAAQulB,SAAU,SAAS,SAAUxoB,GACtC,IAAIqnB,GAAcpkB,EAASjD,KAAMkN,GAAelK,EAAIhD,GAApD,CACA,IAAKkQ,EAAG6gD,cAGN,OAFA/tD,EAAG6O,MAAMg0C,eAAiB,IAAIpgD,UAC9Byc,EAAMmU,QAKR,IAAIoV,EAAQ,IAAIulB,MAAM,SACtBvlB,EAAM0d,cAAgBnpD,EAAEmpD,cACxBj5C,EAAG6gD,cAActlB,EAVgD,CAWnE,IAGAn/B,GAAGrJ,EAAQykB,UAAW,eAAe,SAAU1nB,GACxCqnB,GAAcpkB,EAASjD,IAAM+N,GAAiB/N,EACrD,IAEAsM,GAAG4D,EAAI,oBAAoB,WACzB,IAAI/N,EAAQa,EAAG21B,UAAU,QACrBzW,EAAM2pC,WAAa3pC,EAAM2pC,UAAUvsD,MAAMm8B,QAC7CvZ,EAAM2pC,UAAY,CAChB1pD,MAAOA,EACP7C,MAAO0D,EAAGyuC,SAAStvC,EAAOa,EAAG21B,UAAU,MAAO,CAACj5B,UAAW,yBAE9D,IACA4M,GAAG4D,EAAI,kBAAkB,WACnBgS,EAAM2pC,YACR3pC,EAAMssC,OACNtsC,EAAM2pC,UAAUvsD,MAAMm8B,QACtBvZ,EAAM2pC,UAAY,KAEtB,GACF,EAEA0E,GAAc7sD,UAAUitD,YAAc,SAAUM,GAE9C/rD,KAAKhC,QAAU8mD,KAGf9kD,KAAK0rD,SAAW1rD,KAAKhC,QAAQ9C,UAC/B,EAEAmwD,GAAc7sD,UAAU8pD,yBAA2B,SAAUC,GAExDA,EACDvoD,KAAK0rD,SAAS3vD,aAAa,aAAcwsD,GAEzCvoD,KAAK0rD,SAASlD,gBAAgB,aAElC,EAEA6C,GAAc7sD,UAAU2uB,iBAAmB,WAEzC,IAAIrvB,EAAKkC,KAAKlC,GAAIC,EAAUD,EAAGC,QAASzB,EAAMwB,EAAGxB,IAC7CmO,EAAS0iB,GAAiBrvB,GAG9B,GAAIA,EAAGkO,QAAQggD,oBAAqB,CAClC,IAAIC,EAAUpjC,GAAa/qB,EAAIxB,EAAIoxB,IAAIN,UAAUU,KAAM,OACnDo+B,EAAUnuD,EAAQC,QAAQoM,wBAAyB+hD,EAAUpuD,EAAQg0B,QAAQ3nB,wBACjFK,EAAO2hD,MAAQ5qD,KAAKkO,IAAI,EAAGlO,KAAKC,IAAI1D,EAAQC,QAAQylB,aAAe,GAC/BwoC,EAAQ9mC,IAAMgnC,EAAQhnC,IAAM+mC,EAAQ/mC,MACxE1a,EAAO4hD,OAAS7qD,KAAKkO,IAAI,EAAGlO,KAAKC,IAAI1D,EAAQC,QAAQkkB,YAAc,GAC9B+pC,EAAQ3hD,KAAO6hD,EAAQ7hD,KAAO4hD,EAAQ5hD,MAC7E,CAEA,OAAOG,CACT,EAEA4gD,GAAc7sD,UAAU0uB,cAAgB,SAAUo/B,GAChD,IAAkBvuD,EAATiC,KAAKlC,GAAiBC,QAC/B5C,EAAqB4C,EAAQ6yB,UAAW07B,EAAMh/B,SAC9CnyB,EAAqB4C,EAAQigC,aAAcsuB,EAAMrhD,WAC9B,MAAfqhD,EAAMF,QACRpsD,KAAKhC,QAAQvC,MAAM0pB,IAAMmnC,EAAMF,MAAQ,KACvCpsD,KAAKhC,QAAQvC,MAAM6O,KAAOgiD,EAAMD,OAAS,KAE7C,EAIAhB,GAAc7sD,UAAUkzB,MAAQ,SAAUkG,GACxC,KAAI53B,KAAKusD,oBAAsBvsD,KAAK2mD,WAAa/uB,GAAjD,CACA,IAAI95B,EAAKkC,KAAKlC,GAEd,GADAkC,KAAKwrD,WAAY,EACb1tD,EAAGyjC,oBAAqB,CAC1BvhC,KAAKsrD,UAAY,GACjB,IAAI9vD,EAAUsC,EAAGiN,eACjB/K,KAAK0rD,SAAS7rD,MAAQrE,EAClBsC,EAAG6O,MAAM8jB,SAAW7yB,EAAYoC,KAAK0rD,UACrClzD,GAAMC,GAAc,IAAKuH,KAAK6K,aAAerP,EACnD,MAAYo8B,IACV53B,KAAKsrD,UAAYtrD,KAAK0rD,SAAS7rD,MAAQ,GACnCrH,GAAMC,GAAc,IAAKuH,KAAK6K,aAAe,OAEnD7K,KAAKwrD,WAAY,CAbiD,CAcpE,EAEAH,GAAc7sD,UAAU88C,SAAW,WAAc,OAAOt7C,KAAK0rD,QAAS,EAEtEL,GAAc7sD,UAAU09C,cAAgB,WAAc,OAAO,CAAM,EAEnEmP,GAAc7sD,UAAU2yB,MAAQ,WAC9B,GAAgC,YAA5BnxB,KAAKlC,GAAGkO,QAAQwlB,YAA4Bh4B,GAAU6C,EAAU2D,KAAK0rD,SAASztD,gBAAkB+B,KAAK0rD,UACvG,IAAM1rD,KAAK0rD,SAASv6B,OAAS,CAC7B,MAAOr2B,GAAI,CAEf,EAEAuwD,GAAc7sD,UAAU2qD,KAAO,WAAcnpD,KAAK0rD,SAASvC,MAAQ,EAEnEkC,GAAc7sD,UAAU4sD,cAAgB,WACtCprD,KAAKhC,QAAQvC,MAAM0pB,IAAMnlB,KAAKhC,QAAQvC,MAAM6O,KAAO,CACrD,EAEA+gD,GAAc7sD,UAAUmzB,cAAgB,WAAc3xB,KAAKwsD,UAAY,EAIvEnB,GAAc7sD,UAAUguD,SAAW,WAC/B,IAAIrgB,EAASnsC,KAEXA,KAAKurD,aACTvrD,KAAK0mD,QAAQjmD,IAAIT,KAAKlC,GAAGkO,QAAQq9C,cAAc,WAC7Cld,EAAOmd,OACHnd,EAAOruC,GAAG6O,MAAM8jB,SAAW0b,EAAOqgB,UACxC,GACF,EAKAnB,GAAc7sD,UAAUotD,SAAW,WACjC,IAAIa,GAAS,EAAOzvC,EAAQhd,KAC5Bgd,EAAMuuC,aAAc,EAMpBvuC,EAAM0pC,QAAQjmD,IAAI,IALlB,SAASgZ,IACOuD,EAAMssC,QACHmD,GACXzvC,EAAMuuC,aAAc,EAAOvuC,EAAMwvC,aADbC,GAAS,EAAMzvC,EAAM0pC,QAAQjmD,IAAI,GAAIgZ,GAEjE,GAEF,EAQA4xC,GAAc7sD,UAAU8qD,KAAO,WAC3B,IAAInd,EAASnsC,KAEXlC,EAAKkC,KAAKlC,GAAIkf,EAAQhd,KAAK0rD,SAAUJ,EAAYtrD,KAAKsrD,UAK1D,GAAItrD,KAAKusD,oBAAsBvsD,KAAKwrD,YAAc1tD,EAAG6O,MAAM8jB,SACtD5lB,GAAamS,KAAWsuC,IAActrD,KAAK2mD,WAC5C7oD,EAAG60C,cAAgB70C,EAAGkO,QAAQk4C,cAAgBpmD,EAAG6O,MAAMkuC,OACvD,OAAO,EAEX,IAAI3zC,EAAO8V,EAAMnd,MAEjB,GAAIqH,GAAQokD,IAAcxtD,EAAGyjC,oBAAuB,OAAO,EAI3D,GAAI/oC,GAAMC,GAAc,GAAKuH,KAAK6K,eAAiB3D,GAC/CzN,GAAO,kBAAkBtB,KAAK+O,GAEhC,OADApJ,EAAGC,QAAQif,MAAM0U,SACV,EAGT,GAAI5zB,EAAGxB,IAAIoxB,KAAO5vB,EAAGC,QAAQ0zB,kBAAmB,CAC9C,IAAIhkB,EAAQvG,EAAK/D,WAAW,GAE5B,GADa,MAATsK,GAAoB69C,IAAaA,EAAY,KACpC,MAAT79C,EAAiC,OAAdzN,KAAK0xB,QAAgB1xB,KAAKlC,GAAG87C,YAAY,OAClE,CAGA,IADA,IAAI8S,EAAO,EAAGhiD,EAAIlJ,KAAKC,IAAI6pD,EAAU1wD,OAAQsM,EAAKtM,QAC3C8xD,EAAOhiD,GAAK4gD,EAAUnoD,WAAWupD,IAASxlD,EAAK/D,WAAWupD,MAAWA,EAgB5E,OAdAzxB,GAAQn9B,GAAI,WACVslD,GAAetlD,EAAIoJ,EAAKxM,MAAMgyD,GAAOpB,EAAU1wD,OAAS8xD,EACzC,KAAMvgB,EAAOwa,UAAY,WAAa,MAGjDz/C,EAAKtM,OAAS,KAAQsM,EAAKxH,QAAQ,OAAS,EAAKsd,EAAMnd,MAAQssC,EAAOmf,UAAY,GAC/Enf,EAAOmf,UAAYpkD,EAEtBilC,EAAOwa,YACTxa,EAAOwa,UAAUvsD,MAAMm8B,QACvB4V,EAAOwa,UAAUvsD,MAAQ0D,EAAGyuC,SAASJ,EAAOwa,UAAU1pD,MAAOa,EAAG21B,UAAU,MACvC,CAACj5B,UAAW,yBAEnD,KACO,CACT,EAEA6wD,GAAc7sD,UAAUg8C,aAAe,WACjCx6C,KAAKurD,aAAevrD,KAAKspD,SAAUtpD,KAAKurD,aAAc,EAC5D,EAEAF,GAAc7sD,UAAUm9C,WAAa,WAC/BnjD,GAAMC,GAAc,IAAKuH,KAAK6K,aAAe,MACjD7K,KAAK4rD,UACP,EAEAP,GAAc7sD,UAAUygD,cAAgB,SAAUnkD,GAChD,IAAIkiB,EAAQhd,KAAMlC,EAAKkf,EAAMlf,GAAIC,EAAUD,EAAGC,QAASiN,EAAKgS,EAAM0uC,SAC9D1uC,EAAMuvC,oBAAsBvvC,EAAMuvC,qBACtC,IAAIlrD,EAAMoqB,GAAa3tB,EAAIhD,GAAI2/B,EAAY18B,EAAQulB,SAAS0E,UAC5D,GAAK3mB,IAAOrI,EAAZ,CAIY8E,EAAGkO,QAAQ2gD,8BACmB,GAA7B7uD,EAAGxB,IAAIoxB,IAAI1xB,SAASqF,IAC7B65B,GAAUp9B,EAAI8oC,GAAd1L,CAA4Bp9B,EAAGxB,IAAKwlC,GAAgBzgC,GAAMP,GAE9D,IAII8rD,EAJAC,EAAS7hD,EAAGvP,MAAME,QAASmxD,EAAgB9vC,EAAMhf,QAAQvC,MAAME,QAC/DoxD,EAAa/vC,EAAMhf,QAAQgvD,aAAa5iD,wBAwD5C,GAvDA4S,EAAMhf,QAAQvC,MAAME,QAAU,mBAC9BqP,EAAGvP,MAAME,QAAU,+DAAiEb,EAAEgxB,QAAUihC,EAAW5nC,IAAM,GAAK,cAAgBrqB,EAAE+wB,QAAUkhC,EAAWziD,KAAO,GAAK,0CAA4C9R,EAAK,2BAA6B,eAAiB,oHAEpQI,IAAUg0D,EAAa5hD,EAAG/M,cAAcE,YAAY8uD,SACxDlvD,EAAQif,MAAMmU,QACVv4B,GAAUoS,EAAG/M,cAAcE,YAAY+uD,SAAS,KAAMN,GAC1D7uD,EAAQif,MAAM0U,QAET5zB,EAAGyjC,sBAAuBv2B,EAAGnL,MAAQmd,EAAMsuC,UAAY,KAC5DtuC,EAAMuvC,mBAAqBY,EAC3BpvD,EAAQ0zB,kBAAoB3zB,EAAGxB,IAAIoxB,IACnC/sB,aAAa5C,EAAQqvD,oBA2CjB50D,GAAMC,GAAc,GAAK40D,IACzBrzD,EAAmB,CACrBkP,GAAOpO,GACP,IAAIwyD,EAAU,WACZ3lD,GAAImD,OAAQ,UAAWwiD,GACvB9sD,WAAW2sD,EAAQ,GACrB,EACA/lD,GAAG0D,OAAQ,UAAWwiD,EACxB,MACE9sD,WAAW2sD,EAAQ,GAzEQ,CA0B7B,SAASE,IACP,GAAyB,MAArBriD,EAAGrL,eAAwB,CAC7B,IAAI+zC,EAAW51C,EAAGyjC,oBACdgsB,EAAS,KAAY7Z,EAAW1oC,EAAGnL,MAAQ,IAC/CmL,EAAGnL,MAAQ,IACXmL,EAAGnL,MAAQ0tD,EACXvwC,EAAMsuC,UAAY5X,EAAW,GAAK,IAClC1oC,EAAGrL,eAAiB,EAAGqL,EAAGpL,aAAe2tD,EAAO3yD,OAGhDmD,EAAQ0zB,kBAAoB3zB,EAAGxB,IAAIoxB,GACrC,CACF,CACA,SAASy/B,IACP,GAAInwC,EAAMuvC,oBAAsBY,IAChCnwC,EAAMuvC,oBAAqB,EAC3BvvC,EAAMhf,QAAQvC,MAAME,QAAUmxD,EAC9B9hD,EAAGvP,MAAME,QAAUkxD,EACfr0D,GAAMC,EAAa,GAAKsF,EAAQu2B,WAAWJ,aAAan2B,EAAQulB,SAAS0E,UAAYyS,GAGhE,MAArBzvB,EAAGrL,gBAAwB,GACxBnH,GAAOA,GAAMC,EAAa,IAAM40D,IACrC,IAAIxxD,EAAI,EAAGytD,EAAO,WACZvrD,EAAQ0zB,mBAAqB3zB,EAAGxB,IAAIoxB,KAA4B,GAArB1iB,EAAGrL,gBAC9CqL,EAAGpL,aAAe,GAAwB,KAAnBod,EAAMsuC,UAC/BpwB,GAAUp9B,EAAIyqC,GAAdrN,CAAyBp9B,GAChBjC,IAAM,GACfkC,EAAQqvD,mBAAqB5sD,WAAW8oD,EAAM,MAE9CvrD,EAAQ0zB,kBAAoB,KAC5B1zB,EAAQif,MAAM0U,QAElB,EACA3zB,EAAQqvD,mBAAqB5sD,WAAW8oD,EAAM,IAChD,CACF,CAaF,EAEA+B,GAAc7sD,UAAU2sD,gBAAkB,SAAUt+C,GAC7CA,GAAO7M,KAAK0xB,QACjB1xB,KAAK0rD,SAAS8B,SAAkB,YAAP3gD,EACzB7M,KAAK0rD,SAASl6B,WAAa3kB,CAC7B,EAEAw+C,GAAc7sD,UAAU0e,cAAgB,WAAa,EAErDmuC,GAAc7sD,UAAUye,uBAAwB,EAx8DhD,SAAuB+0B,GACrB,IAAI+N,EAAiB/N,EAAW+N,eAEhC,SAASnD,EAAOlxC,EAAM+hD,EAAOviB,EAAQwiB,GACnC1b,EAAW8N,SAASp0C,GAAQ+hD,EACxBviB,IAAU6U,EAAer0C,GAC3BgiD,EAAY,SAAU5vD,EAAI+O,EAAK0J,GAAUA,GAAOspC,IAAQ3U,EAAOptC,EAAI+O,EAAK0J,EAAO,EAAI20B,EACvF,CAEA8G,EAAW2b,aAAe/Q,EAG1B5K,EAAW6N,KAAOA,GAIlBjD,EAAO,QAAS,IAAI,SAAU9+C,EAAI+O,GAAO,OAAO/O,EAAGswC,SAASvhC,EAAM,IAAG,GACrE+vC,EAAO,OAAQ,MAAM,SAAU9+C,EAAI+O,GACjC/O,EAAGxB,IAAI8lC,WAAav1B,EACpBs1B,GAASrkC,EACX,IAAG,GAEH8+C,EAAO,aAAc,EAAGza,IAAU,GAClCya,EAAO,kBAAkB,GACzBA,EAAO,eAAe,GACtBA,EAAO,UAAW,GAAG,SAAU9+C,GAC7BukC,GAAevkC,GACfupB,GAAYvpB,GACZouB,GAAUpuB,EACZ,IAAG,GAEH8+C,EAAO,gBAAiB,MAAM,SAAU9+C,EAAI+O,GAE1C,GADA/O,EAAGxB,IAAIwxC,QAAUjhC,EACZA,EAAL,CACA,IAAI+gD,EAAY,GAAIr/C,EAASzQ,EAAGxB,IAAImR,MACpC3P,EAAGxB,IAAI4R,MAAK,SAAUjH,GACpB,IAAK,IAAI5F,EAAM,IAAK,CAClB,IAAI+C,EAAQ6C,EAAKC,KAAKxH,QAAQmN,EAAKxL,GACnC,IAAc,GAAV+C,EAAe,MACnB/C,EAAM+C,EAAQyI,EAAIjS,OAClBgzD,EAAUhsD,KAAKsN,GAAIX,EAAQnK,GAC7B,CACAmK,GACF,IACA,IAAK,IAAI1S,EAAI+xD,EAAUhzD,OAAS,EAAGiB,GAAK,EAAGA,IACvC4uC,GAAa3sC,EAAGxB,IAAKuQ,EAAK+gD,EAAU/xD,GAAIqT,GAAI0+C,EAAU/xD,GAAGoL,KAAM2mD,EAAU/xD,GAAG6G,GAAKmK,EAAIjS,QAZtE,CAarB,IACAgiD,EAAO,eAAgB,4HAA4H,SAAU9+C,EAAI+O,EAAK0J,GACpKzY,EAAG6O,MAAMwP,aAAe,IAAIhiB,OAAO0S,EAAI9J,QAAU8J,EAAI1U,KAAK,MAAQ,GAAK,OAAQ,KAC3Eoe,GAAOspC,IAAQ/hD,EAAG+vD,SACxB,IACAjR,EAAO,yBAA0BnhC,IAA+B,SAAU3d,GAAM,OAAOA,EAAG+vD,SAAW,IAAG,GACxGjR,EAAO,iBAAiB,GACxBA,EAAO,aAAcpjD,EAAS,kBAAoB,YAAY,WAC5D,MAAM,IAAImU,MAAM,0DAClB,IAAG,GACHivC,EAAO,cAAc,GAAO,SAAU9+C,EAAI+O,GAAO,OAAO/O,EAAGgwD,gBAAgBnJ,WAAa93C,CAAK,IAAG,GAChG+vC,EAAO,eAAe,GAAO,SAAU9+C,EAAI+O,GAAO,OAAO/O,EAAGgwD,gBAAgBlJ,YAAc/3C,CAAK,IAAG,GAClG+vC,EAAO,kBAAkB,GAAO,SAAU9+C,EAAI+O,GAAO,OAAO/O,EAAGgwD,gBAAgBjJ,eAAiBh4C,CAAK,IAAG,GACxG+vC,EAAO,mBAAoBjjD,GAC3BijD,EAAO,yBAAyB,GAEhCA,EAAO,QAAS,WAAW,SAAU9+C,GACnC6hD,GAAa7hD,GACbkhC,GAAclhC,EAChB,IAAG,GACH8+C,EAAO,SAAU,WAAW,SAAU9+C,EAAI+O,EAAK0J,GAC7C,IAAInG,EAAO8kC,GAAUroC,GACjBzH,EAAOmR,GAAOspC,IAAQ3K,GAAU3+B,GAChCnR,GAAQA,EAAK2oD,QAAU3oD,EAAK2oD,OAAOjwD,EAAIsS,GACvCA,EAAK49C,QAAU59C,EAAK49C,OAAOlwD,EAAIsH,GAAQ,KAC7C,IACAw3C,EAAO,YAAa,MACpBA,EAAO,iBAAkB,MAEzBA,EAAO,gBAAgB,EAAO4D,IAAiB,GAC/C5D,EAAO,UAAW,IAAI,SAAU9+C,EAAI+O,GAClC/O,EAAGC,QAAQ2iB,YAAcie,GAAW9xB,EAAK/O,EAAGkO,QAAQoU,aACpD4e,GAAclhC,EAChB,IAAG,GACH8+C,EAAO,eAAe,GAAM,SAAU9+C,EAAI+O,GACxC/O,EAAGC,QAAQkkB,QAAQxmB,MAAM6O,KAAOuC,EAAMqe,GAAqBptB,EAAGC,SAAW,KAAO,IAChFD,EAAG+vD,SACL,IAAG,GACHjR,EAAO,8BAA8B,GAAO,SAAU9+C,GAAM,OAAO24B,GAAiB34B,EAAK,IAAG,GAC5F8+C,EAAO,iBAAkB,UAAU,SAAU9+C,GAC3Cu5B,GAAev5B,GACf24B,GAAiB34B,GACjBA,EAAGC,QAAQu2B,WAAWJ,aAAap2B,EAAGxB,IAAI0rB,WAC1ClqB,EAAGC,QAAQu2B,WAAWC,cAAcz2B,EAAGxB,IAAIsrB,WAC7C,IAAG,GACHg1B,EAAO,eAAe,GAAO,SAAU9+C,EAAI+O,GACzC/O,EAAGC,QAAQ2iB,YAAcie,GAAW7gC,EAAGkO,QAAQiW,QAASpV,GACxDmyB,GAAclhC,EAChB,IAAG,GACH8+C,EAAO,kBAAmB,EAAG5d,IAAe,GAC5C4d,EAAO,uBAAuB,SAAUqR,GAAW,OAAOA,CAAS,GAAGjvB,IAAe,GACrF4d,EAAO,2BAA2B,EAAO3vB,IAAiB,GAE1D2vB,EAAO,+BAA+B,GACtCA,EAAO,mBAAmB,GAC1BA,EAAO,0BAA0B,GACjCA,EAAO,sBAAsB,GAE7BA,EAAO,YAAY,GAAO,SAAU9+C,EAAI+O,GAC3B,YAAPA,IACFokB,GAAOnzB,GACPA,EAAGC,QAAQif,MAAMmsC,QAEnBrrD,EAAGC,QAAQif,MAAMmuC,gBAAgBt+C,EACnC,IAEA+vC,EAAO,oBAAqB,MAAM,SAAU9+C,EAAI+O,GAC9CA,EAAe,KAARA,EAAc,KAAOA,EAC5B/O,EAAGC,QAAQif,MAAMsrC,yBAAyBz7C,EAC5C,IAEA+vC,EAAO,gBAAgB,GAAO,SAAU9+C,EAAI+O,GAAWA,GAAO/O,EAAGC,QAAQif,MAAM0U,OAAU,IAAG,GAC5FkrB,EAAO,YAAY,EAAMoD,IACzBpD,EAAO,qBAAsB,MAE7BA,EAAO,kBAAmB,KAC1BA,EAAO,qBAAsB,GAC7BA,EAAO,eAAgB,EAAG3vB,IAAiB,GAC3C2vB,EAAO,6BAA6B,EAAM3vB,IAAiB,GAC3D2vB,EAAO,WAAY,KACnBA,EAAO,YAAa,KACpBA,EAAO,gBAAgB,EAAMva,IAAgB,GAC7Cua,EAAO,gBAAgB,EAAOva,IAAgB,GAC9Cua,EAAO,eAAgB,KACvBA,EAAO,YAAa,KAAK,SAAU9+C,EAAI+O,GAAO,OAAO/O,EAAGxB,IAAI8oC,QAAQlB,UAAYr3B,CAAK,IACrF+vC,EAAO,oBAAqB,MAC5BA,EAAO,iBAAkB,IAAI,SAAU9+C,GAAM,OAAOA,EAAG+vD,SAAW,IAAG,GACrEjR,EAAO,qBAAsB,IAAOva,IAAgB,GACpDua,EAAO,uBAAuB,GAAM,SAAU9+C,EAAI+O,GAC3CA,GAAO/O,EAAGC,QAAQif,MAAMouC,eAC/B,IAEAxO,EAAO,WAAY,MAAM,SAAU9+C,EAAI+O,GAAO,OAAO/O,EAAGC,QAAQif,MAAMs+B,WAAWjmB,SAAWxoB,GAAO,EAAI,IACvG+vC,EAAO,YAAa,MACpBA,EAAO,YAAa,OAAO,SAAU9+C,EAAI+O,GAAO,OAAO/O,EAAGxB,IAAI81C,aAAavlC,EAAM,IAAG,GACpF+vC,EAAO,UAAW,KACpB,CAm6DAsR,CAAclc,IAjgDd,SAA0BA,GACxB,IAAI+N,EAAiB/N,EAAW+N,eAE5BoO,EAAUnc,EAAWmc,QAAU,CAAC,EAEpCnc,EAAWxzC,UAAY,CACrBwvC,YAAagE,EACb7gB,MAAO,WAAWjzB,EAAI8B,MAAMmxB,QAASnxB,KAAKjC,QAAQif,MAAMmU,OAAQ,EAEhEi9B,UAAW,SAASxR,EAAQ/8C,GAC1B,IAAImM,EAAUhM,KAAKgM,QAASuK,EAAMvK,EAAQ4wC,GACtC5wC,EAAQ4wC,IAAW/8C,GAAmB,QAAV+8C,IAChC5wC,EAAQ4wC,GAAU/8C,EACdkgD,EAAe9gD,eAAe29C,IAC9B1hB,GAAUl7B,KAAM+/C,EAAenD,GAA/B1hB,CAAwCl7B,KAAMH,EAAO0W,GACzDzO,GAAO9H,KAAM,eAAgBA,KAAM48C,GACrC,EAEA9hC,UAAW,SAAS8hC,GAAS,OAAO58C,KAAKgM,QAAQ4wC,EAAO,EACxDyR,OAAQ,WAAY,OAAOruD,KAAK1D,GAAG,EAEnCgyD,UAAW,SAASvsD,EAAKmjB,GACvBllB,KAAK2M,MAAMouC,QAAQ71B,EAAS,OAAS,WAAWgwB,GAAUnzC,GAC5D,EACAwsD,aAAc,SAASxsD,GAErB,IADA,IAAIsZ,EAAOrb,KAAK2M,MAAMouC,QACbl/C,EAAI,EAAGA,EAAIwf,EAAKzgB,SAAUiB,EAC/B,GAAIwf,EAAKxf,IAAMkG,GAAOsZ,EAAKxf,GAAG6P,MAAQ3J,EAEtC,OADAsZ,EAAKzU,OAAO/K,EAAG,IACR,CAEb,EAEA2yD,WAAYrzB,IAAS,SAASrvB,EAAME,GAClC,IAAIL,EAAOG,EAAK0I,MAAQ1I,EAAOkmC,EAAWjmC,QAAQ/L,KAAKgM,QAASF,GAChE,GAAIH,EAAKqB,WAAc,MAAM,IAAIW,MAAM,kCAv4P7C,SAAsBtN,EAAOR,EAAO4uD,GAElC,IADA,IAAIptD,EAAM,EAAGqtD,EAAWD,EAAM5uD,GACvBwB,EAAMhB,EAAMzF,QAAU6zD,EAAMpuD,EAAMgB,KAASqtD,GAAYrtD,IAC9DhB,EAAMuG,OAAOvF,EAAK,EAAGxB,EACvB,EAo4PM8uD,CAAa3uD,KAAK2M,MAAM2F,SACX,CAAC3G,KAAMA,EAAMijD,SAAU9iD,EAAM0G,OAAQxG,GAAWA,EAAQwG,OACvDk8C,SAAW1iD,GAAWA,EAAQ0iD,UAAa,IAC5C,SAAUr8C,GAAW,OAAOA,EAAQq8C,QAAU,IAC3D1uD,KAAK2M,MAAMqF,UACXka,GAAUlsB,KACZ,IACA6uD,cAAe1zB,IAAS,SAASrvB,GAE/B,IADA,IAAIwG,EAAWtS,KAAK2M,MAAM2F,SACjBzW,EAAI,EAAGA,EAAIyW,EAAS1X,SAAUiB,EAAG,CACxC,IAAIwI,EAAMiO,EAASzW,GAAG+yD,SACtB,GAAIvqD,GAAOyH,GAAuB,iBAARA,GAAoBzH,EAAIqH,MAAQI,EAIxD,OAHAwG,EAAS1L,OAAO/K,EAAG,GACnBmE,KAAK2M,MAAMqF,eACXka,GAAUlsB,KAGd,CACF,IAEAg6C,WAAY7e,IAAS,SAAS37B,EAAG8D,EAAKk/C,GAClB,iBAAPl/C,GAAiC,iBAAPA,IAChBA,EAAR,MAAPA,EAAqBtD,KAAKgM,QAAQo4C,YAAc,QAAU,OACjD9gD,EAAM,MAAQ,YAEzBuL,GAAO7O,KAAK1D,IAAKkD,IAAMw6C,GAAWh6C,KAAMR,EAAG8D,EAAKk/C,EACtD,IACAnJ,gBAAiBle,IAAS,SAASonB,GAEjC,IADA,IAAI50B,EAAS3tB,KAAK1D,IAAIoxB,IAAIC,OAAQzwB,GAAO,EAChCrB,EAAI,EAAGA,EAAI8xB,EAAO/yB,OAAQiB,IAAK,CACtC,IAAIzB,EAAQuzB,EAAO9xB,GACnB,GAAKzB,EAAMyzB,QASAzzB,EAAM0zB,KAAK7mB,KAAO/J,IAC3B88C,GAAWh6C,KAAM5F,EAAM0zB,KAAK7mB,KAAMs7C,GAAK,GACvCrlD,EAAM9C,EAAM0zB,KAAK7mB,KACbpL,GAAKmE,KAAK1D,IAAIoxB,IAAIE,WAAa4F,GAAoBxzB,WAZrC,CAClB,IAAI0D,EAAOtJ,EAAMsJ,OAAQC,EAAKvJ,EAAMuJ,KAChC1G,EAAQuE,KAAKkO,IAAIxS,EAAKwG,EAAKuD,MAC/B/J,EAAMsE,KAAKC,IAAIzB,KAAKmZ,WAAYxV,EAAGsD,MAAQtD,EAAGjB,GAAK,EAAI,IAAM,EAC7D,IAAK,IAAIoD,EAAI7I,EAAO6I,EAAI5I,IAAO4I,EAC3Bk0C,GAAWh6C,KAAM8F,EAAGy8C,GACxB,IAAIuM,EAAY9uD,KAAK1D,IAAIoxB,IAAIC,OACd,GAAXjqB,EAAKhB,IAAWirB,EAAO/yB,QAAUk0D,EAAUl0D,QAAUk0D,EAAUjzD,GAAG6H,OAAOhB,GAAK,GAC9EqkC,GAAoB/mC,KAAK1D,IAAKT,EAAG,IAAIylC,GAAM59B,EAAMorD,EAAUjzD,GAAG8H,MAAO7C,EAC3E,CAKF,CACF,IAIAiuD,WAAY,SAAS1tD,EAAKkS,GACxB,OAAOoB,GAAU3U,KAAMqB,EAAKkS,EAC9B,EAEAy7C,cAAe,SAAS/nD,EAAMsM,GAC5B,OAAOoB,GAAU3U,KAAMkP,GAAIjI,GAAOsM,GAAS,EAC7C,EAEA07C,eAAgB,SAAS5tD,GACvBA,EAAMsO,GAAQ3P,KAAK1D,IAAK+E,GACxB,IAEIgE,EAFAoN,EAASI,GAAc7S,KAAMwN,GAAQxN,KAAK1D,IAAK+E,EAAI4F,OACnDb,EAAS,EAAG3L,GAASgY,EAAO7X,OAAS,GAAK,EAAG8H,EAAKrB,EAAIqB,GAE1D,GAAU,GAANA,EAAW2C,EAAOoN,EAAO,QACtB,OAAS,CACd,IAAI5O,EAAOuC,EAAS3L,GAAU,EAC9B,IAAKoJ,EAAM4O,EAAa,EAAN5O,EAAU,GAAK,IAAMnB,EAAMjI,EAAQoJ,MAChD,MAAI4O,EAAa,EAAN5O,EAAU,GAAKnB,GAC1B,CAAE2C,EAAOoN,EAAa,EAAN5O,EAAU,GAAI,KAAM,CADJuC,EAASvC,EAAM,CACX,CAC3C,CACA,IAAI0oB,EAAMlnB,EAAOA,EAAK3F,QAAQ,aAAe,EAC7C,OAAO6sB,EAAM,EAAIlnB,EAAc,GAAPknB,EAAW,KAAOlnB,EAAK3K,MAAM,EAAG6xB,EAAM,EAChE,EAEA83B,UAAW,SAAShjD,GAClB,IAAIsK,EAAO3L,KAAK1D,IAAIqP,KACpB,OAAKA,EAAKmB,UACHklC,EAAWllC,UAAUnB,EAAM3L,KAAK+uD,WAAW1tD,GAAKsL,OAAOhB,KADhCA,CAEhC,EAEAq6C,UAAW,SAAS3kD,EAAKgE,GACvB,OAAOrF,KAAKkvD,WAAW7tD,EAAKgE,GAAM,EACpC,EAEA6pD,WAAY,SAAS7tD,EAAKgE,GACxB,IAAIjB,EAAQ,GACZ,IAAK+pD,EAAQlvD,eAAeoG,GAAS,OAAOjB,EAC5C,IAAI+qD,EAAOhB,EAAQ9oD,GAAOsG,EAAO3L,KAAKqkD,UAAUhjD,GAChD,GAAyB,iBAAdsK,EAAKtG,GACV8pD,EAAKxjD,EAAKtG,KAAUjB,EAAMxC,KAAKutD,EAAKxjD,EAAKtG,UACxC,GAAIsG,EAAKtG,GACd,IAAK,IAAIxJ,EAAI,EAAGA,EAAI8P,EAAKtG,GAAMzK,OAAQiB,IAAK,CAC1C,IAAIgR,EAAMsiD,EAAKxjD,EAAKtG,GAAMxJ,IACtBgR,GAAOzI,EAAMxC,KAAKiL,EACxB,MACSlB,EAAKU,YAAc8iD,EAAKxjD,EAAKU,YACtCjI,EAAMxC,KAAKutD,EAAKxjD,EAAKU,aACZ8iD,EAAKxjD,EAAKD,OACnBtH,EAAMxC,KAAKutD,EAAKxjD,EAAKD,OAEvB,IAAK,IAAIvG,EAAM,EAAGA,EAAMgqD,EAAKC,QAAQx0D,OAAQuK,IAAO,CAClD,IAAId,EAAM8qD,EAAKC,QAAQjqD,GACnBd,EAAIZ,KAAKkI,EAAM3L,QAAqC,GAA5BN,EAAQ0E,EAAOC,EAAIwI,MAC3CzI,EAAMxC,KAAKyC,EAAIwI,IACrB,CACA,OAAOzI,CACT,EAEAirD,cAAe,SAASpoD,EAAMsM,GAC5B,IAAIjX,EAAM0D,KAAK1D,IAEf,OAAOyW,GAAiB/S,MADxBiH,EAAOwI,GAASnT,EAAa,MAAR2K,EAAe3K,EAAImR,MAAQnR,EAAIoR,KAAO,EAAGzG,IACzB,EAAGsM,GAAS5G,KACnD,EAEAkc,aAAc,SAAS5rB,EAAO0O,GAC5B,IAASvR,EAAQ4F,KAAK1D,IAAIoxB,IAAIN,UAI9B,OAAOvE,GAAa7oB,KAHP,MAAT/C,EAAuB7C,EAAM0zB,KACR,iBAAT7wB,EAA2B0S,GAAQ3P,KAAK1D,IAAKW,GAChDA,EAAQ7C,EAAMsJ,OAAStJ,EAAMuJ,KACXgI,GAAQ,OACzC,EAEAid,WAAY,SAASvnB,EAAKsK,GACxB,OAAOid,GAAW5oB,KAAM2P,GAAQ3P,KAAK1D,IAAK+E,GAAMsK,GAAQ,OAC1D,EAEA6d,WAAY,SAASf,EAAQ9c,GAE3B,OAAO6d,GAAWxpB,MADlByoB,EAASD,GAAgBxoB,KAAMyoB,EAAQ9c,GAAQ,SAChBrB,KAAMme,EAAOtD,IAC9C,EAEA1W,aAAc,SAASJ,EAAQ1C,GAE7B,OADA0C,EAASma,GAAgBxoB,KAAM,CAACmlB,IAAK9W,EAAQ/D,KAAM,GAAIqB,GAAQ,QAAQwZ,IAChE1W,GAAazO,KAAK1D,IAAK+R,EAASrO,KAAKjC,QAAQsqB,WACtD,EACA9O,aAAc,SAAStS,EAAM0E,EAAMwc,GACjC,IAAiB3O,EAAbtc,GAAM,EACV,GAAmB,iBAAR+J,EAAkB,CAC3B,IAAI2I,EAAO5P,KAAK1D,IAAImR,MAAQzN,KAAK1D,IAAIoR,KAAO,EACxCzG,EAAOjH,KAAK1D,IAAImR,MAASxG,EAAOjH,KAAK1D,IAAImR,MACpCxG,EAAO2I,IAAQ3I,EAAO2I,EAAM1S,GAAM,GAC3Csc,EAAUhM,GAAQxN,KAAK1D,IAAK2K,EAC9B,MACEuS,EAAUvS,EAEZ,OAAOihB,GAAgBloB,KAAMwZ,EAAS,CAAC2L,IAAK,EAAG7a,KAAM,GAAIqB,GAAQ,OAAQwc,GAAkBjrB,GAAKioB,KAC7FjoB,EAAM8C,KAAK1D,IAAI+R,OAASkL,GAAaC,GAAW,EACrD,EAEA81C,kBAAmB,WAAa,OAAOxkC,GAAW9qB,KAAKjC,QAAS,EAChEuwB,iBAAkB,WAAa,OAAOhI,GAAUtmB,KAAKjC,QAAS,EAE9DwxD,YAAa,WAAa,MAAO,CAAC7rD,KAAM1D,KAAKjC,QAAQiW,SAAUrQ,GAAI3D,KAAKjC,QAAQkW,OAAO,EAEvFu7C,UAAW,SAASnuD,EAAK/G,EAAMyG,EAAQo0B,EAAMC,GAC3C,IAt3JkBt3B,EAAIwmB,EACtBmW,EAq3JI18B,EAAUiC,KAAKjC,QAEfonB,GADJ9jB,EAAMwnB,GAAa7oB,KAAM2P,GAAQ3P,KAAK1D,IAAK+E,KAC7B6jB,OAAQ5a,EAAOjJ,EAAIiJ,KAKjC,GAJAhQ,EAAKmB,MAAMomB,SAAW,WACtBvnB,EAAKyB,aAAa,mBAAoB,QACtCiE,KAAKjC,QAAQif,MAAME,cAAc5iB,GACjCyD,EAAQskB,MAAMhnB,YAAYf,GACd,QAAR66B,EACFhQ,EAAM9jB,EAAI8jB,SACL,GAAY,SAARgQ,GAA2B,QAARA,EAAgB,CAC5C,IAAIs6B,EAASjuD,KAAKkO,IAAI3R,EAAQC,QAAQylB,aAAczjB,KAAK1D,IAAI+R,QAC7DqhD,EAASluD,KAAKkO,IAAI3R,EAAQskB,MAAMH,YAAankB,EAAQykB,UAAUN,cAElD,SAARiT,GAAmB9zB,EAAI6jB,OAAS5qB,EAAKyP,aAAe0lD,IAAWpuD,EAAI8jB,IAAM7qB,EAAKyP,aAC/Eob,EAAM9jB,EAAI8jB,IAAM7qB,EAAKyP,aAChB1I,EAAI6jB,OAAS5qB,EAAKyP,cAAgB0lD,IACvCtqC,EAAM9jB,EAAI6jB,QACV5a,EAAOhQ,EAAK0P,YAAc0lD,IAC1BplD,EAAOolD,EAASp1D,EAAK0P,YAC3B,CACA1P,EAAKmB,MAAM0pB,IAAMA,EAAM,KACvB7qB,EAAKmB,MAAM6O,KAAOhQ,EAAKmB,MAAM8O,MAAQ,GACxB,SAAT6qB,GACF9qB,EAAOvM,EAAQskB,MAAMH,YAAc5nB,EAAK0P,YACxC1P,EAAKmB,MAAM8O,MAAQ,QAEN,QAAT6qB,EAAmB9qB,EAAO,EACZ,UAAT8qB,IAAqB9qB,GAAQvM,EAAQskB,MAAMH,YAAc5nB,EAAK0P,aAAe,GACtF1P,EAAKmB,MAAM6O,KAAOA,EAAO,MAEvBvJ,IAp5JcjD,EAq5JCkC,KAr5JGskB,EAq5JG,CAACha,KAAMA,EAAM6a,IAAKA,EAAK5a,MAAOD,EAAOhQ,EAAK0P,YAAakb,OAAQC,EAAM7qB,EAAKyP,cAn5J5E,OADvB0wB,EAAY9H,GAAmB70B,EAAIwmB,IACzB0D,WAAqBgM,GAAgBl2B,EAAI28B,EAAUzS,WACrC,MAAxByS,EAAU7S,YAAsB2M,GAAcz2B,EAAI28B,EAAU7S,YAm5J9D,EAEA6hC,iBAAkBtuB,GAASkgB,IAC3BsU,kBAAmBx0B,GAASwgB,IAC5BiU,eAAgBlU,GAChBmU,mBAAoB10B,GAAS8gB,IAE7BrC,YAAa,SAASjF,GACpB,GAAIiC,GAAS33C,eAAe01C,GACxB,OAAOiC,GAASjC,GAAKl2C,KAAK,KAAMuB,KACtC,EAEA8jD,gBAAiB3oB,IAAS,SAASj0B,GAAQ48C,GAAgB9jD,KAAMkH,EAAO,IAExE89C,SAAU,SAASthD,EAAMosD,EAAQjT,EAAMxG,GACrC,IAAI/yC,EAAM,EACNwsD,EAAS,IAAKxsD,GAAO,EAAGwsD,GAAUA,GAEtC,IADA,IAAIzrD,EAAMsL,GAAQ3P,KAAK1D,IAAKoH,GACnB7H,EAAI,EAAGA,EAAIi0D,KAClBzrD,EAAM2gD,GAAShlD,KAAK1D,IAAK+H,EAAKf,EAAKu5C,EAAMxG,IACjC4P,UAFoBpqD,GAI9B,OAAOwI,CACT,EAEAg0C,MAAOld,IAAS,SAAS73B,EAAKu5C,GAC5B,IAAI1Q,EAASnsC,KAEbA,KAAK4uC,oBAAmB,SAAUx0C,GAChC,OAAI+xC,EAAOpuC,QAAQ6zB,OAASua,EAAO7vC,IAAIkgC,QAAUpiC,EAAMyzB,QAC5Cm3B,GAAS7Y,EAAO7vC,IAAKlC,EAAM0zB,KAAMxqB,EAAKu5C,EAAM1Q,EAAOngC,QAAQ+jD,iBAE3DzsD,EAAM,EAAIlJ,EAAMsJ,OAAStJ,EAAMuJ,IAC5C,GAAGzC,EACL,IAEA43C,QAAS3d,IAAS,SAAS73B,EAAKu5C,GAC9B,IAAInvB,EAAM1tB,KAAK1D,IAAIoxB,IAAKpxB,EAAM0D,KAAK1D,IAC/BoxB,EAAI6T,oBACJjlC,EAAI0yC,iBAAiB,GAAI,KAAM,WAE/B6G,GAAoB71C,MAAM,SAAU5F,GACpC,IAAI+uB,EAAQ67B,GAAS1oD,EAAKlC,EAAM0zB,KAAMxqB,EAAKu5C,GAAM,GACjD,OAAOv5C,EAAM,EAAI,CAACI,KAAMylB,EAAOxlB,GAAIvJ,EAAM0zB,MAAQ,CAACpqB,KAAMtJ,EAAM0zB,KAAMnqB,GAAIwlB,EAC1E,GACJ,IAEA+8B,SAAU,SAASxiD,EAAMosD,EAAQjT,EAAMmT,GACrC,IAAI1sD,EAAM,EAAGgM,EAAI0gD,EACbF,EAAS,IAAKxsD,GAAO,EAAGwsD,GAAUA,GAEtC,IADA,IAAIzrD,EAAMsL,GAAQ3P,KAAK1D,IAAKoH,GACnB7H,EAAI,EAAGA,EAAIi0D,IAAUj0D,EAAG,CAC/B,IAAI4sB,EAASI,GAAa7oB,KAAMqE,EAAK,OAIrC,GAHS,MAALiL,EAAaA,EAAImZ,EAAOne,KACrBme,EAAOne,KAAOgF,GACrBjL,EAAM6hD,GAASlmD,KAAMyoB,EAAQnlB,EAAKu5C,IAC1BoJ,QAAW,KACrB,CACA,OAAO5hD,CACT,EAEA2zC,MAAO7c,IAAS,SAAS73B,EAAKu5C,GAC5B,IAAI1Q,EAASnsC,KAET1D,EAAM0D,KAAK1D,IAAK2zD,EAAQ,GACxBxyD,GAAYuC,KAAKjC,QAAQ6zB,QAAUt1B,EAAIkgC,QAAUlgC,EAAIoxB,IAAI6T,oBAY7D,GAXAjlC,EAAIsyC,oBAAmB,SAAUx0C,GAC/B,GAAIqD,EACA,OAAO6F,EAAM,EAAIlJ,EAAMsJ,OAAStJ,EAAMuJ,KAC1C,IAAIsoD,EAAUpjC,GAAasjB,EAAQ/xC,EAAM0zB,KAAM,OACvB,MAApB1zB,EAAM41D,aAAsB/D,EAAQ3hD,KAAOlQ,EAAM41D,YACrDC,EAAMruD,KAAKqqD,EAAQ3hD,MACnB,IAAIjJ,EAAM6kD,GAAS/Z,EAAQ8f,EAAS3oD,EAAKu5C,GAGzC,MAFY,QAARA,GAAkBziD,GAASkC,EAAIoxB,IAAIN,WACnCkG,GAAe6Y,EAAQvjB,GAAWujB,EAAQ9qC,EAAK,OAAO8jB,IAAM8mC,EAAQ9mC,KACjE9jB,CACT,GAAGH,GACC+uD,EAAMr1D,OAAU,IAAK,IAAIiB,EAAI,EAAGA,EAAIS,EAAIoxB,IAAIC,OAAO/yB,OAAQiB,IAC3DS,EAAIoxB,IAAIC,OAAO9xB,GAAGm0D,WAAaC,EAAMp0D,EAC3C,IAGAqjD,WAAY,SAAS79C,GACnB,IAAoB4F,EAAOuG,GAAjBxN,KAAK1D,IAAyB+E,EAAI4F,MAAMC,KAC9CjK,EAAQoE,EAAIqB,GAAIxF,EAAMmE,EAAIqB,GAC9B,GAAIuE,EAAM,CACR,IAAInE,EAAS9C,KAAKgmD,UAAU3kD,EAAK,aACd,UAAdA,EAAI8C,QAAsBjH,GAAO+J,EAAKrM,SAAWqC,IAA6BC,IAAlBD,EAMjE,IALA,IAAIizD,EAAYjpD,EAAK1D,OAAOtG,GACxBkzD,EAAQttD,GAAWqtD,EAAWptD,GAC9B,SAAUJ,GAAM,OAAOG,GAAWH,EAAII,EAAS,EAC/C,KAAK3K,KAAK+3D,GAAa,SAAUxtD,GAAM,MAAO,KAAKvK,KAAKuK,EAAK,EAC7D,SAAUA,GAAM,OAAS,KAAKvK,KAAKuK,KAAQG,GAAWH,EAAM,EACzDzF,EAAQ,GAAKkzD,EAAMlpD,EAAK1D,OAAOtG,EAAQ,OAASA,EACvD,KAAOC,EAAM+J,EAAKrM,QAAUu1D,EAAMlpD,EAAK1D,OAAOrG,OAAWA,CAC3D,CACA,OAAO,IAAIokC,GAAMpyB,GAAI7N,EAAI4F,KAAMhK,GAAQiS,GAAI7N,EAAI4F,KAAM/J,GACvD,EAEAg9C,gBAAiB,SAASr6C,GACX,MAATA,GAAiBA,GAASG,KAAK2M,MAAM5N,aACrCiB,KAAK2M,MAAM5N,WAAaiB,KAAK2M,MAAM5N,WACnCrC,EAASsD,KAAKjC,QAAQ6yB,UAAW,wBAEjCv2B,EAAQ2F,KAAKjC,QAAQ6yB,UAAW,wBAEpC9oB,GAAO9H,KAAM,kBAAmBA,KAAMA,KAAK2M,MAAM5N,WACnD,EACAiyB,SAAU,WAAa,OAAOhxB,KAAKjC,QAAQif,MAAMs+B,YAAcj/C,EAAUC,EAAI0D,MAAO,EACpF2yC,WAAY,WAAa,SAAU3yC,KAAKgM,QAAQwlB,WAAYxxB,KAAK1D,IAAIgsC,SAAU,EAE/E4kB,SAAU/xB,IAAS,SAAU7rB,EAAGma,GAAKoK,GAAe7zB,KAAMsP,EAAGma,EAAI,IACjE2mC,cAAe,WACb,IAAI9sC,EAAWtjB,KAAKjC,QAAQulB,SAC5B,MAAO,CAAChZ,KAAMgZ,EAASsE,WAAYzC,IAAK7B,EAAS0E,UACzC3Z,OAAQiV,EAAS+Q,aAAelR,GAAUnjB,MAAQA,KAAKjC,QAAQ2lB,UAC/DjC,MAAO6B,EAASmR,YAActR,GAAUnjB,MAAQA,KAAKjC,QAAQwlB,SAC7DE,aAAcD,GAAcxjB,MAAOkiB,YAAamB,GAAarjB,MACvE,EAEAo6B,eAAgBe,IAAS,SAAS/gC,EAAOu5B,GAC1B,MAATv5B,GACFA,EAAQ,CAACsJ,KAAM1D,KAAK1D,IAAIoxB,IAAIN,UAAUU,KAAMnqB,GAAI,MAClC,MAAVgwB,IAAkBA,EAAS3zB,KAAKgM,QAAQ4nB,qBACnB,iBAATx5B,EAChBA,EAAQ,CAACsJ,KAAMwL,GAAI9U,EAAO,GAAIuJ,GAAI,MACX,MAAdvJ,EAAMsJ,OACftJ,EAAQ,CAACsJ,KAAMtJ,EAAOuJ,GAAI,OAEvBvJ,EAAMuJ,KAAMvJ,EAAMuJ,GAAKvJ,EAAMsJ,MAClCtJ,EAAMu5B,OAASA,GAAU,EAEF,MAAnBv5B,EAAMsJ,KAAKuD,KA79JrB,SAAuBnJ,EAAI1D,GACzBm5B,GAAmBz1B,GACnBA,EAAG0K,MAAMkrB,YAAct5B,CACzB,CA29JQi2D,CAAcrwD,KAAM5F,GAEpB05B,GAAoB9zB,KAAM5F,EAAMsJ,KAAMtJ,EAAMuJ,GAAIvJ,EAAMu5B,OAE1D,IAEAygB,QAASjZ,IAAS,SAAS1Z,EAAOpT,GAChC,IAAI89B,EAASnsC,KAETswD,EAAY,SAAUzjD,GAAO,MAAqB,iBAAPA,GAAmB,QAAQ1U,KAAK4W,OAAOlC,IAAQA,EAAM,KAAOA,CAAK,EACnG,MAAT4U,IAAiBzhB,KAAKjC,QAAQC,QAAQvC,MAAMgmB,MAAQ6uC,EAAU7uC,IACpD,MAAVpT,IAAkBrO,KAAKjC,QAAQC,QAAQvC,MAAM4S,OAASiiD,EAAUjiD,IAChErO,KAAKgM,QAAQ4Y,cAAgBuC,GAA0BnnB,MAC3D,IAAIuO,EAASvO,KAAKjC,QAAQiW,SAC1BhU,KAAK1D,IAAI4R,KAAKK,EAAQvO,KAAKjC,QAAQkW,QAAQ,SAAUhN,GACnD,GAAIA,EAAKka,QAAW,IAAK,IAAItlB,EAAI,EAAGA,EAAIoL,EAAKka,QAAQvmB,OAAQiB,IACzD,GAAIoL,EAAKka,QAAQtlB,GAAG2lB,UAAW,CAAEoL,GAAcuf,EAAQ59B,EAAQ,UAAW,KAAM,GAClFA,CACJ,IACAvO,KAAKwI,MAAM2b,aAAc,EACzBrc,GAAO9H,KAAM,UAAWA,KAC1B,IAEAk7B,UAAW,SAAS78B,GAAG,OAAO48B,GAAQj7B,KAAM3B,EAAE,EAC9Co5B,eAAgB,WAAW,OAAOA,GAAez3B,KAAK,EACtDo4B,aAAc,WAAW,OAAOA,GAAap4B,KAAK,EAElD6tD,QAAS1yB,IAAS,WAChB,IAAIlJ,EAAYjyB,KAAKjC,QAAQwpB,iBAC7B2E,GAAUlsB,MACVA,KAAKwI,MAAM2b,aAAc,EACzBkD,GAAYrnB,MACZ6zB,GAAe7zB,KAAMA,KAAK1D,IAAIsrB,WAAY5nB,KAAK1D,IAAI0rB,WACnDmW,GAAkBn+B,KAAKjC,UACN,MAAbk0B,GAAqBzwB,KAAKyjB,IAAIgN,EAAYnH,GAAW9qB,KAAKjC,UAAY,IAAMiC,KAAKgM,QAAQ4Y,eACzF0G,GAAoBtrB,MACxB8H,GAAO9H,KAAM,UAAWA,KAC1B,IAEAuwD,QAASp1B,IAAS,SAAS7+B,GACzB,IAAIia,EAAMvW,KAAK1D,IAUf,OATAia,EAAIzY,GAAK,KAELkC,KAAK2M,MAAM6vC,eAAiBx8C,KAAK2M,MAAM6vC,gBAC3C3Y,GAAU7jC,KAAM1D,GAChB+qB,GAAYrnB,MACZA,KAAKjC,QAAQif,MAAM0U,QACnBmC,GAAe7zB,KAAM1D,EAAIsrB,WAAYtrB,EAAI0rB,WACzChoB,KAAKwI,MAAM4rB,aAAc,EACzB/V,GAAYre,KAAM,UAAWA,KAAMuW,GAC5BA,CACT,IAEAi6C,OAAQ,SAASC,GACf,IAAIC,EAAU1wD,KAAKgM,QAAQ0kD,QAC3B,OAAOA,GAAWpuD,OAAO9D,UAAUS,eAAeR,KAAKiyD,EAASD,GAAcC,EAAQD,GAAcA,CACtG,EAEA3C,cAAe,WAAW,OAAO9tD,KAAKjC,QAAQif,MAAMs+B,UAAU,EAC9DltB,kBAAmB,WAAW,OAAOpuB,KAAKjC,QAAQC,OAAO,EACzD2yD,mBAAoB,WAAW,OAAO3wD,KAAKjC,QAAQulB,QAAQ,EAC3DstC,iBAAkB,WAAW,OAAO5wD,KAAKjC,QAAQkkB,OAAO,GAE1DtZ,GAAWqpC,GAEXA,EAAW6e,eAAiB,SAASxrD,EAAMqG,EAAM7L,GAC1CsuD,EAAQlvD,eAAeoG,KAAS8oD,EAAQ9oD,GAAQ2sC,EAAW3sC,GAAQ,CAAC+pD,QAAS,KAClFjB,EAAQ9oD,GAAMqG,GAAQ7L,CACxB,EACAmyC,EAAW8e,qBAAuB,SAASzrD,EAAMqG,EAAMqlD,EAAWlxD,GAChEmyC,EAAW6e,eAAexrD,EAAMqG,EAAM7L,GACtCsuD,EAAQ9oD,GAAM+pD,QAAQxtD,KAAK,CAAC6B,KAAMstD,EAAWlkD,IAAKhN,GACpD,CACF,CAslCAmxD,CAAiBhf,IAGjB,IAAIif,GAAe,gDAAgDl0D,MAAM,KACzE,IAAK,IAAIiC,MAAQ6uC,GAAIrvC,UAAiBqvC,GAAIrvC,UAAUS,eAAeD,KAASU,EAAQuxD,GAAcjyD,IAAQ,IACtGgzC,GAAWxzC,UAAUQ,IAAQ,SAAUkyD,GACvC,OAAO,WAAY,OAAOA,EAAOvyD,MAAMqB,KAAK1D,IAAKoC,UAAU,CAC5D,CAF8B,CAE5BmvC,GAAIrvC,UAAUQ,MAkCnB,OAhCA2J,GAAWklC,IACXmE,GAAWyO,YAAc,CAAC,SAAY4K,GAAe,gBAAmBhF,IAKxErU,GAAWvmC,WAAa,SAASC,GAC1BsmC,GAAW8N,SAASn0C,MAAgB,QAARD,IAAkBsmC,GAAW8N,SAASn0C,KAAOD,GAC9ED,GAAW9M,MAAMqB,KAAMtB,UACzB,EAEAszC,GAAWmf,WAh6RX,SAAoBC,EAAMtlD,GACxBN,GAAU4lD,GAAQtlD,CACpB,EAi6RAkmC,GAAWvmC,WAAW,QAAQ,WAAc,MAAO,CAAE+I,MAAO,SAAUJ,GAAU,OAAOA,EAAO5D,WAAa,EAAK,IAChHwhC,GAAWmf,WAAW,aAAc,QAIpCnf,GAAWqf,gBAAkB,SAAU3lD,EAAM4lD,GAC3Ctf,GAAWxzC,UAAUkN,GAAQ4lD,CAC/B,EACAtf,GAAWuf,mBAAqB,SAAU7lD,EAAM4lD,GAC9CzjB,GAAIrvC,UAAUkN,GAAQ4lD,CACxB,EAEAtf,GAAWwf,aA5IX,SAAsB9F,EAAU1/C,GAS9B,IARAA,EAAUA,EAAUpN,EAAQoN,GAAW,CAAC,GAChCnM,MAAQ6rD,EAAS7rD,OACpBmM,EAAQylD,UAAY/F,EAASr2B,WAC9BrpB,EAAQylD,SAAW/F,EAASr2B,WAC3BrpB,EAAQ0lD,aAAehG,EAASgG,cACjC1lD,EAAQ0lD,YAAchG,EAASgG,aAGV,MAArB1lD,EAAQ60C,UAAmB,CAC7B,IAAI7vB,EAAW30B,EAAUqvD,EAASztD,eAClC+N,EAAQ60C,UAAY7vB,GAAY06B,GACQ,MAAtCA,EAAStpC,aAAa,cAAwB4O,GAAYt4B,SAAS8D,IACvE,CAEA,SAAS2W,IAAQu4C,EAAS7rD,MAAQ/B,EAAGmwC,UAAW,CAEhD,IAAI0jB,EACJ,GAAIjG,EAASkG,OACXxqD,GAAGskD,EAASkG,KAAM,SAAUz+C,IAEvBnH,EAAQ6lD,wBAAwB,CACnC,IAAID,EAAOlG,EAASkG,KACpBD,EAAaC,EAAKE,OAClB,IACE,IAAIC,EAAgBH,EAAKE,OAAS,WAChC3+C,IACAy+C,EAAKE,OAASH,EACdC,EAAKE,SACLF,EAAKE,OAASC,CAChB,CACF,CAAE,MAAMj3D,GAAI,CACd,CAGFkR,EAAQo2C,WAAa,SAAUtkD,GAC7BA,EAAGqV,KAAOA,EACVrV,EAAGk0D,YAAc,WAAc,OAAOtG,CAAU,EAChD5tD,EAAGm0D,WAAa,WACdn0D,EAAGm0D,WAAa/uC,MAChB/P,IACAu4C,EAASvvD,WAAWlB,YAAY6C,EAAGswB,qBACnCs9B,EAASjwD,MAAMsC,QAAU,GACrB2tD,EAASkG,OACXjqD,GAAI+jD,EAASkG,KAAM,SAAUz+C,GACxBnH,EAAQ6lD,wBAAyD,mBAAxBnG,EAASkG,KAAKE,SACxDpG,EAASkG,KAAKE,OAASH,GAE/B,CACF,EAEAjG,EAASjwD,MAAMsC,QAAU,OACzB,IAAID,EAAKk0C,IAAW,SAAU13C,GAAQ,OAAOoxD,EAASvvD,WAAWsjB,aAAanlB,EAAMoxD,EAAS5qC,YAAc,GACzG9U,GACF,OAAOlO,CACT,EAEA,SAAwBk0C,GACtBA,EAAWrqC,IAAMA,GACjBqqC,EAAW5qC,GAAKA,GAChB4qC,EAAW9R,iBAAmBA,GAC9B8R,EAAWnE,IAAMA,GACjBmE,EAAWrH,WAAangC,GACxBwnC,EAAW9yC,YAAcA,EACzB8yC,EAAW7wC,WAAaA,EACxB6wC,EAAWnvC,WAAaJ,GACxBuvC,EAAWpxC,KAAOA,EAClBoxC,EAAWlqC,OAASA,GACpBkqC,EAAW/3B,KAAOA,GAClB+3B,EAAWjQ,UAAYA,GACvBiQ,EAAW5a,eAAiBA,GAC5B4a,EAAW9iC,IAAMA,GACjB8iC,EAAWkgB,OAAS/iD,GACpB6iC,EAAWzmC,MAAQA,GACnBymC,EAAWxmC,UAAYA,GACvBwmC,EAAWnmC,YAAcA,GACzBmmC,EAAWjmC,QAAUA,GACrBimC,EAAW7lC,eAAiBA,GAC5B6lC,EAAWxlC,WAAaA,GACxBwlC,EAAWtlC,UAAYA,GACvBslC,EAAWhlC,WAAaA,GACxBglC,EAAWllC,UAAYA,GACvBklC,EAAW4E,SAAWA,GACtB5E,EAAWuC,OAASA,GACpBvC,EAAW2D,QAAUA,GACrB3D,EAAWoD,cAAgBA,GAC3BpD,EAAWiD,UAAYA,GACvBjD,EAAW6C,gBAAkBA,GAC7B7C,EAAW7kC,aAAeA,GAC1B6kC,EAAWtF,iBAAmBA,GAC9BsF,EAAW1F,WAAaA,GACxB0F,EAAWhG,WAAaA,GACxBgG,EAAWnpC,iBAAmBA,GAC9BmpC,EAAWjpC,kBAAoBA,GAC/BipC,EAAW9oC,OAASA,GACpB8oC,EAAWt1C,SAAWA,EACtBs1C,EAAWh2C,SAAWA,EACtBg2C,EAAW33C,QAAUA,EACrB23C,EAAWqC,SAAWA,EACxB,CA2CA8d,CAAengB,IAEfA,GAAWogB,QAAU,SAEdpgB,EAER,CAnoTiFqgB,E,mBCA/E,SAASrgB,GACZ,aAEAA,EAAWvmC,WAAW,cAAc,SAAS6mD,EAAQC,GACnD,IA8CIltD,EAAM7J,EA9CNonD,EAAa0P,EAAO1P,WACpB4P,EAAkBD,EAAaC,gBAC/BC,EAAaF,EAAaG,OAC1BC,EAAWJ,EAAaK,MAAQH,EAChCI,GAAyC,IAA5BN,EAAaM,WAC1BC,EAAOP,EAAaQ,WACpBC,EAAST,EAAaU,gBAAkB,mBAIxCC,EAAW,WACb,SAASC,EAAG9tD,GAAO,MAAO,CAACA,KAAMA,EAAM5J,MAAO,UAAW,CACzD,IAAI23D,EAAID,EAAG,aAAcE,EAAIF,EAAG,aAAcG,EAAIH,EAAG,aAAcI,EAAIJ,EAAG,aACtEK,EAAWL,EAAG,YAAaM,EAAO,CAACpuD,KAAM,OAAQ5J,MAAO,QAE5D,MAAO,CACL,GAAM03D,EAAG,MAAO,MAASC,EAAG,KAAQA,EAAG,KAAQC,EAAG,GAAMA,EAAG,IAAOA,EAAG,QAAWA,EAChF,OAAUE,EAAG,MAASA,EAAG,SAAYA,EAAG,IAAOJ,EAAG,OAAQ,OAAUG,EAAG,KAAQA,EAAG,MAASA,EAC3F,SAAYH,EAAG,YAAa,IAAOA,EAAG,OAAQ,MAASA,EAAG,OAAQ,IAAOA,EAAG,OAC5E,SAAYA,EAAG,YAAa,MAASA,EAAG,SACxC,IAAOA,EAAG,OAAQ,OAAUA,EAAG,UAAW,KAAQA,EAAG,QAAS,QAAWA,EAAG,WAC5E,GAAMK,EAAU,OAAUA,EAAU,WAAcA,EAClD,KAAQC,EAAM,MAASA,EAAM,KAAQA,EAAM,UAAaA,EAAM,IAAOA,EAAM,SAAYA,EACvF,KAAQN,EAAG,QAAS,MAASA,EAAG,SAAU,MAASA,EAAG,QACtD,MAASG,EAAG,OAAUH,EAAG,UAAW,OAAUA,EAAG,UAAW,QAAWG,EACvE,MAASA,EAEb,CAjBe,GAmBXI,EAAiB,oBACjBC,EAAkB,wFAiBtB,SAASC,EAAIC,EAAIp4D,EAAOq4D,GAEtB,OADAzuD,EAAOwuD,EAAIr4D,EAAUs4D,EACdr4D,CACT,CACA,SAASs4D,EAAU3/C,EAAQzH,GACzB,IAsEmBqnD,EAtEftxD,EAAK0R,EAAOhE,OAChB,GAAU,KAAN1N,GAAmB,KAANA,EAEf,OADAiK,EAAMsnD,UAoEWD,EApEYtxD,EAqExB,SAAS0R,EAAQzH,GACtB,IAAqByD,EAAjB8jD,GAAU,EACd,GAAIzB,GAA+B,KAAjBr+C,EAAOlE,QAAiBkE,EAAOva,MAAM85D,GAErD,OADAhnD,EAAMsnD,SAAWF,EACVH,EAAI,iBAAkB,QAE/B,KAAiC,OAAzBxjD,EAAOgE,EAAOhE,UAChBA,GAAQ4jD,GAAUE,IACtBA,GAAWA,GAAmB,MAAR9jD,EAGxB,OADK8jD,IAASvnD,EAAMsnD,SAAWF,GACxBH,EAAI,SAAU,SACvB,GAhFSjnD,EAAMsnD,SAAS7/C,EAAQzH,GACzB,GAAU,KAANjK,GAAa0R,EAAOva,MAAM,kCACnC,OAAO+5D,EAAI,SAAU,UAChB,GAAU,KAANlxD,GAAa0R,EAAOva,MAAM,MACnC,OAAO+5D,EAAI,SAAU,QAChB,GAAI,qBAAqBz7D,KAAKuK,GACnC,OAAOkxD,EAAIlxD,GACN,GAAU,KAANA,GAAa0R,EAAO/D,IAAI,KACjC,OAAOujD,EAAI,KAAM,YACZ,GAAU,KAANlxD,GAAa0R,EAAOva,MAAM,yCACnC,OAAO+5D,EAAI,SAAU,UAChB,GAAI,KAAKz7D,KAAKuK,GAEnB,OADA0R,EAAOva,MAAM,oDACN+5D,EAAI,SAAU,UAChB,GAAU,KAANlxD,EACT,OAAI0R,EAAO/D,IAAI,MACb1D,EAAMsnD,SAAWE,EACVA,EAAa//C,EAAQzH,IACnByH,EAAO/D,IAAI,MACpB+D,EAAO5D,YACAojD,EAAI,UAAW,YACbQ,GAAkBhgD,EAAQzH,EAAO,IA5ChD,SAAoByH,GAElB,IADA,IAAqBhE,EAAjB8jD,GAAU,EAAaG,GAAQ,EACF,OAAzBjkD,EAAOgE,EAAOhE,SAAiB,CACrC,IAAK8jD,EAAS,CACZ,GAAY,KAAR9jD,IAAgBikD,EAAO,OACf,KAARjkD,EAAaikD,GAAQ,EAChBA,GAAiB,KAARjkD,IAAaikD,GAAQ,EACzC,CACAH,GAAWA,GAAmB,MAAR9jD,CACxB,CACF,CAmCMkkD,CAAWlgD,GACXA,EAAOva,MAAM,qCACN+5D,EAAI,SAAU,cAErBx/C,EAAO/D,IAAI,KACJujD,EAAI,WAAY,WAAYx/C,EAAO7Z,YAEvC,GAAU,KAANmI,EAET,OADAiK,EAAMsnD,SAAWM,EACVA,EAAWngD,EAAQzH,GACrB,GAAU,KAANjK,GAA8B,KAAjB0R,EAAOlE,OAE7B,OADAkE,EAAO5D,YACAojD,EAAI,OAAQ,QACd,GAAU,KAANlxD,GAAa0R,EAAO9D,SAAS0iD,GACtC,OAAOY,EAAI,WAAY,YAClB,GAAU,KAANlxD,GAAa0R,EAAOva,MAAM,QACnB,KAAN6I,GAAa0R,EAAOva,MAAM,QAAU,KAAK1B,KAAKic,EAAOjV,OAAOzE,MAAM,EAAG0Z,EAAOnX,QAEtF,OADAmX,EAAO5D,YACAojD,EAAI,UAAW,WACjB,GAAIF,EAAev7D,KAAKuK,GAS7B,MARU,KAANA,GAAciK,EAAM6nD,SAAiC,KAAtB7nD,EAAM6nD,QAAQnvD,OAC3C+O,EAAO/D,IAAI,KACH,KAAN3N,GAAmB,KAANA,GAAW0R,EAAO/D,IAAI,KAC9B,cAAclY,KAAKuK,KAC5B0R,EAAO/D,IAAI3N,GACD,KAANA,GAAW0R,EAAO/D,IAAI3N,KAGpB,KAANA,GAAa0R,EAAO/D,IAAI,KAAaujD,EAAI,KACtCA,EAAI,WAAY,WAAYx/C,EAAO7Z,WACrC,GAAIy4D,EAAO76D,KAAKuK,GAAK,CAC1B0R,EAAO9D,SAAS0iD,GAChB,IAAIlS,EAAO1sC,EAAO7Z,UAClB,GAAsB,KAAlBoS,EAAM8nD,SAAiB,CACzB,GAAIvB,EAASwB,qBAAqB5T,GAAO,CACvC,IAAIqS,EAAKD,EAASpS,GAClB,OAAO8S,EAAIT,EAAG9tD,KAAM8tD,EAAG13D,MAAOqlD,EAChC,CACA,GAAY,SAARA,GAAmB1sC,EAAOva,MAAM,4CAA4C,GAC9E,OAAO+5D,EAAI,QAAS,UAAW9S,EACnC,CACA,OAAO8S,EAAI,WAAY,WAAY9S,EACrC,CACF,CAkBA,SAASqT,EAAa//C,EAAQzH,GAE5B,IADA,IAAsBjK,EAAlBiyD,GAAW,EACRjyD,EAAK0R,EAAOhE,QAAQ,CACzB,GAAU,KAAN1N,GAAaiyD,EAAU,CACzBhoD,EAAMsnD,SAAWF,EACjB,KACF,CACAY,EAAkB,KAANjyD,CACd,CACA,OAAOkxD,EAAI,UAAW,UACxB,CAEA,SAASW,EAAWngD,EAAQzH,GAE1B,IADA,IAAqByD,EAAjB8jD,GAAU,EACmB,OAAzB9jD,EAAOgE,EAAOhE,SAAiB,CACrC,IAAK8jD,IAAoB,KAAR9jD,GAAuB,KAARA,GAAegE,EAAO/D,IAAI,MAAO,CAC/D1D,EAAMsnD,SAAWF,EACjB,KACF,CACAG,GAAWA,GAAmB,MAAR9jD,CACxB,CACA,OAAOwjD,EAAI,QAAS,WAAYx/C,EAAO7Z,UACzC,CAUA,SAASq6D,EAAaxgD,EAAQzH,GACxBA,EAAMkoD,aAAYloD,EAAMkoD,WAAa,MACzC,IAAIC,EAAQ1gD,EAAOjV,OAAOO,QAAQ,KAAM0U,EAAOnX,OAC/C,KAAI63D,EAAQ,GAAZ,CAEA,GAAIhC,EAAM,CACR,IAAIvsD,EAAI,6CAA6CjO,KAAK8b,EAAOjV,OAAOzE,MAAM0Z,EAAOnX,MAAO63D,IACxFvuD,IAAGuuD,EAAQvuD,EAAE5L,MACnB,CAGA,IADA,IAAIo6D,EAAQ,EAAGC,GAAe,EACrB3zD,EAAMyzD,EAAQ,EAAGzzD,GAAO,IAAKA,EAAK,CACzC,IAAIqB,EAAK0R,EAAOjV,OAAOoE,OAAOlC,GAC1B4zD,EArBO,SAqBYv1D,QAAQgD,GAC/B,GAAIuyD,GAAW,GAAKA,EAAU,EAAG,CAC/B,IAAKF,EAAO,GAAI1zD,EAAK,KAAO,CAC5B,GAAe,KAAT0zD,EAAY,CAAY,KAANryD,IAAWsyD,GAAe,GAAM,KAAO,CACjE,MAAO,GAAIC,GAAW,GAAKA,EAAU,IACjCF,OACG,GAAI/B,EAAO76D,KAAKuK,GACrBsyD,GAAe,OACV,GAAI,UAAU78D,KAAKuK,GACxB,QAAUrB,EAAK,CACb,GAAW,GAAPA,EAAU,OAEd,GADW+S,EAAOjV,OAAOoE,OAAOlC,EAAM,IAC1BqB,GAAuC,MAAjC0R,EAAOjV,OAAOoE,OAAOlC,EAAM,GAAY,CAAEA,IAAO,KAAM,CAC1E,MACK,GAAI2zD,IAAiBD,EAAO,GAC/B1zD,EACF,KACF,CACF,CACI2zD,IAAiBD,IAAOpoD,EAAMkoD,WAAaxzD,EA7B1B,CA8BvB,CAIA,IAAI6zD,EAAc,CAAC,MAAQ,EAAM,QAAU,EAAM,UAAY,EAAM,QAAU,EAC1D,QAAU,EAAM,MAAQ,EAAM,QAAU,EAAM,kBAAkB,GAEnF,SAASC,EAAUxhD,EAAUhD,EAAQtL,EAAMi5B,EAAOl5B,EAAM2H,GACtD/M,KAAK2T,SAAWA,EAChB3T,KAAK2Q,OAASA,EACd3Q,KAAKqF,KAAOA,EACZrF,KAAKoF,KAAOA,EACZpF,KAAK+M,KAAOA,EACC,MAATuxB,IAAet+B,KAAKs+B,MAAQA,EAClC,CAEA,SAAS82B,EAAQzoD,EAAO0oD,GACtB,IAAKxC,EAAY,OAAO,EACxB,IAAK,IAAI9oB,EAAIp9B,EAAM2oD,UAAWvrB,EAAGA,EAAIA,EAAE35B,KACrC,GAAI25B,EAAEr+B,MAAQ2pD,EAAS,OAAO,EAChC,IAAK,IAAIE,EAAK5oD,EAAMkF,QAAS0jD,EAAIA,EAAKA,EAAGnwD,KACvC,IAAS2kC,EAAIwrB,EAAGC,KAAMzrB,EAAGA,EAAIA,EAAE35B,KAC7B,GAAI25B,EAAEr+B,MAAQ2pD,EAAS,OAAO,CAEpC,CAEA,SAASI,EAAQ9oD,EAAOlR,EAAO4J,EAAM7J,EAAS4Y,GAC5C,IAAIshD,EAAK/oD,EAAM+oD,GAQf,IALAH,EAAG5oD,MAAQA,EAAO4oD,EAAGnhD,OAASA,EAAQmhD,EAAGI,OAAS,KAAMJ,EAAGG,GAAKA,EAAIH,EAAG95D,MAAQA,EAE1EkR,EAAM6nD,QAAQv1D,eAAe,WAChC0N,EAAM6nD,QAAQl2B,OAAQ,KAItB,IADiBo3B,EAAG96D,OAAS86D,EAAG3wB,MAAQ4tB,EAAWiD,EAAaC,GACjDxwD,EAAM7J,GAAU,CAC7B,KAAMk6D,EAAG96D,QAAU86D,EAAGA,EAAG96D,OAAS,GAAGk7D,KACnCJ,EAAG3wB,KAAH2wB,GACF,OAAIH,EAAGI,OAAeJ,EAAGI,OACb,YAARtwD,GAAsB+vD,EAAQzoD,EAAOnR,GAAiB,aACnDC,CACT,CAEJ,CAIA,IAAI85D,EAAK,CAAC5oD,MAAO,KAAMgE,OAAQ,KAAMglD,OAAQ,KAAMD,GAAI,MACvD,SAASK,IACP,IAAK,IAAIl6D,EAAI6C,UAAU9D,OAAS,EAAGiB,GAAK,EAAGA,IAAK05D,EAAGG,GAAG9zD,KAAKlD,UAAU7C,GACvE,CACA,SAASi4D,IAEP,OADAiC,EAAKp3D,MAAM,KAAMD,YACV,CACT,CACA,SAASs3D,EAAOtqD,EAAM4S,GACpB,IAAK,IAAIyrB,EAAIzrB,EAAMyrB,EAAGA,EAAIA,EAAE35B,KAAM,GAAI25B,EAAEr+B,MAAQA,EAAM,OAAO,EAC7D,OAAO,CACT,CACA,SAASuqD,EAASZ,GAChB,IAAI1oD,EAAQ4oD,EAAG5oD,MAEf,GADA4oD,EAAGI,OAAS,MACP9C,EAAL,CACA,GAAIlmD,EAAMkF,QACR,GAA0B,OAAtBlF,EAAM6nD,QAAQznD,MAAiBJ,EAAMkF,SAAWlF,EAAMkF,QAAQqkD,MAAO,CAEvE,IAAIC,EAAaC,EAAkBf,EAAS1oD,EAAMkF,SAClD,GAAkB,MAAdskD,EAEF,YADAxpD,EAAMkF,QAAUskD,EAGpB,MAAO,IAAKH,EAAOX,EAAS1oD,EAAM2oD,WAEhC,YADA3oD,EAAM2oD,UAAY,IAAIe,EAAIhB,EAAS1oD,EAAM2oD,YAKzC/C,EAAa+D,aAAeN,EAAOX,EAAS1oD,EAAM2pD,cACpD3pD,EAAM2pD,WAAa,IAAID,EAAIhB,EAAS1oD,EAAM2pD,YAhB3B,CAiBnB,CACA,SAASF,EAAkBf,EAASxjD,GAClC,GAAKA,EAEE,IAAIA,EAAQqkD,MAAO,CACxB,IAAI/kD,EAAQilD,EAAkBf,EAASxjD,EAAQzM,MAC/C,OAAK+L,EACDA,GAASU,EAAQzM,KAAayM,EAC3B,IAAIL,EAAQL,EAAOU,EAAQ2jD,MAAM,GAFrB,IAGrB,CAAO,OAAIQ,EAAOX,EAASxjD,EAAQ2jD,MAC1B3jD,EAEA,IAAIL,EAAQK,EAAQzM,KAAM,IAAIixD,EAAIhB,EAASxjD,EAAQ2jD,OAAO,EACnE,CAVE,OAAO,IAWX,CAEA,SAASe,EAAW7qD,GAClB,MAAe,UAARA,GAA4B,WAARA,GAA6B,aAARA,GAA+B,YAARA,GAA8B,YAARA,CAC/F,CAIA,SAAS8F,EAAQpM,EAAMowD,EAAMU,GAASl2D,KAAKoF,KAAOA,EAAMpF,KAAKw1D,KAAOA,EAAMx1D,KAAKk2D,MAAQA,CAAM,CAC7F,SAASG,EAAI3qD,EAAM0E,GAAQpQ,KAAK0L,KAAOA,EAAM1L,KAAKoQ,KAAOA,CAAK,CAE9D,IAAIomD,EAAc,IAAIH,EAAI,OAAQ,IAAIA,EAAI,YAAa,OACvD,SAASI,IACPlB,EAAG5oD,MAAMkF,QAAU,IAAIL,EAAQ+jD,EAAG5oD,MAAMkF,QAAS0jD,EAAG5oD,MAAM2oD,WAAW,GACrEC,EAAG5oD,MAAM2oD,UAAYkB,CACvB,CACA,SAASE,IACPnB,EAAG5oD,MAAMkF,QAAU,IAAIL,EAAQ+jD,EAAG5oD,MAAMkF,QAAS0jD,EAAG5oD,MAAM2oD,WAAW,GACrEC,EAAG5oD,MAAM2oD,UAAY,IACvB,CAEA,SAASqB,IACPpB,EAAG5oD,MAAM2oD,UAAYC,EAAG5oD,MAAMkF,QAAQ2jD,KACtCD,EAAG5oD,MAAMkF,QAAU0jD,EAAG5oD,MAAMkF,QAAQzM,IACtC,CAEA,SAASwxD,EAAQvxD,EAAM0H,GACrB,IAAItC,EAAS,WACX,IAAIkC,EAAQ4oD,EAAG5oD,MAAO81C,EAAS91C,EAAMgH,SACrC,GAA0B,QAAtBhH,EAAM6nD,QAAQnvD,KAAgBo9C,EAAS91C,EAAM6nD,QAAQ7gD,cACpD,IAAK,IAAIhF,EAAQhC,EAAM6nD,QAAS7lD,GAAuB,KAAdA,EAAMtJ,MAAesJ,EAAM2vB,MAAO3vB,EAAQA,EAAMvJ,KAC5Fq9C,EAAS9zC,EAAMgF,SACjBhH,EAAM6nD,QAAU,IAAIW,EAAU1S,EAAQ8S,EAAGnhD,OAAOzD,SAAUtL,EAAM,KAAMsH,EAAM6nD,QAASznD,EACvF,EAEA,OADAtC,EAAOqrD,KAAM,EACNrrD,CACT,CACA,SAASosD,IACP,IAAIlqD,EAAQ4oD,EAAG5oD,MACXA,EAAM6nD,QAAQpvD,OACU,KAAtBuH,EAAM6nD,QAAQnvD,OAChBsH,EAAMgH,SAAWhH,EAAM6nD,QAAQ7gD,UACjChH,EAAM6nD,QAAU7nD,EAAM6nD,QAAQpvD,KAElC,CAGA,SAAS0xD,EAAOC,GAMd,OALA,SAASC,EAAI3xD,GACX,OAAIA,GAAQ0xD,EAAejD,IACR,KAAViD,GAAyB,KAAR1xD,GAAuB,KAARA,GAAuB,KAARA,EAAoB0wD,IAChEjC,EAAKkD,EACnB,CAEF,CAEA,SAASnB,EAAUxwD,EAAMxF,GACvB,MAAY,OAARwF,EAAsByuD,EAAK8C,EAAQ,SAAU/2D,GAAQo3D,GAAQH,EAAO,KAAMD,GAClE,aAARxxD,EAA4ByuD,EAAK8C,EAAQ,QAASM,EAAWrB,EAAWgB,GAChE,aAARxxD,EAA4ByuD,EAAK8C,EAAQ,QAASf,EAAWgB,GACrD,aAARxxD,EAA4BkwD,EAAGnhD,OAAOva,MAAM,SAAS,GAASi6D,IAASA,EAAK8C,EAAQ,QAASO,EAAiBL,EAAO,KAAMD,GACnH,YAARxxD,EAA2ByuD,EAAKgD,EAAO,MAC/B,KAARzxD,EAAoByuD,EAAK8C,EAAQ,KAAMF,EAAkBR,GAAOW,EAAQF,GAChE,KAARtxD,EAAoByuD,IACZ,MAARzuD,GAC2B,QAAzBkwD,EAAG5oD,MAAM6nD,QAAQznD,MAAkBwoD,EAAG5oD,MAAM+oD,GAAGH,EAAG5oD,MAAM+oD,GAAG96D,OAAS,IAAMi8D,GAC5EtB,EAAG5oD,MAAM+oD,GAAG3wB,KAAZwwB,GACKzB,EAAK8C,EAAQ,QAASM,EAAWrB,EAAWgB,EAAQO,KAEjD,YAAR/xD,EAA2ByuD,EAAKuD,IACxB,OAARhyD,EAAsByuD,EAAK8C,EAAQ,QAASF,EAAkBY,GAASzB,EAAWc,EAAYE,GACtF,SAARxxD,GAAoBytD,GAAiB,aAATjzD,GAC9B01D,EAAGI,OAAS,UACL7B,EAAK8C,EAAQ,OAAgB,SAARvxD,EAAkBA,EAAOxF,GAAQrF,GAAWq8D,IAE9D,YAARxxD,EACEytD,GAAiB,WAATjzD,GACV01D,EAAGI,OAAS,UACL7B,EAAK+B,IACH/C,IAAkB,UAATjzD,GAA8B,QAATA,GAA4B,QAATA,IAAoB01D,EAAGnhD,OAAOva,MAAM,UAAU,IACxG07D,EAAGI,OAAS,UACC,QAAT91D,EAAwBi0D,EAAKyD,IACf,QAAT13D,EAAwBi0D,EAAK0D,GAAUV,EAAO,YAAaW,GAAUX,EAAO,MACzEhD,EAAK8C,EAAQ,QAAS/lD,GAASimD,EAAO,KAAMF,EAAQ,KAAMV,GAAOW,EAAQA,IAC5E/D,GAAiB,aAATjzD,GACjB01D,EAAGI,OAAS,UACL7B,EAAK8C,EAAQ,QAAShB,EAAYC,EAAWgB,IAC3C/D,GAAiB,YAATjzD,GACjB01D,EAAGI,OAAS,UACL7B,EAAK+B,IAEL/B,EAAK8C,EAAQ,QAASc,IAGrB,UAARryD,EAAyByuD,EAAK8C,EAAQ,QAASM,EAAWJ,EAAO,KAAMF,EAAQ,IAAK,UAAWF,EACjER,GAAOW,EAAQA,EAAQF,GAC7C,QAARtxD,EAAuByuD,EAAK8B,EAAYkB,EAAO,MACvC,WAARzxD,EAA0ByuD,EAAKgD,EAAO,MAC9B,SAARzxD,EAAwByuD,EAAK8C,EAAQ,QAASH,EAAakB,EAAmB9B,EAAWgB,EAAQF,GACzF,UAARtxD,EAAyByuD,EAAK8C,EAAQ,QAASgB,GAAaf,GACpD,UAARxxD,EAAyByuD,EAAK8C,EAAQ,QAASiB,GAAahB,GACpD,SAARxxD,EAAwByuD,EAAK+B,GACpB,KAATh2D,EAAqBi0D,EAAK8B,EAAYC,GACnCE,EAAKa,EAAQ,QAAShB,EAAYkB,EAAO,KAAMD,EACxD,CACA,SAASc,EAAkBtyD,GACzB,GAAY,KAARA,EAAa,OAAOyuD,EAAKgE,GAAQhB,EAAO,KAC9C,CACA,SAASlB,EAAWvwD,EAAMxF,GACxB,OAAOk4D,EAAgB1yD,EAAMxF,GAAO,EACtC,CACA,SAASm4D,EAAkB3yD,EAAMxF,GAC/B,OAAOk4D,EAAgB1yD,EAAMxF,GAAO,EACtC,CACA,SAASq3D,EAAU7xD,GACjB,MAAY,KAARA,EAAoB0wD,IACjBjC,EAAK8C,EAAQ,KAAMO,EAAiBL,EAAO,KAAMD,EAC1D,CACA,SAASkB,EAAgB1yD,EAAMxF,EAAOo4D,GACpC,GAAI1C,EAAG5oD,MAAMkoD,YAAcU,EAAGnhD,OAAOnX,MAAO,CAC1C,IAAIT,EAAOy7D,EAAUC,EAAmBC,EACxC,GAAY,KAAR9yD,EAAa,OAAOyuD,EAAK2C,EAAaG,EAAQ,KAAMwB,GAASN,GAAQ,KAAMjB,EAAQC,EAAO,MAAOt6D,EAAMm6D,GACtG,GAAY,YAARtxD,EAAoB,OAAO0wD,EAAKU,EAAa5lD,GAASimD,EAAO,MAAOt6D,EAAMm6D,EACrF,CAEA,IAAI0B,EAAUJ,EAAUK,EAAuBC,EAC/C,OAAIrD,EAAYj2D,eAAeoG,GAAcyuD,EAAKuE,GACtC,YAARhzD,EAA2ByuD,EAAKuD,GAAagB,GACrC,SAARhzD,GAAoBytD,GAAiB,aAATjzD,GAAyB01D,EAAGI,OAAS,UAAkB7B,EAAK8C,EAAQ,QAAS4B,GAAiB3B,IAClH,aAARxxD,GAA+B,SAARA,EAAwByuD,EAAKmE,EAAUD,EAAoBpC,GAC1E,KAARvwD,EAAoByuD,EAAK8C,EAAQ,KAAMO,EAAiBL,EAAO,KAAMD,EAAQwB,GACrE,YAARhzD,GAA8B,UAARA,EAAyByuD,EAAKmE,EAAUD,EAAoBpC,GAC1E,KAARvwD,EAAoByuD,EAAK8C,EAAQ,KAAM6B,GAAc5B,EAAQwB,GACrD,KAARhzD,EAAoBqzD,GAAaC,GAAS,IAAK,KAAMN,GAC7C,SAARhzD,EAAwB0wD,EAAK6C,EAAOP,GAC5B,OAARhzD,EAAsByuD,EAuD5B,SAAqBmE,GACnB,OAAO,SAAS5yD,GACd,MAAY,KAARA,EAAoByuD,EAAKmE,EAAUY,GAAgB/5D,GACtC,YAARuG,GAAsBytD,EAAagB,EAAKgF,GAAeb,EAAUK,EAAuBC,GACrFxC,EAAKkC,EAAUD,EAAoBpC,EACjD,CACF,CA7DiCmD,CAAYd,IACpCnE,GACT,CACA,SAASqD,EAAgB9xD,GACvB,OAAIA,EAAKxL,MAAM,cAAsBk8D,IAC9BA,EAAKH,EACd,CAEA,SAAS2C,EAAmBlzD,EAAMxF,GAChC,MAAY,KAARwF,EAAoByuD,EAAKqD,GACtBmB,EAAqBjzD,EAAMxF,GAAO,EAC3C,CACA,SAASy4D,EAAqBjzD,EAAMxF,EAAOo4D,GACzC,IAAIrsB,EAAgB,GAAXqsB,EAAmBM,EAAqBD,EAC7CU,EAAkB,GAAXf,EAAmBrC,EAAaoC,EAC3C,MAAY,MAAR3yD,EAAqByuD,EAAK2C,EAAawB,EAAUC,EAAmBC,EAAWxB,GACvE,YAARtxD,EACE,UAAUlN,KAAK0H,IAAUizD,GAAiB,KAATjzD,EAAqBi0D,EAAKloB,GAC3DknB,GAAiB,KAATjzD,GAAgB01D,EAAGnhD,OAAOva,MAAM,4BAA4B,GAC/Di6D,EAAK8C,EAAQ,KAAMwB,GAASX,GAAU,KAAMZ,EAAQjrB,GAChD,KAAT/rC,EAAqBi0D,EAAK8B,EAAYkB,EAAO,KAAMkC,GAChDlF,EAAKkF,GAEF,SAAR3zD,EAA0B0wD,EAAK6C,EAAOhtB,GAC9B,KAARvmC,EACQ,KAARA,EAAoBqzD,GAAaV,EAAmB,IAAK,OAAQpsB,GACzD,KAARvmC,EAAoByuD,EAAKmF,GAAUrtB,GAC3B,KAARvmC,EAAoByuD,EAAK8C,EAAQ,KAAMO,EAAiBL,EAAO,KAAMD,EAAQjrB,GAC7EknB,GAAiB,MAATjzD,GAAiB01D,EAAGI,OAAS,UAAkB7B,EAAK2D,GAAU7rB,IAC9D,UAARvmC,GACFkwD,EAAG5oD,MAAM8nD,SAAWc,EAAGI,OAAS,WAChCJ,EAAGnhD,OAAO1D,OAAO6kD,EAAGnhD,OAAO/S,IAAMk0D,EAAGnhD,OAAOnX,MAAQ,GAC5C62D,EAAKkF,SAHd,OALA,CAUF,CACA,SAASJ,EAAMvzD,EAAMxF,GACnB,MAAY,SAARwF,EAAwB0wD,IACS,MAAjCl2D,EAAMnF,MAAMmF,EAAMjF,OAAS,GAAmBk5D,EAAK8E,GAChD9E,EAAKqD,EAAiB+B,EAC/B,CACA,SAASA,EAAc7zD,GACrB,GAAY,KAARA,EAGF,OAFAkwD,EAAGI,OAAS,WACZJ,EAAG5oD,MAAMsnD,SAAWM,EACbT,EAAK8E,EAEhB,CACA,SAAST,EAAU9yD,GAEjB,OADAuvD,EAAaW,EAAGnhD,OAAQmhD,EAAG5oD,OACpBopD,EAAa,KAAR1wD,EAAcwwD,EAAYD,EACxC,CACA,SAASsC,EAAiB7yD,GAExB,OADAuvD,EAAaW,EAAGnhD,OAAQmhD,EAAG5oD,OACpBopD,EAAa,KAAR1wD,EAAcwwD,EAAYmC,EACxC,CAQA,SAASl5D,EAAOq6D,EAAGt5D,GACjB,GAAa,UAATA,EAA4C,OAAvB01D,EAAGI,OAAS,UAAkB7B,EAAKyE,EAC9D,CACA,SAASM,GAAcM,EAAGt5D,GACxB,GAAa,UAATA,EAA4C,OAAvB01D,EAAGI,OAAS,UAAkB7B,EAAKwE,EAC9D,CACA,SAASZ,GAAWryD,GAClB,MAAY,KAARA,EAAoByuD,EAAK+C,EAAQhB,GAC9BE,EAAKwC,EAAoBzB,EAAO,KAAMD,EAC/C,CACA,SAASoC,GAAS5zD,GAChB,GAAY,YAARA,EAA6C,OAAxBkwD,EAAGI,OAAS,WAAmB7B,GAC1D,CACA,SAAS6E,GAAQtzD,EAAMxF,GACrB,MAAY,SAARwF,GACFkwD,EAAGI,OAAS,WACL7B,EAAK6E,KACK,YAARtzD,GAAkC,WAAZkwD,EAAG95D,OAClC85D,EAAGI,OAAS,WACC,OAAT91D,GAA2B,OAATA,EAAuBi0D,EAAKsF,KAE9CtG,GAAQyC,EAAG5oD,MAAMkoD,YAAcU,EAAGnhD,OAAOnX,QAAUsJ,EAAIgvD,EAAGnhD,OAAOva,MAAM,YAAY,MACrF07D,EAAG5oD,MAAMkoD,WAAaU,EAAGnhD,OAAO/S,IAAMkF,EAAE,GAAG3L,QACtCk5D,EAAKuF,MACK,UAARh0D,GAA4B,UAARA,GAC7BkwD,EAAGI,OAASlD,EAAa,WAAc8C,EAAG95D,MAAQ,YAC3Cq4D,EAAKuF,KACK,kBAARh0D,EACFyuD,EAAKuF,IACHvG,GAAQyD,EAAW12D,IAC5B01D,EAAGI,OAAS,UACL7B,EAAK6E,KACK,KAARtzD,EACFyuD,EAAK8B,EAAY0D,GAAWxC,EAAO,KAAMuC,IAC/B,UAARh0D,EACFyuD,EAAKkE,EAAmBqB,IACb,KAATx5D,GACT01D,EAAGI,OAAS,UACL7B,EAAK6E,KACK,KAARtzD,EACF0wD,EAAKsD,SADP,EAnBL,IAAI9yD,CAsBR,CACA,SAAS6yD,GAAa/zD,GACpB,MAAY,YAARA,EAA2B0wD,EAAKsD,KACpC9D,EAAGI,OAAS,WACL7B,EAAKuD,IACd,CACA,SAASgC,GAAUh0D,GACjB,MAAY,KAARA,EAAoByuD,EAAKkE,GACjB,KAAR3yD,EAAoB0wD,EAAKsB,SAA7B,CACF,CACA,SAASe,GAASmB,EAAMr8D,EAAKs8D,GAC3B,SAASC,EAAQp0D,EAAMxF,GACrB,GAAI25D,EAAMA,EAAI95D,QAAQ2F,IAAS,EAAY,KAARA,EAAa,CAC9C,IAAIywD,EAAMP,EAAG5oD,MAAM6nD,QAEnB,MADgB,QAAZsB,EAAI/oD,OAAgB+oD,EAAIz0D,KAAOy0D,EAAIz0D,KAAO,GAAK,GAC5CyyD,GAAK,SAASzuD,EAAMxF,GACzB,OAAIwF,GAAQnI,GAAO2C,GAAS3C,EAAY64D,IACjCA,EAAKwD,EACd,GAAGE,EACL,CACA,OAAIp0D,GAAQnI,GAAO2C,GAAS3C,EAAY42D,IACpC0F,GAAOA,EAAI95D,QAAQ,MAAQ,EAAUq2D,EAAKwD,GACvCzF,EAAKgD,EAAO55D,GACrB,CACA,OAAO,SAASmI,EAAMxF,GACpB,OAAIwF,GAAQnI,GAAO2C,GAAS3C,EAAY42D,IACjCiC,EAAKwD,EAAME,EACpB,CACF,CACA,SAASf,GAAaa,EAAMr8D,EAAK6P,GAC/B,IAAK,IAAIlR,EAAI,EAAGA,EAAI6C,UAAU9D,OAAQiB,IACpC05D,EAAGG,GAAG9zD,KAAKlD,UAAU7C,IACvB,OAAOi4D,EAAK8C,EAAQ15D,EAAK6P,GAAOqrD,GAASmB,EAAMr8D,GAAM25D,EACvD,CACA,SAASX,GAAM7wD,GACb,MAAY,KAARA,EAAoByuD,IACjBiC,EAAKF,EAAWK,GACzB,CACA,SAASoD,GAAUj0D,EAAMxF,GACvB,GAAIizD,EAAM,CACR,GAAY,KAARztD,EAAa,OAAOyuD,EAAK2D,IAC7B,GAAa,KAAT53D,EAAc,OAAOi0D,EAAKwF,GAChC,CACF,CACA,SAASI,GAAcr0D,EAAMxF,GAC3B,GAAIizD,IAAiB,KAARztD,GAAwB,MAATxF,GAAgB,OAAOi0D,EAAK2D,GAC1D,CACA,SAASkC,GAAat0D,GACpB,GAAIytD,GAAgB,KAARztD,EACV,OAAIkwD,EAAGnhD,OAAOva,MAAM,kBAAkB,GAAei6D,EAAK8B,EAAYgE,GAAMnC,IAChE3D,EAAK2D,GAErB,CACA,SAASmC,GAAKT,EAAGt5D,GACf,GAAa,MAATA,EAEF,OADA01D,EAAGI,OAAS,UACL7B,GAEX,CACA,SAAS2D,GAASpyD,EAAMxF,GACtB,MAAa,SAATA,GAA6B,UAATA,GAA8B,SAATA,GAA6B,YAATA,GAC/D01D,EAAGI,OAAS,UACL7B,EAAc,UAATj0D,EAAoBm4D,EAAoBP,KAE1C,YAARpyD,GAA+B,QAATxF,GACxB01D,EAAGI,OAAS,OACL7B,EAAK+F,KAED,KAATh6D,GAAyB,KAATA,EAAqBi0D,EAAK2D,IAClC,UAARpyD,GAA4B,UAARA,GAA4B,QAARA,EAAuByuD,EAAK+F,IAC5D,KAARx0D,EAAoByuD,EAAK8C,EAAQ,KAAMwB,GAASX,GAAU,IAAK,KAAMZ,EAAQgD,IACrE,KAARx0D,EAAoByuD,EAAK8C,EAAQ,KAAMkD,GAAWjD,EAAQgD,IAClD,KAARx0D,EAAoByuD,EAAKsE,GAAS2B,GAAS,KAAMC,GAAiBH,IAC1D,KAARx0D,EAAoByuD,EAAKsE,GAASX,GAAU,KAAMA,IAC1C,SAARpyD,EAA0B0wD,EAAKkE,GAAWJ,SAA9C,CACF,CACA,SAASG,GAAgB30D,GACvB,GAAY,MAARA,EAAc,OAAOyuD,EAAK2D,GAChC,CACA,SAASqC,GAAUz0D,GACjB,OAAIA,EAAKxL,MAAM,YAAoBi6D,IACvB,KAARzuD,GAAuB,KAARA,EAAoByuD,EAAKgG,IACrC/D,EAAKmE,GAAUJ,GACxB,CACA,SAASI,GAAS70D,EAAMxF,GACtB,MAAY,YAARwF,GAAkC,WAAZkwD,EAAG95D,OAC3B85D,EAAGI,OAAS,WACL7B,EAAKoG,KACM,KAATr6D,GAAwB,UAARwF,GAA4B,UAARA,EACtCyuD,EAAKoG,IACK,KAAR70D,EACFyuD,EAAK2D,IACK,KAARpyD,EACFyuD,EAAKgD,EAAO,YAAa4C,GAAe5C,EAAO,KAAMoD,IAC3C,KAAR70D,EACF0wD,EAAKoE,GAAcD,IAChB70D,EAAKxL,MAAM,mBAAhB,EACEi6D,GAEX,CACA,SAASmG,GAAU50D,EAAMxF,GACvB,MAAY,SAARwF,EAAwB0wD,IACS,MAAjCl2D,EAAMnF,MAAMmF,EAAMjF,OAAS,GAAmBk5D,EAAKmG,IAChDnG,EAAK2D,GAAU2C,GACxB,CACA,SAASA,GAAkB/0D,GACzB,GAAY,KAARA,EAGF,OAFAkwD,EAAGI,OAAS,WACZJ,EAAG5oD,MAAMsnD,SAAWM,EACbT,EAAKmG,GAEhB,CACA,SAASF,GAAQ10D,EAAMxF,GACrB,MAAY,YAARwF,GAAsBkwD,EAAGnhD,OAAOva,MAAM,YAAY,IAAmB,KAATgG,EAAqBi0D,EAAKiG,IAC9E,KAAR10D,EAAoByuD,EAAK2D,IACjB,UAARpyD,EAAyByuD,EAAKiG,IAC3BhE,EAAK0B,GACd,CACA,SAASoC,GAAUx0D,EAAMxF,GACvB,MAAa,KAATA,EAAqBi0D,EAAK8C,EAAQ,KAAMwB,GAASX,GAAU,KAAMZ,EAAQgD,IAChE,KAATh6D,GAAwB,KAARwF,GAAwB,KAATxF,EAAqBi0D,EAAK2D,IACjD,KAARpyD,EAAoByuD,EAAK2D,GAAUX,EAAO,KAAM+C,IACvC,WAATh6D,GAA+B,cAATA,GAAyB01D,EAAGI,OAAS,UAAkB7B,EAAK2D,KACzE,KAAT53D,EAAqBi0D,EAAK2D,GAAUX,EAAO,KAAMW,SAArD,CACF,CACA,SAASqB,GAAcK,EAAGt5D,GACxB,GAAa,KAATA,EAAc,OAAOi0D,EAAK8C,EAAQ,KAAMwB,GAASX,GAAU,KAAMZ,EAAQgD,GAC/E,CACA,SAASQ,KACP,OAAOtE,EAAK0B,GAAU6C,GACxB,CACA,SAASA,GAAiBnB,EAAGt5D,GAC3B,GAAa,KAATA,EAAc,OAAOi0D,EAAK2D,GAChC,CACA,SAASR,GAAOkC,EAAGt5D,GACjB,MAAa,QAATA,GAAkB01D,EAAGI,OAAS,UAAkB7B,EAAKyD,KAClDxB,EAAKllD,GAASyoD,GAAWiB,GAAaC,GAC/C,CACA,SAAS3pD,GAAQxL,EAAMxF,GACrB,OAAIizD,GAAQyD,EAAW12D,IAAU01D,EAAGI,OAAS,UAAkB7B,EAAKjjD,KACxD,YAARxL,GAAsB4wD,EAASp2D,GAAei0D,KACtC,UAARzuD,EAAyByuD,EAAKjjD,IACtB,KAARxL,EAAoBqzD,GAAa+B,GAAY,KACrC,KAARp1D,EAAoBqzD,GAAagC,GAAa,UAAlD,CACF,CACA,SAASA,GAAYr1D,EAAMxF,GACzB,MAAY,YAARwF,GAAuBkwD,EAAGnhD,OAAOva,MAAM,SAAS,IAIxC,YAARwL,IAAoBkwD,EAAGI,OAAS,YACxB,UAARtwD,EAAyByuD,EAAKjjD,IACtB,KAARxL,EAAoB0wD,IACZ,KAAR1wD,EAAoByuD,EAAK8B,EAAYkB,EAAO,KAAMA,EAAO,KAAM4D,IAC5D5G,EAAKgD,EAAO,KAAMjmD,GAAS0pD,MAPhCtE,EAASp2D,GACFi0D,EAAKyG,IAOhB,CACA,SAASE,KACP,OAAO1E,EAAKllD,GAAS0pD,GACvB,CACA,SAASA,GAAYI,EAAO96D,GAC1B,GAAa,KAATA,EAAc,OAAOi0D,EAAKkE,EAChC,CACA,SAASwC,GAAWn1D,GAClB,GAAY,KAARA,EAAa,OAAOyuD,EAAKmD,GAC/B,CACA,SAASG,GAAU/xD,EAAMxF,GACvB,GAAY,aAARwF,GAAgC,QAATxF,EAAiB,OAAOi0D,EAAK8C,EAAQ,OAAQ,QAASf,EAAWgB,EAC9F,CACA,SAASS,GAAQjyD,EAAMxF,GACrB,MAAa,SAATA,EAAyBi0D,EAAKwD,IACtB,KAARjyD,EAAoByuD,EAAK8C,EAAQ,KAAMgE,GAAU/D,QAArD,CACF,CACA,SAAS+D,GAASv1D,GAChB,MAAY,OAARA,EAAsByuD,EAAKmD,GAAQ4D,IAC3B,YAARx1D,EAA2ByuD,EAAK+G,IAC7B9E,EAAK8E,GACd,CACA,SAASA,GAASx1D,EAAMxF,GACtB,MAAY,KAARwF,EAAoByuD,IACZ,KAARzuD,EAAoByuD,EAAK+G,IAChB,MAATh7D,GAA0B,MAATA,GAAiB01D,EAAGI,OAAS,UAAkB7B,EAAK8B,EAAYiF,KAC9E9E,EAAKH,EAAYiF,GAC1B,CACA,SAASxD,GAAYhyD,EAAMxF,GACzB,MAAa,KAATA,GAAe01D,EAAGI,OAAS,UAAkB7B,EAAKuD,KAC1C,YAARhyD,GAAqB4wD,EAASp2D,GAAei0D,EAAKuD,KAC1C,KAARhyD,EAAoByuD,EAAK2C,EAAaG,EAAQ,KAAMwB,GAASN,GAAQ,KAAMjB,EAAQ8C,GAAc9D,EAAWc,GAC5G7D,GAAiB,KAATjzD,EAAqBi0D,EAAK8C,EAAQ,KAAMwB,GAASiC,GAAW,KAAMxD,EAAQQ,SAAtF,CACF,CACA,SAAS8C,GAAa90D,EAAMxF,GAC1B,MAAa,KAATA,GAAe01D,EAAGI,OAAS,UAAkB7B,EAAKqG,KAC1C,YAAR90D,GAAqB4wD,EAASp2D,GAAei0D,EAAKqG,KAC1C,KAAR90D,EAAoByuD,EAAK2C,EAAaG,EAAQ,KAAMwB,GAASN,GAAQ,KAAMjB,EAAQ8C,GAAchD,GACjG7D,GAAiB,KAATjzD,EAAqBi0D,EAAK8C,EAAQ,KAAMwB,GAASiC,GAAW,KAAMxD,EAAQsD,SAAtF,CACF,CACA,SAAS3C,GAASnyD,EAAMxF,GACtB,MAAY,WAARwF,GAA6B,YAARA,GACvBkwD,EAAGI,OAAS,OACL7B,EAAK0D,KACM,KAAT33D,EACFi0D,EAAK8C,EAAQ,KAAMwB,GAASiC,GAAW,KAAMxD,QAD/C,CAGT,CACA,SAASiB,GAAOzyD,EAAMxF,GAEpB,MADa,KAATA,GAAci0D,EAAK8B,EAAYkC,IACvB,UAARzyD,EAAyByuD,EAAKgE,IAC9BhF,GAAQyD,EAAW12D,IAAU01D,EAAGI,OAAS,UAAkB7B,EAAKgE,KAChEhF,GAAgB,QAARztD,EAAuByuD,EAAKwF,GAAWiB,IAC5CxE,EAAKllD,GAASyoD,GAAWiB,GAClC,CACA,SAAS/B,GAAgBnzD,EAAMxF,GAE7B,MAAY,YAARwF,EAA2B7K,GAAU6K,EAAMxF,GACxCi7D,GAAez1D,EAAMxF,EAC9B,CACA,SAASrF,GAAU6K,EAAMxF,GACvB,GAAY,YAARwF,EAAsC,OAAjB4wD,EAASp2D,GAAei0D,EAAKgH,GACxD,CACA,SAASA,GAAez1D,EAAMxF,GAC5B,MAAa,KAATA,EAAqBi0D,EAAK8C,EAAQ,KAAMwB,GAASiC,GAAW,KAAMxD,EAAQiE,IACjE,WAATj7D,GAA+B,cAATA,GAA0BizD,GAAgB,KAARztD,GAC7C,cAATxF,IAAuB01D,EAAGI,OAAS,WAChC7B,EAAKhB,EAAO2E,GAAW7B,EAAYkF,KAEhC,KAARz1D,EAAoByuD,EAAK8C,EAAQ,KAAMmE,GAAWlE,QAAtD,CACF,CACA,SAASkE,GAAU11D,EAAMxF,GACvB,MAAY,SAARwF,GACS,YAARA,IACU,UAATxF,GAA8B,OAATA,GAA2B,OAATA,GAAmBizD,GAAQyD,EAAW12D,KAC9E01D,EAAGnhD,OAAOva,MAAM,wBAAwB,IAC3C07D,EAAGI,OAAS,UACL7B,EAAKiH,KAEF,YAAR11D,GAAkC,WAAZkwD,EAAG95D,OAC3B85D,EAAGI,OAAS,WACL7B,EAAKkH,GAAYD,KAEd,UAAR11D,GAA4B,UAARA,EAAyByuD,EAAKkH,GAAYD,IACtD,KAAR11D,EACKyuD,EAAK8B,EAAY0D,GAAWxC,EAAO,KAAMkE,GAAYD,IACjD,KAATl7D,GACF01D,EAAGI,OAAS,UACL7B,EAAKiH,KAEVjI,GAAgB,KAARztD,EAAoB0wD,EAAKoE,GAAcY,IACvC,KAAR11D,GAAuB,KAARA,EAAoByuD,EAAKiH,IAChC,KAAR11D,EAAoByuD,IACX,KAATj0D,EAAqBi0D,EAAK8B,EAAYmF,SAA1C,CACF,CACA,SAASC,GAAW31D,EAAMxF,GACxB,GAAa,KAATA,EAAc,OAAOi0D,EAAKkH,IAC9B,GAAa,KAATn7D,EAAc,OAAOi0D,EAAKkH,IAC9B,GAAY,KAAR31D,EAAa,OAAOyuD,EAAK2D,GAAU8C,IACvC,GAAa,KAAT16D,EAAc,OAAOi0D,EAAKkE,GAC9B,IAAInmD,EAAU0jD,EAAG5oD,MAAM6nD,QAAQpvD,KAC/B,OAAO2wD,EAD4ClkD,GAA2B,aAAhBA,EAAQ9E,KAC5CotD,GAAe9C,GAC3C,CACA,SAASO,GAAYvyD,EAAMxF,GACzB,MAAa,KAATA,GAAgB01D,EAAGI,OAAS,UAAkB7B,EAAKmH,GAAWnE,EAAO,OAC5D,WAATj3D,GAAsB01D,EAAGI,OAAS,UAAkB7B,EAAK8B,EAAYkB,EAAO,OACpE,KAARzxD,EAAoByuD,EAAKsE,GAAS8C,GAAa,KAAMD,GAAWnE,EAAO,MACpEf,EAAKF,EACd,CACA,SAASqF,GAAY71D,EAAMxF,GACzB,MAAa,MAATA,GAAiB01D,EAAGI,OAAS,UAAkB7B,EAAKgD,EAAO,cACnD,YAARzxD,EAA2B0wD,EAAKiC,EAAmBkD,SAAvD,CACF,CACA,SAASrD,GAAYxyD,GACnB,MAAY,UAARA,EAAyByuD,IACjB,KAARzuD,EAAoB0wD,EAAKH,GACjB,KAARvwD,EAAoB0wD,EAAKwC,GACtBxC,EAAKoF,GAAYC,GAAkBH,GAC5C,CACA,SAASE,GAAW91D,EAAMxF,GACxB,MAAY,KAARwF,EAAoBqzD,GAAayC,GAAY,MACrC,YAAR91D,GAAoB4wD,EAASp2D,GACpB,KAATA,IAAc01D,EAAGI,OAAS,WACvB7B,EAAKuH,IACd,CACA,SAASD,GAAiB/1D,GACxB,GAAY,KAARA,EAAa,OAAOyuD,EAAKqH,GAAYC,GAC3C,CACA,SAASC,GAAQV,EAAO96D,GACtB,GAAa,MAATA,EAAwC,OAAvB01D,EAAGI,OAAS,UAAkB7B,EAAKqH,GAC1D,CACA,SAASF,GAAUN,EAAO96D,GACxB,GAAa,QAATA,EAA0C,OAAvB01D,EAAGI,OAAS,UAAkB7B,EAAK8B,EAC5D,CACA,SAAS6C,GAAapzD,GACpB,MAAY,KAARA,EAAoByuD,IACjBiC,EAAKqC,GAASJ,EAAmB,KAC1C,CACA,SAAST,KACP,OAAOxB,EAAKa,EAAQ,QAAS/lD,GAASimD,EAAO,KAAMF,EAAQ,KAAMwB,GAASkD,GAAY,KAAMzE,EAAQA,EACtG,CACA,SAASyE,KACP,OAAOvF,EAAKllD,GAAS0pD,GACvB,CAQA,SAASnG,GAAkBhgD,EAAQzH,EAAO+D,GACxC,OAAO/D,EAAMsnD,UAAYF,GACvB,iFAAiF57D,KAAKwU,EAAM8nD,WACzE,SAAlB9nD,EAAM8nD,UAAuB,SAASt8D,KAAKic,EAAOjV,OAAOzE,MAAM,EAAG0Z,EAAO/S,KAAOqP,GAAU,IAC/F,CAIA,OArhBA+lD,EAAYX,IAAMY,EAAiBZ,KAAM,EAKzCa,EAAWb,KAAM,EAoBjBe,EAAOf,KAAM,EA4fN,CACL9oD,WAAY,SAASuuD,GACnB,IAAI5uD,EAAQ,CACVsnD,SAAUF,EACVU,SAAU,MACViB,GAAI,GACJlB,QAAS,IAAIW,GAAWoG,GAAc,GAAK3Y,EAAY,EAAG,SAAS,GACnE0S,UAAW/C,EAAa+C,UACxBzjD,QAAS0gD,EAAa+C,WAAa,IAAI9jD,EAAQ,KAAM,MAAM,GAC3DmC,SAAU4nD,GAAc,GAI1B,OAFIhJ,EAAa+D,YAAgD,iBAA3B/D,EAAa+D,aACjD3pD,EAAM2pD,WAAa/D,EAAa+D,YAC3B3pD,CACT,EAEA6H,MAAO,SAASJ,EAAQzH,GAOtB,GANIyH,EAAOnE,QACJtD,EAAM6nD,QAAQv1D,eAAe,WAChC0N,EAAM6nD,QAAQl2B,OAAQ,GACxB3xB,EAAMgH,SAAWS,EAAOxD,cACxBgkD,EAAaxgD,EAAQzH,IAEnBA,EAAMsnD,UAAYE,GAAgB//C,EAAO7D,WAAY,OAAO,KAChE,IAAI9U,EAAQkR,EAAMsnD,SAAS7/C,EAAQzH,GACnC,MAAY,WAARtH,EAA0B5J,GAC9BkR,EAAM8nD,SAAmB,YAARpvD,GAAkC,MAAX7J,GAA8B,MAAXA,EAA8B6J,EAAX,SACvEowD,EAAQ9oD,EAAOlR,EAAO4J,EAAM7J,EAAS4Y,GAC9C,EAEAquC,OAAQ,SAAS91C,EAAO6uD,GACtB,GAAI7uD,EAAMsnD,UAAYE,GAAgBxnD,EAAMsnD,UAAYM,EAAY,OAAOviB,EAAWpxC,KACtF,GAAI+L,EAAMsnD,UAAYF,EAAW,OAAO,EACxC,IAA2E5uC,EAAvEs2C,EAAYD,GAAaA,EAAUj4D,OAAO,GAAIixD,EAAU7nD,EAAM6nD,QAElE,IAAK,aAAar8D,KAAKqjE,GAAY,IAAK,IAAI3/D,EAAI8Q,EAAM+oD,GAAG96D,OAAS,EAAGiB,GAAK,IAAKA,EAAG,CAChF,IAAI6/D,EAAI/uD,EAAM+oD,GAAG75D,GACjB,GAAI6/D,GAAK7E,EAAQrC,EAAUA,EAAQpvD,UAC9B,GAAIs2D,GAAKtE,IAAasE,GAAK/E,EAAY,KAC9C,CACA,MAAwB,QAAhBnC,EAAQnvD,MAAkC,QAAhBmvD,EAAQnvD,QACrB,KAAbo2D,IAAsBt2C,EAAMxY,EAAM+oD,GAAG/oD,EAAM+oD,GAAG96D,OAAS,MACjCuqB,GAAOozC,GAAsBpzC,GAAOmzC,KACpC,mBAAmBngE,KAAKqjE,KACpDhH,EAAUA,EAAQpvD,KAChBotD,GAAmC,KAAhBgC,EAAQnvD,MAAoC,QAArBmvD,EAAQpvD,KAAKC,OACzDmvD,EAAUA,EAAQpvD,MACpB,IAAIC,EAAOmvD,EAAQnvD,KAAM2kD,EAAUyR,GAAap2D,EAEhD,MAAY,UAARA,EAAyBmvD,EAAQ7gD,UAA8B,YAAlBhH,EAAM8nD,UAA4C,KAAlB9nD,EAAM8nD,SAAkBD,EAAQznD,KAAKnS,OAAS,EAAI,GAClH,QAARyK,GAA+B,KAAbo2D,EAAyBjH,EAAQ7gD,SAC3C,QAARtO,EAAuBmvD,EAAQ7gD,SAAWivC,EAClC,QAARv9C,EACAmvD,EAAQ7gD,UAnErB,SAA8BhH,EAAO6uD,GACnC,MAAyB,YAAlB7uD,EAAM8nD,UAA4C,KAAlB9nD,EAAM8nD,UAC3Cf,EAAev7D,KAAKqjE,EAAUj4D,OAAO,KACrC,OAAOpL,KAAKqjE,EAAUj4D,OAAO,GACjC,CA+DiCo4D,CAAqBhvD,EAAO6uD,GAAahJ,GAAmB5P,EAAa,GAC7E,UAAhB4R,EAAQznD,MAAqBi9C,GAA8C,GAAnCuI,EAAaqJ,mBAErDpH,EAAQl2B,MAAck2B,EAAQ7jD,QAAUq5C,EAAU,EAAI,GACnDwK,EAAQ7gD,UAAYq2C,EAAU,EAAIpH,GAFrC4R,EAAQ7gD,UAAY,sBAAsBxb,KAAKqjE,GAAa5Y,EAAa,EAAIA,EAGxF,EAEA0B,cAAe,oCACfuX,kBAAmBlJ,EAAW,KAAO,KACrCmJ,gBAAiBnJ,EAAW,KAAO,KACnCoJ,qBAAsBpJ,EAAW,KAAO,MACxCqJ,YAAarJ,EAAW,KAAO,KAC/BsJ,KAAM,QACNC,cAAe,iBAEf7vD,WAAYsmD,EAAW,OAAS,aAChCF,WAAYA,EACZE,SAAUA,EAEVyB,kBAAmBA,GAEnB+H,eAAgB,SAASxvD,GACvB8oD,EAAQ9oD,EAAO,OAAQ,OAAQ,OAAQ,IAAIqlC,EAAW7kC,aAAa,GAAI,EAAG,MAC5E,EAEJ,IAEA6kC,EAAW6e,eAAe,YAAa,aAAc,SAErD7e,EAAWmf,WAAW,kBAAmB,cACzCnf,EAAWmf,WAAW,kBAAmB,cACzCnf,EAAWmf,WAAW,yBAA0B,cAChDnf,EAAWmf,WAAW,2BAA4B,cAClDnf,EAAWmf,WAAW,yBAA0B,cAChDnf,EAAWmf,WAAW,mBAAoB,CAAEzlD,KAAM,aAAcknD,MAAM,IACtE5gB,EAAWmf,WAAW,qBAAsB,CAAEzlD,KAAM,aAAcknD,MAAM,IACxE5gB,EAAWmf,WAAW,4BAA6B,CAAEzlD,KAAM,aAAcknD,MAAM,IAC/E5gB,EAAWmf,WAAW,sBAAuB,CAAEzlD,KAAM,aAAcgnD,QAAQ,IAC3E1gB,EAAWmf,WAAW,kBAAmB,CAAEzlD,KAAM,aAAcqnD,YAAY,IAC3E/gB,EAAWmf,WAAW,yBAA0B,CAAEzlD,KAAM,aAAcqnD,YAAY,GAElF,CA17BIne,CAAI,EAAQ,O,mBCKb,SAAS5C,GACZ,aA2ME,SAASoqB,EAAehoD,GAItB,IADA,IAAI1R,EAC2B,OAAvBA,EAAK0R,EAAOhE,SAClB,GAAU,KAAN1N,IAAc0R,EAAO/D,IAAI,KAAM,MAAO,aAG5C,OADA+D,EAAO1D,OAAO0D,EAAO7Z,UAAUK,OAAS,GACjCwZ,EAAO9D,SAAS,MAAQ,aAAe,IAChD,CAgBA,SAAS+rD,EAAQjoD,GAWf,OANIA,EAAO/D,IAAI,OACb+D,EAAOva,MAAM,YACbua,EAAOva,MAAM,UACbua,EAAOva,MAAM,YAGXua,EAAO/D,IAAI,MACb+D,EAAOva,MAAM,QACN,cACEua,EAAO/D,IAAI,MACpB+D,EAAOva,MAAM,QACN,cACEua,EAAO/D,IAAI,MACpB+D,EAAOva,MAAM,QACN,cACEua,EAAOva,MAAM,sBACf,aAEF,IACT,CAGA,SAASyiE,EAAWloD,GAGlB,OAAIA,EAAO/D,IAAI,KACJ,OAIJ+D,EAAOva,MAAM,iBAAmB,aAAe,IACxD,CAtQFm4C,EAAWvmC,WAAW,OAAO,SAAS6mD,EAAQC,GAC5C,IAAIgK,EAAiBhK,EAAagK,QAAU,CAAC,EACzCC,EAAiBjK,EAAaiK,OAAS,CAAC,OAAS,EAAM,MAAQ,EAAM,MAAQ,GAC7EC,EAAiBlK,EAAakK,SAAWh8D,EAAIi8D,GAC7CxJ,EAAiBX,EAAaW,UAAYzyD,EAAIk8D,GAC9CC,EAAiBrK,EAAaqK,eAAiB,qBAC/CC,EAAiBtK,EAAasK,SAAW,CAAC,EAC1CC,EAAiBvK,EAAauK,OAAS,CAAC,EACxCC,EAAiBxK,EAAawK,SAAW,CAAC,MAAS,EAAM,MAAS,EAAM,WAAc,GACtFC,GAAiE,IAAxCzK,EAAayK,uBACtCC,EAAiB1K,EAAa0K,UAAY,iBAC1CC,EAAiB3K,EAAa2K,aAAe,UAEjD,SAASnJ,EAAU3/C,EAAQzH,GACzB,IAAIjK,EAAK0R,EAAOhE,OAGhB,GAAI0sD,EAAMp6D,GAAK,CACb,IAAI+H,EAASqyD,EAAMp6D,GAAI0R,EAAQzH,GAC/B,IAAe,IAAXlC,EAAkB,OAAOA,CAC/B,CAEA,GAAIoyD,EAAQM,YACF,KAANz6D,GAAa0R,EAAOva,MAAM,uBAClB,KAAN6I,GAAmB,KAANA,IAAc0R,EAAOva,MAAM,oBAG5C,MAAO,SACF,GAAIgjE,EAAQO,gBACR,KAAN16D,GAAmB,KAANA,IAAc0R,EAAOva,MAAM,aACjC,KAAN6I,GAAa0R,EAAOva,MAAM,YAG9B,MAAO,SACF,GAAI6I,EAAGS,WAAW,GAAK,IAAMT,EAAGS,WAAW,GAAK,GAKrD,OAFAiR,EAAOva,MAAM,wCACbgjE,EAAQQ,kBAAoBjpD,EAAOva,MAAM,aAClC,SACF,GAAU,KAAN6I,IAAc0R,EAAO7D,YAAc6D,EAAOpE,OAASoE,EAAO/D,IAAI,MAEvE,MAAO,aACF,GAAU,KAAN3N,GAAoB,KAANA,GAAam6D,EAAQS,YAI5C,OADA3wD,EAAMsnD,SAAWsJ,EAAa76D,GACvBiK,EAAMsnD,SAAS7/C,EAAQzH,GACzB,IAAOkwD,EAAQW,YAAoB,KAAN96D,GAAmB,KAANA,IACzCm6D,EAAQY,aAAqB,KAAN/6D,GAAa0R,EAAOva,MAAM,sBAChC,KAAjBua,EAAOlE,QAAkC,KAAjBkE,EAAOlE,QAGrC,MAAO,UACF,GAAI2sD,EAAQa,iBAAyB,KAANh7D,GAAmB,KAANA,KAC1B,KAAjB0R,EAAOlE,QAAmC,KAAjBkE,EAAOlE,QAAiB2sD,EAAQS,aAM/D,OAHA3wD,EAAMsnD,SAAW,SAAS7/C,EAAQzH,GAChC,OAAQA,EAAMsnD,SAAWsJ,EAAanpD,EAAOhE,QAAQ,IAAOgE,EAAQzH,EACtE,EACO,UACF,GAAIkwD,EAAQc,mBAA2B,KAANj7D,GAAa0R,EAAO/D,IAAI,KAG9D,OADA+D,EAAO5D,YACA,UACF,GAAKqsD,EAAQe,aAAqB,KAANl7D,GACrB,KAANA,GAAa0R,EAAO/D,IAAI,QAAUwsD,EAAQgB,sBAAwBzpD,EAAO/D,IAAI,MAInF,OADA+D,EAAO5D,YACA,UACF,GAAU,KAAN9N,GAAa0R,EAAO/D,IAAI,KAIjC,OADA1D,EAAMsnD,SAAWE,EAAa,GACvBxnD,EAAMsnD,SAAS7/C,EAAQzH,GACzB,GAAU,KAANjK,EAUJ,IAAIk6D,EAAczkE,KAAKuK,GAG5B,OADA0R,EAAO9D,SAASssD,GACT,WACF,GAAIK,EAAS9kE,KAAKuK,GAEvB,MAAO,UACF,GAAIw6D,EAAY/kE,KAAKuK,GAG1B,OADA0R,EAAO9D,SAAS4sD,GACT,cACF,GAAU,KAANx6D,IACN0R,EAAOva,MAAM,yCAA2Cua,EAAOva,MAAM,yCAGxE,MAAO,SAEPua,EAAO9D,SAAS,YAChB,IAAIwwC,EAAO1sC,EAAO7Z,UAAUqI,cAG5B,OAAIm6D,EAAQ99D,eAAe6hD,KAAU1sC,EAAOva,MAAM,iBAAmBua,EAAOva,MAAM,iBACzE,SACL2iE,EAAMv9D,eAAe6hD,GAAc,OACnC2b,EAAQx9D,eAAe6hD,GAAc,OACrCoS,EAASj0D,eAAe6hD,GAAc,UACtCyb,EAAOt9D,eAAe6hD,GAAc,UACjC,IACT,CApCE,OAAI+b,EAAQiB,eAAiB1pD,EAAOva,MAAM,2BACjC,SACLua,EAAOva,MAAM,QACR,KAGLgjE,EAAQkB,cAAgB3pD,EAAOva,MAAM,eAChC,kBADT,CA+BJ,CAGA,SAAS0jE,EAAavJ,EAAOgK,GAC3B,OAAO,SAAS5pD,EAAQzH,GAEtB,IADA,IAAqBjK,EAAjBwxD,GAAU,EACiB,OAAvBxxD,EAAK0R,EAAOhE,SAAiB,CACnC,GAAI1N,GAAMsxD,IAAUE,EAAS,CAC3BvnD,EAAMsnD,SAAWF,EACjB,KACF,CACAG,GAAW8I,GAA0BgB,KAAsB9J,GAAiB,MAANxxD,CACxE,CACA,MAAO,QACT,CACF,CACA,SAASyxD,EAAaY,GACpB,OAAO,SAAS3gD,EAAQzH,GACtB,IAAIpG,EAAI6N,EAAOva,MAAM,mBAKrB,OAJK0M,EACY,MAARA,EAAE,GAAYoG,EAAMsnD,SAAWE,EAAaY,EAAQ,GACzCpoD,EAAMsnD,SAAjBc,EAAQ,EAAoBZ,EAAaY,EAAQ,GACpChB,EAHd3/C,EAAO5D,YAIR,SACT,CACF,CAEA,SAASytD,EAAY7pD,EAAQzH,EAAOtH,GAClCsH,EAAMkF,QAAU,CACdzM,KAAMuH,EAAMkF,QACZ4wC,OAAQruC,EAAOxD,cACftP,IAAK8S,EAAOzD,SACZtL,KAAMA,EAEV,CAOA,MAAO,CACL2H,WAAY,WACV,MAAO,CAACinD,SAAUF,EAAWliD,QAAS,KACxC,EAEA2C,MAAO,SAASJ,EAAQzH,GAKtB,GAJIyH,EAAOnE,OACLtD,EAAMkF,SAAkC,MAAvBlF,EAAMkF,QAAQysB,QACjC3xB,EAAMkF,QAAQysB,OAAQ,GAEtB3xB,EAAMsnD,UAAYF,GAAa3/C,EAAO7D,WAAY,OAAO,KAE7D,IAAI9U,EAAQkR,EAAMsnD,SAAS7/C,EAAQzH,GACnC,GAAa,WAATlR,EAAoB,OAAOA,EAE3BkR,EAAMkF,SAAkC,MAAvBlF,EAAMkF,QAAQysB,QACjC3xB,EAAMkF,QAAQysB,OAAQ,GAExB,IAAI4/B,EAAM9pD,EAAO7Z,UAOjB,MANW,KAAP2jE,EACFD,EAAY7pD,EAAQzH,EAAO,KACb,KAAPuxD,EACPD,EAAY7pD,EAAQzH,EAAO,KACpBA,EAAMkF,SAAWlF,EAAMkF,QAAQxM,MAAQ64D,GA5BpD,SAAoBvxD,GAClBA,EAAM81C,OAAS91C,EAAMkF,QAAQ4wC,OAC7B91C,EAAMkF,QAAUlF,EAAMkF,QAAQzM,IAChC,CA0BM+4D,CAAWxxD,GACNlR,CACT,EAEAgnD,OAAQ,SAAS91C,EAAO6uD,GACtB,IAAIjG,EAAK5oD,EAAMkF,QACf,IAAK0jD,EAAI,OAAOvjB,EAAWpxC,KAC3B,IAAIopD,EAAUwR,EAAUj4D,OAAO,IAAMgyD,EAAGlwD,KACxC,OAAIkwD,EAAGj3B,MAAci3B,EAAGj0D,KAAO0oD,EAAU,EAAI,GACjCuL,EAAG9S,QAAUuH,EAAU,EAAIsI,EAAO1P,WAChD,EAEAiZ,kBAAmB,KACnBC,gBAAiB,KACjBE,YAAaa,EAAQc,kBAAoB,KAAOd,EAAQe,YAAc,IAAM,KAC5E1B,cAAe,iBAEnB,IAmEE,IAAIS,EAAc,qLAGlB,SAASl8D,EAAI4C,GAEX,IADA,IAAIxE,EAAM,CAAC,EAAGu/D,EAAQ/6D,EAAItG,MAAM,KACvBlB,EAAI,EAAGA,EAAIuiE,EAAMxjE,SAAUiB,EAAGgD,EAAIu/D,EAAMviE,KAAM,EACvD,OAAOgD,CACT,CAEA,IAAI69D,EAAiB,sTAGrB1qB,EAAWmf,WAAW,aAAc,CAClCzlD,KAAM,MACNwnD,SAAUzyD,EAAIk8D,EAAc,SAC5BF,QAASh8D,EAAIi8D,GACbF,MAAO/7D,EAAI,2BACXs8D,QAASt8D,EAAI,uBACbo8D,QAASp8D,EAAI,qDAGfuxC,EAAWmf,WAAW,eAAgB,CACpCzlD,KAAM,MACN6wD,OAAQ97D,EAAI,yVACZyyD,SAAUzyD,EAAIk8D,EAAc,uSAC5BF,QAASh8D,EAAI,kNACb+7D,MAAO/7D,EAAI,0GACXm8D,cAAe,qBACfK,SAAU,aACVC,YAAa,WACbF,wBAAwB,EACxBD,QAASt8D,EAAI,6DACbq8D,MAAO,CACL,IAAOT,KAIXrqB,EAAWmf,WAAW,eAAgB,CACpCzlD,KAAM,MACN6wD,OAAQ97D,EAAI,+HACZyyD,SAAUzyD,EAAIk8D,EAAc,s9FAC5BF,QAASh8D,EAAI,0TACb+7D,MAAO/7D,EAAI,2BACXm8D,cAAe,kBACfG,QAASt8D,EAAI,uBACbo8D,QAASp8D,EAAI,yIACbq8D,MAAO,CACL,IAAOT,EACP,IAAOD,EACP,KAAOE,KAIXtqB,EAAWmf,WAAW,iBAAkB,CACtCzlD,KAAM,MACN6wD,OAAQ97D,EAAI,+HACZyyD,SAAUzyD,EAAIk8D,EAAc,6gGAC5BF,QAASh8D,EAAI,0TACb+7D,MAAO/7D,EAAI,2BACXm8D,cAAe,kBACfG,QAASt8D,EAAI,uBACbo8D,QAASp8D,EAAI,yIACbq8D,MAAO,CACL,IAAOT,EACP,IAAOD,EACP,KAAOE,KAKXtqB,EAAWmf,WAAW,gBAAiB,CACrCzlD,KAAM,MAEN6wD,OAAQ97D,EAAI,wWAEZyyD,SAAUzyD,EAAIk8D,EAAc,+pBAE5BF,QAASh8D,EAAI,sQAEb+7D,MAAO/7D,EAAI,oDAEXm8D,cAAe,mBAEfG,QAASt8D,EAAI,gCACbo8D,QAASp8D,EAAI,kCACb49D,gBAAiB,IACjBvB,MAAO,CAEL,IAAOT,EACP,IAAOA,EACP,IAAOA,EACP,EAAOA,EAEP,IAjJJ,SAAmCjoD,GAKjC,IADA,IAAI1R,EAC2B,OAAvBA,EAAK0R,EAAOhE,SAClB,GAAU,KAAN1N,IAAe0R,EAAO/D,IAAI,KAAO,MAAO,aAG9C,OADA+D,EAAO1D,OAAO0D,EAAO7Z,UAAUK,OAAS,GACjCwZ,EAAO9D,SAAS,MAAQ,aAAe,IAChD,EAyII,IAAO8rD,KAMXpqB,EAAWmf,WAAW,mBAAoB,CACxCzlD,KAAM,MACN6wD,OAAQ,CAAE,EACVrJ,SAAUzyD,EAAI,6hBACdg8D,QAASh8D,EAAI,4IACb+7D,MAAO/7D,EAAI,2BACXm8D,cAAe,SACfG,QAAS,CAAE,EACXF,QAASp8D,EAAI,sCACbq8D,MAAO,CAAE,IAIX9qB,EAAWmf,WAAW,eAAgB,CACpCzlD,KAAY,MACZ6wD,OAAY97D,EAAI,kqBAChByyD,SAAYzyD,EAAI,mtDAChBg8D,QAAYh8D,EAAI,m9BAChBm8D,cAAe,kBACfG,QAAYt8D,EAAI,uBAChBo8D,QAAYp8D,EAAI,gEAIlBuxC,EAAWmf,WAAW,cAAe,CACnCzlD,KAAM,MACNwnD,SAAUzyD,EAAI,o1DACdg8D,QAASh8D,EAAI,0KACb+7D,MAAO/7D,EAAI,2BACXm8D,cAAe,eACfG,QAASt8D,EAAI,kBACbo8D,QAASp8D,EAAI,qDAGfuxC,EAAWmf,WAAW,eAAgB,CACpCzlD,KAAM,MACN6wD,OAAQ97D,EAAI,UAGZyyD,SAAUzyD,EAAIk8D,EAAc,q3NAE5BF,QAASh8D,EAAI,8ZACb+7D,MAAO/7D,EAAI,2BACXm8D,cAAe,0BACfI,wBAAwB,EACxBD,QAASt8D,EAAI,uBACbo8D,QAASp8D,EAAI,6GAIfuxC,EAAWmf,WAAW,aAAc,CAClCzlD,KAAM,MACNwnD,SAAUzyD,EAAI,0HACd+7D,MAAO/7D,EAAI,cACXg8D,QAASh8D,EAAI,sEACbm8D,cAAe,iBAIjB5qB,EAAWmf,WAAW,eAAgB,CACpCzlD,KAAM,MACN6wD,OAAQ97D,EAAI,UAEZyyD,SAAUzyD,EAAI,27GACdg8D,QAASh8D,EAAI,oaACb+7D,MAAO/7D,EAAI,2BACXm8D,cAAe,wBACfG,QAASt8D,EAAI,uBACbo8D,QAASp8D,EAAI,8FAIfuxC,EAAWmf,WAAW,kBAAmB,CACvCzlD,KAAM,MACNwnD,SAAUzyD,EAAI,m+CACdg8D,QAASh8D,EAAI,soGACb+7D,MAAO/7D,EAAI,mBACXm8D,cAAe,qBACfG,QAASt8D,EAAI,uBACbo8D,QAASp8D,EAAI,4CAIfuxC,EAAWmf,WAAW,eAAgB,CACpCzlD,KAAM,MACN6wD,OAAQ97D,EAAI,UAEZyyD,SAAUzyD,EAAI,+0BACdg8D,QAAS,CAAC,EACVD,MAAO/7D,EAAI,mBACXm8D,cAAe,wBACfG,QAASt8D,EAAI,QACbo8D,QAASp8D,EAAI,2DAIfuxC,EAAWmf,WAAW,eAAgB,CACpCzlD,KAAM,MAGNwnD,SAAUzyD,EAAI,u1MAKdg8D,QAASh8D,EAAI,gXACb+7D,MAAO/7D,EAAI,2BAEXm8D,cAAe,oBACfG,QAASt8D,EAAI,4BAGbo8D,QAASp8D,EAAI,0DAEjB,CAxeIm0C,CAAI,EAAQ,O,mBCKb,SAAS5C,GACZ,aAEA,SAASxgC,EAAQmC,EAAUhD,EAAQtL,EAAM0H,EAAMuxB,EAAOl5B,GACpDpF,KAAK2T,SAAWA,EAChB3T,KAAK2Q,OAASA,EACd3Q,KAAKqF,KAAOA,EACZrF,KAAK+M,KAAOA,EACZ/M,KAAKs+B,MAAQA,EACbt+B,KAAKoF,KAAOA,CACd,CACA,SAAS64D,EAAYtxD,EAAOrL,EAAK+D,EAAM0H,GACrC,IAAI01C,EAAS91C,EAAMgH,SAGnB,OAFIhH,EAAMkF,SAAiC,aAAtBlF,EAAMkF,QAAQxM,MAA+B,aAARA,IACxDo9C,EAAS91C,EAAMkF,QAAQ8B,UAClBhH,EAAMkF,QAAU,IAAIL,EAAQixC,EAAQnhD,EAAK+D,EAAM0H,EAAM,KAAMJ,EAAMkF,QAC1E,CACA,SAASssD,EAAWxxD,GAClB,IAAIqmC,EAAIrmC,EAAMkF,QAAQxM,KAGtB,MAFS,KAAL2tC,GAAiB,KAALA,GAAiB,KAALA,IAC1BrmC,EAAMgH,SAAWhH,EAAMkF,QAAQ8B,UAC1BhH,EAAMkF,QAAUlF,EAAMkF,QAAQzM,IACvC,CAEA,SAASk5D,EAAWlqD,EAAQzH,EAAOtL,GACjC,MAAuB,YAAnBsL,EAAM4xD,WAA8C,QAAnB5xD,EAAM4xD,aACvC,6BAA6BpmE,KAAKic,EAAOjV,OAAOzE,MAAM,EAAG2G,QACzDsL,EAAM6xD,iBAAmBpqD,EAAOzD,UAAYyD,EAAOxD,qBAAvD,CACF,CAEA,SAAS6tD,EAAW5sD,GAClB,OAAS,CACP,IAAKA,GAA2B,OAAhBA,EAAQxM,KAAe,OAAO,EAC9C,GAAoB,KAAhBwM,EAAQxM,MAAoC,aAArBwM,EAAQzM,KAAK2H,KAAqB,OAAO,EACpE8E,EAAUA,EAAQzM,IACpB,CACF,CAkNE,SAASg5D,EAAM/6D,GAEb,IADA,IAAIxE,EAAM,CAAC,EAAGu/D,EAAQ/6D,EAAItG,MAAM,KACvBlB,EAAI,EAAGA,EAAIuiE,EAAMxjE,SAAUiB,EAAGgD,EAAIu/D,EAAMviE,KAAM,EACvD,OAAOgD,CACT,CACA,SAAS7C,EAASoiE,EAAOtd,GACvB,MAAqB,mBAAVsd,EACFA,EAAMtd,GAENsd,EAAM1J,qBAAqB5T,EAEtC,CA3NF9O,EAAWvmC,WAAW,SAAS,SAAS6mD,EAAQC,GAC9C,IAuBImM,EAASC,EAvBT/b,EAAa0P,EAAO1P,WACpBgc,EAAsBrM,EAAaqM,qBAAuBhc,EAC1Dic,EAAiBtM,EAAasM,eAC9B3L,EAAWX,EAAaW,UAAY,CAAC,EACrChuD,EAAQqtD,EAAartD,OAAS,CAAC,EAC/Bu3D,EAAUlK,EAAakK,SAAW,CAAC,EACnCqC,EAAgBvM,EAAauM,eAAiB,CAAC,EAC/CC,EAAcxM,EAAawM,aAAe,CAAC,EAC3CvC,EAAQjK,EAAaiK,OAAS,CAAC,EAC/BM,EAAQvK,EAAauK,OAAS,CAAC,EAC/BkC,EAAmBzM,EAAayM,iBAChCC,GAAqD,IAAlC1M,EAAa0M,iBAChCC,GAA6C,IAA9B3M,EAAa2M,aAC5BC,EAAqB5M,EAAa4M,mBAClCC,EAAoB7M,EAAa6M,mBAAqB,qBACtDC,EAAc9M,EAAa8M,aAAe,SAC1CC,EAAS/M,EAAa+M,QAAU,yEAChC5L,EAAiBnB,EAAamB,gBAAkB,mBAChD6L,EAAmBhN,EAAagN,kBAAoB,qBAGpDC,EAAuBjN,EAAaiN,uBAAwB,EAIhE,SAASzL,EAAU3/C,EAAQzH,GACzB,IAoDmBqnD,EApDftxD,EAAK0R,EAAOhE,OAChB,GAAI0sD,EAAMp6D,GAAK,CACb,IAAI+H,EAASqyD,EAAMp6D,GAAI0R,EAAQzH,GAC/B,IAAe,IAAXlC,EAAkB,OAAOA,CAC/B,CACA,GAAU,KAAN/H,GAAmB,KAANA,EAEf,OADAiK,EAAMsnD,UA8CWD,EA9CYtxD,EA+CxB,SAAS0R,EAAQzH,GAEtB,IADA,IAAqByD,EAAjB8jD,GAAU,EAAah3D,GAAM,EACA,OAAzBkT,EAAOgE,EAAOhE,SAAiB,CACrC,GAAIA,GAAQ4jD,IAAUE,EAAS,CAACh3D,GAAM,EAAM,KAAM,CAClDg3D,GAAWA,GAAmB,MAAR9jD,CACxB,CAGA,OAFIlT,IAASg3D,IAAW8K,KACtBryD,EAAMsnD,SAAW,MACZ,QACT,GAvDStnD,EAAMsnD,SAAS7/C,EAAQzH,GAEhC,GAAI0yD,EAAYlnE,KAAKuK,GAAK,CAExB,GADA0R,EAAO1D,OAAO,GACV0D,EAAOva,MAAMylE,GAAS,MAAO,SACjClrD,EAAOhE,MACT,CACA,GAAIgvD,EAAkBjnE,KAAKuK,GAEzB,OADAg8D,EAAUh8D,EACH,KAET,GAAU,KAANA,EAAW,CACb,GAAI0R,EAAO/D,IAAI,KAEb,OADA1D,EAAMsnD,SAAWE,EACVA,EAAa//C,EAAQzH,GAE9B,GAAIyH,EAAO/D,IAAI,KAEb,OADA+D,EAAO5D,YACA,SAEX,CACA,GAAIkjD,EAAev7D,KAAKuK,GAAK,CAC3B,MAAQ0R,EAAOva,MAAM,YAAY,IAAUua,EAAO/D,IAAIqjD,KACtD,MAAO,UACT,CAEA,GADAt/C,EAAO9D,SAASivD,GACZJ,EAAoB,KAAO/qD,EAAOva,MAAMslE,IAC1C/qD,EAAO9D,SAASivD,GAElB,IAAIl7D,EAAM+P,EAAO7Z,UACjB,OAAIyB,EAASk3D,EAAU7uD,IACjBrI,EAAS8iE,EAAez6D,KAAMq6D,EAAU,gBACxC1iE,EAAS+iE,EAAa16D,KAAMs6D,GAAe,GACxC,WAEL3iE,EAASkJ,EAAOb,GAAa,OAC7BrI,EAASygE,EAASp4D,IACdm7D,GAAwBA,EAAqBn7D,IAC/CrI,EAAS8iE,EAAez6D,KAAMq6D,EAAU,gBACrC,WAEL1iE,EAASwgE,EAAOn4D,GAAa,OAC1B,UACT,CAeA,SAAS8vD,EAAa//C,EAAQzH,GAE5B,IADA,IAAsBjK,EAAlBiyD,GAAW,EACRjyD,EAAK0R,EAAOhE,QAAQ,CACzB,GAAU,KAAN1N,GAAaiyD,EAAU,CACzBhoD,EAAMsnD,SAAW,KACjB,KACF,CACAU,EAAkB,KAANjyD,CACd,CACA,MAAO,SACT,CAEA,SAAS+8D,EAASrrD,EAAQzH,GACpB4lD,EAAamN,sBAAwBtrD,EAAOpE,OAASyuD,EAAW9xD,EAAMkF,WACxElF,EAAM6xD,gBAAkBF,EAAWlqD,EAAQzH,EAAOyH,EAAO/S,KAC7D,CAIA,MAAO,CACL2L,WAAY,SAASuuD,GACnB,MAAO,CACLtH,SAAU,KACVpiD,QAAS,IAAIL,GAAS+pD,GAAc,GAAK3Y,EAAY,EAAG,MAAO,MAAM,GACrEjvC,SAAU,EACVgsD,aAAa,EACbpB,UAAW,KAEf,EAEA/pD,MAAO,SAASJ,EAAQzH,GACtB,IAAIizD,EAAMjzD,EAAMkF,QAMhB,GALIuC,EAAOnE,QACQ,MAAb2vD,EAAIthC,QAAeshC,EAAIthC,OAAQ,GACnC3xB,EAAMgH,SAAWS,EAAOxD,cACxBjE,EAAMgzD,aAAc,GAElBvrD,EAAO7D,WAAuC,OAAzBkvD,EAASrrD,EAAQzH,GAAe,KACzD+xD,EAAUC,EAAe,KACzB,IAAIljE,GAASkR,EAAMsnD,UAAYF,GAAW3/C,EAAQzH,GAClD,GAAa,WAATlR,GAA+B,QAATA,EAAiB,OAAOA,EAGlD,GAFiB,MAAbmkE,EAAIthC,QAAeshC,EAAIthC,OAAQ,GAEpB,KAAXogC,GAA6B,KAAXA,GAA8B,KAAXA,GAAkBtqD,EAAOva,MAAM,oBAAoB,GAC1F,KAA6B,aAAtB8S,EAAMkF,QAAQxM,MAAqB84D,EAAWxxD,QAClD,GAAe,KAAX+xD,EAAgBT,EAAYtxD,EAAOyH,EAAOzD,SAAU,UACxD,GAAe,KAAX+tD,EAAgBT,EAAYtxD,EAAOyH,EAAOzD,SAAU,UACxD,GAAe,KAAX+tD,EAAgBT,EAAYtxD,EAAOyH,EAAOzD,SAAU,UACxD,GAAe,KAAX+tD,EAAgB,CACvB,KAAmB,aAAZkB,EAAIv6D,MAAqBu6D,EAAMzB,EAAWxxD,GAEjD,IADgB,KAAZizD,EAAIv6D,OAAau6D,EAAMzB,EAAWxxD,IACnB,aAAZizD,EAAIv6D,MAAqBu6D,EAAMzB,EAAWxxD,EACnD,MACS+xD,GAAWkB,EAAIv6D,KAAM84D,EAAWxxD,GAChCsyD,KACe,KAAZW,EAAIv6D,MAA2B,OAAZu6D,EAAIv6D,OAA6B,KAAXq5D,GAC9B,aAAZkB,EAAIv6D,MAAkC,gBAAXq5D,IACpCT,EAAYtxD,EAAOyH,EAAOzD,SAAU,YAAayD,EAAO7Z,WAS1D,GANa,YAATkB,IACqB,OAAnBkR,EAAM4xD,WACLhM,EAAamN,sBAAwBpB,EAAWlqD,EAAQzH,EAAOyH,EAAOnX,QACtEwhE,EAAW9xD,EAAMkF,UAAYuC,EAAOva,MAAM,UAAU,MACzD4B,EAAQ,OAENqhE,EAAMtoD,MAAO,CACf,IAAI/J,EAASqyD,EAAMtoD,MAAMJ,EAAQzH,EAAOlR,QACzB0U,IAAX1F,IAAsBhP,EAAQgP,EACpC,CAOA,MALa,OAAThP,IAA6C,IAA3B82D,EAAasN,YAAqBpkE,EAAQ,YAEhEkR,EAAMgzD,aAAc,EACpBhzD,EAAM4xD,UAAYI,EAAe,MAAQljE,GAASijE,EAClDe,EAASrrD,EAAQzH,GACVlR,CACT,EAEAgnD,OAAQ,SAAS91C,EAAO6uD,GACtB,GAAI7uD,EAAMsnD,UAAYF,GAA+B,MAAlBpnD,EAAMsnD,UAAoBtnD,EAAM6xD,gBAAiB,OAAOxsB,EAAWpxC,KACtG,IAAIg/D,EAAMjzD,EAAMkF,QAAS4pD,EAAYD,GAAaA,EAAUj4D,OAAO,GAC/DymD,EAAUyR,GAAamE,EAAIv6D,KAE/B,GADgB,aAAZu6D,EAAIv6D,MAAoC,KAAbo2D,IAAkBmE,EAAMA,EAAIx6D,MACvDmtD,EAAauN,qBACf,KAAmB,aAAZF,EAAIv6D,MAAuBktD,EAAauN,qBAAqB3nE,KAAKynE,EAAI7yD,OAC3E6yD,EAAMA,EAAIx6D,KACd,GAAI03D,EAAMra,OAAQ,CAChB,IAAIsd,EAAOjD,EAAMra,OAAO91C,EAAOizD,EAAKpE,EAAW5Y,GAC/C,GAAmB,iBAARmd,EAAkB,OAAOA,CACtC,CACA,IAAIC,EAAcJ,EAAIx6D,MAAyB,UAAjBw6D,EAAIx6D,KAAK2H,KACvC,GAAIwlD,EAAa0N,mBAAqB,OAAO9nE,KAAKsjE,GAAY,CAC5D,KAAmB,OAAZmE,EAAIv6D,MAA6B,KAAZu6D,EAAIv6D,MAAau6D,EAAMA,EAAIx6D,KACvD,OAAOw6D,EAAIjsD,QACb,CACA,MAAgB,aAAZisD,EAAIv6D,KACCu6D,EAAIjsD,UAAyB,KAAb8nD,EAAmB,EAAImD,IAC5CgB,EAAIthC,OAAWugC,GAA8B,KAAZe,EAAIv6D,KAEzB,KAAZu6D,EAAIv6D,MAAgB2kD,EAGjB4V,EAAIjsD,UAAYq2C,EAAU,EAAIpH,IACjCoH,IAAWgW,GAAgB,sBAAsB7nE,KAAKqjE,GAA0B,EAAb5Y,GAH9Dgd,EAAIjsD,SAAWirD,EAFfgB,EAAIjvD,QAAUq5C,EAAU,EAAI,EAMvC,EAEA1F,cAAe4a,EAAe,uCAAyC,YACvErD,kBAAmB,KACnBC,gBAAiB,KACjBC,qBAAsB,MACtBC,YAAa,KACbC,KAAM,QAEV,IAcE,IAAIiE,EAAY,8KAKZC,EAAc,6YAOdC,EAAe,maAMfC,EAAe,gTAOfC,EAAclC,EAAM,8DAKpBmC,EAAiBnC,EAAM,2CAM3B,SAASoC,EAAOC,GACd,OAAOzkE,EAASskE,EAAaG,IAAe,QAAQtoE,KAAKsoE,EAC3D,CAGA,SAASC,EAAUD,GACjB,OAAOD,EAAOC,IAAezkE,EAASukE,EAAgBE,EACxD,CAEA,IAAIE,EAAiB,qDACjBC,EAAe,oBAEnB,SAASC,EAAQzsD,EAAQzH,GACvB,IAAKA,EAAMgzD,YAAa,OAAO,EAC/B,IAAK,IAAIj9D,EAAI0N,EAAO,KAAM1N,EAAK0R,EAAOlE,QAAS,CAC7C,GAAU,MAANxN,GAAc0R,EAAOva,MAAM,OAAQ,CACrCuW,EAAOywD,EACP,KACF,CAAO,GAAU,KAANn+D,GAAa0R,EAAOva,MAAM,aAAa,GAChD,MAEFua,EAAOhE,MACT,CAEA,OADAzD,EAAMsnD,SAAW7jD,EACV,MACT,CAEA,SAAS0wD,EAAYC,EAASp0D,GAC5B,MAAuB,QAAnBA,EAAM4xD,WAA4B,MAExC,CAIA,SAASyC,EAAsBxsD,GAC7B,SAAKA,GAASA,EAAM5Z,OAAS,GACb,KAAZ4Z,EAAM,IACU,KAAZA,EAAM,IAAeA,EAAM,KAAOA,EAAM,GAAG5R,cACrD,CAEA,SAASq+D,EAAa7sD,GAEpB,OADAA,EAAO9D,SAAS,WACT,QACT,CAEA,SAAS4wD,EAAgB9sD,EAAQzH,GAG/B,GAFAyH,EAAO1D,OAAO,GAEV0D,EAAOva,MAAM,uBAAwB,CACvC,IAAIA,EAAQua,EAAOva,MAAM,yBACzB,QAAKA,IAGL8S,EAAMw0D,oBAAsBtnE,EAAM,GAClC8S,EAAMsnD,SAAWmN,EACVA,EAAehtD,EAAQzH,GAChC,CAEA,OAAIyH,EAAOva,MAAM,mBACXua,EAAOva,MAAM,SAAmB,IAC3B,UAKXua,EAAOhE,QACA,EACT,CAEA,SAASixD,EAAwBvgB,GAC/B,IAAIwgB,EAAU,kBAAkBhpE,KAAKwoD,GACrC,OAAOwgB,GAAWA,EAAQ,IAAMA,EAAQ,EAC1C,CAGA,SAASC,EAAcntD,EAAQzH,GAE7B,IADA,IAAIyD,EAC6B,OAAzBA,EAAOgE,EAAOhE,SACpB,GAAY,KAARA,IAAgBgE,EAAO/D,IAAI,KAAM,CACnC1D,EAAMsnD,SAAW,KACjB,KACF,CAEF,MAAO,QACT,CAIA,SAASmN,EAAehtD,EAAQzH,GAE9B,IAAI60D,EAAQ70D,EAAMw0D,oBAAoBt7D,QAAQ,WAAY,QAM1D,OALYuO,EAAOva,MAAM,IAAIM,OAAO,SAAWqnE,EAAQ,MAErD70D,EAAMsnD,SAAW,KAEjB7/C,EAAO5D,YACF,QACT,CAEA,SAASixD,EAAIC,EAAO/1D,GACE,iBAAT+1D,IAAmBA,EAAQ,CAACA,IACvC,IAAItD,EAAQ,GACZ,SAASrvC,EAAIlwB,GACX,GAAIA,EAAK,IAAK,IAAIG,KAAQH,EAASA,EAAII,eAAeD,IACpDo/D,EAAMx8D,KAAK5C,EACf,CACA+vB,EAAIpjB,EAAKunD,UACTnkC,EAAIpjB,EAAKzG,OACT6pB,EAAIpjB,EAAK8wD,SACT1tC,EAAIpjB,EAAK6wD,OACL4B,EAAMxjE,SACR+Q,EAAKU,WAAaq1D,EAAM,GACxB1vB,EAAW6e,eAAe,YAAa6Q,EAAM,GAAItD,IAGnD,IAAK,IAAIviE,EAAI,EAAGA,EAAI6lE,EAAM9mE,SAAUiB,EAClCm2C,EAAWmf,WAAWuQ,EAAM7lE,GAAI8P,EACpC,CAsHA,SAASg2D,EAAkBvtD,EAAQzH,GAEjC,IADA,IAAIunD,GAAU,GACN9/C,EAAOpE,OAAO,CACpB,IAAKkkD,GAAW9/C,EAAOva,MAAM,OAAQ,CACnC8S,EAAMsnD,SAAW,KACjB,KACF,CACAC,EAA2B,MAAjB9/C,EAAOhE,SAAmB8jD,CACtC,CACA,MAAO,QACT,CAEA,SAAS0N,EAAmB7M,GAC1B,OAAO,SAAU3gD,EAAQzH,GAEvB,IADA,IAAIjK,EACGA,EAAK0R,EAAOhE,QAAQ,CACzB,GAAU,KAAN1N,GAAa0R,EAAO/D,IAAI,KAAM,CAChC,GAAa,GAAT0kD,EAAY,CACdpoD,EAAMsnD,SAAW,KACjB,KACF,CAEE,OADAtnD,EAAMsnD,SAAW2N,EAAmB7M,EAAQ,GACrCpoD,EAAMsnD,SAAS7/C,EAAQzH,EAElC,CAAO,GAAU,KAANjK,GAAa0R,EAAO/D,IAAI,KAEjC,OADA1D,EAAMsnD,SAAW2N,EAAmB7M,EAAQ,GACrCpoD,EAAMsnD,SAAS7/C,EAAQzH,EAElC,CACA,MAAO,SACT,CACF,CAnJA80D,EAAI,CAAC,cAAe,WAAY,eAAgB,CAC9C/1D,KAAM,QACNwnD,SAAUkL,EAAM8B,GAChBh7D,MAAOs7D,EACP1B,cAAeV,EAAMuC,GACrB5B,YAAaX,EAAMwC,GACnBlB,sBAAsB,EACtBlD,MAAO4B,EAAM,mBACboB,qBAAsBwB,EACtBlE,MAAO,CACL,IAAK+D,EACL,IAAKC,GAEPx0D,UAAW,CAAC2vD,KAAM,CAAC,QAAS,cAG9BwF,EAAI,CAAC,gBAAiB,iBAAkB,CACtC/1D,KAAM,QACNwnD,SAAUkL,EAAM8B,EAAY,IAAMC,GAClCj7D,MAAOs7D,EACP1B,cAAeV,EAAMuC,EAAiB,oBACtC5B,YAAaX,EAAMwC,EAAe,oBAClClB,sBAAsB,EACtBlD,MAAO4B,EAAM,2BACb0B,qBAAsB,aACtBP,iBAAkB,sBAClBC,qBAAsBwB,EACtBlE,MAAO,CACL,IAAK+D,EACL,IAAKC,EACL,EAAKI,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACL,EAAKD,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACLzsD,MAAO,SAASJ,EAAQzH,EAAOlR,GAC7B,GAAa,YAATA,GAAwC,KAAjB2Y,EAAOlE,SACV,KAAnBvD,EAAM4xD,WAAuC,MAAnB5xD,EAAM4xD,WACb,KAAnB5xD,EAAM4xD,YACP8C,EAAwBjtD,EAAO7Z,WACjC,MAAO,KACX,GAEF4kE,mBAAoB,KACpB7yD,UAAW,CAAC2vD,KAAM,CAAC,QAAS,cAG9BwF,EAAI,cAAe,CACjB/1D,KAAM,QACNwnD,SAAUkL,EAAM,8SAKhBl5D,MAAOk5D,EAAM,sKAEbU,cAAeV,EAAM,uDACrBW,YAAaX,EAAM,mCACnBsB,sBAAsB,EACtBlD,MAAO4B,EAAM,mBACbkB,OAAQ,iFACRxC,MAAO,CACL,IAAK,SAAS1oD,GAEZ,OAAIA,EAAOva,MAAM,aAAa,KAE9Bua,EAAO9D,SAAS,WACT,OACT,EACA,IAAK,SAAS8D,EAAQzH,GACpB,QAAKyH,EAAOva,MAAM,SAClB8S,EAAMsnD,SAAW0N,EACVh1D,EAAMsnD,SAAS7/C,EAAQzH,GAChC,GAEFL,UAAW,CAAC2vD,KAAM,CAAC,QAAS,aAG9BwF,EAAI,gBAAiB,CACnB/1D,KAAM,QACNwnD,SAAUkL,EAAM,uhBAOhBl5D,MAAOk5D,EAAM,sPAIbU,cAAeV,EAAM,sEACrBW,YAAaX,EAAM,wCACnBsB,sBAAsB,EACtBlD,MAAO4B,EAAM,mBACbtB,MAAO,CACL,IAAK,SAAS1oD,EAAQzH,GACpB,OAAIyH,EAAO/D,IAAI,MACb1D,EAAMsnD,SAAWsN,EACVA,EAAcntD,EAAQzH,KAE/ByH,EAAO9D,SAAS,WACT,OACT,KAqCJmxD,EAAI,eAAgB,CAClB/1D,KAAM,QACNwnD,SAAUkL,EAER,uWAQFl5D,MAAOk5D,EACL,muBAYFY,kBAAkB,EAClBF,cAAeV,EAAM,0EACrBW,YAAaX,EAAM,oDACnB5B,MAAO4B,EAAM,mBACba,kBAAkB,EAClBC,cAAc,EACdxL,eAAgB,sBAChBoJ,MAAO,CACL,IAAK,SAAS1oD,GAEZ,OADAA,EAAO9D,SAAS,WACT,MACT,EACA,IAAK,SAAS8D,EAAQzH,GACpB,QAAKyH,EAAOva,MAAM,QAClB8S,EAAMsnD,SAAW0N,EACVh1D,EAAMsnD,SAAS7/C,EAAQzH,GAChC,EACA,IAAK,SAASyH,GAEZ,OADAA,EAAO9D,SAAS,sBACT,MACT,EACA,IAAK,SAAS8D,EAAQzH,GACpB,IAAI4oD,EAAK5oD,EAAMkF,QACf,QAAe,KAAX0jD,EAAGlwD,OAAekwD,EAAGj3B,QAASlqB,EAAO/D,IAAI,QAC3C1D,EAAMkF,QAAU,IAAIL,EAAQ+jD,EAAG5hD,SAAU4hD,EAAG5kD,OAAQ4kD,EAAGlwD,KAAMkwD,EAAGxoD,KAAM,KAAMwoD,EAAGnwD,MACxE,WAIX,EAEA,IAAK,SAASgP,EAAQzH,GACpB,QAAKyH,EAAO/D,IAAI,OAChB1D,EAAMsnD,SAAW2N,EAAmB,GAC7Bj1D,EAAMsnD,SAAS7/C,EAAQzH,GAChC,GAEFL,UAAW,CAAC4vD,cAAe,CAAC2F,MAAO,WAAYC,QAAS,QAoB1DL,EAAI,gBAAiB,CACnB/1D,KAAM,QACNwnD,SAAUkL,EAER,kgBAUFl5D,MAAOk5D,EAEL,2eAOF2D,cAAc,EACd9C,kBAAkB,EAClBD,kBAAkB,EAClBM,OAAQ,mFACRR,cAAeV,EAAM,2DACrBW,YAAaX,EAAM,sCACnB5B,MAAO4B,EAAM,wBACbtB,MAAO,CACL,IAAK,SAAS1oD,GAEZ,OADAA,EAAO9D,SAAS,WACT,MACT,EACA,IAAK,SAASywD,EAASp0D,GACrB,MAA0B,KAAnBA,EAAM4xD,UAAmB,WAAa,UAC/C,EACA,IAAK,SAASnqD,EAAQzH,GAEpB,OADAA,EAAMsnD,UAxDe+N,EAwDc5tD,EAAOva,MAAM,MAvD7C,SAAUua,EAAQzH,GAEvB,IADA,IAAqByD,EAAjB8jD,GAAU,EAAah3D,GAAM,GACzBkX,EAAOpE,OAAO,CACpB,IAAKgyD,IAAiB9N,GAAW9/C,EAAOva,MAAM,KAAO,CAACqD,GAAM,EAAM,KAAM,CACxE,GAAI8kE,GAAgB5tD,EAAOva,MAAM,OAAQ,CAACqD,GAAM,EAAM,KAAM,CAC5DkT,EAAOgE,EAAOhE,QACV8jD,GAAmB,KAAR9jD,GAAegE,EAAOva,MAAM,MACzCua,EAAO3D,OAAO,KAChByjD,GAAWA,GAAmB,MAAR9jD,IAAiB4xD,CACzC,CAGA,OAFI9kE,GAAQ8kE,IACVr1D,EAAMsnD,SAAW,MACZ,QACT,GA2CWtnD,EAAMsnD,SAAS7/C,EAAQzH,GAzDpC,IAA2Bq1D,CA0DvB,EACA,IAAK,SAAS5tD,EAAQzH,GACpB,QAAKyH,EAAO/D,IAAI,OAChB1D,EAAMsnD,SAAW2N,EAAmB,GAC7Bj1D,EAAMsnD,SAAS7/C,EAAQzH,GAChC,EACA81C,OAAQ,SAAS91C,EAAOizD,EAAKpE,EAAW5Y,GACtC,IAAI6Y,EAAYD,GAAaA,EAAUj4D,OAAO,GAC9C,MAAwB,KAAnBoJ,EAAM4xD,WAAuC,KAAnB5xD,EAAM4xD,WAAkC,IAAb/C,EAElC,YAAnB7uD,EAAM4xD,WAAwC,KAAb/C,GAA0C,KAAtB7uD,EAAMkF,QAAQxM,MACnD,YAAnBsH,EAAM4xD,WAAwC,KAAb9C,IACb,KAAnB9uD,EAAM4xD,WAAuC,KAAnB5xD,EAAM4xD,YAAkC,KAAb9C,EAClC,EAAb7Y,EAAiBgd,EAAIjsD,SAC1BisD,EAAIthC,OAAqB,KAAZshC,EAAIv6D,KACZu6D,EAAIjsD,UAAYhH,EAAMkF,QAAQxM,OAASm2D,GAAa,IAAIj4D,OAAO,GAAK,EAAIq/C,QADjF,EALSj2C,EAAMgH,QAOjB,GAEFrH,UAAW,CAAC4vD,cAAe,CAAC4F,QAAS,QAGvCL,EAAI,CAAC,oBAAqB,uBAAwB,CAChD/1D,KAAM,QACNwnD,SAAUkL,EAAM,oLAMhBl5D,MAAOk5D,EAAM,yFAGbU,cAAeV,EAAM,+BACrB3B,QAAS2B,EAAM,uoBAef5B,MAAO4B,EAAM,myCA2Bbc,cAAc,EACdpC,MAAO,CAAC,IAAK+D,GACbv0D,UAAW,CAAC2vD,KAAM,CAAC,QAAS,cAG9BwF,EAAI,cAAe,CACjB/1D,KAAM,QACNwnD,SAAUkL,EAAM8B,2MAGhBh7D,MAAOs7D,EACP1B,cAAeV,EAAMuC,GACrBnE,MAAO4B,EAAM,mBACbtB,MAAO,CAAC,IAAK+D,GACbv0D,UAAW,CAAC2vD,KAAM,CAAC,QAAS,cAG9BwF,EAAI,oBAAqB,CACvB/1D,KAAM,QACNwnD,SAAUkL,EAAM8B,EAAY,IAAME,GAClCl7D,MAAOw7D,EACPjE,QAAS2B,EAAMiC,GACfvB,cAAeV,EAAMuC,EAAiB,oEACtC5B,YAAaX,EAAMwC,EAAe,gDAClCd,qBAAsB,QACtBJ,sBAAsB,EACtBlD,MAAO4B,EAAM,0CACboB,qBAAsBwB,EACtBlE,MAAO,CACL,IAAK+D,EACL,IAAKC,GAEPx0D,UAAW,CAAC2vD,KAAM,CAAC,QAAS,cAG9BwF,EAAI,sBAAuB,CACzB/1D,KAAM,QACNwnD,SAAUkL,EAAM8B,EAAY,IAAME,EAAe,IAAMD,GACvDj7D,MAAOw7D,EACPjE,QAAS2B,EAAMiC,GACfvB,cAAeV,EAAMuC,EAAiB,oFACtC5B,YAAaX,EAAMwC,EAAe,gEAClCd,qBAAsB,mBACtBJ,sBAAsB,EACtBlD,MAAO4B,EAAM,0CACboB,qBAAsBwB,EACtBlE,MAAO,CACL,IAAK+D,EACL,IAAKC,EACL,EAAKI,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACL,EAAKD,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACL,EAAKA,EACLzsD,MAAO,SAASJ,EAAQzH,EAAOlR,GAC7B,GAAa,YAATA,GAAwC,KAAjB2Y,EAAOlE,SACV,KAAnBvD,EAAM4xD,WAAuC,MAAnB5xD,EAAM4xD,WACb,KAAnB5xD,EAAM4xD,YACP8C,EAAwBjtD,EAAO7Z,WACjC,MAAO,KACX,GAEF4kE,mBAAoB,KACpB7yD,UAAW,CAAC2vD,KAAM,CAAC,QAAS,cAG9BwF,EAAI,kBAAmB,CACrB/1D,KAAM,QACNwnD,SAAUkL,EAAM,mKAEhBl5D,MAAOs7D,EACP1B,cAAeV,EAAM,yDACrBW,YAAaX,EAAM,wBACnBsB,sBAAsB,EACtBlD,MAAO4B,EAAM,mBACbtB,MAAO,CAAC,IAAK+D,GACbv0D,UAAW,CAAC2vD,KAAM,CAAC,QAAS,cAI9B,IAAIgG,EAAkB,KACtB,SAASC,EAAkB78D,GACzB,OAAO,SAAS+O,EAAQzH,GAEtB,IADA,IAAqByD,EAAjB8jD,GAAU,EAAah3D,GAAM,GACzBkX,EAAOpE,OAAO,CACpB,IAAKkkD,GAAW9/C,EAAOva,MAAM,OACd,UAARwL,GAAoB+O,EAAOva,MAAM,OAAQ,CAC9CqD,GAAM,EACN,KACF,CACA,IAAKg3D,GAAW9/C,EAAOva,MAAM,MAAO,CAClCooE,EAAkBC,EAAkB78D,GACpCnI,GAAM,EACN,KACF,CACAkT,EAAOgE,EAAOhE,OACd8jD,EAAkB,UAAR7uD,IAAqB6uD,GAAmB,MAAR9jD,CAC5C,CAGA,OAFIlT,IACAyP,EAAMsnD,SAAW,MACd,QACT,CACF,CAEAwN,EAAI,gBAAiB,CACnB/1D,KAAM,QACNwnD,SAAUkL,EAAM,kRAIhBl5D,MAAO,SAAS47C,GAEZ,IAAIrzC,EAAQqzC,EAAKv9C,OAAO,GACxB,OAAQkK,IAAUA,EAAM9K,eAAiB8K,IAAUA,EAAM7K,aAC7D,EACAk8D,cAAeV,EAAM,sGACrBW,YAAaX,EAAM,gEACnB3B,QAAS2B,EAAM,iLAEfgB,kBAAmB,sBACnB1L,eAAgB,sBAChB2L,YAAa,SACbC,OAAQ,iGACRN,kBAAkB,EAClBU,sBAAsB,EACtBlD,MAAO4B,EAAM,uDACbc,cAAc,EACdW,WAAW,EACX/C,MAAO,CACL,IAAK,SAAS1oD,GAEZ,OADAA,EAAO9D,SAAS,WACT,MACT,EACA,IAAK,SAAS8D,EAAQzH,GAElB,OADAA,EAAMsnD,SAAWiO,EAAkB9tD,EAAOva,MAAM,MAAQ,SAAW,UAC5D8S,EAAMsnD,SAAS7/C,EAAQzH,EAChC,EACF,IAAK,SAASyH,EAAQzH,GAClB,SAAKs1D,IAAoB7tD,EAAOva,MAAM,QACtC8S,EAAMsnD,SAAWgO,EACjBA,EAAkB,KACXt1D,EAAMsnD,SAAS7/C,EAAQzH,GAChC,EACF,IAAK,SAASyH,GAEZ,OADAA,EAAO9D,SAAS,sBACT,MACT,EACAkE,MAAO,SAASusD,EAASp0D,EAAOlR,GAC5B,IAAc,YAATA,GAAgC,QAATA,IACL,KAAnBkR,EAAM4xD,UACR,MAAO,YAEX,GAEJjyD,UAAW,CACP2vD,KAAM,CAAC,QAAS,UAChBC,cAAe,CAAC4F,QAAS,OAIjC,CAt6BIltB,CAAI,EAAQ,O,mBCKb,SAAS5C,GACV,aAEA,SAASmwB,EAAW/D,GAClB,OAAO,IAAIjkE,OAAO,MAAQikE,EAAMlwB,KAAK,OAAS,QAChD,CAEA,IAAIk0B,EAAgBD,EAAW,CAAC,MAAO,KAAM,MAAO,OAChDE,EAAiB,CAAC,KAAM,SAAU,QAAS,QAAS,WAClC,MAAO,MAAO,OAAQ,OAAQ,SAAU,UACxC,MAAO,OAAQ,SAAU,KAAM,SAC/B,SAAU,OAAQ,QAAS,SAC3B,MAAO,QAAS,OAAQ,QAAS,MACnDC,EAAiB,CAAC,MAAO,MAAO,MAAO,MAAO,OAAQ,YAAa,WAAY,MAC7D,cAAe,UAAW,UAAW,UAAW,OAAQ,MAAO,SAC/D,YAAa,OAAQ,SAAU,QAAS,SAAU,YAClD,UAAW,UAAW,UAAW,OAAQ,OAAQ,MAAO,KACxD,QAAS,MAAO,aAAc,aAAc,OAAQ,MACpD,OAAQ,SAAU,MAAO,MAAO,aAAc,MAAO,OACrD,SAAU,MAAO,OAAQ,MAAO,MAAO,WAAY,QACnD,OAAQ,WAAY,QAAS,MAAO,UAAW,QAC/C,SAAU,eAAgB,MAAO,MAAO,QAAS,QACjD,OAAQ,OAAQ,MAAO,aAAc,iBACrC,WAAY,aAGlC,SAASn9C,EAAIxY,GACX,OAAOA,EAAM41D,OAAO51D,EAAM41D,OAAO3nE,OAAS,EAC5C,CAJAo3C,EAAW6e,eAAe,YAAa,SAAUwR,EAAe56D,OAAO66D,GAAgB76D,OAAO,CAAC,OAAQ,WAMvGuqC,EAAWvmC,WAAW,UAAU,SAAS+2D,EAAMC,GAO7C,IANA,IAAIC,EAAa,QAEbC,EAAaF,EAAWE,YAAcF,EAAWG,kBAAoB,4BAErEC,EAAY,CAACJ,EAAWK,gBAAiBL,EAAWM,gBAAiBN,EAAWO,iBAAkBP,EAAWQ,iBAChGR,EAAWI,WAAa,0DAChChnE,EAAI,EAAGA,EAAIgnE,EAAUjoE,OAAQiB,IAAUgnE,EAAUhnE,IAAIgnE,EAAUj8D,OAAO/K,IAAK,GAEpF,IAAIqnE,EAAgBT,EAAWS,eAAiBV,EAAK5f,WAEjDugB,EAAad,EAAgBe,EAAad,EACbnyD,MAA7BsyD,EAAWY,iBACbF,EAAaA,EAAW17D,OAAOg7D,EAAWY,iBAEXlzD,MAA7BsyD,EAAWa,iBACbF,EAAaA,EAAW37D,OAAOg7D,EAAWa,iBAE5C,IAAIC,IAAQd,EAAWrQ,SAAWt4D,OAAO2oE,EAAWrQ,SAAW,GAC/D,GAAImR,EAAK,CAEP,IAAIC,EAAcf,EAAWe,aAAc,oDAC3CL,EAAaA,EAAW17D,OAAO,CAAC,WAAY,QAAS,OAAQ,OAAQ,QAAS,UAC9E27D,EAAaA,EAAW37D,OAAO,CAAC,QAAS,QAAS,OAAQ,UAC1D,IAAIg8D,EAAiB,IAAItpE,OAAO,qDAAsD,IACxF,MACMqpE,EAAcf,EAAWe,aAAc,0BAC3CL,EAAaA,EAAW17D,OAAO,CAAC,OAAQ,UACxC27D,EAAaA,EAAW37D,OAAO,CAAC,QAAS,aAAc,SAAU,MAAO,SAAU,WAClD,OAAQ,SAAU,OAAQ,YAAa,SAAU,SACjD,SAAU,UAAW,SAAU,QAAS,OAAQ,SAC5Eg8D,EAAiB,IAAItpE,OAAO,2CAA4C,KAE9E,IAAI+4D,EAAWiP,EAAWgB,GACtBO,EAAWvB,EAAWiB,GAG1B,SAASrP,EAAU3/C,EAAQzH,GACzB,IAAIsD,EAAMmE,EAAOnE,OAA4B,MAAnBtD,EAAMg3D,UAGhC,GAFI1zD,IAAKtD,EAAM81C,OAASruC,EAAOxD,eAE3BX,GAA0B,MAAnBkV,EAAIxY,GAAOtH,KAAc,CAClC,IAAIu+D,EAAcz+C,EAAIxY,GAAOsK,OAC7B,GAAI7C,EAAO7D,WAAY,CACrB,IAAIszD,EAAazvD,EAAOxD,cAKxB,OAJIizD,EAAaD,EACfE,EAAYn3D,GACLk3D,EAAaD,GAAeG,EAAO3vD,EAAQzH,IAA2B,KAAjByH,EAAOlE,SACnEvD,EAAMq3D,YAAa,GACd,IACT,CACE,IAAIvoE,EAAQwoE,EAAe7vD,EAAQzH,GAGnC,OAFIi3D,EAAc,GAAKG,EAAO3vD,EAAQzH,KACpClR,GAAS,IAAMinE,GACVjnE,CAEX,CACA,OAAOwoE,EAAe7vD,EAAQzH,EAChC,CAEA,SAASs3D,EAAe7vD,EAAQzH,EAAOu3D,GACrC,GAAI9vD,EAAO7D,WAAY,OAAO,KAG9B,IAAK2zD,GAAY9vD,EAAOva,MAAM,QAAS,MAAO,UAG9C,GAAIua,EAAOva,MAAM,YAAY,GAAQ,CACnC,IAAIsqE,GAAe,EAKnB,GAHI/vD,EAAOva,MAAM,iCAAkCsqE,GAAe,GAC9D/vD,EAAOva,MAAM,kBAAmBsqE,GAAe,GAC/C/vD,EAAOva,MAAM,YAAasqE,GAAe,GACzCA,EAGF,OADA/vD,EAAO/D,IAAI,MACJ,SAGT,IAAI+zD,GAAa,EAgBjB,GAdIhwD,EAAOva,MAAM,oBAAmBuqE,GAAa,GAE7ChwD,EAAOva,MAAM,gBAAeuqE,GAAa,GAEzChwD,EAAOva,MAAM,iBAAgBuqE,GAAa,GAE1ChwD,EAAOva,MAAM,mCAEfua,EAAO/D,IAAI,MAEX+zD,GAAa,GAGXhwD,EAAOva,MAAM,kBAAiBuqE,GAAa,GAC3CA,EAGF,OADAhwD,EAAO/D,IAAI,MACJ,QAEX,CAGA,GAAI+D,EAAOva,MAAM4pE,GAEf,OADmE,IAAjDrvD,EAAO7Z,UAAUqI,cAAclD,QAAQ,MAKvDiN,EAAMsnD,SAiCZ,SAA6BoQ,EAAWC,GACtC,KAAO,OAAO5kE,QAAQ2kE,EAAU9gE,OAAO,GAAGX,gBAAkB,GAC1DyhE,EAAYA,EAAUpzD,OAAO,GAE/B,IAAIszD,EAAiC,GAApBF,EAAUzpE,OACvB4pE,EAAW,SAEf,SAASC,EAAgB1P,GACvB,OAAO,SAAS3gD,EAAQzH,GACtB,IAAIwE,EAAQ8yD,EAAe7vD,EAAQzH,GAAO,GAS1C,MARa,eAATwE,IACsB,KAApBiD,EAAO7Z,UACToS,EAAMsnD,SAAWwQ,EAAgB1P,EAAQ,GACZ,KAApB3gD,EAAO7Z,YACDoS,EAAMsnD,SAAjBc,EAAQ,EAAoB0P,EAAgB1P,EAAQ,GAClC2P,IAGnBvzD,CACT,CACF,CAEA,SAASuzD,EAAYtwD,EAAQzH,GAC3B,MAAQyH,EAAOpE,OAEb,GADAoE,EAAO9D,SAAS,eACZ8D,EAAO/D,IAAI,OAEb,GADA+D,EAAOhE,OACHm0D,GAAcnwD,EAAOpE,MACvB,OAAOw0D,MACJ,IAAIpwD,EAAOva,MAAMwqE,GAEtB,OADA13D,EAAMsnD,SAAWqQ,EACVE,EACF,GAAIpwD,EAAOva,MAAM,MAEtB,OAAO2qE,EACF,GAAIpwD,EAAOva,MAAM,KAAK,GAG3B,OADA8S,EAAMsnD,SAAWwQ,EAAgB,GAC7BrwD,EAAO7Z,UAAkBiqE,EACjB73D,EAAMsnD,SAAS7/C,EAAQzH,GAC9B,GAAIyH,EAAOva,MAAM,MACtB,OAAO2qE,EACF,GAAIpwD,EAAOva,MAAM,KAEtB,OAAO6oE,EAEPtuD,EAAO/D,IAAI,OACb,CAEF,GAAIk0D,EAAY,CACd,GAAI9B,EAAWkC,uBACb,OAAOjC,EAEP/1D,EAAMsnD,SAAWqQ,CACrB,CACA,OAAOE,CACT,CAEA,OADAE,EAAYE,UAAW,EAChBF,CACT,CA5FuBG,CAAoBzwD,EAAO7Z,UAAWoS,EAAMsnD,UACtDtnD,EAAMsnD,SAAS7/C,EAAQzH,KAJ9BA,EAAMsnD,SAiGZ,SAA4BoQ,EAAWC,GACrC,KAAO,OAAO5kE,QAAQ2kE,EAAU9gE,OAAO,GAAGX,gBAAkB,GAC1DyhE,EAAYA,EAAUpzD,OAAO,GAE/B,IAAIszD,EAAiC,GAApBF,EAAUzpE,OACvB4pE,EAAW,SAEf,SAASE,EAAYtwD,EAAQzH,GAC3B,MAAQyH,EAAOpE,OAEb,GADAoE,EAAO9D,SAAS,WACZ8D,EAAO/D,IAAI,OAEb,GADA+D,EAAOhE,OACHm0D,GAAcnwD,EAAOpE,MACvB,OAAOw0D,MACJ,IAAIpwD,EAAOva,MAAMwqE,GAEtB,OADA13D,EAAMsnD,SAAWqQ,EACVE,EAEPpwD,EAAO/D,IAAI,OACb,CAEF,GAAIk0D,EAAY,CACd,GAAI9B,EAAWkC,uBACb,OAAOjC,EAEP/1D,EAAMsnD,SAAWqQ,CACrB,CACA,OAAOE,CACT,CAEA,OADAE,EAAYE,UAAW,EAChBF,CACT,CAhIuBI,CAAmB1wD,EAAO7Z,UAAWoS,EAAMsnD,UACrDtnD,EAAMsnD,SAAS7/C,EAAQzH,IAOlC,IAAK,IAAI9Q,EAAI,EAAGA,EAAIgnE,EAAUjoE,OAAQiB,IACpC,GAAIuY,EAAOva,MAAMgpE,EAAUhnE,IAAK,MAAO,WAEzC,OAAIuY,EAAOva,MAAM8oE,GAAoB,cAEd,KAAnBh2D,EAAMg3D,WAAoBvvD,EAAOva,MAAM2pE,GAClC,WAELpvD,EAAOva,MAAMq5D,IAAa9+C,EAAOva,MAAMuoE,GAClC,UAELhuD,EAAOva,MAAM6pE,GACR,UAELtvD,EAAOva,MAAM,iBACR,aAELua,EAAOva,MAAM2pE,GACQ,OAAnB72D,EAAMg3D,WAAyC,SAAnBh3D,EAAMg3D,UAC7B,MACF,YAITvvD,EAAOhE,OACA8zD,EAAW,KAAMxB,EAC1B,CAgGA,SAASoB,EAAYn3D,GACnB,KAA0B,MAAnBwY,EAAIxY,GAAOtH,MAAcsH,EAAM41D,OAAOx9B,MAC7Cp4B,EAAM41D,OAAO3gE,KAAK,CAACqV,OAAQkO,EAAIxY,GAAOsK,OAASurD,EAAK5f,WACjCv9C,KAAM,KACNi5B,MAAO,MAC5B,CASA,SAASylC,EAAO3vD,EAAQzH,GAEtB,IADA,IAAIgH,EAAWS,EAAOxD,cACfjE,EAAM41D,OAAO3nE,OAAS,GAAKuqB,EAAIxY,GAAOsK,OAAStD,GAAU,CAC9D,GAAuB,MAAnBwR,EAAIxY,GAAOtH,KAAc,OAAO,EACpCsH,EAAM41D,OAAOx9B,KACf,CACA,OAAO5f,EAAIxY,GAAOsK,QAAUtD,CAC9B,CAEA,SAASoxD,EAAW3wD,EAAQzH,GACtByH,EAAOnE,QACTtD,EAAMq4D,iBAAkB,EACxBr4D,EAAMo3D,QAAS,GAGjB,IAAItoE,EAAQkR,EAAMsnD,SAAS7/C,EAAQzH,GAC/BpS,EAAU6Z,EAAO7Z,UAGrB,GAAIoS,EAAMq4D,iBAA8B,KAAXzqE,EAC3B,OAAO6Z,EAAOva,MAAM2pE,GAAa,GAAS,OAASD,EAAM,WAAab,EAgBxE,GAdI,KAAKvqE,KAAKoC,KAAUoS,EAAMq4D,iBAAkB,GAElC,YAATvpE,GAAgC,WAATA,GACF,QAAnBkR,EAAMg3D,YACXloE,EAAQ,QAGK,QAAXlB,GAAgC,UAAXA,IACvBoS,EAAMo3D,QAAS,GAEF,UAAXxpE,IAAqBoS,EAAMs4D,QAAS,GACzB,KAAX1qE,IAAmBoS,EAAMs4D,QAA6B,MAAnB9/C,EAAIxY,GAAOtH,MAAgB+O,EAAOva,MAAM,eAAe,IAC5FiqE,EAAYn3D,GAEQ,GAAlBpS,EAAQK,SAAgB,iBAAiBzC,KAAKsD,GAAQ,CACxD,IAAIypE,EAAkB,MAAMxlE,QAAQnF,GAKpC,IAJwB,GAApB2qE,GA7CR,SAA0B9wD,EAAQzH,EAAOtH,GACvC,IAAIi5B,EAAQlqB,EAAOva,MAAM,uBAAuB,GAAS,KAAOua,EAAOzD,SAAW,EAClFhE,EAAM41D,OAAO3gE,KAAK,CAACqV,OAAQtK,EAAM81C,OAASygB,EACvB79D,KAAMA,EACNi5B,MAAOA,GAC5B,CAyCM6mC,CAAiB/wD,EAAQzH,EAAO,MAAMjS,MAAMwqE,EAAiBA,EAAgB,KAGvD,IADxBA,EAAkB,MAAMxlE,QAAQnF,IACL,CACzB,GAAI4qB,EAAIxY,GAAOtH,MAAQ9K,EAClB,OAAOmoE,EADoB/1D,EAAM81C,OAAS91C,EAAM41D,OAAOx9B,MAAM9tB,OAASisD,CAE7E,CACF,CAIA,OAHIv2D,EAAMo3D,QAAU3vD,EAAOpE,OAA4B,MAAnBmV,EAAIxY,GAAOtH,MAAgBsH,EAAM41D,OAAO3nE,OAAS,GACnF+R,EAAM41D,OAAOx9B,MAERtpC,CACT,CA8CA,MA5Ce,CACbuR,WAAY,SAASuuD,GACnB,MAAO,CACLtH,SAAUF,EACVwO,OAAQ,CAAC,CAACtrD,OAAQskD,GAAc,EAAGl2D,KAAM,KAAMi5B,MAAO,OACtDmkB,OAAQ8Y,GAAc,EACtBoI,UAAW,KACXsB,QAAQ,EACRlB,OAAQ,EAEZ,EAEAvvD,MAAO,SAASJ,EAAQzH,GACtB,IAAIy4D,EAASz4D,EAAMq3D,WACfoB,IAAQz4D,EAAMq3D,YAAa,GAC/B,IAAIvoE,EAAQspE,EAAW3wD,EAAQzH,GAQ/B,OANIlR,GAAkB,WAATA,IACXkR,EAAMg3D,UAAsB,WAATloE,GAA+B,eAATA,EAA0B2Y,EAAO7Z,UAAYkB,GAC3E,eAATA,IAAwBA,EAAQ,MAEhC2Y,EAAOpE,OAASrD,EAAMs4D,SACxBt4D,EAAMs4D,QAAS,GACVG,EAAS3pE,EAAQ,IAAMinE,EAAajnE,CAC7C,EAEAgnD,OAAQ,SAAS91C,EAAO6uD,GACtB,GAAI7uD,EAAMsnD,UAAYF,EACpB,OAAOpnD,EAAMsnD,SAAS2Q,SAAW5yB,EAAWpxC,KAAO,EAErD,IAAIykE,EAAQlgD,EAAIxY,GACZq9C,EAAUqb,EAAMhgE,MAAQm2D,EAAUj4D,OAAO,IAC3B,MAAd8hE,EAAMhgE,OAAiBsH,EAAMo3D,QAAU,kCAAkC5rE,KAAKqjE,GAClF,OAAmB,MAAf6J,EAAM/mC,MACD+mC,EAAM/mC,OAAS0rB,EAAU,EAAI,GAE7Bqb,EAAMpuD,QAAU+yC,EAAUkZ,EAAgB,EACrD,EAEA5e,cAAe,+CACf4X,cAAe,CAAC4F,QAAS,OACzB9F,YAAa,IACbC,KAAM,SAGV,IAEAjqB,EAAWmf,WAAW,gBAAiB,UAEvC,IAAqB9tD,EAErB2uC,EAAWmf,WAAW,gBAAiB,CACrCzlD,KAAM,SACN23D,gBAJmBhgE,EAIG,6HAJWA,EAAItG,MAAM,OAS/C,CA5YI63C,CAAI,EAAQ,O,mBCKb,SAAS5C,GACZ,aAEAA,EAAWvmC,WAAW,UAAU,WAC9B,SAAS02D,EAAW/D,GAClB,OAAO,IAAIjkE,OAAO,MAAQikE,EAAMlwB,KAAK,OAAS,QAChD,CAEA,IAAI40B,EAAkB,IAAI3oE,OAAO,gCAC7ByoE,EAAmB,IAAIzoE,OAAO,0BAC9B4oE,EAAkB,IAAI5oE,OAAO,6DAC7B6oE,EAAmB,IAAI7oE,OAAO,wDAC9B8oE,EAAmB,IAAI9oE,OAAO,kBAC9BmrE,EAAgB,IAAInrE,OAAO,aAC3BqpE,EAAc,IAAIrpE,OAAO,iCAEzBupE,EAAWvB,EAAW,CACxB,QAAS,OAAQ,WAAY,MAAO,OAAQ,OAAQ,OAAQ,MAC5D,OAAQ,MAAO,MAAO,OAAQ,MAAO,QAAS,MAAO,MAAO,OAAQ,MAAO,OAC3E,OAAQ,MAAO,UAAW,QAAS,QAAS,UAAW,SAAU,QAAS,OAC1E,OAAQ,MAAO,OAAQ,QAAS,OAAQ,QAAS,QAAS,MAAO,OAAQ,MAAO,MAChF,MAAO,MAAO,MAAO,OAAQ,OAAQ,QAAS,OAAQ,OAAQ,QAAS,WAAY,OACnF,QAAS,SAAU,SAAU,SAAU,OAAQ,OAAQ,WAAY,OAAQ,UAC3E,MAAO,OAAQ,WAAY,UAAW,QAAS,SAAU,SAAU,aAGjEjP,EAAWiP,EAAW,CACxB,SAAU,OAAQ,SAAU,OAAQ,SAAU,MAAO,QAAS,cAC9D,KAAM,YAAa,KAAM,MAAO,QAAS,MAAO,QAAS,WAAY,aAAc,SACnF,UAAW,SAAU,aAAc,SAAU,WAAY,SAAU,UAAW,OAAQ,QACtF,WAAY,QAKd,SAASoD,EAAenxD,EAAQzH,GAC9B,OAAKyH,EAAOnE,OAA2B,MAAlBmE,EAAOlE,QAK5BvD,EAAMsnD,SAAWF,EACVA,EAAU3/C,EAAQzH,KALvByH,EAAOhE,OACPzD,EAAMsnD,SAAWF,EACV,WAIX,CAGA,SAASI,EAAa//C,EAAQzH,GAC5B,OAAIyH,EAAOva,MAAM,UACf8S,EAAMsnD,SAAWF,EACV,YAET3/C,EAAO5D,YACA,UACT,CAEA,SAASujD,EAAU3/C,EAAQzH,GAEzB,GAAIyH,EAAO7D,WAAY,OAAO,KAG9B,GAAI6D,EAAOva,MAAM,MAGf,OAFA8S,EAAMsnD,SAAWE,EACjB//C,EAAO5D,YACA,UAGT,GAAI4D,EAAOva,MAAM,SAEf,OADAua,EAAO5D,YACA,UAIT,GAAI4D,EAAOva,MAAM,cAAc,GAAQ,CACrC,GAAIua,EAAOva,MAAM,6BAEf,OADAua,EAAO6/C,SAAWF,EACX,SACT,GAAI3/C,EAAOva,MAAM,wCAA2C,MAAO,SACnE,GAAIua,EAAOva,MAAM,mCAAsC,MAAO,QAChE,CACA,GAAIua,EAAOva,MAAMsoE,EAAW,CAAC,MAAM,MAAM,MAAM,SAAY,MAAO,SAGlE,IAAI57D,EAAI6N,EAAOva,MAAM,wBAA0Bua,EAAOva,MAAM,uBAC5D,OAAI0M,EAAYA,EAAE,GAAK,SAAW,eAG9B6N,EAAOva,MAAMq5D,GAAoB,UACjC9+C,EAAOva,MAAM6pE,GAAoB,UACjCtvD,EAAOva,MAAM2pE,GAAuB,WAEpCpvD,EAAOva,MAAMipE,IAAoB1uD,EAAOva,MAAMkpE,GAA2B,WACzE3uD,EAAOva,MAAM+oE,IAAqBxuD,EAAOva,MAAMmpE,IAAqB5uD,EAAOva,MAAMopE,GAA4B,KAE7G7uD,EAAOva,MAAMyrE,IACf34D,EAAMsnD,SAAWsR,EACV,OAKTnxD,EAAOhE,OACA,QACT,CAGA,MAAO,CACLpD,WAAY,WACV,MAAO,CACLinD,SAAUF,EAEd,EAEAv/C,MAAO,SAASJ,EAAQzH,GACtB,IAAIlR,EAAQkR,EAAMsnD,SAAS7/C,EAAQzH,GAInC,MAHc,WAAVlR,GAAgC,aAAVA,IACxBkR,EAAMsnD,SAAWsR,GAEZ9pE,CACT,EAEAugE,YAAa,IAEbC,KAAM,SAEV,IAEAjqB,EAAWmf,WAAW,gBAAiB,SAEvC,CArIIvc,CAAI,EAAQ,O","sources":["webpack://WebComponents/./node_modules/codemirror/lib/codemirror.js","webpack://WebComponents/./node_modules/codemirror/mode/javascript/javascript.js","webpack://WebComponents/./node_modules/codemirror/mode/sql/sql.js","webpack://WebComponents/./node_modules/codemirror/mode/clike/clike.js","webpack://WebComponents/./node_modules/codemirror/mode/python/python.js","webpack://WebComponents/./node_modules/codemirror/mode/octave/octave.js"],"sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// This is CodeMirror (https://codemirror.net/5), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n // Kludges for bugs and behavior differences that can't be feature\n // detected are enabled based on userAgent etc sniffing.\n var userAgent = navigator.userAgent;\n var platform = navigator.platform;\n\n var gecko = /gecko\\/\\d/i.test(userAgent);\n var ie_upto10 = /MSIE \\d/.test(userAgent);\n var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n var edge = /Edge\\/(\\d+)/.exec(userAgent);\n var ie = ie_upto10 || ie_11up || edge;\n var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n var webkit = !edge && /WebKit\\//.test(userAgent);\n var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n var chrome = !edge && /Chrome\\/(\\d+)/.exec(userAgent);\n var chrome_version = chrome && +chrome[1];\n var presto = /Opera\\//.test(userAgent);\n var safari = /Apple Computer/.test(navigator.vendor);\n var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n var phantom = /PhantomJS/.test(userAgent);\n\n var ios = safari && (/Mobile\\/\\w+/.test(userAgent) || navigator.maxTouchPoints > 2);\n var android = /Android/.test(userAgent);\n // This is woefully incomplete. Suggestions for alternative methods welcome.\n var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n var mac = ios || /Mac/.test(platform);\n var chromeOS = /\\bCrOS\\b/.test(userAgent);\n var windows = /win/i.test(platform);\n\n var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n if (presto_version) { presto_version = Number(presto_version[1]); }\n if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n var captureRightClick = gecko || (ie && ie_version >= 9);\n\n function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n var rmClass = function(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n };\n\n function removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count)\n { e.removeChild(e.firstChild); }\n return e\n }\n\n function removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e)\n }\n\n function elt(tag, content, className, style) {\n var e = document.createElement(tag);\n if (className) { e.className = className; }\n if (style) { e.style.cssText = style; }\n if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n return e\n }\n // wrapper for elt, which removes the elt from the accessibility tree\n function eltP(tag, content, className, style) {\n var e = elt(tag, content, className, style);\n e.setAttribute(\"role\", \"presentation\");\n return e\n }\n\n var range;\n if (document.createRange) { range = function(node, start, end, endNode) {\n var r = document.createRange();\n r.setEnd(endNode || node, end);\n r.setStart(node, start);\n return r\n }; }\n else { range = function(node, start, end) {\n var r = document.body.createTextRange();\n try { r.moveToElementText(node.parentNode); }\n catch(e) { return r }\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r\n }; }\n\n function contains(parent, child) {\n if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n { child = child.parentNode; }\n if (parent.contains)\n { return parent.contains(child) }\n do {\n if (child.nodeType == 11) { child = child.host; }\n if (child == parent) { return true }\n } while (child = child.parentNode)\n }\n\n function activeElt(doc) {\n // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n // IE < 10 will throw when accessed while the page is loading or in an iframe.\n // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n var activeElement;\n try {\n activeElement = doc.activeElement;\n } catch(e) {\n activeElement = doc.body || null;\n }\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n { activeElement = activeElement.shadowRoot.activeElement; }\n return activeElement\n }\n\n function addClass(node, cls) {\n var current = node.className;\n if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n }\n function joinClasses(a, b) {\n var as = a.split(\" \");\n for (var i = 0; i < as.length; i++)\n { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n return b\n }\n\n var selectInput = function(node) { node.select(); };\n if (ios) // Mobile Safari apparently has a bug where select() is broken.\n { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n else if (ie) // Suppress mysterious IE10 errors\n { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n function doc(cm) { return cm.display.wrapper.ownerDocument }\n\n function win(cm) { return doc(cm).defaultView }\n\n function bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function(){return f.apply(null, args)}\n }\n\n function copyObj(obj, target, overwrite) {\n if (!target) { target = {}; }\n for (var prop in obj)\n { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n { target[prop] = obj[prop]; } }\n return target\n }\n\n // Counts the column offset in a string, taking tabs into account.\n // Used mostly to find indentation.\n function countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1) { end = string.length; }\n }\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n if (nextTab < 0 || nextTab >= end)\n { return n + (end - i) }\n n += nextTab - i;\n n += tabSize - (n % tabSize);\n i = nextTab + 1;\n }\n }\n\n var Delayed = function() {\n this.id = null;\n this.f = null;\n this.time = 0;\n this.handler = bind(this.onTimeout, this);\n };\n Delayed.prototype.onTimeout = function (self) {\n self.id = 0;\n if (self.time <= +new Date) {\n self.f();\n } else {\n setTimeout(self.handler, self.time - +new Date);\n }\n };\n Delayed.prototype.set = function (ms, f) {\n this.f = f;\n var time = +new Date + ms;\n if (!this.id || time < this.time) {\n clearTimeout(this.id);\n this.id = setTimeout(this.handler, ms);\n this.time = time;\n }\n };\n\n function indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i)\n { if (array[i] == elt) { return i } }\n return -1\n }\n\n // Number of pixels added to scroller and sizer to hide scrollbar\n var scrollerGap = 50;\n\n // Returned or thrown by various protocols to signal 'I'm not\n // handling this'.\n var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n // Reused option objects for setSelection & friends\n var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n // The inverse of countColumn -- find the offset that corresponds to\n // a particular column.\n function findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n if (nextTab == -1) { nextTab = string.length; }\n var skipped = nextTab - pos;\n if (nextTab == string.length || col + skipped >= goal)\n { return pos + Math.min(skipped, goal - col) }\n col += nextTab - pos;\n col += tabSize - (col % tabSize);\n pos = nextTab + 1;\n if (col >= goal) { return pos }\n }\n }\n\n var spaceStrs = [\"\"];\n function spaceStr(n) {\n while (spaceStrs.length <= n)\n { spaceStrs.push(lst(spaceStrs) + \" \"); }\n return spaceStrs[n]\n }\n\n function lst(arr) { return arr[arr.length-1] }\n\n function map(array, f) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n return out\n }\n\n function insertSorted(array, value, score) {\n var pos = 0, priority = score(value);\n while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n array.splice(pos, 0, value);\n }\n\n function nothing() {}\n\n function createObj(base, props) {\n var inst;\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n if (props) { copyObj(props, inst); }\n return inst\n }\n\n var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n function isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" &&\n (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n }\n function isWordChar(ch, helper) {\n if (!helper) { return isWordCharBasic(ch) }\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n return helper.test(ch)\n }\n\n function isEmpty(obj) {\n for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n return true\n }\n\n // Extending unicode characters. A series of a non-extending char +\n // any number of extending chars is treated as a single unit as far\n // as editing and measuring is concerned. This is not fully correct,\n // since some scripts/fonts/browsers also treat other configurations\n // of code points as a group.\n var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n function skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n return pos\n }\n\n // Returns the value from the range [`from`; `to`] that satisfies\n // `pred` and is closest to `from`. Assumes that at least `to`\n // satisfies `pred`. Supports `from` being greater than `to`.\n function findFirst(pred, from, to) {\n // At any point we are certain `to` satisfies `pred`, don't know\n // whether `from` does.\n var dir = from > to ? -1 : 1;\n for (;;) {\n if (from == to) { return from }\n var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n if (mid == from) { return pred(mid) ? from : to }\n if (pred(mid)) { to = mid; }\n else { from = mid + dir; }\n }\n }\n\n // BIDI HELPERS\n\n function iterateBidiSections(order, from, to, f) {\n if (!order) { return f(from, to, \"ltr\", 0) }\n var found = false;\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n found = true;\n }\n }\n if (!found) { f(from, to, \"ltr\"); }\n }\n\n var bidiOther = null;\n function getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n if (cur.from < ch && cur.to > ch) { return i }\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") { found = i; }\n else { bidiOther = i; }\n }\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") { found = i; }\n else { bidiOther = i; }\n }\n }\n return found != null ? found : bidiOther\n }\n\n // Bidirectional ordering algorithm\n // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n // that this (partially) implements.\n\n // One-char codes used for character types:\n // L (L): Left-to-Right\n // R (R): Right-to-Left\n // r (AL): Right-to-Left Arabic\n // 1 (EN): European Number\n // + (ES): European Number Separator\n // % (ET): European Number Terminator\n // n (AN): Arabic Number\n // , (CS): Common Number Separator\n // m (NSM): Non-Spacing Mark\n // b (BN): Boundary Neutral\n // s (B): Paragraph Separator\n // t (S): Segment Separator\n // w (WS): Whitespace\n // N (ON): Other Neutrals\n\n // Returns null if characters are ordered as they appear\n // (left-to-right), or an array of sections ({from, to, level}\n // objects) in the order in which they occur visually.\n var bidiOrdering = (function() {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n // Character types for codepoints 0x600 to 0x6f9\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n function charType(code) {\n if (code <= 0xf7) { return lowTypes.charAt(code) }\n else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n else if (code == 0x200c) { return \"b\" }\n else { return \"L\" }\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from; this.to = to;\n }\n\n return function(str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n var len = str.length, types = [];\n for (var i = 0; i < len; ++i)\n { types.push(charType(str.charCodeAt(i))); }\n\n // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n if (type == \"m\") { types[i$1] = prev; }\n else { prev = type; }\n }\n\n // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n }\n\n // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n prev$1 = type$2;\n }\n\n // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n if (type$3 == \",\") { types[i$4] = \"N\"; }\n else if (type$3 == \"%\") {\n var end = (void 0);\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n for (var j = i$4; j < end; ++j) { types[j] = replace; }\n i$4 = end - 1;\n }\n }\n\n // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n else if (isStrong.test(type$4)) { cur$1 = type$4; }\n }\n\n // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = (void 0);\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n i$6 = end$1 - 1;\n }\n }\n\n // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n var order = [], m;\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7, at = order.length, isRTL = direction == \"rtl\" ? 1 : 0;\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }\n var nstart = j$2;\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n at += isRTL;\n pos = j$2;\n } else { ++j$2; }\n }\n if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n }\n }\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n }\n\n return direction == \"rtl\" ? order.reverse() : order\n }\n })();\n\n // Get the bidi ordering for the given line (and cache it). Returns\n // false for lines that are fully left-to-right, and an array of\n // BidiSpan objects otherwise.\n function getOrder(line, direction) {\n var order = line.order;\n if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n return order\n }\n\n // EVENT HANDLING\n\n // Lightweight event framework. on/off also work on DOM nodes,\n // registering native DOM handlers.\n\n var noHandlers = [];\n\n var on = function(emitter, type, f) {\n if (emitter.addEventListener) {\n emitter.addEventListener(type, f, false);\n } else if (emitter.attachEvent) {\n emitter.attachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers || (emitter._handlers = {});\n map[type] = (map[type] || noHandlers).concat(f);\n }\n };\n\n function getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers\n }\n\n function off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers, arr = map && map[type];\n if (arr) {\n var index = indexOf(arr, f);\n if (index > -1)\n { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n }\n }\n }\n\n function signal(emitter, type /*, values...*/) {\n var handlers = getHandlers(emitter, type);\n if (!handlers.length) { return }\n var args = Array.prototype.slice.call(arguments, 2);\n for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n }\n\n // The DOM events that CodeMirror handles can be overridden by\n // registering a (non-DOM) handler on the editor for the event name,\n // and preventDefault-ing the event in that handler.\n function signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\")\n { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore\n }\n\n function signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n if (!arr) { return }\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n { set.push(arr[i]); } }\n }\n\n function hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0\n }\n\n // Add on and off methods to a constructor's prototype, to make\n // registering events on such objects more convenient.\n function eventMixin(ctor) {\n ctor.prototype.on = function(type, f) {on(this, type, f);};\n ctor.prototype.off = function(type, f) {off(this, type, f);};\n }\n\n // Due to the fact that we still support jurassic IE versions, some\n // compatibility wrappers are needed.\n\n function e_preventDefault(e) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n }\n function e_stopPropagation(e) {\n if (e.stopPropagation) { e.stopPropagation(); }\n else { e.cancelBubble = true; }\n }\n function e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n }\n function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n function e_target(e) {return e.target || e.srcElement}\n function e_button(e) {\n var b = e.which;\n if (b == null) {\n if (e.button & 1) { b = 1; }\n else if (e.button & 2) { b = 3; }\n else if (e.button & 4) { b = 2; }\n }\n if (mac && e.ctrlKey && b == 1) { b = 3; }\n return b\n }\n\n // Detect drag-and-drop\n var dragAndDrop = function() {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) { return false }\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div\n }();\n\n var zwspSupported;\n function zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200b\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n if (measure.firstChild.offsetHeight != 0)\n { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n }\n var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node\n }\n\n // Feature-detect IE's crummy client rect reporting for bidi text\n var badBidiRects;\n function hasBadBidiRects(measure) {\n if (badBidiRects != null) { return badBidiRects }\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n return badBidiRects = (r1.right - r0.right < 3)\n }\n\n // See if \"\".split is the broken IE version, if so, provide an\n // alternative way to split lines.\n var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0, result = [], l = string.length;\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n if (nl == -1) { nl = string.length; }\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n return result\n } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n var hasSelection = window.getSelection ? function (te) {\n try { return te.selectionStart != te.selectionEnd }\n catch(e) { return false }\n } : function (te) {\n var range;\n try {range = te.ownerDocument.selection.createRange();}\n catch(e) {}\n if (!range || range.parentElement() != te) { return false }\n return range.compareEndPoints(\"StartToEnd\", range) != 0\n };\n\n var hasCopyEvent = (function () {\n var e = elt(\"div\");\n if (\"oncopy\" in e) { return true }\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\"\n })();\n\n var badZoomedRects = null;\n function hasBadZoomedRects(measure) {\n if (badZoomedRects != null) { return badZoomedRects }\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n }\n\n // Known modes, by name and by MIME\n var modes = {}, mimeModes = {};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n function defineMode(name, mode) {\n if (arguments.length > 2)\n { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n modes[name] = mode;\n }\n\n function defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n }\n\n // Given a MIME type, a {name, ...options} config object, or a name\n // string, return a mode config object.\n function resolveMode(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n if (typeof found == \"string\") { found = {name: found}; }\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\")\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\")\n }\n if (typeof spec == \"string\") { return {name: spec} }\n else { return spec || {name: \"null\"} }\n }\n\n // Given a mode spec (anything that resolveMode accepts), find and\n // initialize an actual mode object.\n function getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n if (!mfactory) { return getMode(options, \"text/plain\") }\n var modeObj = mfactory(options, spec);\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) { continue }\n if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n modeObj[prop] = exts[prop];\n }\n }\n modeObj.name = spec.name;\n if (spec.helperType) { modeObj.helperType = spec.helperType; }\n if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n return modeObj\n }\n\n // This can be used to attach properties to mode objects from\n // outside the actual mode definition.\n var modeExtensions = {};\n function extendMode(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n copyObj(properties, exts);\n }\n\n function copyState(mode, state) {\n if (state === true) { return state }\n if (mode.copyState) { return mode.copyState(state) }\n var nstate = {};\n for (var n in state) {\n var val = state[n];\n if (val instanceof Array) { val = val.concat([]); }\n nstate[n] = val;\n }\n return nstate\n }\n\n // Given a mode and a state (for that mode), find the inner mode and\n // state at the position that the state refers to.\n function innerMode(mode, state) {\n var info;\n while (mode.innerMode) {\n info = mode.innerMode(state);\n if (!info || info.mode == mode) { break }\n state = info.state;\n mode = info.mode;\n }\n return info || {mode: mode, state: state}\n }\n\n function startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true\n }\n\n // STRING STREAM\n\n // Fed to the mode parsers, provides helper functions to make\n // parsers more succinct.\n\n var StringStream = function(string, tabSize, lineOracle) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n this.lineOracle = lineOracle;\n };\n\n StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n StringStream.prototype.next = function () {\n if (this.pos < this.string.length)\n { return this.string.charAt(this.pos++) }\n };\n StringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n if (typeof match == \"string\") { ok = ch == match; }\n else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n if (ok) {++this.pos; return ch}\n };\n StringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n while (this.eat(match)){}\n return this.pos > start\n };\n StringStream.prototype.eatSpace = function () {\n var start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }\n return this.pos > start\n };\n StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n StringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {this.pos = found; return true}\n };\n StringStream.prototype.backUp = function (n) {this.pos -= n;};\n StringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) -\n (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) { this.pos += pattern.length; }\n return true\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0) { return null }\n if (match && consume !== false) { this.pos += match[0].length; }\n return match\n }\n };\n StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n StringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n try { return inner() }\n finally { this.lineStart -= n; }\n };\n StringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n)\n };\n StringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos)\n };\n\n // Find the line object corresponding to the given line number.\n function getLine(doc, n) {\n n -= doc.first;\n if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n var chunk = doc;\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i], sz = child.chunkSize();\n if (n < sz) { chunk = child; break }\n n -= sz;\n }\n }\n return chunk.lines[n]\n }\n\n // Get the part of a document between two positions, as an array of\n // strings.\n function getBetween(doc, start, end) {\n var out = [], n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n if (n == end.line) { text = text.slice(0, end.ch); }\n if (n == start.line) { text = text.slice(start.ch); }\n out.push(text);\n ++n;\n });\n return out\n }\n // Get the lines between from and to, as array of strings.\n function getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n return out\n }\n\n // Update the height of a line, propagating the height change\n // upwards to parent nodes.\n function updateLineHeight(line, height) {\n var diff = height - line.height;\n if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n }\n\n // Given a line object, find its line number by walking up through\n // its parent links.\n function lineNo(line) {\n if (line.parent == null) { return null }\n var cur = line.parent, no = indexOf(cur.lines, line);\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) { break }\n no += chunk.children[i].chunkSize();\n }\n }\n return no + cur.first\n }\n\n // Find the line at the given vertical position, using the height\n // information in the document tree.\n function lineAtHeight(chunk, h) {\n var n = chunk.first;\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1], ch = child.height;\n if (h < ch) { chunk = child; continue outer }\n h -= ch;\n n += child.chunkSize();\n }\n return n\n } while (!chunk.lines)\n var i = 0;\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i], lh = line.height;\n if (h < lh) { break }\n h -= lh;\n }\n return n + i\n }\n\n function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n function lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber))\n }\n\n // A Pos instance represents a position within the text.\n function Pos(line, ch, sticky) {\n if ( sticky === void 0 ) sticky = null;\n\n if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n }\n\n // Compare two positions, return 0 if they are the same, a negative\n // number when a is less, and a positive number otherwise.\n function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n function copyPos(x) {return Pos(x.line, x.ch)}\n function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n // Most of the external API clips given positions to make sure they\n // actually exist within the document.\n function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n function clipPos(doc, pos) {\n if (pos.line < doc.first) { return Pos(doc.first, 0) }\n var last = doc.first + doc.size - 1;\n if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n return clipToLen(pos, getLine(doc, pos.line).text.length)\n }\n function clipToLen(pos, linelen) {\n var ch = pos.ch;\n if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n else if (ch < 0) { return Pos(pos.line, 0) }\n else { return pos }\n }\n function clipPosArray(doc, array) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n return out\n }\n\n var SavedContext = function(state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n };\n\n var Context = function(doc, state, line, lookAhead) {\n this.state = state;\n this.doc = doc;\n this.line = line;\n this.maxLookAhead = lookAhead || 0;\n this.baseTokens = null;\n this.baseTokenPos = 1;\n };\n\n Context.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n return line\n };\n\n Context.prototype.baseToken = function (n) {\n if (!this.baseTokens) { return null }\n while (this.baseTokens[this.baseTokenPos] <= n)\n { this.baseTokenPos += 2; }\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n}\n };\n\n Context.prototype.nextLine = function () {\n this.line++;\n if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n };\n\n Context.fromSaved = function (doc, saved, line) {\n if (saved instanceof SavedContext)\n { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n else\n { return new Context(doc, copyState(doc.mode, saved), line) }\n };\n\n Context.prototype.save = function (copy) {\n var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n };\n\n\n // Compute a style array (an array starting with a mode generation\n // -- for invalidation -- followed by pairs of end positions and\n // style strings), which is used to highlight the tokens on the\n // line.\n function highlightLine(cm, line, context, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen], lineClasses = {};\n // Compute the base array of styles\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n lineClasses, forceToEnd);\n var state = context.state;\n\n // Run overlays, adjust style array.\n var loop = function ( o ) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o], i = 1, at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i;\n // Ensure there's a token end at the current position, and that i points at it\n while (at < end) {\n var i_end = st[i];\n if (i_end > end)\n { st.splice(i, 1, end, st[i+1], i_end); }\n i += 2;\n at = Math.min(end, i_end);\n }\n if (!style) { return }\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start+1];\n st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n\n for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n }\n\n function getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var context = getContextBefore(cm, lineNo(line));\n var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n var result = highlightLine(cm, line, context);\n if (resetState) { context.state = resetState; }\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n if (result.classes) { line.styleClasses = result.classes; }\n else if (line.styleClasses) { line.styleClasses = null; }\n if (updateFrontier === cm.doc.highlightFrontier)\n { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n }\n return line.styles\n }\n\n function getContextBefore(cm, n, precise) {\n var doc = cm.doc, display = cm.display;\n if (!doc.mode.startState) { return new Context(doc, true, n) }\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n if (precise) { doc.modeFrontier = context.line; }\n return context\n }\n\n // Lightweight form of highlight -- proceed over this line and\n // update state, but don't save a style array. Used for lines that\n // aren't currently visible.\n function processLine(cm, text, context, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize, context);\n stream.start = stream.pos = startAt || 0;\n if (text == \"\") { callBlankLine(mode, context.state); }\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n }\n\n function callBlankLine(mode, state) {\n if (mode.blankLine) { return mode.blankLine(state) }\n if (!mode.innerMode) { return }\n var inner = innerMode(mode, state);\n if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n }\n\n function readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) { inner[0] = innerMode(mode, state).mode; }\n var style = mode.token(stream, state);\n if (stream.pos > stream.start) { return style }\n }\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n }\n\n var Token = function(stream, type, state) {\n this.start = stream.start; this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n };\n\n // Utility for getTokenAt and getLineTokens\n function takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc, mode = doc.mode, style;\n pos = clipPos(doc, pos);\n var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n if (asArray) { tokens = []; }\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n }\n return asArray ? tokens : new Token(stream, style, context.state)\n }\n\n function extractLineClasses(type, output) {\n if (type) { for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n if (!lineClass) { break }\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n if (output[prop] == null)\n { output[prop] = lineClass[2]; }\n else if (!(new RegExp(\"(?:^|\\\\s)\" + lineClass[2] + \"(?:$|\\\\s)\")).test(output[prop]))\n { output[prop] += \" \" + lineClass[2]; }\n } }\n return type\n }\n\n // Run the given mode's parser over a line, calling f for each token.\n function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n var curStart = 0, curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context), style;\n var inner = cm.options.addModeClass && [null];\n if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n if (inner) {\n var mName = inner[0].name;\n if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n }\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n curStyle = style;\n }\n stream.start = stream.pos;\n }\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444\n // characters, and returns inaccurate measurements in nodes\n // starting around 5000 chars.\n var pos = Math.min(stream.pos, curStart + 5000);\n f(pos, curStyle);\n curStart = pos;\n }\n }\n\n // Finds the line to start with when starting a parse. Tries to\n // find a line with a stateAfter, so that it can start with a\n // valid state. If that fails, it returns the line with the\n // smallest indentation, which tends to need the least context to\n // parse correctly.\n function findStartLine(cm, n, precise) {\n var minindent, minline, doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) { return doc.first }\n var line = getLine(doc, search - 1), after = line.stateAfter;\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n { return search }\n var indented = countColumn(line.text, null, cm.options.tabSize);\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n return minline\n }\n\n function retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n if (doc.highlightFrontier < n - 10) { return }\n var start = doc.first;\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter;\n // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break\n }\n }\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n }\n\n // Optimize some code when these features are not used.\n var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n function seeReadOnlySpans() {\n sawReadOnlySpans = true;\n }\n\n function seeCollapsedSpans() {\n sawCollapsedSpans = true;\n }\n\n // TEXTMARKER SPANS\n\n function MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from; this.to = to;\n }\n\n // Search an array of spans for a span matching the given marker.\n function getMarkedSpanFor(spans, marker) {\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.marker == marker) { return span }\n } }\n }\n\n // Remove a span from an array, returning undefined if no spans are\n // left (we don't store arrays for lines without spans).\n function removeMarkedSpan(spans, span) {\n var r;\n for (var i = 0; i < spans.length; ++i)\n { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n return r\n }\n\n // Add a span to a line.\n function addMarkedSpan(line, span, op) {\n var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet));\n if (inThisOp && line.markedSpans && inThisOp.has(line.markedSpans)) {\n line.markedSpans.push(span);\n } else {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n if (inThisOp) { inThisOp.add(line.markedSpans); }\n }\n span.marker.attachLine(line);\n }\n\n // Used for the algorithm that adjusts markers for a change in the\n // document. These functions cut an array of spans at a given\n // character position, returning an array of remaining chunks (or\n // undefined if nothing remains).\n function markedSpansBefore(old, startCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n } }\n return nw\n }\n function markedSpansAfter(old, endCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n span.to == null ? null : span.to - endCh));\n }\n } }\n return nw\n }\n\n // Given a change object, compute the new set of marker spans that\n // cover the line in which the change took place. Removes spans\n // entirely within the change, reconnects spans belonging to the\n // same marker that appear on both sides of the change, and cuts off\n // spans partially within the change. Returns an array of span\n // arrays with one element for each line in (after) the change.\n function stretchSpansOverChange(doc, change) {\n if (change.full) { return null }\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n if (!oldFirst && !oldLast) { return null }\n\n var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n // Get the spans that 'stick out' on both sides\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n // Next, merge those two ends\n var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n if (!found) { span.to = startCh; }\n else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n }\n }\n }\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n if (span$1.to != null) { span$1.to += offset; }\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n if (!found$1) {\n span$1.from = offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n } else {\n span$1.from += offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n }\n }\n // Make sure we didn't create any zero-length spans\n if (first) { first = clearEmptySpans(first); }\n if (last && last != first) { last = clearEmptySpans(last); }\n\n var newMarkers = [first];\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2, gapMarkers;\n if (gap > 0 && first)\n { for (var i$2 = 0; i$2 < first.length; ++i$2)\n { if (first[i$2].to == null)\n { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n for (var i$3 = 0; i$3 < gap; ++i$3)\n { newMarkers.push(gapMarkers); }\n newMarkers.push(last);\n }\n return newMarkers\n }\n\n // Remove spans that are empty and don't have a clearWhenEmpty\n // option of false.\n function clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n { spans.splice(i--, 1); }\n }\n if (!spans.length) { return null }\n return spans\n }\n\n // Used to 'clip' out readOnly ranges when making a change.\n function removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n { (markers || (markers = [])).push(mark); }\n } }\n });\n if (!markers) { return null }\n var parts = [{from: from, to: to}];\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i], m = mk.find(0);\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n { newParts.push({from: p.from, to: m.from}); }\n if (dto > 0 || !mk.inclusiveRight && !dto)\n { newParts.push({from: m.to, to: p.to}); }\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n return parts\n }\n\n // Connect or disconnect spans from a line.\n function detachMarkedSpans(line) {\n var spans = line.markedSpans;\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.detachLine(line); }\n line.markedSpans = null;\n }\n function attachMarkedSpans(line, spans) {\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.attachLine(line); }\n line.markedSpans = spans;\n }\n\n // Helpers used when computing which overlapping collapsed span\n // counts as the larger one.\n function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n // Returns a number indicating which of two overlapping collapsed\n // spans is larger (and thus includes the other). Falls back to\n // comparing ids when the spans cover exactly the same range.\n function compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n if (lenDiff != 0) { return lenDiff }\n var aPos = a.find(), bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n if (fromCmp) { return -fromCmp }\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n if (toCmp) { return toCmp }\n return b.id - a.id\n }\n\n // Find out whether a line ends or starts in a collapsed span. If\n // so, return the marker for that span.\n function collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n { found = sp.marker; }\n } }\n return found\n }\n function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n function collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n } }\n return found\n }\n\n // Test whether there exists a collapsed span that partially\n // overlaps (covers the start or end, but not both) of a new span.\n // Such overlap is not allowed.\n function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n var line = getLine(doc, lineNo);\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n { return true }\n } }\n }\n\n // A visual line is a line as drawn on the screen. Folding, for\n // example, can cause multiple logical lines to appear on the same\n // visual line. This finds the start of the visual line that the\n // given line is part of (usually that is the line itself).\n function visualLine(line) {\n var merged;\n while (merged = collapsedSpanAtStart(line))\n { line = merged.find(-1, true).line; }\n return line\n }\n\n function visualLineEnd(line) {\n var merged;\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return line\n }\n\n // Returns an array of logical lines that continue the visual line\n // started by the argument, or undefined if there are no such lines.\n function visualLineContinued(line) {\n var merged, lines;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line\n ;(lines || (lines = [])).push(line);\n }\n return lines\n }\n\n // Get the line number of the start of the visual line that the\n // given line number is part of.\n function visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN), vis = visualLine(line);\n if (line == vis) { return lineN }\n return lineNo(vis)\n }\n\n // Get the line number of the start of the next visual line after\n // the given line.\n function visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) { return lineN }\n var line = getLine(doc, lineN), merged;\n if (!lineIsHidden(doc, line)) { return lineN }\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return lineNo(line) + 1\n }\n\n // Compute whether a line is hidden. Lines count as hidden when they\n // are part of a visual line that starts with another line, or when\n // they are entirely covered by collapsed, non-widget span.\n function lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n if (sp.from == null) { return true }\n if (sp.marker.widgetNode) { continue }\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n { return true }\n } }\n }\n function lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n }\n if (span.marker.inclusiveRight && span.to == line.text.length)\n { return true }\n for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n (sp.to == null || sp.to != span.from) &&\n (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n lineIsHiddenInner(doc, line, sp)) { return true }\n }\n }\n\n // Find the height above the given line.\n function heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n\n var h = 0, chunk = lineObj.parent;\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n if (line == lineObj) { break }\n else { h += line.height; }\n }\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n if (cur == chunk) { break }\n else { h += cur.height; }\n }\n }\n return h\n }\n\n // Compute the character length of a line, taking into account\n // collapsed ranges (see markText) that might hide parts, and join\n // other lines onto it.\n function lineLength(line) {\n if (line.height == 0) { return 0 }\n var len = line.text.length, merged, cur = line;\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n cur = line;\n while (merged = collapsedSpanAtEnd(cur)) {\n var found$1 = merged.find(0, true);\n len -= cur.text.length - found$1.from.ch;\n cur = found$1.to.line;\n len += cur.text.length - found$1.to.ch;\n }\n return len\n }\n\n // Find the longest line in the document.\n function findMaxLine(cm) {\n var d = cm.display, doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n }\n\n // LINE DATA STRUCTURE\n\n // Line objects. These hold state related to a line, including\n // highlighting info (the styles array).\n var Line = function(text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n };\n\n Line.prototype.lineNo = function () { return lineNo(this) };\n eventMixin(Line);\n\n // Change the content (text, markers) of a line. Automatically\n // invalidates cached information and tries to re-estimate the\n // line's height.\n function updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n if (line.order != null) { line.order = null; }\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n }\n\n // Detach a line from the document tree and its markers.\n function cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n }\n\n // Convert a style as returned by a mode (either null, or a string\n // containing one or more styles) to a CSS style. This is cached,\n // and also looks for line-wide styles.\n var styleToClassCache = {}, styleToClassCacheWithMode = {};\n function interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) { return null }\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] ||\n (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n }\n\n // Render the DOM representation of the text of a line. Also builds\n // up a 'line map', which points at the DOM nodes that represent\n // specific stretches of text, and is used by the measuring code.\n // The returned object contains the DOM node, this map, and\n // information about line-wide styles that were set by the mode.\n function buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n col: 0, pos: 0, cm: cm,\n trailingSpace: false,\n splitSpaces: cm.getOption(\"lineWrapping\")};\n lineView.measure = {};\n\n // Iterate over the logical lines that make up this visual line.\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n builder.pos = 0;\n builder.addToken = buildToken;\n // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n if (line.styleClasses) {\n if (line.styleClasses.bgClass)\n { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n if (line.styleClasses.textClass)\n { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n }\n\n // Ensure at least a single node is present, for measuring.\n if (builder.map.length == 0)\n { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n // Store the map and a cache object for the current logical line\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n }\n\n // See issue #2901\n if (webkit) {\n var last = builder.content.lastChild;\n if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n { builder.content.className = \"cm-tab-wrap-hack\"; }\n }\n\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n if (builder.pre.className)\n { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n return builder\n }\n\n function defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token\n }\n\n // Build up the DOM representation for a single token, and add it to\n // the line map. Takes care to render special characters separately.\n function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n if (!text) { return }\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars, mustWrap = false;\n var content;\n if (!special.test(text)) {\n builder.col += text.length;\n content = document.createTextNode(displayText);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n if (ie && ie_version < 9) { mustWrap = true; }\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n else { content.appendChild(txt); }\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n if (!m) { break }\n pos += skipped + 1;\n var txt$1 = (void 0);\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n else { content.appendChild(txt$1); }\n builder.col += 1;\n }\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n if (style || startStyle || endStyle || mustWrap || css || attributes) {\n var fullStyle = style || \"\";\n if (startStyle) { fullStyle += startStyle; }\n if (endStyle) { fullStyle += endStyle; }\n var token = elt(\"span\", [content], fullStyle, css);\n if (attributes) {\n for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n { token.setAttribute(attr, attributes[attr]); } }\n }\n return builder.content.appendChild(token)\n }\n builder.content.appendChild(content);\n }\n\n // Change some spaces to NBSP to prevent the browser from collapsing\n // trailing spaces at the end of a line when rendering text (issue #1362).\n function splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) { return text }\n var spaceBefore = trailingBefore, result = \"\";\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n { ch = \"\\u00a0\"; }\n result += ch;\n spaceBefore = ch == \" \";\n }\n return result\n }\n\n // Work around nonsense dimensions being reported for stretches of\n // right-to-left text.\n function buildTokenBadBidi(inner, order) {\n return function (builder, text, style, startStyle, endStyle, css, attributes) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos, end = start + text.length;\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = (void 0);\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n if (part.to > start && part.from <= start) { break }\n }\n if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n }\n }\n\n function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget)\n { widget = builder.content.appendChild(document.createElement(\"span\")); }\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n builder.pos += size;\n builder.trailingSpace = false;\n }\n\n // Outputs a number of spans to make up a line, taking highlighting\n // and marked text into account.\n function insertLineContent(line, builder, styles) {\n var spans = line.markedSpans, allText = line.text, at = 0;\n if (!spans) {\n for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n return\n }\n\n var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n for (;;) {\n if (nextChange == pos) { // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n attributes = null;\n collapsed = null; nextChange = Infinity;\n var foundBookmarks = [], endStyles = (void 0);\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j], m = sp.marker;\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n foundBookmarks.push(m);\n } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n nextChange = sp.to;\n spanEndStyle = \"\";\n }\n if (m.className) { spanStyle += \" \" + m.className; }\n if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n // support for the old title property\n // https://github.com/codemirror/CodeMirror/pull/5673\n if (m.title) { (attributes || (attributes = {})).title = m.title; }\n if (m.attributes) {\n for (var attr in m.attributes)\n { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n }\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n { collapsed = sp; }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n collapsed.marker, collapsed.from == null);\n if (collapsed.to == null) { return }\n if (collapsed.to == pos) { collapsed = false; }\n }\n }\n if (pos >= len) { break }\n\n var upto = Math.min(len, nextChange);\n while (true) {\n if (text) {\n var end = pos + text.length;\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n }\n if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n pos = end;\n spanStartStyle = \"\";\n }\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n }\n\n\n // These objects are used to represent the visible (currently drawn)\n // part of the document. A LineView may correspond to multiple\n // logical lines, if those are connected by collapsed ranges.\n function LineView(doc, line, lineN) {\n // The starting line\n this.line = line;\n // Continuing lines, if any\n this.rest = visualLineContinued(line);\n // Number of logical lines in this visual line\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n }\n\n // Create a range of LineView objects for the given lines.\n function buildViewArray(cm, from, to) {\n var array = [], nextPos;\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n return array\n }\n\n var operationGroup = null;\n\n function pushOperation(op) {\n if (operationGroup) {\n operationGroup.ops.push(op);\n } else {\n op.ownsGroup = operationGroup = {\n ops: [op],\n delayedCallbacks: []\n };\n }\n }\n\n function fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks, i = 0;\n do {\n for (; i < callbacks.length; i++)\n { callbacks[i].call(null); }\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n if (op.cursorActivityHandlers)\n { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n }\n } while (i < callbacks.length)\n }\n\n function finishOperation(op, endCb) {\n var group = op.ownsGroup;\n if (!group) { return }\n\n try { fireCallbacksForOps(group); }\n finally {\n operationGroup = null;\n endCb(group);\n }\n }\n\n var orphanDelayedCallbacks = null;\n\n // Often, we want to signal events at a point where we are in the\n // middle of some work, but don't want the handler to start calling\n // other methods on the editor, which might be in an inconsistent\n // state or simply not expect any other events to happen.\n // signalLater looks whether there are any handlers, and schedules\n // them to be executed when the last operation ends, or, if no\n // operation is active, when a timeout fires.\n function signalLater(emitter, type /*, values...*/) {\n var arr = getHandlers(emitter, type);\n if (!arr.length) { return }\n var args = Array.prototype.slice.call(arguments, 2), list;\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n var loop = function ( i ) {\n list.push(function () { return arr[i].apply(null, args); });\n };\n\n for (var i = 0; i < arr.length; ++i)\n loop( i );\n }\n\n function fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n }\n\n // When an aspect of a line changes, a string is added to\n // lineView.changes. This updates the relevant part of the line's\n // DOM structure.\n function updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n if (type == \"text\") { updateLineText(cm, lineView); }\n else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n else if (type == \"class\") { updateLineClasses(cm, lineView); }\n else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n }\n lineView.changes = null;\n }\n\n // Lines with gutter elements, widgets or a background class need to\n // be wrapped, and have the extra elements added to the wrapper div\n function ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n if (lineView.text.parentNode)\n { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n lineView.node.appendChild(lineView.text);\n if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n }\n return lineView.node\n }\n\n function updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n if (cls) { cls += \" CodeMirror-linebackground\"; }\n if (lineView.background) {\n if (cls) { lineView.background.className = cls; }\n else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n }\n\n // Wrapper around buildLineContent which will reuse the structure\n // in display.externalMeasured when possible.\n function getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built\n }\n return buildLineContent(cm, lineView)\n }\n\n // Redraw the line's text. Interacts with the background and text\n // classes because the mode may output tokens that influence these\n // classes.\n function updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n if (lineView.text == lineView.node) { lineView.node = built.pre; }\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(cm, lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n }\n\n function updateLineClasses(cm, lineView) {\n updateLineBackground(cm, lineView);\n if (lineView.line.wrapClass)\n { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n else if (lineView.node != lineView.text)\n { lineView.node.className = \"\"; }\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n }\n\n function updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(lineView.gutterBackground);\n wrap.insertBefore(lineView.gutterBackground, lineView.text);\n }\n var markers = lineView.line.gutterMarkers;\n if (cm.options.lineNumbers || markers) {\n var wrap$1 = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n gutterWrap.setAttribute(\"aria-hidden\", \"true\");\n cm.display.input.setUneditable(gutterWrap);\n wrap$1.insertBefore(gutterWrap, lineView.text);\n if (lineView.line.gutterClass)\n { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n { lineView.lineNumber = gutterWrap.appendChild(\n elt(\"div\", lineNumberFor(cm.options, lineN),\n \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];\n if (found)\n { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n } }\n }\n }\n\n function updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) { lineView.alignable = null; }\n var isWidget = classTest(\"CodeMirror-linewidget\");\n for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n next = node.nextSibling;\n if (isWidget.test(node.className)) { lineView.node.removeChild(node); }\n }\n insertLineWidgets(cm, lineView, dims);\n }\n\n // Build a line's DOM representation from scratch\n function buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n if (built.bgClass) { lineView.bgClass = built.bgClass; }\n if (built.textClass) { lineView.textClass = built.textClass; }\n\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node\n }\n\n // A lineView may contain multiple logical lines (when merged by\n // collapsed spans). The widgets for all of them need to be drawn.\n function insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n }\n\n function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) { return }\n var wrap = ensureLineWrapped(lineView);\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n if (allowAbove && widget.above)\n { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n else\n { wrap.appendChild(node); }\n signalLater(widget, \"redraw\");\n }\n }\n\n function positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n node.style.width = width + \"px\";\n }\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n }\n }\n\n function widgetHeight(widget) {\n if (widget.height != null) { return widget.height }\n var cm = widget.doc.cm;\n if (!cm) { return 0 }\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n if (widget.coverGutter)\n { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n if (widget.noHScroll)\n { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n return widget.height = widget.node.parentNode.offsetHeight\n }\n\n // Return true when the given mouse event happened in a widget\n function eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n (n.parentNode == display.sizer && n != display.mover))\n { return true }\n }\n }\n\n // POSITION MEASUREMENT\n\n function paddingTop(display) {return display.lineSpace.offsetTop}\n function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n function paddingH(display) {\n if (display.cachedPaddingH) { return display.cachedPaddingH }\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n return data\n }\n\n function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n function displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n }\n function displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n }\n\n // Ensure the lineView.wrapping.heights array is populated. This is\n // an array of bottom offsets for the lines that make up a drawn\n // line. When lineWrapping is on, there might be more than one\n // height.\n function ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i], next = rects[i + 1];\n if (Math.abs(cur.bottom - next.bottom) > 2)\n { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n }\n }\n heights.push(rect.bottom - rect.top);\n }\n }\n\n // Find a line map (mapping character offsets to text nodes) and a\n // measurement cache for the given line number. (A line view might\n // contain multiple lines when collapsed ranges are present.)\n function mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line)\n { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n if (lineView.rest) {\n for (var i = 0; i < lineView.rest.length; i++)\n { if (lineView.rest[i] == line)\n { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n { if (lineNo(lineView.rest[i$1]) > lineN)\n { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n }\n }\n\n // Render a line into the hidden node display.externalMeasured. Used\n // when measurement is needed for a line that's not in the viewport.\n function updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view\n }\n\n // Get a {top, bottom, left, right} box (in line-local coordinates)\n // for a given character.\n function measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n }\n\n // Find a line view that corresponds to the given line number.\n function findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n { return cm.display.view[findViewIndex(cm, lineN)] }\n var ext = cm.display.externalMeasured;\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n { return ext }\n }\n\n // Measurement can be split in two steps, the set-up work that\n // applies to the whole line, and the measurement of the actual\n // character. Functions like coordsChar, that need to do a lot of\n // measurements in a row, can thus ensure that the set-up work is\n // only done once.\n function prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n if (view && !view.text) {\n view = null;\n } else if (view && view.changes) {\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n cm.curOp.forceUpdate = true;\n }\n if (!view)\n { view = updateExternalMeasurement(cm, line); }\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line, view: view, rect: null,\n map: info.map, cache: info.cache, before: info.before,\n hasHeights: false\n }\n }\n\n // Given a prepared measurement object, measures the position of an\n // actual character (or fetches it from the cache).\n function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) { ch = -1; }\n var key = ch + (bias || \"\"), found;\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect)\n { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n found = measureCharInner(cm, prepared, ch, bias);\n if (!found.bogus) { prepared.cache[key] = found; }\n }\n return {left: found.left, right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom}\n }\n\n var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n function nodeAndOffsetInLineMap(map, ch, bias) {\n var node, start, end, collapse, mStart, mEnd;\n // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n for (var i = 0; i < map.length; i += 3) {\n mStart = map[i];\n mEnd = map[i + 1];\n if (ch < mStart) {\n start = 0; end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n if (ch >= mEnd) { collapse = \"right\"; }\n }\n if (start != null) {\n node = map[i + 2];\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n { collapse = bias; }\n if (bias == \"left\" && start == 0)\n { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n node = map[(i -= 3) + 2];\n collapse = \"left\";\n } }\n if (bias == \"right\" && start == mEnd - mStart)\n { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n node = map[(i += 3) + 2];\n collapse = \"right\";\n } }\n break\n }\n }\n return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n }\n\n function getUsefulRect(rects, bias) {\n var rect = nullRect;\n if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) { break }\n } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) { break }\n } }\n return rect\n }\n\n function measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n var rect;\n if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n { rect = node.parentNode.getBoundingClientRect(); }\n else\n { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n if (rect.left || rect.right || start == 0) { break }\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n } else { // If it is a widget, simply get the box for the whole widget.\n if (start > 0) { collapse = bias = \"right\"; }\n var rects;\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n else\n { rect = node.getBoundingClientRect(); }\n }\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n if (rSpan)\n { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n else\n { rect = nullRect; }\n }\n\n var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n for (; i < heights.length - 1; i++)\n { if (mid < heights[i]) { break } }\n var top = i ? heights[i - 1] : 0, bot = heights[i];\n var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top, bottom: bot};\n if (!rect.left && !rect.right) { result.bogus = true; }\n if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n return result\n }\n\n // Work around problem with bounding client rects on ranges being\n // returned incorrectly when zoomed on IE10 and below.\n function maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null ||\n screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n { return rect }\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {left: rect.left * scaleX, right: rect.right * scaleX,\n top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n }\n\n function clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { lineView.measure.caches[i] = {}; } }\n }\n }\n\n function clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n for (var i = 0; i < cm.display.view.length; i++)\n { clearLineMeasurementCacheFor(cm.display.view[i]); }\n }\n\n function clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n cm.display.lineNumChars = null;\n }\n\n function pageScrollX(doc) {\n // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n // which causes page_Offset and bounding client rects to use\n // different reference viewports and invalidate our calculations.\n if (chrome && android) { return -(doc.body.getBoundingClientRect().left - parseInt(getComputedStyle(doc.body).marginLeft)) }\n return doc.defaultView.pageXOffset || (doc.documentElement || doc.body).scrollLeft\n }\n function pageScrollY(doc) {\n if (chrome && android) { return -(doc.body.getBoundingClientRect().top - parseInt(getComputedStyle(doc.body).marginTop)) }\n return doc.defaultView.pageYOffset || (doc.documentElement || doc.body).scrollTop\n }\n\n function widgetTopHeight(lineObj) {\n var ref = visualLine(lineObj);\n var widgets = ref.widgets;\n var height = 0;\n if (widgets) { for (var i = 0; i < widgets.length; ++i) { if (widgets[i].above)\n { height += widgetHeight(widgets[i]); } } }\n return height\n }\n\n // Converts a {top, bottom, left, right} box from line-local\n // coordinates into another coordinate system. Context may be one of\n // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n // or \"page\".\n function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height; rect.bottom += height;\n }\n if (context == \"line\") { return rect }\n if (!context) { context = \"local\"; }\n var yOff = heightAtLine(lineObj);\n if (context == \"local\") { yOff += paddingTop(cm.display); }\n else { yOff -= cm.display.viewOffset; }\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY(doc(cm)));\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX(doc(cm)));\n rect.left += xOff; rect.right += xOff;\n }\n rect.top += yOff; rect.bottom += yOff;\n return rect\n }\n\n // Coverts a box from \"div\" coords to another coordinate system.\n // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n function fromCoordSystem(cm, coords, context) {\n if (context == \"div\") { return coords }\n var left = coords.left, top = coords.top;\n // First move into \"page\" coordinate system\n if (context == \"page\") {\n left -= pageScrollX(doc(cm));\n top -= pageScrollY(doc(cm));\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n }\n\n function charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n }\n\n // Returns a box for a given cursor position, which may have an\n // 'other' property containing the position of the secondary cursor\n // on a bidi boundary.\n // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n // and after `char - 1` in writing order of `char - 1`\n // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n // and before `char` in writing order of `char`\n // Examples (upper-case letters are RTL, lower-case are LTR):\n // Pos(0, 1, ...)\n // before after\n // ab a|b a|b\n // aB a|B aB|\n // Ab |Ab A|b\n // AB B|A B|A\n // Every position after the last character on a line is considered to stick\n // to the last character on the line.\n function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n if (right) { m.left = m.right; } else { m.right = m.left; }\n return intoCoordSystem(cm, lineObj, m, context)\n }\n var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n if (ch >= lineObj.text.length) {\n ch = lineObj.text.length;\n sticky = \"before\";\n } else if (ch <= 0) {\n ch = 0;\n sticky = \"after\";\n }\n if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n function getBidi(ch, partPos, invert) {\n var part = order[partPos], right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert)\n }\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n return val\n }\n\n // Used to cheaply estimate the coordinates for a position. Used for\n // intermediate scroll updates.\n function estimateCoords(cm, pos) {\n var left = 0;\n pos = clipPos(cm.doc, pos);\n if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n var lineObj = getLine(cm.doc, pos.line);\n var top = heightAtLine(lineObj) + paddingTop(cm.display);\n return {left: left, right: left, top: top, bottom: top + lineObj.height}\n }\n\n // Positions returned by coordsChar contain some extra information.\n // xRel is the relative x position of the input coordinates compared\n // to the found position (so xRel > 0 means the coordinates are to\n // the right of the character position, for example). When outside\n // is true, that means the coordinates lie outside the line's\n // vertical range.\n function PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n if (outside) { pos.outside = outside; }\n return pos\n }\n\n // Compute the character position closest to the given coordinates.\n // Input must be lineSpace-local (\"div\" coordinate system).\n function coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }\n var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n if (lineN > last)\n { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }\n if (x < 0) { x = 0; }\n\n var lineObj = getLine(doc, lineN);\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n if (!collapsed) { return found }\n var rangeEnd = collapsed.find(1);\n if (rangeEnd.line == lineN) { return rangeEnd }\n lineObj = getLine(doc, lineN = rangeEnd.line);\n }\n }\n\n function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n return {begin: begin, end: end}\n }\n\n function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n }\n\n // Returns true if the given side of a box is after the given\n // coordinates, in top-to-bottom, left-to-right order.\n function boxIsAfter(box, x, y, left) {\n return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n }\n\n function coordsCharInner(cm, lineObj, lineNo, x, y) {\n // Move y into line-local coordinate space\n y -= heightAtLine(lineObj);\n var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n var widgetHeight = widgetTopHeight(lineObj);\n var begin = 0, end = lineObj.text.length, ltr = true;\n\n var order = getOrder(lineObj, cm.doc.direction);\n // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n (cm, lineObj, lineNo, preparedMeasure, order, x, y);\n ltr = part.level != 1;\n // The awkward -1 offsets are needed because findFirst (called\n // on these below) will treat its first bound as inclusive,\n // second as exclusive, but we want to actually address the\n // characters in the part's range\n begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n }\n\n // A binary search to find the first character whose bounding box\n // starts after the coordinates. If we run across any whose box wrap\n // the coordinates, store that.\n var chAround = null, boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight; box.bottom += widgetHeight;\n if (!boxIsAfter(box, x, y, false)) { return false }\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n return true\n }, begin, end);\n\n var baseX, sticky, outside = false;\n // If a box around the coordinates was found, use that\n if (boxAround) {\n // Distinguish coordinates nearer to the left or right side of the box\n var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) { ch++; }\n // To determine which side to associate with, get the box to the\n // left of the character and compare it's vertical position to the\n // coordinates\n sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?\n \"after\" : \"before\";\n // Now get accurate coordinates for this place, in order to get a\n // base X position\n var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n baseX = coords.left;\n outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n }\n\n ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)\n }\n\n function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i], ltr = part.level != 1;\n return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n \"line\", lineObj, preparedMeasure), x, y, true)\n }, 0, order.length - 1);\n var part = order[index];\n // If this isn't the first part, the part's start is also after\n // the coordinates, and the coordinates aren't on the same line as\n // that start, move one part back.\n if (index > 0) {\n var ltr = part.level != 1;\n var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n \"line\", lineObj, preparedMeasure);\n if (boxIsAfter(start, x, y, true) && start.top > y)\n { part = order[index - 1]; }\n }\n return part\n }\n\n function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n // In a wrapped line, rtl text on wrapping boundaries can do things\n // that don't correspond to the ordering in our `order` array at\n // all, so a binary search doesn't work, and we want to return a\n // part that only spans one line so that the binary search in\n // coordsCharInner is safe. As such, we first find the extent of the\n // wrapped line, and then do a flat search in which we discard any\n // spans that aren't on the line.\n var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n var begin = ref.begin;\n var end = ref.end;\n if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n var part = null, closestDist = null;\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n if (p.from >= end || p.to <= begin) { continue }\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n if (!part) { part = order[order.length - 1]; }\n // Clip the part to the wrapped line.\n if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n return part\n }\n\n var measureText;\n // Compute the default text height.\n function textHeight(display) {\n if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n if (measureText == null) {\n measureText = elt(\"pre\", null, \"CodeMirror-line-like\");\n // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n if (height > 3) { display.cachedTextHeight = height; }\n removeChildren(display.measure);\n return height || 1\n }\n\n // Compute the default character width.\n function charWidth(display) {\n if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n if (width > 2) { display.cachedCharWidth = width; }\n return width || 10\n }\n\n // Do a bulk-read of the DOM positions and sizes needed to draw the\n // view, so that we don't interleave reading and writing to the DOM.\n function getDimensions(cm) {\n var d = cm.display, left = {}, width = {};\n var gutterLeft = d.gutters.clientLeft;\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n var id = cm.display.gutterSpecs[i].className;\n left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[id] = n.clientWidth;\n }\n return {fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth}\n }\n\n // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n // but using getBoundingClientRect to get a sub-pixel-accurate\n // result.\n function compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n }\n\n // Returns a function that estimates the height of a line, to use as\n // first approximation until the line becomes visible (and is thus\n // properly measurable).\n function estimateHeight(cm) {\n var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) { return 0 }\n\n var widgetsHeight = 0;\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n } }\n\n if (wrapping)\n { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n else\n { return widgetsHeight + th }\n }\n }\n\n function estimateLineHeights(cm) {\n var doc = cm.doc, est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n });\n }\n\n // Given a mouse event, find the corresponding position. If liberal\n // is false, it checks whether a gutter or scrollbar was clicked,\n // and returns null if it was. forRect is used by rectangular\n // selections, and tries to estimate a character position even for\n // coordinates beyond the right of the text.\n function posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n var x, y, space = display.lineSpace.getBoundingClientRect();\n // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n try { x = e.clientX - space.left; y = e.clientY - space.top; }\n catch (e$1) { return null }\n var coords = coordsChar(cm, x, y), line;\n if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n return coords\n }\n\n // Find the view element corresponding to a given line. Return null\n // when the line isn't visible.\n function findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) { return null }\n n -= cm.display.viewFrom;\n if (n < 0) { return null }\n var view = cm.display.view;\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n if (n < 0) { return i }\n }\n }\n\n // Updates the display.view data structure for a given change to the\n // document. From and to are in pre-change coordinates. Lendiff is\n // the amount of lines added or subtracted by the change. This is\n // used for changes that span multiple lines, or change the way\n // lines are divided into visual lines. regLineChange (below)\n // registers single-line changes.\n function regChange(cm, from, to, lendiff) {\n if (from == null) { from = cm.doc.first; }\n if (to == null) { to = cm.doc.first + cm.doc.size; }\n if (!lendiff) { lendiff = 0; }\n\n var display = cm.display;\n if (lendiff && to < display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers > from))\n { display.updateLineNumbers = from; }\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) { // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n { resetView(cm); }\n } else if (to <= display.viewFrom) { // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) { // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) { // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else { // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index)\n .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n .concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\n if (ext) {\n if (to < ext.lineN)\n { ext.lineN += lendiff; }\n else if (from < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n }\n }\n\n // Register a change to a single line. Type must be one of \"text\",\n // \"gutter\", \"class\", \"widget\"\n function regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display, ext = cm.display.externalMeasured;\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n\n if (line < display.viewFrom || line >= display.viewTo) { return }\n var lineView = display.view[findViewIndex(cm, line)];\n if (lineView.node == null) { return }\n var arr = lineView.changes || (lineView.changes = []);\n if (indexOf(arr, type) == -1) { arr.push(type); }\n }\n\n // Clear the view.\n function resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n }\n\n function viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n { return {index: index, lineN: newN} }\n var n = cm.display.viewFrom;\n for (var i = 0; i < index; i++)\n { n += view[i].size; }\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) { return null }\n diff = (n + view[index].size) - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n oldN += diff; newN += diff;\n }\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n return {index: index, lineN: newN}\n }\n\n // Force the view to cover a given range, adding empty view element\n // or clipping off existing ones as needed.\n function adjustView(cm, from, to) {\n var display = cm.display, view = display.view;\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from)\n { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n else if (display.viewFrom < from)\n { display.view = display.view.slice(findViewIndex(cm, from)); }\n display.viewFrom = from;\n if (display.viewTo < to)\n { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n else if (display.viewTo > to)\n { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n }\n display.viewTo = to;\n }\n\n // Count the number of lines in the view whose DOM representation is\n // out of date (or nonexistent).\n function countDirtyView(cm) {\n var view = cm.display.view, dirty = 0;\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n }\n return dirty\n }\n\n function updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n }\n\n function prepareSelection(cm, primary) {\n if ( primary === void 0 ) primary = true;\n\n var doc = cm.doc, result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n\n var customCursor = cm.options.$customCursor;\n if (customCursor) { primary = true; }\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) { continue }\n var range = doc.sel.ranges[i];\n if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }\n var collapsed = range.empty();\n if (customCursor) {\n var head = customCursor(cm, range);\n if (head) { drawSelectionCursor(cm, head, curFragment); }\n } else if (collapsed || cm.options.showCursorWhenSelecting) {\n drawSelectionCursor(cm, range.head, curFragment);\n }\n if (!collapsed)\n { drawSelectionRange(cm, range, selFragment); }\n }\n return result\n }\n\n // Draws a cursor for the given range\n function drawSelectionCursor(cm, head, output) {\n var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n if (/\\bcm-fat-cursor\\b/.test(cm.getWrapperElement().className)) {\n var charPos = charCoords(cm, head, \"div\", null, null);\n var width = charPos.right - charPos.left;\n cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + \"px\";\n }\n\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n }\n\n function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n // Draws the given range as a highlighted selection\n function drawSelectionRange(cm, range, output) {\n var display = cm.display, doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display), leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n\n function add(left, top, width, bottom) {\n if (top < 0) { top = 0; }\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n height: \" + (bottom - top) + \"px\")));\n }\n\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n function coords(ch, bias) {\n return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n }\n\n function wrapX(pos, dir, side) {\n var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n return coords(ch, prop)[prop]\n }\n\n var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n var first = i == 0, last = !order || i == order.length - 1;\n if (toPos.top - fromPos.top <= 3) { // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else { // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n if (ltr) {\n topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n } else {\n topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n }\n add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n\n if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n if (cmpCoords(toPos, start) < 0) { start = toPos; }\n if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n if (cmpCoords(toPos, end) < 0) { end = toPos; }\n });\n return {start: start, end: end}\n }\n\n var sFrom = range.from(), sTo = range.to();\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n if (leftEnd.bottom < rightStart.top)\n { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n }\n\n output.appendChild(fragment);\n }\n\n // Cursor-blinking\n function restartBlink(cm) {\n if (!cm.state.focused) { return }\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n if (cm.options.cursorBlinkRate > 0)\n { display.blinker = setInterval(function () {\n if (!cm.hasFocus()) { onBlur(cm); }\n display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n }, cm.options.cursorBlinkRate); }\n else if (cm.options.cursorBlinkRate < 0)\n { display.cursorDiv.style.visibility = \"hidden\"; }\n }\n\n function ensureFocus(cm) {\n if (!cm.hasFocus()) {\n cm.display.input.focus();\n if (!cm.state.focused) { onFocus(cm); }\n }\n }\n\n function delayBlurEvent(cm) {\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n if (cm.state.focused) { onBlur(cm); }\n } }, 100);\n }\n\n function onFocus(cm, e) {\n if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; }\n\n if (cm.options.readOnly == \"nocursor\") { return }\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\");\n // This test prevents this from firing when a context\n // menu is closed (since the input reset would kill the\n // select-all detection hack)\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n }\n cm.display.input.receivedFocus();\n }\n restartBlink(cm);\n }\n function onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) { return }\n\n if (cm.state.focused) {\n signal(cm, \"blur\", cm, e);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n clearInterval(cm.display.blinker);\n setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n }\n\n // Read the actual heights of the rendered lines, and update their\n // stored heights to match.\n function updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top);\n var oldHeight = display.lineDiv.getBoundingClientRect().top;\n var mustScroll = 0;\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i], wrapping = cm.options.lineWrapping;\n var height = (void 0), width = 0;\n if (cur.hidden) { continue }\n oldHeight += cur.line.height;\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top;\n // Check that lines don't extend past the right of the current\n // editor width\n if (!wrapping && cur.text.firstChild)\n { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n }\n var diff = cur.line.height - height;\n if (diff > .005 || diff < -.005) {\n if (oldHeight < viewTop) { mustScroll -= diff; }\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n { updateWidgetHeight(cur.rest[j]); } }\n }\n if (width > cm.display.sizerWidth) {\n var chWidth = Math.ceil(width / charWidth(cm.display));\n if (chWidth > cm.display.maxLineLength) {\n cm.display.maxLineLength = chWidth;\n cm.display.maxLine = cur.line;\n cm.display.maxLineChanged = true;\n }\n }\n }\n if (Math.abs(mustScroll) > 2) { display.scroller.scrollTop += mustScroll; }\n }\n\n // Read and store the height of line widgets associated with the\n // given line.\n function updateWidgetHeight(line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i], parent = w.node.parentNode;\n if (parent) { w.height = parent.offsetHeight; }\n } }\n }\n\n // Compute the lines that are visible in a given viewport (defaults\n // the the current scroll position). viewport may contain top,\n // height, and ensure (see op.scrollToPos) properties.\n function visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n if (ensureFrom < from) {\n from = ensureFrom;\n to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n return {from: from, to: Math.max(to, from + 1)}\n }\n\n // SCROLLING THINGS INTO VIEW\n\n // If an editor sits on the top or bottom of the window, partially\n // scrolled out of view, this ensures that the cursor is visible.\n function maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n var doc = display.wrapper.ownerDocument;\n if (rect.top + box.top < 0) { doScroll = true; }\n else if (rect.bottom + box.top > (doc.defaultView.innerHeight || doc.documentElement.clientHeight)) { doScroll = false; }\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n }\n\n // Scroll a given position into view (immediately), verifying that\n // it actually became visible (as line heights are accurately\n // measured, the position of something may 'drift' during drawing).\n function scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) { margin = 0; }\n var rect;\n if (!cm.options.lineWrapping && pos == end) {\n // Set pos and end to the cursor positions around the character pos sticks to\n // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n }\n for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n var coords = cursorCoords(cm, pos);\n var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n rect = {left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n }\n if (!changed) { break }\n }\n return rect\n }\n\n // Scroll a given set of coordinates into view (immediately).\n function scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n }\n\n // Calculate a new scroll position needed to scroll the given\n // rectangle into view. Returns an object with scrollTop and\n // scrollLeft properties. When these are undefined, the\n // vertical/horizontal position does not need to be adjusted.\n function calculateScrollPos(cm, rect) {\n var display = cm.display, snapMargin = textHeight(cm.display);\n if (rect.top < 0) { rect.top = 0; }\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm), result = {};\n if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n if (rect.top < screentop) {\n result.scrollTop = atTop ? 0 : rect.top;\n } else if (rect.bottom > screentop + screen) {\n var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n if (newTop != screentop) { result.scrollTop = newTop; }\n }\n\n var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;\n var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;\n var screenw = displayWidth(cm) - display.gutters.offsetWidth;\n var tooWide = rect.right - rect.left > screenw;\n if (tooWide) { rect.right = rect.left + screenw; }\n if (rect.left < 10)\n { result.scrollLeft = 0; }\n else if (rect.left < screenleft)\n { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }\n else if (rect.right > screenw + screenleft - 3)\n { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n return result\n }\n\n // Store a relative adjustment to the scroll position in the current\n // operation (to be applied when the operation finishes).\n function addToScrollTop(cm, top) {\n if (top == null) { return }\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n }\n\n // Make sure that at the end of the operation the current cursor is\n // shown.\n function ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n }\n\n function scrollToCoords(cm, x, y) {\n if (x != null || y != null) { resolveScrollToPos(cm); }\n if (x != null) { cm.curOp.scrollLeft = x; }\n if (y != null) { cm.curOp.scrollTop = y; }\n }\n\n function scrollToRange(cm, range) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range;\n }\n\n // When an operation has its scrollToPos property set, and another\n // scroll action is applied before the end of the operation, this\n // 'simulates' scrolling that position into view in a cheap way, so\n // that the effect of intermediate scroll commands is not ignored.\n function resolveScrollToPos(cm) {\n var range = cm.curOp.scrollToPos;\n if (range) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n scrollToCoordsRange(cm, from, to, range.margin);\n }\n }\n\n function scrollToCoordsRange(cm, from, to, margin) {\n var sPos = calculateScrollPos(cm, {\n left: Math.min(from.left, to.left),\n top: Math.min(from.top, to.top) - margin,\n right: Math.max(from.right, to.right),\n bottom: Math.max(from.bottom, to.bottom) + margin\n });\n scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n }\n\n // Sync the scrollable area and scrollbars, ensure the viewport\n // covers the visible area.\n function updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n setScrollTop(cm, val, true);\n if (gecko) { updateDisplaySimple(cm); }\n startWorker(cm, 100);\n }\n\n function setScrollTop(cm, val, forceScroll) {\n val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n }\n\n // Sync scroller and scrollbar, ensure the gutter elements are\n // aligned.\n function setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n cm.display.scrollbars.setScrollLeft(val);\n }\n\n // SCROLLBARS\n\n // Prepare DOM reads needed to update the scrollbars. Done in one\n // shot to minimize update/measure roundtrips.\n function measureForScrollbars(cm) {\n var d = cm.display, gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n }\n }\n\n var NativeScrollbars = function(place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n vert.tabIndex = horiz.tabIndex = -1;\n place(vert); place(horiz);\n\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n });\n\n this.checkedZeroWidth = false;\n // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n };\n\n NativeScrollbars.prototype.update = function (measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n // A bug in IE8 can cause this value to be negative, so guard it.\n this.vert.firstChild.style.height =\n Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.scrollTop = 0;\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width =\n Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) { this.zeroWidthHack(); }\n this.checkedZeroWidth = true;\n }\n\n return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n };\n\n NativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n };\n\n NativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n };\n\n NativeScrollbars.prototype.zeroWidthHack = function () {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.height = this.vert.style.width = w;\n this.horiz.style.visibility = this.vert.style.visibility = \"hidden\";\n this.disableHoriz = new Delayed;\n this.disableVert = new Delayed;\n };\n\n NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.visibility = \"\";\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n if (elt != bar) { bar.style.visibility = \"hidden\"; }\n else { delay.set(1000, maybeDisable); }\n }\n delay.set(1000, maybeDisable);\n };\n\n NativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n };\n\n var NullScrollbars = function () {};\n\n NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n NullScrollbars.prototype.setScrollLeft = function () {};\n NullScrollbars.prototype.setScrollTop = function () {};\n NullScrollbars.prototype.clear = function () {};\n\n function updateScrollbars(cm, measure) {\n if (!measure) { measure = measureForScrollbars(cm); }\n var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n { updateHeightsInViewport(cm); }\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n }\n }\n\n // Re-synchronize the fake scrollbars with the actual size of the\n // content.\n function updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else { d.scrollbarFiller.style.display = \"\"; }\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else { d.gutterFiller.style.display = \"\"; }\n }\n\n var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n function initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n if (cm.display.scrollbars.addClass)\n { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n // Prevent clicks in the scrollbars from killing focus\n on(node, \"mousedown\", function () {\n if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n else { updateScrollTop(cm, pos); }\n }, cm);\n if (cm.display.scrollbars.addClass)\n { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n // Operations are used to wrap a series of changes to the editor\n // state in such a way that each change won't have to update the\n // cursor and display (which would be awkward, slow, and\n // error-prone). Instead, display updates are batched and then all\n // combined and executed at once.\n\n var nextOpId = 0;\n // Start a new operation.\n function startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false, // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height, // Used to detect need to update scrollbar\n forceUpdate: false, // Used to force a redraw\n updateInput: 0, // Whether to reset the input textarea\n typing: false, // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null, // Accumulated changes, for firing change events\n cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n selectionChanged: false, // Whether the selection needs to be redrawn\n updateMaxLine: false, // Set when the widest line needs to be determined anew\n scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null, // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId, // Unique ID\n markArrays: null // Used by addMarkedSpan\n };\n pushOperation(cm.curOp);\n }\n\n // Finish an operation, updating the display and signalling delayed events\n function endOperation(cm) {\n var op = cm.curOp;\n if (op) { finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++)\n { group.ops[i].cm.curOp = null; }\n endOperations(group);\n }); }\n }\n\n // The DOM updates done when an operation finishes are batched so\n // that the minimum number of relayouts are required.\n function endOperations(group) {\n var ops = group.ops;\n for (var i = 0; i < ops.length; i++) // Read DOM\n { endOperation_R1(ops[i]); }\n for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n { endOperation_W1(ops[i$1]); }\n for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n { endOperation_R2(ops[i$2]); }\n for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n { endOperation_W2(ops[i$3]); }\n for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n { endOperation_finish(ops[i$4]); }\n }\n\n function endOperation_R1(op) {\n var cm = op.cm, display = cm.display;\n maybeClipScrollbars(cm);\n if (op.updateMaxLine) { findMaxLine(cm); }\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n op.scrollToPos.to.line >= display.viewTo) ||\n display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate &&\n new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n }\n\n function endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n }\n\n function endOperation_R2(op) {\n var cm = op.cm, display = cm.display;\n if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n op.barMeasure = measureForScrollbars(cm);\n\n // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth =\n Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n\n if (op.updatedDisplay || op.selectionChanged)\n { op.preparedSelection = display.input.prepareSelection(); }\n }\n\n function endOperation_W2(op) {\n var cm = op.cm;\n\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n if (op.maxScrollLeft < cm.doc.scrollLeft)\n { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n cm.display.maxLineChanged = false;\n }\n\n var takeFocus = op.focus && op.focus == activeElt(doc(cm));\n if (op.preparedSelection)\n { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n if (op.updatedDisplay || op.startHeight != cm.doc.height)\n { updateScrollbars(cm, op.barMeasure); }\n if (op.updatedDisplay)\n { setDocumentHeight(cm, op.barMeasure); }\n\n if (op.selectionChanged) { restartBlink(cm); }\n\n if (cm.state.focused && op.updateInput)\n { cm.display.input.reset(op.typing); }\n if (takeFocus) { ensureFocus(op.cm); }\n }\n\n function endOperation_finish(op) {\n var cm = op.cm, display = cm.display, doc = cm.doc;\n\n if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n // Abort mouse wheel delta measurement, when scrolling explicitly\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n { display.wheelStartX = display.wheelStartY = null; }\n\n // Propagate the scroll position to the actual DOM scroller\n if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n // If we need to scroll a specific position into view, do so.\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n }\n\n // Fire events for markers that are hidden/unidden by editing or\n // undoing\n var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n if (hidden) { for (var i = 0; i < hidden.length; ++i)\n { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n if (display.wrapper.offsetHeight)\n { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n // Fire change events, and delayed event handlers\n if (op.changeObjs)\n { signal(cm, \"changes\", cm, op.changeObjs); }\n if (op.update)\n { op.update.finish(); }\n }\n\n // Run the given function in an operation\n function runInOp(cm, f) {\n if (cm.curOp) { return f() }\n startOperation(cm);\n try { return f() }\n finally { endOperation(cm); }\n }\n // Wraps a function in an operation. Returns the wrapped function.\n function operation(cm, f) {\n return function() {\n if (cm.curOp) { return f.apply(cm, arguments) }\n startOperation(cm);\n try { return f.apply(cm, arguments) }\n finally { endOperation(cm); }\n }\n }\n // Used to add methods to editor and doc instances, wrapping them in\n // operations.\n function methodOp(f) {\n return function() {\n if (this.curOp) { return f.apply(this, arguments) }\n startOperation(this);\n try { return f.apply(this, arguments) }\n finally { endOperation(this); }\n }\n }\n function docMethodOp(f) {\n return function() {\n var cm = this.cm;\n if (!cm || cm.curOp) { return f.apply(this, arguments) }\n startOperation(cm);\n try { return f.apply(this, arguments) }\n finally { endOperation(cm); }\n }\n }\n\n // HIGHLIGHT WORKER\n\n function startWorker(cm, time) {\n if (cm.doc.highlightFrontier < cm.display.viewTo)\n { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n }\n\n function highlightWorker(cm) {\n var doc = cm.doc;\n if (doc.highlightFrontier >= cm.display.viewTo) { return }\n var end = +new Date + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) { // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n if (resetState) { context.state = resetState; }\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses, newCls = highlighted.classes;\n if (newCls) { line.styleClasses = newCls; }\n else if (oldCls) { line.styleClasses = null; }\n var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n if (ischange) { changedLines.push(context.line); }\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength)\n { processLine(cm, line.text, context); }\n line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\n }\n if (+new Date > end) {\n startWorker(cm, cm.options.workDelay);\n return true\n }\n });\n doc.highlightFrontier = context.line;\n doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n if (changedLines.length) { runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++)\n { regLineChange(cm, changedLines[i], \"text\"); }\n }); }\n }\n\n // DISPLAY DRAWING\n\n var DisplayUpdate = function(cm, viewport, force) {\n var display = cm.display;\n\n this.viewport = viewport;\n // Store some values that we'll need later (but don't want to force a relayout for)\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n };\n\n DisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type))\n { this.events.push(arguments); }\n };\n DisplayUpdate.prototype.finish = function () {\n for (var i = 0; i < this.events.length; i++)\n { signal.apply(null, this.events[i]); }\n };\n\n function maybeClipScrollbars(cm) {\n var display = cm.display;\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n }\n\n function selectionSnapshot(cm) {\n if (cm.hasFocus()) { return null }\n var active = activeElt(doc(cm));\n if (!active || !contains(cm.display.lineDiv, active)) { return null }\n var result = {activeElt: active};\n if (window.getSelection) {\n var sel = win(cm).getSelection();\n if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n result.anchorNode = sel.anchorNode;\n result.anchorOffset = sel.anchorOffset;\n result.focusNode = sel.focusNode;\n result.focusOffset = sel.focusOffset;\n }\n }\n return result\n }\n\n function restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt(snapshot.activeElt.ownerDocument)) { return }\n snapshot.activeElt.focus();\n if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&\n snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var doc = snapshot.activeElt.ownerDocument;\n var sel = doc.defaultView.getSelection(), range = doc.createRange();\n range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n range.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range);\n sel.extend(snapshot.focusNode, snapshot.focusOffset);\n }\n }\n\n // Does the actual updating of the line display. Bails out\n // (returning false) when there is nothing to be done and forced is\n // false.\n function updateDisplayIfNeeded(cm, update) {\n var display = cm.display, doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false\n }\n\n // Bail out if the visible area is already rendered and nothing changed.\n if (!update.force &&\n update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n display.renderedView == display.view && countDirtyView(cm) == 0)\n { return false }\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n }\n\n // Compute a suitable new viewport (from & to)\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n\n var different = from != display.viewFrom || to != display.viewTo ||\n display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n\n display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n // Position the mover div to align with the current scroll position\n cm.display.mover.style.top = display.viewOffset + \"px\";\n\n var toUpdate = countDirtyView(cm);\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n { return false }\n\n // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n var selSnapshot = selectionSnapshot(cm);\n if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n display.renderedView = display.view;\n // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n restoreSelection(selSnapshot);\n\n // Prevent selection and cursors from interfering with the scroll\n // width and height.\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n\n display.updateLineNumbers = null;\n\n return true\n }\n\n function postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null)\n { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n { break }\n } else if (first) {\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n }\n if (!updateDisplayIfNeeded(cm, update)) { break }\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n\n update.signal(cm, \"update\", cm);\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n }\n }\n\n function updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.finish();\n }\n }\n\n // Sync the actual display DOM structure with display.view, removing\n // nodes for lines that are no longer in view, and creating the ones\n // that are not there yet, and updating the ones that are out of\n // date.\n function patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display, lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv, cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling;\n // Works around a throw-scroll bug in OS X Webkit\n if (webkit && mac && cm.display.currentWheelTarget == node)\n { node.style.display = \"none\"; }\n else\n { node.parentNode.removeChild(node); }\n return next\n }\n\n var view = display.view, lineN = display.viewFrom;\n // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else { // Already drawn\n while (cur != lineView.node) { cur = rm(cur); }\n var updateNumber = lineNumbers && updateNumbersFrom != null &&\n updateNumbersFrom <= lineN && lineView.lineNumber;\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n while (cur) { cur = rm(cur); }\n }\n\n function updateGutterSpace(display) {\n var width = display.gutters.offsetWidth;\n display.sizer.style.marginLeft = width + \"px\";\n // Send an event to consumers responding to changes in gutter width.\n signalLater(display, \"gutterChanged\", display);\n }\n\n function setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n }\n\n // Re-align line numbers and gutter marks to compensate for\n // horizontal scrolling.\n function alignHorizontally(cm) {\n var display = cm.display, view = display.view;\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter)\n { view[i].gutter.style.left = left; }\n if (view[i].gutterBackground)\n { view[i].gutterBackground.style.left = left; }\n }\n var align = view[i].alignable;\n if (align) { for (var j = 0; j < align.length; j++)\n { align[j].style.left = left; } }\n } }\n if (cm.options.fixedGutter)\n { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n }\n\n // Used to ensure that the line number gutter is still the right\n // size for the current document size. Returns true when an update\n // is needed.\n function maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) { return false }\n var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm.display);\n return true\n }\n return false\n }\n\n function getGutters(gutters, lineNumbers) {\n var result = [], sawLineNumbers = false;\n for (var i = 0; i < gutters.length; i++) {\n var name = gutters[i], style = null;\n if (typeof name != \"string\") { style = name.style; name = name.className; }\n if (name == \"CodeMirror-linenumbers\") {\n if (!lineNumbers) { continue }\n else { sawLineNumbers = true; }\n }\n result.push({className: name, style: style});\n }\n if (lineNumbers && !sawLineNumbers) { result.push({className: \"CodeMirror-linenumbers\", style: null}); }\n return result\n }\n\n // Rebuild the gutter elements, ensure the margin to the left of the\n // code matches their width.\n function renderGutters(display) {\n var gutters = display.gutters, specs = display.gutterSpecs;\n removeChildren(gutters);\n display.lineGutter = null;\n for (var i = 0; i < specs.length; ++i) {\n var ref = specs[i];\n var className = ref.className;\n var style = ref.style;\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n if (style) { gElt.style.cssText = style; }\n if (className == \"CodeMirror-linenumbers\") {\n display.lineGutter = gElt;\n gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n }\n }\n gutters.style.display = specs.length ? \"\" : \"none\";\n updateGutterSpace(display);\n }\n\n function updateGutters(cm) {\n renderGutters(cm.display);\n regChange(cm);\n alignHorizontally(cm);\n }\n\n // The display handles the DOM integration, both for input reading\n // and content drawing. It holds references to DOM nodes and\n // display-related state.\n\n function Display(place, doc, input, options) {\n var d = this;\n this.input = input;\n\n // Covers bottom-right square when both scrollbars are present.\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n // Will contain the actual code, positioned to cover the viewport.\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n // Elements are added to these to represent selection and cursors.\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n // A visibility: hidden element used to find the size of things.\n d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n // When lines outside of the viewport are measured, they are drawn in this.\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n // Wraps everything that needs to exist inside the vertically-padded coordinate system\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n // Moved around its parent to cover visible view.\n d.mover = elt(\"div\", [lines], null, \"position: relative\");\n // Set to the height of the document, allowing scrolling.\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null;\n // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n // Will contain the gutters, if any.\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null;\n // Actual scrollable element.\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\");\n // The element in which the editor lives.\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n // This attribute is respected by automatic translation systems such as Google Translate,\n // and may also be respected by tools used by human translators.\n d.wrapper.setAttribute('translate', 'no');\n\n // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n if (place) {\n if (place.appendChild) { place.appendChild(d.wrapper); }\n else { place(d.wrapper); }\n }\n\n // Current rendered range (may be bigger than the view window).\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first;\n // Information about the rendered lines.\n d.view = [];\n d.renderedView = null;\n // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n d.externalMeasured = null;\n // Empty space (in pixels) above the view\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false;\n\n // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n d.alignWidgets = false;\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false;\n\n // Used for measuring wheel scrolling granularity\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n // True when shift is held down.\n d.shift = false;\n\n // Used to track whether anything happened since the context menu\n // was opened.\n d.selForContextMenu = null;\n\n d.activeTouch = null;\n\n d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n renderGutters(d);\n\n input.init(d);\n }\n\n // Since the delta values reported on mouse wheel events are\n // unstandardized between browsers and even browser versions, and\n // generally horribly unpredictable, this code starts by measuring\n // the scroll effect that the first few mouse wheel events have,\n // and, from that, detects the way it can convert deltas to pixel\n // offsets afterwards.\n //\n // The reason we want to know the amount a wheel event will scroll\n // is that it gives us a chance to update the display before the\n // actual scrolling happens, reducing flickering.\n\n var wheelSamples = 0, wheelPixelsPerUnit = null;\n // Fill in a browser-detected starting value on browsers where we\n // know one. These don't have to be accurate -- the result of them\n // being wrong would just be a slight flicker on the first wheel\n // scroll (if it is large enough).\n if (ie) { wheelPixelsPerUnit = -.53; }\n else if (gecko) { wheelPixelsPerUnit = 15; }\n else if (chrome) { wheelPixelsPerUnit = -.7; }\n else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n function wheelEventDelta(e) {\n var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n else if (dy == null) { dy = e.wheelDelta; }\n return {x: dx, y: dy}\n }\n function wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta\n }\n\n function onScrollWheel(cm, e) {\n // On Chrome 102, viewport updates somehow stop wheel-based\n // scrolling. Turning off pointer events during the scroll seems\n // to avoid the issue.\n if (chrome && chrome_version == 102) {\n if (cm.display.chromeScrollHack == null) { cm.display.sizer.style.pointerEvents = \"none\"; }\n else { clearTimeout(cm.display.chromeScrollHack); }\n cm.display.chromeScrollHack = setTimeout(function () {\n cm.display.chromeScrollHack = null;\n cm.display.sizer.style.pointerEvents = \"\";\n }, 100);\n }\n var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n var pixelsPerUnit = wheelPixelsPerUnit;\n if (e.deltaMode === 0) {\n dx = e.deltaX;\n dy = e.deltaY;\n pixelsPerUnit = 1;\n }\n\n var display = cm.display, scroll = display.scroller;\n // Quit if there's nothing to scroll here\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer\n }\n }\n }\n }\n\n // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n if (dx && !gecko && !presto && pixelsPerUnit != null) {\n if (dy && canScrollY)\n { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); }\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit));\n // Only prevent default scrolling if vertical scrolling is\n // actually possible. Otherwise, it causes vertical scroll\n // jitter on OSX trackpads when deltaX is small and deltaY\n // is large (issue #3579)\n if (!dy || (dy && canScrollY))\n { e_preventDefault(e); }\n display.wheelStartX = null; // Abort measurement, if in progress\n return\n }\n\n // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n if (dy && pixelsPerUnit != null) {\n var pixels = dy * pixelsPerUnit;\n var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n updateDisplaySimple(cm, {top: top, bottom: bot});\n }\n\n if (wheelSamples < 20 && e.deltaMode !== 0) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx; display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) { return }\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n (movedX && display.wheelDX && movedX / display.wheelDX);\n display.wheelStartX = display.wheelStartY = null;\n if (!sample) { return }\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx; display.wheelDY += dy;\n }\n }\n }\n\n // Selection objects are immutable. A new one is created every time\n // the selection changes. A selection is one or more non-overlapping\n // (and non-touching) ranges, sorted, and an integer that indicates\n // which one is the primary selection (the one that's scrolled into\n // view, that getCursor returns, etc).\n var Selection = function(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n };\n\n Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n Selection.prototype.equals = function (other) {\n if (other == this) { return true }\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this.ranges[i], there = other.ranges[i];\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n }\n return true\n };\n\n Selection.prototype.deepCopy = function () {\n var out = [];\n for (var i = 0; i < this.ranges.length; i++)\n { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); }\n return new Selection(out, this.primIndex)\n };\n\n Selection.prototype.somethingSelected = function () {\n for (var i = 0; i < this.ranges.length; i++)\n { if (!this.ranges[i].empty()) { return true } }\n return false\n };\n\n Selection.prototype.contains = function (pos, end) {\n if (!end) { end = pos; }\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this.ranges[i];\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n { return i }\n }\n return -1\n };\n\n var Range = function(anchor, head) {\n this.anchor = anchor; this.head = head;\n };\n\n Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n // Take an unsorted, potentially overlapping set of ranges, and\n // build a selection out of it. 'Consumes' ranges array (modifying\n // it).\n function normalizeSelection(cm, ranges, primIndex) {\n var mayTouch = cm && cm.options.selectionsMayTouch;\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n primIndex = indexOf(ranges, prim);\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i], prev = ranges[i - 1];\n var diff = cmp(prev.to(), cur.from());\n if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n if (i <= primIndex) { --primIndex; }\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n return new Selection(ranges, primIndex)\n }\n\n function simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0)\n }\n\n // Compute the position of the end of a change (its 'to' property\n // refers to the pre-change end).\n function changeEnd(change) {\n if (!change.text) { return change.to }\n return Pos(change.from.line + change.text.length - 1,\n lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n }\n\n // Adjust a position to refer to the post-change position of the\n // same text, or the end of the change if the change covers it.\n function adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) { return pos }\n if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n return Pos(line, ch)\n }\n\n function computeSelAfterChange(doc, change) {\n var out = [];\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change),\n adjustForChange(range.head, change)));\n }\n return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n }\n\n function offsetPos(pos, old, nw) {\n if (pos.line == old.line)\n { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n else\n { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n }\n\n // Used by replaceSelections to allow moving the selection to the\n // start or around the replaced test. Hint may be \"start\" or \"around\".\n function computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n if (hint == \"around\") {\n var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n return new Selection(out, doc.sel.primIndex)\n }\n\n // Used to get the editor into a consistent state again when options change.\n\n function loadMode(cm) {\n cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n }\n\n function resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n if (cm.curOp) { regChange(cm); }\n }\n\n // DOCUMENT DATA STRUCTURE\n\n // By default, updates that start and end at the beginning of a line\n // are treated specially, in order to make the association of line\n // widgets and marker elements with the text behave more intuitive.\n function isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n }\n\n // Perform a change on the document data structure.\n function updateDoc(doc, change, markedSpans, estimateHeight) {\n function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight);\n signalLater(line, \"change\", line, change);\n }\n function linesFor(start, end) {\n var result = [];\n for (var i = start; i < end; ++i)\n { result.push(new Line(text[i], spansFor(i), estimateHeight)); }\n return result\n }\n\n var from = change.from, to = change.to, text = change.text;\n var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n // Adjust the line structure\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n if (nlines) { doc.remove(from.line, nlines); }\n if (added.length) { doc.insert(from.line, added); }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n doc.insert(from.line + 1, added$2);\n }\n\n signalLater(doc, \"change\", doc, change);\n }\n\n // Call f for all linked documents.\n function linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n if (rel.doc == skip) { continue }\n var shared = sharedHist && rel.sharedHist;\n if (sharedHistOnly && !shared) { continue }\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n } }\n }\n propagate(doc, null, true);\n }\n\n // Attach a document to an editor.\n function attachDoc(cm, doc) {\n if (doc.cm) { throw new Error(\"This document is already in use.\") }\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n cm.options.direction = doc.direction;\n if (!cm.options.lineWrapping) { findMaxLine(cm); }\n cm.options.mode = doc.modeOption;\n regChange(cm);\n }\n\n function setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n }\n\n function directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n }\n\n function History(prev) {\n // Arrays of change events and selections. Doing something adds an\n // event to done and clears undo. Undoing moves events from done\n // to undone, redoing moves them in the other direction.\n this.done = []; this.undone = [];\n this.undoDepth = prev ? prev.undoDepth : Infinity;\n // Used to track when changes can be merged into a single undo\n // event\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null;\n // Used by the isClean() method\n this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1;\n }\n\n // Create a history change event from an updateDoc-style change\n // object.\n function historyChangeFromChange(doc, change) {\n var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n return histChange\n }\n\n // Pop all selection events off the end of a history array. Stop at\n // a change event.\n function clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n if (last.ranges) { array.pop(); }\n else { break }\n }\n }\n\n // Find the top change event in the history. Pop off selection\n // events that are in the way.\n function lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done)\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done)\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done)\n }\n }\n\n // Register a change in the history. Merges changes that are within\n // a single operation, or are close together with an origin that\n // allows merging (starting with \"+\") into a single event.\n function addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date, cur;\n var last;\n\n if ((hist.lastOp == opId ||\n hist.lastOrigin == change.origin && change.origin &&\n ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n change.origin.charAt(0) == \"*\")) &&\n (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n if (!before || !before.ranges)\n { pushSelectionToHistory(doc.sel, hist.done); }\n cur = {changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation};\n hist.done.push(cur);\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n if (!hist.done[0].ranges) { hist.done.shift(); }\n }\n }\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n if (!last) { signal(doc, \"historyAdded\"); }\n }\n\n function selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" ||\n ch == \"+\" &&\n prev.ranges.length == sel.ranges.length &&\n prev.somethingSelected() == sel.somethingSelected() &&\n new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n }\n\n // Called whenever the selection changes, sets the new selection as\n // the pending selection in the history, and pushes the old pending\n // selection into the 'done' array when it was significantly\n // different (in number of selected ranges, emptiness, or time).\n function addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history, origin = options && options.origin;\n\n // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n if (opId == hist.lastSelOp ||\n (origin && hist.lastSelOrigin == origin &&\n (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n { hist.done[hist.done.length - 1] = sel; }\n else\n { pushSelectionToHistory(sel, hist.done); }\n\n hist.lastSelTime = +new Date;\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n if (options && options.clearRedo !== false)\n { clearSelectionEvents(hist.undone); }\n }\n\n function pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n if (!(top && top.ranges && top.equals(sel)))\n { dest.push(sel); }\n }\n\n // Used to store marked span information in the history.\n function attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id], n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n if (line.markedSpans)\n { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n ++n;\n });\n }\n\n // When un/re-doing restores text containing marked spans, those\n // that have been explicitly cleared should not be restored.\n function removeClearedSpans(spans) {\n if (!spans) { return null }\n var out;\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n else if (out) { out.push(spans[i]); }\n }\n return !out ? spans : out.length ? out : null\n }\n\n // Retrieve and filter the old marked spans stored in a change event.\n function getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n if (!found) { return null }\n var nw = [];\n for (var i = 0; i < change.text.length; ++i)\n { nw.push(removeClearedSpans(found[i])); }\n return nw\n }\n\n // Used for un/re-doing changes from the history. Combines the\n // result of computing the existing spans with the set of spans that\n // existed in the history (so that deleting around a span and then\n // undoing brings back the span).\n function mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n if (!old) { return stretched }\n if (!stretched) { return old }\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i], stretchCur = stretched[i];\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n for (var k = 0; k < oldCur.length; ++k)\n { if (oldCur[k].marker == span.marker) { continue spans } }\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n return old\n }\n\n // Used both to provide a JSON-safe object in .getHistory, and, when\n // detaching a document, to split the history in two\n function copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue\n }\n var changes = event.changes, newChanges = [];\n copy.push({changes: newChanges});\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j], m = (void 0);\n newChanges.push({from: change.from, to: change.to, text: change.text});\n if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n } } }\n }\n }\n return copy\n }\n\n // The 'scroll' parameter given to many of these indicated whether\n // the new cursor position should be scrolled into view after\n // modifying the selection.\n\n // If shift is held or the extend flag is set, extends a range to\n // include a given position (and optionally a second position).\n // Otherwise, simply returns the range between the given positions.\n // Used for cursor motion and such.\n function extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n if (posBefore != (cmp(other, anchor) < 0)) {\n anchor = head;\n head = other;\n } else if (posBefore != (cmp(head, other) < 0)) {\n head = other;\n }\n }\n return new Range(anchor, head)\n } else {\n return new Range(other || head, head)\n }\n }\n\n // Extend the primary selection range, discard the rest.\n function extendSelection(doc, head, other, options, extend) {\n if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n }\n\n // Extend all selections (pos is an array of selections with length\n // equal the number of selections)\n function extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n for (var i = 0; i < doc.sel.ranges.length; i++)\n { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n }\n\n // Updates a single range in the selection.\n function replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n }\n\n // Reset the selection to a single range.\n function setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n }\n\n // Give beforeSelectionChange handlers a change to influence a\n // selection update.\n function filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function(ranges) {\n this.ranges = [];\n for (var i = 0; i < ranges.length; i++)\n { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n clipPos(doc, ranges[i].head)); }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n else { return sel }\n }\n\n function setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done, last = lst(done);\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n }\n\n // Set a new selection.\n function setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n }\n\n function setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n { sel = filterSelectionChange(doc, sel, options); }\n\n var bias = options && options.bias ||\n (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption(\"readOnly\") != \"nocursor\")\n { ensureCursorVisible(doc.cm); }\n }\n\n function setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) { return }\n\n doc.sel = sel;\n\n if (doc.cm) {\n doc.cm.curOp.updateInput = 1;\n doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n signalLater(doc, \"cursorActivity\", doc);\n }\n\n // Verify that the selection does not partially select any atomic\n // marked ranges.\n function reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n }\n\n // Return a selection that does not partially select any atomic\n // ranges.\n function skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n var newHead = range.head == range.anchor ? newAnchor : skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) { out = sel.ranges.slice(0, i); }\n out[i] = new Range(newAnchor, newHead);\n }\n }\n return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n }\n\n function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i], m = sp.marker;\n\n // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n // is with selectLeft/Right\n var preventCursorLeft = (\"selectLeft\" in m) ? !m.selectLeft : m.inclusiveLeft;\n var preventCursorRight = (\"selectRight\" in m) ? !m.selectRight : m.inclusiveRight;\n\n if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n if (m.explicitlyCleared) {\n if (!line.markedSpans) { break }\n else {--i; continue}\n }\n }\n if (!m.atomic) { continue }\n\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n if (dir < 0 ? preventCursorRight : preventCursorLeft)\n { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n }\n\n var far = m.find(dir < 0 ? -1 : 1);\n if (dir < 0 ? preventCursorLeft : preventCursorRight)\n { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n }\n } }\n return pos\n }\n\n // Ensure a given position is not inside an atomic range.\n function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0)\n }\n return found\n }\n\n function movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n else { return null }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n else { return null }\n } else {\n return new Pos(pos.line, pos.ch + dir)\n }\n }\n\n function selectAll(cm) {\n cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n }\n\n // UPDATING\n\n // Allow \"beforeChange\" event handlers to influence a change\n function filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function () { return obj.canceled = true; }\n };\n if (update) { obj.update = function (from, to, text, origin) {\n if (from) { obj.from = clipPos(doc, from); }\n if (to) { obj.to = clipPos(doc, to); }\n if (text) { obj.text = text; }\n if (origin !== undefined) { obj.origin = origin; }\n }; }\n signal(doc, \"beforeChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n if (obj.canceled) {\n if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n return null\n }\n return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n }\n\n // Apply a change to a document, and add it to the document's\n // history, and propagating it to all linked documents.\n function makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n if (doc.cm.state.suppressEdits) { return }\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n if (!change) { return }\n }\n\n // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n if (split) {\n for (var i = split.length - 1; i >= 0; --i)\n { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n } else {\n makeChangeInner(doc, change);\n }\n }\n\n function makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n }\n\n // Revert a change stored in a document's history.\n function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n var suppress = doc.cm && doc.cm.state.suppressEdits;\n if (suppress && !allowSelectionOnly) { return }\n\n var hist = doc.history, event, selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n var i = 0;\n for (; i < source.length; i++) {\n event = source[i];\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n { break }\n }\n if (i == source.length) { return }\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {clearRedo: false});\n return\n }\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return\n } else { break }\n }\n\n // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({changes: antiChanges, generation: hist.generation});\n hist.generation = event.generation || ++hist.maxGeneration;\n\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n var loop = function ( i ) {\n var change = event.changes[i];\n change.origin = type;\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {}\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n var rebased = [];\n\n // Propagate to the linked documents\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n };\n\n for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop( i$1 );\n\n if ( returned ) return returned.v;\n }\n }\n\n // Sub-views need their line numbers shifted when text is added\n // above or below them in the parent document.\n function shiftDoc(doc, distance) {\n if (distance == 0) { return }\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n Pos(range.anchor.line + distance, range.anchor.ch),\n Pos(range.head.line + distance, range.head.ch)\n ); }), doc.sel.primIndex);\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n { regLineChange(doc.cm, l, \"gutter\"); }\n }\n }\n\n // More lower-level change function, handling only a single document\n // (not linked ones).\n function makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp)\n { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return\n }\n if (change.from.line > doc.lastLine()) { return }\n\n // Clip the change to the size of this doc\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)], origin: change.origin};\n }\n var last = doc.lastLine();\n if (change.to.line > last) {\n change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]], origin: change.origin};\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n else { updateDoc(doc, change, spans); }\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))\n { doc.cantEdit = false; }\n }\n\n // Handle the interaction of a change to a document with the editor\n // that this document is part of.\n function makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n var recomputeMaxLength = false, checkWidthStart = from.line;\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function (line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true\n }\n });\n }\n\n if (doc.sel.contains(change.from, change.to) > -1)\n { signalCursorActivity(cm); }\n\n updateDoc(doc, change, spans, estimateHeight(cm));\n\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n var len = lineLength(line);\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n }\n\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n\n var lendiff = change.text.length - (to.line - from.line) - 1;\n // Remember that these lines changed, for updating the display\n if (change.full)\n { regChange(cm); }\n else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n { regLineChange(cm, from.line, \"text\"); }\n else\n { regChange(cm, from.line, to.line + 1, lendiff); }\n\n var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n if (changeHandler || changesHandler) {\n var obj = {\n from: from, to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n }\n cm.display.selForContextMenu = null;\n }\n\n function replaceRange(doc, code, from, to, origin) {\n var assign;\n\n if (!to) { to = from; }\n if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n if (typeof code == \"string\") { code = doc.splitLines(code); }\n makeChange(doc, {from: from, to: to, text: code, origin: origin});\n }\n\n // Rebasing/resetting history to deal with externally-sourced changes\n\n function rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n }\n\n // Tries to rebase an array of history events given a change in the\n // document. If the change touches the same lines as the event, the\n // event, and everything 'behind' it, is discarded. If the change is\n // before the event, the event's positions are updated. Uses a\n // copy-on-write scheme for the positions, to avoid having to\n // reallocate them all on every rebase, but also avoid problems with\n // shared position objects being unsafely updated.\n function rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i], ok = true;\n if (sub.ranges) {\n if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n continue\n }\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break\n }\n }\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n }\n\n function rebaseHist(hist, change) {\n var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n }\n\n // Utility for applying a change to a line by handle or number,\n // returning the number and optionally registering the line as\n // changed.\n function changeLine(doc, handle, changeType, op) {\n var no = handle, line = handle;\n if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n else { no = lineNo(handle); }\n if (no == null) { return null }\n if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n return line\n }\n\n // The document is represented as a BTree consisting of leaves, with\n // chunk of lines in them, and branches, with up to ten leaves or\n // other branch nodes below them. The top node is always a branch\n // node, and is the document object itself (meaning it has\n // additional methods and properties).\n //\n // All nodes have parent links. The tree is used both to go from\n // line numbers to line objects, and to go from objects to numbers.\n // It also indexes by height, and is used to convert between height\n // and line object, and to find the total height of the document.\n //\n // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n function LeafChunk(lines) {\n this.lines = lines;\n this.parent = null;\n var height = 0;\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n height += lines[i].height;\n }\n this.height = height;\n }\n\n LeafChunk.prototype = {\n chunkSize: function() { return this.lines.length },\n\n // Remove the n lines at offset 'at'.\n removeInner: function(at, n) {\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this.lines[i];\n this.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n this.lines.splice(at, n);\n },\n\n // Helper used to collapse a small branch into a single leaf.\n collapse: function(lines) {\n lines.push.apply(lines, this.lines);\n },\n\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function(at, lines, height) {\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }\n },\n\n // Used to iterate over a part of the tree.\n iterN: function(at, n, op) {\n for (var e = at + n; at < e; ++at)\n { if (op(this.lines[at])) { return true } }\n }\n };\n\n function BranchChunk(children) {\n this.children = children;\n var size = 0, height = 0;\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize(); height += ch.height;\n ch.parent = this;\n }\n this.size = size;\n this.height = height;\n this.parent = null;\n }\n\n BranchChunk.prototype = {\n chunkSize: function() { return this.size },\n\n removeInner: function(at, n) {\n this.size -= n;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at < sz) {\n var rm = Math.min(n, sz - at), oldHeight = child.height;\n child.removeInner(at, rm);\n this.height -= oldHeight - child.height;\n if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n if ((n -= rm) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n if (this.size - n < 25 &&\n (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n\n collapse: function(lines) {\n for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }\n },\n\n insertInner: function(at, lines, height) {\n this.size += lines.length;\n this.height += height;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at <= sz) {\n child.insertInner(at, lines, height);\n if (child.lines && child.lines.length > 50) {\n // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n var remaining = child.lines.length % 25 + 25;\n for (var pos = remaining; pos < child.lines.length;) {\n var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n child.height -= leaf.height;\n this.children.splice(++i, 0, leaf);\n leaf.parent = this;\n }\n child.lines = child.lines.slice(0, remaining);\n this.maybeSpill();\n }\n break\n }\n at -= sz;\n }\n },\n\n // When a node has grown, check whether it should be split.\n maybeSpill: function() {\n if (this.children.length <= 10) { return }\n var me = this;\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n if (!me.parent) { // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n sibling.parent = me.parent;\n } while (me.children.length > 10)\n me.parent.maybeSpill();\n },\n\n iterN: function(at, n, op) {\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at < sz) {\n var used = Math.min(n, sz - at);\n if (child.iterN(at, used, op)) { return true }\n if ((n -= used) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n }\n };\n\n // Line widgets are block elements displayed above or below a line.\n\n var LineWidget = function(doc, node, options) {\n if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n { this[opt] = options[opt]; } } }\n this.doc = doc;\n this.node = node;\n };\n\n LineWidget.prototype.clear = function () {\n var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n if (no == null || !ws) { return }\n for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }\n if (!ws.length) { line.widgets = null; }\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\n if (cm) {\n runInOp(cm, function () {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n });\n signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n }\n };\n\n LineWidget.prototype.changed = function () {\n var this$1 = this;\n\n var oldH = this.height, cm = this.doc.cm, line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n if (!diff) { return }\n if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n };\n eventMixin(LineWidget);\n\n function adjustScrollWhenAboveVisible(cm, line, diff) {\n if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n { addToScrollTop(cm, diff); }\n }\n\n function addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n if (widget.insertAt == null) { widgets.push(widget); }\n else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); }\n widget.line = line;\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n if (aboveVisible) { addToScrollTop(cm, widget.height); }\n cm.curOp.forceUpdate = true;\n }\n return true\n });\n if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n return widget\n }\n\n // TEXTMARKERS\n\n // Created with markText and setBookmark methods. A TextMarker is a\n // handle that can be used to clear or find a marked position in the\n // document. Line objects hold arrays (markedSpans) containing\n // {from, to, marker} object pointing to such marker objects, and\n // indicating that such a marker is present on that line. Multiple\n // lines may point to the same marker when it spans across lines.\n // The spans will have null for their from/to properties when the\n // marker continues beyond the start/end of the line. Markers have\n // links back to the lines they currently touch.\n\n // Collapsed markers have unique ids, in order to be able to order\n // them, which is needed for uniquely determining an outer marker\n // when they overlap (they may nest, but not partially overlap).\n var nextMarkerId = 0;\n\n var TextMarker = function(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n };\n\n // Clear the marker.\n TextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) { return }\n var cm = this.doc.cm, withOp = cm && !cm.curOp;\n if (withOp) { startOperation(cm); }\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n if (found) { signalLater(this, \"clear\", found.from, found.to); }\n }\n var min = null, max = null;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n else if (cm) {\n if (span.to != null) { max = lineNo(line); }\n if (span.from != null) { min = lineNo(line); }\n }\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n { updateLineHeight(line, textHeight(cm.display)); }\n }\n if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this.lines[i$1]), len = lineLength(visual);\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n } }\n\n if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n this.lines.length = 0;\n this.explicitlyCleared = true;\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n if (cm) { reCheckSelection(cm.doc); }\n }\n if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n if (withOp) { endOperation(cm); }\n if (this.parent) { this.parent.clear(); }\n };\n\n // Find the position of the marker in the document. Returns a {from,\n // to} object by default. Side can be passed to get a specific side\n // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n // Pos objects returned contain a line object, rather than a line\n // number (used to prevent looking up the same line twice).\n TextMarker.prototype.find = function (side, lineObj) {\n if (side == null && this.type == \"bookmark\") { side = 1; }\n var from, to;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n if (side == -1) { return from }\n }\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n if (side == 1) { return to }\n }\n }\n return from && {from: from, to: to}\n };\n\n // Signals that the marker's widget changed, and surrounding layout\n // should be recomputed.\n TextMarker.prototype.changed = function () {\n var this$1 = this;\n\n var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n if (!pos || !cm) { return }\n runInOp(cm, function () {\n var line = pos.line, lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n cm.curOp.updateMaxLine = true;\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n if (dHeight)\n { updateLineHeight(line, line.height + dHeight); }\n }\n signalLater(cm, \"markerChanged\", cm, this$1);\n });\n };\n\n TextMarker.prototype.attachLine = function (line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n }\n this.lines.push(line);\n };\n\n TextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp\n ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n };\n eventMixin(TextMarker);\n\n // Create a marker, wire it up to the right lines, and\n function markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n // Ensure we are in an operation.\n if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n var marker = new TextMarker(doc, type), diff = cmp(from, to);\n if (options) { copyObj(options, marker, false); }\n // Don't connect empty markers unless clearWhenEmpty is false\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n { return marker }\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n }\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n seeCollapsedSpans();\n }\n\n if (marker.addToHistory)\n { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n var curLine = from.line, cm = doc.cm, updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n { updateMaxLine = true; }\n if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n addMarkedSpan(line, new MarkedSpan(marker,\n curLine == from.line ? from.ch : null,\n curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp);\n ++curLine;\n });\n // lineIsHidden depends on the presence of the spans, so needs a second pass\n if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n }); }\n\n if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n if (marker.readOnly) {\n seeReadOnlySpans();\n if (doc.history.done.length || doc.history.undone.length)\n { doc.clearHistory(); }\n }\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n if (cm) {\n // Sync editor state\n if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n if (marker.collapsed)\n { regChange(cm, from.line, to.line + 1); }\n else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n marker.attributes || marker.title)\n { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n if (marker.atomic) { reCheckSelection(cm.doc); }\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n return marker\n }\n\n // SHARED TEXTMARKERS\n\n // A shared marker spans multiple linked documents. It is\n // implemented as a meta-marker-object controlling multiple normal\n // markers.\n var SharedTextMarker = function(markers, primary) {\n this.markers = markers;\n this.primary = primary;\n for (var i = 0; i < markers.length; ++i)\n { markers[i].parent = this; }\n };\n\n SharedTextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) { return }\n this.explicitlyCleared = true;\n for (var i = 0; i < this.markers.length; ++i)\n { this.markers[i].clear(); }\n signalLater(this, \"clear\");\n };\n\n SharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj)\n };\n eventMixin(SharedTextMarker);\n\n function markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) { options.widgetNode = widget.cloneNode(true); }\n markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n for (var i = 0; i < doc.linked.length; ++i)\n { if (doc.linked[i].isParent) { return } }\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary)\n }\n\n function findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n }\n\n function copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i], pos = marker.find();\n var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n if (cmp(mFrom, mTo)) {\n var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n }\n\n function detachSharedMarkers(markers) {\n var loop = function ( i ) {\n var marker = markers[i], linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n };\n\n for (var i = 0; i < markers.length; i++) loop( i );\n }\n\n var nextDocId = 0;\n var Doc = function(text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n if (firstLine == null) { firstLine = 0; }\n\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.modeFrontier = this.highlightFrontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n this.lineSep = lineSep;\n this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n this.extend = false;\n\n if (typeof text == \"string\") { text = this.splitLines(text); }\n updateDoc(this, {from: start, to: start, text: text});\n setSelection(this, simpleSelection(start), sel_dontScroll);\n };\n\n Doc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function(from, to, op) {\n if (op) { this.iterN(from - this.first, to - from, op); }\n else { this.iterN(this.first, this.first + this.size, from); }\n },\n\n // Non-public interface for adding and removing lines.\n insert: function(at, lines) {\n var height = 0;\n for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n this.insertInner(at - this.first, lines, height);\n },\n remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n\n getValue: function(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n setValue: docMethodOp(function(code) {\n var top = Pos(this.first, 0), last = this.first + this.size - 1;\n makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function(code, from, to, origin) {\n from = clipPos(this, from);\n to = to ? clipPos(this, to) : from;\n replaceRange(this, code, from, to, origin);\n },\n getRange: function(from, to, lineSep) {\n var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n if (lineSep === false) { return lines }\n if (lineSep === '') { return lines.join('') }\n return lines.join(lineSep || this.lineSeparator())\n },\n\n getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n getLineNumber: function(line) {return lineNo(line)},\n\n getLineHandleVisualStart: function(line) {\n if (typeof line == \"number\") { line = getLine(this, line); }\n return visualLine(line)\n },\n\n lineCount: function() {return this.size},\n firstLine: function() {return this.first},\n lastLine: function() {return this.first + this.size - 1},\n\n clipPos: function(pos) {return clipPos(this, pos)},\n\n getCursor: function(start) {\n var range = this.sel.primary(), pos;\n if (start == null || start == \"head\") { pos = range.head; }\n else if (start == \"anchor\") { pos = range.anchor; }\n else if (start == \"end\" || start == \"to\" || start === false) { pos = range.to(); }\n else { pos = range.from(); }\n return pos\n },\n listSelections: function() { return this.sel.ranges },\n somethingSelected: function() {return this.sel.somethingSelected()},\n\n setCursor: docMethodOp(function(line, ch, options) {\n setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function(anchor, head, options) {\n setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function(head, other, options) {\n extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function(heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function(f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function(ranges, primary, options) {\n if (!ranges.length) { return }\n var out = [];\n for (var i = 0; i < ranges.length; i++)\n { out[i] = new Range(clipPos(this, ranges[i].anchor),\n clipPos(this, ranges[i].head || ranges[i].anchor)); }\n if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n setSelection(this, normalizeSelection(this.cm, out, primary), options);\n }),\n addSelection: docMethodOp(function(anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n }),\n\n getSelection: function(lineSep) {\n var ranges = this.sel.ranges, lines;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n if (lineSep === false) { return lines }\n else { return lines.join(lineSep || this.lineSeparator()) }\n },\n getSelections: function(lineSep) {\n var parts = [], ranges = this.sel.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }\n parts[i] = sel;\n }\n return parts\n },\n replaceSelection: function(code, collapse, origin) {\n var dup = [];\n for (var i = 0; i < this.sel.ranges.length; i++)\n { dup[i] = code; }\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function(code, collapse, origin) {\n var changes = [], sel = this.sel;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};\n }\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n { makeChange(this, changes[i$1]); }\n if (newSel) { setSelectionReplaceHistory(this, newSel); }\n else if (this.cm) { ensureCursorVisible(this.cm); }\n }),\n undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n setExtending: function(val) {this.extend = val;},\n getExtending: function() {return this.extend},\n\n historySize: function() {\n var hist = this.history, done = 0, undone = 0;\n for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n return {undo: done, redo: undone}\n },\n clearHistory: function() {\n var this$1 = this;\n\n this.history = new History(this.history);\n linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);\n },\n\n markClean: function() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function(forceSplit) {\n if (forceSplit)\n { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n return this.history.generation\n },\n isClean: function (gen) {\n return this.history.generation == (gen || this.cleanGeneration)\n },\n\n getHistory: function() {\n return {done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)}\n },\n setHistory: function(histData) {\n var hist = this.history = new History(this.history);\n hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n },\n\n setGutterMarker: docMethodOp(function(line, gutterID, value) {\n return changeLine(this, line, \"gutter\", function (line) {\n var markers = line.gutterMarkers || (line.gutterMarkers = {});\n markers[gutterID] = value;\n if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n return true\n })\n }),\n\n clearGutter: docMethodOp(function(gutterID) {\n var this$1 = this;\n\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n return true\n });\n }\n });\n }),\n\n lineInfo: function(line) {\n var n;\n if (typeof line == \"number\") {\n if (!isLine(this, line)) { return null }\n n = line;\n line = getLine(this, line);\n if (!line) { return null }\n } else {\n n = lineNo(line);\n if (n == null) { return null }\n }\n return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n widgets: line.widgets}\n },\n\n addLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n if (!line[prop]) { line[prop] = cls; }\n else if (classTest(cls).test(line[prop])) { return false }\n else { line[prop] += \" \" + cls; }\n return true\n })\n }),\n removeLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n if (!cur) { return false }\n else if (cls == null) { line[prop] = null; }\n else {\n var found = cur.match(classTest(cls));\n if (!found) { return false }\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n return true\n })\n }),\n\n addLineWidget: docMethodOp(function(handle, node, options) {\n return addLineWidget(this, handle, node, options)\n }),\n removeLineWidget: function(widget) { widget.clear(); },\n\n markText: function(from, to, options) {\n return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n },\n setBookmark: function(pos, options) {\n var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false, shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents};\n pos = clipPos(this, pos);\n return markText(this, pos, pos, realOpts, \"bookmark\")\n },\n findMarksAt: function(pos) {\n pos = clipPos(this, pos);\n var markers = [], spans = getLine(this, pos.line).markedSpans;\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if ((span.from == null || span.from <= pos.ch) &&\n (span.to == null || span.to >= pos.ch))\n { markers.push(span.marker.parent || span.marker); }\n } }\n return markers\n },\n findMarks: function(from, to, filter) {\n from = clipPos(this, from); to = clipPos(this, to);\n var found = [], lineNo = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n if (spans) { for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||\n span.from == null && lineNo != from.line ||\n span.from != null && lineNo == to.line && span.from >= to.ch) &&\n (!filter || filter(span.marker)))\n { found.push(span.marker.parent || span.marker); }\n } }\n ++lineNo;\n });\n return found\n },\n getAllMarks: function() {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i)\n { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n });\n return markers\n },\n\n posFromIndex: function(off) {\n var ch, lineNo = this.first, sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n if (sz > off) { ch = off; return true }\n off -= sz;\n ++lineNo;\n });\n return clipPos(this, Pos(lineNo, ch))\n },\n indexFromPos: function (coords) {\n coords = clipPos(this, coords);\n var index = coords.ch;\n if (coords.line < this.first || coords.ch < 0) { return 0 }\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index\n },\n\n copy: function(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size),\n this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n return doc\n },\n\n linkedDoc: function(options) {\n if (!options) { options = {}; }\n var from = this.first, to = this.first + this.size;\n if (options.from != null && options.from > from) { from = options.from; }\n if (options.to != null && options.to < to) { to = options.to; }\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n if (options.sharedHist) { copy.history = this.history\n ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy\n },\n unlinkDoc: function(other) {\n if (other instanceof CodeMirror) { other = other.doc; }\n if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n var link = this.linked[i];\n if (link.doc != other) { continue }\n this.linked.splice(i, 1);\n other.unlinkDoc(this);\n detachSharedMarkers(findSharedMarkers(this));\n break\n } }\n // If the histories were shared, split them again\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n getMode: function() {return this.mode},\n getEditor: function() {return this.cm},\n\n splitLines: function(str) {\n if (this.lineSep) { return str.split(this.lineSep) }\n return splitLinesAuto(str)\n },\n lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") { dir = \"ltr\"; }\n if (dir == this.direction) { return }\n this.direction = dir;\n this.iter(function (line) { return line.order = null; });\n if (this.cm) { directionChanged(this.cm); }\n })\n });\n\n // Public alias.\n Doc.prototype.eachLine = Doc.prototype.iter;\n\n // Kludge to work around strange IE behavior where it'll sometimes\n // re-fire a series of drag-related events right after the drop (#1551)\n var lastDrop = 0;\n\n function onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n { return }\n e_preventDefault(e);\n if (ie) { lastDrop = +new Date; }\n var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n if (!pos || cm.isReadOnly()) { return }\n // Might be a file drop, in which case we simply extract the text\n // and insert it.\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length, text = Array(n), read = 0;\n var markAsReadAndPasteIfAllFilesAreRead = function () {\n if (++read == n) {\n operation(cm, function () {\n pos = clipPos(cm.doc, pos);\n var change = {from: pos, to: pos,\n text: cm.doc.splitLines(\n text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),\n origin: \"paste\"};\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));\n })();\n }\n };\n var readTextFromFile = function (file, i) {\n if (cm.options.allowDropFileTypes &&\n indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n markAsReadAndPasteIfAllFilesAreRead();\n return\n }\n var reader = new FileReader;\n reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };\n reader.onload = function () {\n var content = reader.result;\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n markAsReadAndPasteIfAllFilesAreRead();\n return\n }\n text[i] = content;\n markAsReadAndPasteIfAllFilesAreRead();\n };\n reader.readAsText(file);\n };\n for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }\n } else { // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e);\n // Ensure the editor is re-focused\n setTimeout(function () { return cm.display.input.focus(); }, 20);\n return\n }\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n if (text$1) {\n var selected;\n if (cm.state.draggingText && !cm.state.draggingText.copy)\n { selected = cm.listSelections(); }\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n }\n catch(e$1){}\n }\n }\n\n function onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\";\n\n // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img);\n // Force a relayout, or Opera won't use our image for some obscure reason\n img._top = img.offsetTop;\n }\n e.dataTransfer.setDragImage(img, 0, 0);\n if (presto) { img.parentNode.removeChild(img); }\n }\n }\n\n function onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n if (!pos) { return }\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\n if (!cm.display.dragCursor) {\n cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n }\n removeChildrenAndAdd(cm.display.dragCursor, frag);\n }\n\n function clearDragCursor(cm) {\n if (cm.display.dragCursor) {\n cm.display.lineSpace.removeChild(cm.display.dragCursor);\n cm.display.dragCursor = null;\n }\n }\n\n // These must be handled carefully, because naively registering a\n // handler for each editor will cause the editors to never be\n // garbage collected.\n\n function forEachCodeMirror(f) {\n if (!document.getElementsByClassName) { return }\n var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n if (cm) { editors.push(cm); }\n }\n if (editors.length) { editors[0].operation(function () {\n for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n }); }\n }\n\n var globalsRegistered = false;\n function ensureGlobalHandlers() {\n if (globalsRegistered) { return }\n registerGlobalHandlers();\n globalsRegistered = true;\n }\n function registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function () {\n if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100); }\n });\n // When the window loses focus, we want to show the editor as blurred\n on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n }\n // Called when the window resizes\n function onResize(cm) {\n var d = cm.display;\n // Might be a text scaling operation, clear size caches.\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n }\n\n var keyNames = {\n 3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n 19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n 36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n 46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n 106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 145: \"ScrollLock\",\n 173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n 221: \"]\", 222: \"'\", 224: \"Mod\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n 63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n };\n\n // Number keys\n for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n // Alphabetic keys\n for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n // Function keys\n for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n var keyMap = {};\n\n keyMap.basic = {\n \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n };\n // Note that the save and find-related commands aren't defined by\n // default. User code or addons can define them. Unknown commands\n // are simply ignored.\n keyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n };\n // Very basic readline/emacs-style bindings, which are standard on Mac.\n keyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\", \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\",\n \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\",\n \"Ctrl-T\": \"transposeChars\", \"Ctrl-O\": \"openLine\"\n };\n keyMap.macDefault = {\n \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n \"fallthrough\": [\"basic\", \"emacsy\"]\n };\n keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n // KEYMAP DISPATCH\n\n function normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/);\n name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n }\n if (alt) { name = \"Alt-\" + name; }\n if (ctrl) { name = \"Ctrl-\" + name; }\n if (cmd) { name = \"Cmd-\" + name; }\n if (shift) { name = \"Shift-\" + name; }\n return name\n }\n\n // This is a kludge to keep keymaps mostly working as raw objects\n // (backwards compatibility) while at the same time support features\n // like normalization and multi-stroke key bindings. It compiles a\n // new normalized keymap, and then updates the old object to reflect\n // this.\n function normalizeKeyMap(keymap) {\n var copy = {};\n for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n if (value == \"...\") { delete keymap[keyname]; continue }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n for (var i = 0; i < keys.length; i++) {\n var val = (void 0), name = (void 0);\n if (i == keys.length - 1) {\n name = keys.join(\" \");\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n var prev = copy[name];\n if (!prev) { copy[name] = val; }\n else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n }\n delete keymap[keyname];\n } }\n for (var prop in copy) { keymap[prop] = copy[prop]; }\n return keymap\n }\n\n function lookupKey(key, map, handle, context) {\n map = getKeyMap(map);\n var found = map.call ? map.call(key, context) : map[key];\n if (found === false) { return \"nothing\" }\n if (found === \"...\") { return \"multi\" }\n if (found != null && handle(found)) { return \"handled\" }\n\n if (map.fallthrough) {\n if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n { return lookupKey(key, map.fallthrough, handle, context) }\n for (var i = 0; i < map.fallthrough.length; i++) {\n var result = lookupKey(key, map.fallthrough[i], handle, context);\n if (result) { return result }\n }\n }\n }\n\n // Modifier key presses don't count as 'real' key presses for the\n // purpose of keymap fallthrough.\n function isModifierKey(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n }\n\n function addModifierNames(name, event, noShift) {\n var base = name;\n if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") { name = \"Cmd-\" + name; }\n if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n return name\n }\n\n // Look up the name of a key as indicated by an event object.\n function keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n var name = keyNames[event.keyCode];\n if (name == null || event.altGraphKey) { return false }\n // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n if (event.keyCode == 3 && event.code) { name = event.code; }\n return addModifierNames(name, event, noShift)\n }\n\n function getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val\n }\n\n // Helper for deleting text near the selection(s), used to implement\n // backspace, delete, and similar functionality.\n function deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges, kill = [];\n // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break\n }\n }\n kill.push(toKill);\n }\n // Next, remove those actual ranges.\n runInOp(cm, function () {\n for (var i = kill.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n ensureCursorVisible(cm);\n });\n }\n\n function moveCharLogically(line, ch, dir) {\n var target = skipExtendingChars(line.text, ch + dir, dir);\n return target < 0 || target > line.text.length ? null : target\n }\n\n function moveLogically(line, start, dir) {\n var ch = moveCharLogically(line, start.ch, dir);\n return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n }\n\n function endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n if (cm.doc.direction == \"rtl\") { dir = -dir; }\n var order = getOrder(lineObj, cm.doc.direction);\n if (order) {\n var part = dir < 0 ? lst(order) : order[0];\n var moveInStorageOrder = (dir < 0) == (part.level == 1);\n var sticky = moveInStorageOrder ? \"after\" : \"before\";\n var ch;\n // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n // it could be that the last bidi part is not on the last visual line,\n // since visual lines contain content order-consecutive chunks.\n // Thus, in rtl, we are looking for the first (content-order) character\n // in the rtl chunk that is on the last line (that is, the same line\n // as the last (content-order) character).\n if (part.level > 0 || cm.doc.direction == \"rtl\") {\n var prep = prepareMeasureForLine(cm, lineObj);\n ch = dir < 0 ? lineObj.text.length - 1 : 0;\n var targetTop = measureCharPrepared(cm, prep, ch).top;\n ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n } else { ch = dir < 0 ? part.to : part.from; }\n return new Pos(lineNo, ch, sticky)\n }\n }\n return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n }\n\n function moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n if (!bidi) { return moveLogically(line, start, dir) }\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n // nothing interesting happens.\n return moveLogically(line, start, dir)\n }\n\n var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n var prep;\n var getWrappedLineExtent = function (ch) {\n if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch)\n };\n var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n if (cm.doc.direction == \"rtl\" || part.level == 1) {\n var moveInStorageOrder = (part.level == 1) == (dir < 0);\n var ch = mv(start, moveInStorageOrder ? 1 : -1);\n if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n var sticky = moveInStorageOrder ? \"before\" : \"after\";\n return new Pos(start.line, ch, sticky)\n }\n }\n\n // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n ? new Pos(start.line, mv(ch, 1), \"before\")\n : new Pos(start.line, ch, \"after\"); };\n\n for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n var part = bidi[partPos];\n var moveInStorageOrder = (dir > 0) == (part.level != 1);\n var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n }\n };\n\n // Case 3a: Look for other bidi parts on the same visual line\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n if (res) { return res }\n\n // Case 3b: Look for other bidi parts on the next visual line\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n if (res) { return res }\n }\n\n // Case 4: Nowhere to move\n return null\n }\n\n // Commands are parameter-less actions that can be performed on an\n // editor, mostly used for keybindings.\n var commands = {\n selectAll: selectAll,\n singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n if (range.head.ch == len && range.head.line < cm.lastLine())\n { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n else\n { return {from: range.head, to: Pos(range.head.line, len)} }\n } else {\n return {from: range.from(), to: range.to()}\n }\n }); },\n deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0),\n to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n }); }); },\n delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0), to: range.from()\n }); }); },\n delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n return {from: leftPos, to: range.from()}\n }); },\n delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n return {from: range.from(), to: rightPos }\n }); },\n undo: function (cm) { return cm.undo(); },\n redo: function (cm) { return cm.redo(); },\n undoSelection: function (cm) { return cm.undoSelection(); },\n redoSelection: function (cm) { return cm.redoSelection(); },\n goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n {origin: \"+move\", bias: -1}\n ); },\n goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n }, sel_move); },\n goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: 0, top: top}, \"div\")\n }, sel_move); },\n goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n return pos\n }, sel_move); },\n goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n delCharBefore: function (cm) { return cm.deleteH(-1, \"codepoint\"); },\n delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n insertSoftTab: function (cm) {\n var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(spaceStr(tabSize - col % tabSize));\n }\n cm.replaceSelections(spaces);\n },\n defaultTab: function (cm) {\n if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n else { cm.execCommand(\"insertTab\"); }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function (cm) { return runInOp(cm, function () {\n var ranges = cm.listSelections(), newSel = [];\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) { continue }\n var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n if (line) {\n if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n prev.charAt(prev.length - 1),\n Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n newSel.push(new Range(cur, cur));\n }\n cm.setSelections(newSel);\n }); },\n newlineAndIndent: function (cm) { return runInOp(cm, function () {\n var sels = cm.listSelections();\n for (var i = sels.length - 1; i >= 0; i--)\n { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n sels = cm.listSelections();\n for (var i$1 = 0; i$1 < sels.length; i$1++)\n { cm.indentLine(sels[i$1].from().line, null, true); }\n ensureCursorVisible(cm);\n }); },\n openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n };\n\n\n function lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, visual, lineN, 1)\n }\n function lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, line, lineN, -1)\n }\n function lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line, cm.doc.direction);\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n }\n return start\n }\n\n // Run a handler that was bound to a key.\n function doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n if (!bound) { return false }\n }\n // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift, done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n if (dropShift) { cm.display.shift = false; }\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n return done\n }\n\n function lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n if (result) { return result }\n }\n return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n || lookupKey(name, cm.options.keyMap, handle, cm)\n }\n\n // Note that, despite the name, this function is also used to check\n // for bound mouse clicks.\n\n var stopSeq = new Delayed;\n\n function dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n if (seq) {\n if (isModifierKey(name)) { return \"handled\" }\n if (/\\'$/.test(name))\n { cm.state.keySeq = null; }\n else\n { stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n }); }\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n }\n return dispatchKeyInner(cm, name, e, handle)\n }\n\n function dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n\n if (result == \"multi\")\n { cm.state.keySeq = name; }\n if (result == \"handled\")\n { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n return !!result\n }\n\n // Handle a key from the keydown event.\n function handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n if (!name) { return false }\n\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n { return doHandleBinding(cm, b) }\n })\n } else {\n return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n }\n }\n\n // Handle a key from the keypress event\n function handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n }\n\n var lastStoppedKey = null;\n function onKeyDown(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) { return }\n cm.curOp.focus = activeElt(doc(cm));\n if (signalDOMEvent(cm, e)) { return }\n // IE does strange things with escape.\n if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n if (presto) {\n lastStoppedKey = handled ? code : null;\n // Opera has no cut event... we try to at least catch the key combo\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n { cm.replaceSelection(\"\", null, \"cut\"); }\n }\n if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)\n { document.execCommand(\"cut\"); }\n\n // Turn mouse into crosshair when Alt is held on Mac.\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n { showCrossHair(cm); }\n }\n\n function showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n }\n\n function onKeyUp(e) {\n if (e.keyCode == 16) { this.doc.sel.shift = false; }\n signalDOMEvent(this, e);\n }\n\n function onKeyPress(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) { return }\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n var keyCode = e.keyCode, charCode = e.charCode;\n if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n // Some browsers fire keypress events for backspace\n if (ch == \"\\x08\") { return }\n if (handleCharBinding(cm, e, ch)) { return }\n cm.display.input.onKeyPress(e);\n }\n\n var DOUBLECLICK_DELAY = 400;\n\n var PastClick = function(time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n };\n\n PastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time &&\n cmp(pos, this.pos) == 0 && button == this.button\n };\n\n var lastClick, lastDoubleClick;\n function clickRepeat(pos, button) {\n var now = +new Date;\n if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n lastClick = lastDoubleClick = null;\n return \"triple\"\n } else if (lastClick && lastClick.compare(now, pos, button)) {\n lastDoubleClick = new PastClick(now, pos, button);\n lastClick = null;\n return \"double\"\n } else {\n lastClick = new PastClick(now, pos, button);\n lastDoubleClick = null;\n return \"single\"\n }\n }\n\n // A mouse down can be a single click, double click, triple click,\n // start of selection drag, start of text drag, new cursor\n // (ctrl-click), rectangle drag (alt-drag), or xwin\n // middle-click-paste. Or it might be a click on something we should\n // not interfere with, such as a scrollbar or widget.\n function onMouseDown(e) {\n var cm = this, display = cm.display;\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () { return display.scroller.draggable = true; }, 100);\n }\n return\n }\n if (clickInGutter(cm, e)) { return }\n var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n win(cm).focus();\n\n // #3261: make sure, that we're not starting a second selection\n if (button == 1 && cm.state.selectingText)\n { cm.state.selectingText(e); }\n\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n if (button == 1) {\n if (pos) { leftButtonDown(cm, pos, repeat, e); }\n else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n } else if (button == 2) {\n if (pos) { extendSelection(cm.doc, pos); }\n setTimeout(function () { return display.input.focus(); }, 20);\n } else if (button == 3) {\n if (captureRightClick) { cm.display.input.onContextMenu(e); }\n else { delayBlurEvent(cm); }\n }\n }\n\n function handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n if (repeat == \"double\") { name = \"Double\" + name; }\n else if (repeat == \"triple\") { name = \"Triple\" + name; }\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") { bound = commands[bound]; }\n if (!bound) { return false }\n var done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n return done\n })\n }\n\n function configureMouse(cm, repeat, event) {\n var option = cm.getOption(\"configureMouse\");\n var value = option ? option(cm, repeat, event) : {};\n if (value.unit == null) {\n var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n }\n if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n return value\n }\n\n function leftButtonDown(cm, pos, repeat, event) {\n if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n else { cm.curOp.focus = activeElt(doc(cm)); }\n\n var behavior = configureMouse(cm, repeat, event);\n\n var sel = cm.doc.sel, contained;\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n { leftButtonStartDrag(cm, event, pos, behavior); }\n else\n { leftButtonSelect(cm, event, pos, behavior); }\n }\n\n // Start a text drag. When it ends, see if any dragging actually\n // happen, and treat as a click if it didn't.\n function leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display, moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) { display.scroller.draggable = false; }\n cm.state.draggingText = false;\n if (cm.state.delayingBlurEvent) {\n if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; }\n else { delayBlurEvent(cm); }\n }\n off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n if (!moved) {\n e_preventDefault(e);\n if (!behavior.addNew)\n { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n if ((webkit && !safari) || ie && ie_version == 9)\n { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }\n else\n { display.input.focus(); }\n }\n });\n var mouseMove = function(e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n var dragStart = function () { return moved = true; };\n // Let the drag handler handle this.\n if (webkit) { display.scroller.draggable = true; }\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag;\n on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n on(display.scroller, \"dragstart\", dragStart);\n on(display.scroller, \"drop\", dragEnd);\n\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { return display.input.focus(); }, 20);\n // IE's approach to draggable\n if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n }\n\n function rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") { return new Range(pos, pos) }\n if (unit == \"word\") { return cm.findWordAt(pos) }\n if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n var result = unit(cm, pos);\n return new Range(result.from, result.to)\n }\n\n // Normal selection, as opposed to text dragging.\n function leftButtonSelect(cm, event, start, behavior) {\n if (ie) { delayBlurEvent(cm); }\n var display = cm.display, doc$1 = cm.doc;\n e_preventDefault(event);\n\n var ourRange, ourIndex, startSel = doc$1.sel, ranges = startSel.ranges;\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc$1.sel.contains(start);\n if (ourIndex > -1)\n { ourRange = ranges[ourIndex]; }\n else\n { ourRange = new Range(start, start); }\n } else {\n ourRange = doc$1.sel.primary();\n ourIndex = doc$1.sel.primIndex;\n }\n\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) { ourRange = new Range(start, start); }\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range = rangeForUnit(cm, start, behavior.unit);\n if (behavior.extend)\n { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }\n else\n { ourRange = range; }\n }\n\n if (!behavior.addNew) {\n ourIndex = 0;\n setSelection(doc$1, new Selection([ourRange], 0), sel_mouse);\n startSel = doc$1.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc$1, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n {scroll: false, origin: \"*mouse\"});\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n setSelection(doc$1, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n {scroll: false, origin: \"*mouse\"});\n startSel = doc$1.sel;\n } else {\n replaceOneSelection(doc$1, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) { return }\n lastPos = pos;\n\n if (behavior.unit == \"rectangle\") {\n var ranges = [], tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc$1, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc$1, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n line <= end; line++) {\n var text = getLine(doc$1, line).text, leftPos = findColumn(text, left, tabSize);\n if (left == right)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n else if (text.length > leftPos)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n }\n if (!ranges.length) { ranges.push(new Range(start, start)); }\n setSelection(doc$1, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n {origin: \"*mouse\", scroll: false});\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor, head;\n if (cmp(range.anchor, anchor) > 0) {\n head = range.head;\n anchor = minPos(oldRange.from(), range.anchor);\n } else {\n head = range.anchor;\n anchor = maxPos(oldRange.to(), range.head);\n }\n var ranges$1 = startSel.ranges.slice(0);\n ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc$1, anchor), head));\n setSelection(doc$1, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n }\n }\n\n var editorSize = display.wrapper.getBoundingClientRect();\n // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n if (!cur) { return }\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt(doc(cm));\n extendTo(cur);\n var visible = visibleLines(display, doc$1);\n if (cur.line >= visible.to || cur.line < visible.from)\n { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n if (outside) { setTimeout(operation(cm, function () {\n if (counter != curCount) { return }\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50); }\n }\n }\n\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity;\n // If e is null or undefined we interpret this as someone trying\n // to explicitly cancel the selection rather than the user\n // letting go of the mouse button.\n if (e) {\n e_preventDefault(e);\n display.input.focus();\n }\n off(display.wrapper.ownerDocument, \"mousemove\", move);\n off(display.wrapper.ownerDocument, \"mouseup\", up);\n doc$1.history.lastSelOrigin = null;\n }\n\n var move = operation(cm, function (e) {\n if (e.buttons === 0 || !e_button(e)) { done(e); }\n else { extend(e); }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(display.wrapper.ownerDocument, \"mousemove\", move);\n on(display.wrapper.ownerDocument, \"mouseup\", up);\n }\n\n // Used when mouse-selecting to adjust the anchor to the proper side\n // of a bidi jump depending on the visual position of the head.\n function bidiSimplify(cm, range) {\n var anchor = range.anchor;\n var head = range.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }\n var order = getOrder(anchorLine);\n if (!order) { return range }\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n if (part.from != anchor.ch && part.to != anchor.ch) { return range }\n var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n if (boundary == 0 || boundary == order.length) { return range }\n\n // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n var leftSide;\n if (head.line != anchor.line) {\n leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n } else {\n var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n if (headIndex == boundary - 1 || headIndex == boundary)\n { leftSide = dir < 0; }\n else\n { leftSide = dir > 0; }\n }\n\n var usePart = order[boundary + (leftSide ? -1 : 0)];\n var from = leftSide == (usePart.level == 1);\n var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)\n }\n\n\n // Determines whether an event happened in the gutter, and fires the\n // handlers for the corresponding event.\n function gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try { mX = e.clientX; mY = e.clientY; }\n catch(e$1) { return false }\n }\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n if (prevent) { e_preventDefault(e); }\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n mY -= lineBox.top - display.viewOffset;\n\n for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n var g = display.gutters.childNodes[i];\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = lineAtHeight(cm.doc, mY);\n var gutter = cm.display.gutterSpecs[i];\n signal(cm, type, cm, line, gutter.className, e);\n return e_defaultPrevented(e)\n }\n }\n }\n\n function clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true)\n }\n\n // CONTEXT MENU HANDLING\n\n // To make the context menu work, we need to briefly unhide the\n // textarea (making it as unobtrusive as possible) to let the\n // right-click take effect on it.\n function onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n }\n\n function contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n return gutterEvent(cm, e, \"gutterContextMenu\", false)\n }\n\n function themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n }\n\n var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n var defaults = {};\n var optionHandlers = {};\n\n function defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n if (handle) { optionHandlers[name] =\n notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n }\n\n CodeMirror.defineOption = option;\n\n // Passed to option handlers when there is no old value.\n CodeMirror.Init = Init;\n\n // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n if (!val) { return }\n var newBreaks = [], lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n if (found == -1) { break }\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n lineNo++;\n });\n for (var i = newBreaks.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\u202d\\u202e\\u2066\\u2067\\u2069\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n if (old != Init) { cm.refresh(); }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n updateGutters(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n if (prev && prev.detach) { prev.detach(cm, next); }\n if (next.attach) { next.attach(cm, prev || null); }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm, val) {\n cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n updateGutters(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm, val) {\n cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n updateGutters(cm);\n }, true);\n option(\"firstLineNumber\", 1, updateGutters, true);\n option(\"lineNumberFormatter\", function (integer) { return integer; }, updateGutters, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n option(\"selectionsMayTouch\", false);\n\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n cm.display.input.readOnlyChanged(val);\n });\n\n option(\"screenReaderLabel\", null, function (cm, val) {\n val = (val === '') ? null : val;\n cm.display.input.screenReaderLabelChanged(val);\n });\n\n option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) { cm.display.input.resetPosition(); }\n });\n\n option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n option(\"phrases\", null);\n }\n\n function dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\n if (!value != !wasOn) {\n var funcs = cm.display.dragFunctions;\n var toggle = value ? on : off;\n toggle(cm.display.scroller, \"dragstart\", funcs.start);\n toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n toggle(cm.display.scroller, \"dragover\", funcs.over);\n toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n toggle(cm.display.scroller, \"drop\", funcs.drop);\n }\n }\n\n function wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () { return updateScrollbars(cm); }, 100);\n }\n\n // A CodeMirror instance represents an editor. This is the object\n // that user code is usually dealing with.\n\n function CodeMirror(place, options) {\n var this$1 = this;\n\n if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n this.options = options = options ? copyObj(options) : {};\n // Determine effective options based on given values and defaults.\n copyObj(defaults, options, false);\n\n var doc = options.value;\n if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n else if (options.mode) { doc.modeOption = options.mode; }\n this.doc = doc;\n\n var input = new CodeMirror.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input, options);\n display.wrapper.CodeMirror = this;\n themeChanged(this);\n if (options.lineWrapping)\n { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n initScrollbars(this);\n\n this.state = {\n keyMaps: [], // stores maps added by addKeyMap\n overlays: [], // highlighting overlays, as added by addOverlay\n modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(), // stores highlight worker timeout\n keySeq: null, // Unfinished key sequence\n specialChars: null\n };\n\n if (options.autofocus && !mobile) { display.input.focus(); }\n\n // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n startOperation(this);\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n\n if ((options.autofocus && !mobile) || this.hasFocus())\n { setTimeout(function () {\n if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }\n }, 20); }\n else\n { onBlur(this); }\n\n for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n { optionHandlers[opt](this, options[opt], Init); } }\n maybeUpdateLineNumberWidth(this);\n if (options.finishInit) { options.finishInit(this); }\n for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }\n endOperation(this);\n // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n if (webkit && options.lineWrapping &&\n getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n { display.lineDiv.style.textRendering = \"auto\"; }\n }\n\n // The default configuration options.\n CodeMirror.defaults = defaults;\n // Functions to run when options are changed.\n CodeMirror.optionHandlers = optionHandlers;\n\n // Attach the necessary event handlers when initializing the editor\n function registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n // Older IE's will not fire a second mousedown for a double click\n if (ie && ie_version < 11)\n { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) { return }\n var pos = posFromMouse(cm, e);\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n })); }\n else\n { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n on(d.input.getField(), \"contextmenu\", function (e) {\n if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }\n });\n\n // Used to suppress mouse event handling when a touch happens\n var touchFinished, prevTouch = {end: 0};\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date;\n }\n }\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) { return false }\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1\n }\n function farAway(touch, other) {\n if (other.left == null) { return true }\n var dx = other.left - touch.left, dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20\n }\n on(d.scroller, \"touchstart\", function (e) {\n if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n d.input.ensurePolled();\n clearTimeout(touchFinished);\n var now = +new Date;\n d.activeTouch = {start: now, moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null};\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) { d.activeTouch.moved = true; }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n if (touch && !eventInWidget(d, e) && touch.left != null &&\n !touch.moved && new Date - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n { range = new Range(pos, pos); }\n else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n { range = cm.findWordAt(pos); }\n else // Triple tap\n { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch);\n\n // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n on(d.scroller, \"scroll\", function () {\n if (d.scroller.clientHeight) {\n updateScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n });\n\n // Listen to wheel events in order to try and update the viewport on time.\n on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n // Prevent wrapper from ever scrolling\n on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n d.dragFunctions = {\n enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n start: function (e) { return onDragStart(cm, e); },\n drop: operation(cm, onDrop),\n leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n };\n\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n }\n\n var initHooks = [];\n CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n // Indent the given line. The how parameter can be \"smart\",\n // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n // (typically set to true for forced single-line indents), empty\n // lines are not indented, and places where the mode returns Pass\n // are left alone.\n function indentLine(cm, n, how, aggressive) {\n var doc = cm.doc, state;\n if (how == null) { how = \"add\"; }\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) { how = \"prev\"; }\n else { state = getContextBefore(cm, n).state; }\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n if (line.stateAfter) { line.stateAfter = null; }\n var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) { return }\n how = \"prev\";\n }\n }\n if (how == \"prev\") {\n if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n else { indentation = 0; }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n indentation = Math.max(0, indentation);\n\n var indentString = \"\", pos = 0;\n if (cm.options.indentWithTabs)\n { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n if (indentString != curSpaceString) {\n replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n line.stateAfter = null;\n return true\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n var range = doc.sel.ranges[i$1];\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos$1 = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n break\n }\n }\n }\n }\n\n // This will be set to a {lineWise: bool, text: [string]} object, so\n // that, when pasting, we know what kind of selections the copied\n // text was made out of.\n var lastCopied = null;\n\n function setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n }\n\n function applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n if (!sel) { sel = doc.sel; }\n\n var recent = +new Date - 200;\n var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n var textLines = splitLinesAuto(inserted), multiPaste = null;\n // When pasting N lines into N selections, insert one line per selection\n if (paste && sel.ranges.length > 1) {\n if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n if (sel.ranges.length % lastCopied.text.length == 0) {\n multiPaste = [];\n for (var i = 0; i < lastCopied.text.length; i++)\n { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) { return [l]; });\n }\n }\n\n var updateInput = cm.curOp.updateInput;\n // Normal behavior is to insert the new text into every selection\n for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n var range = sel.ranges[i$1];\n var from = range.from(), to = range.to();\n if (range.empty()) {\n if (deleted && deleted > 0) // Handle deletion\n { from = Pos(from.line, from.ch - deleted); }\n else if (cm.state.overwrite && !paste) // Handle overwrite\n { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == textLines.join(\"\\n\"))\n { from = to = Pos(from.line, 0); }\n }\n var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n if (inserted && !paste)\n { triggerElectric(cm, inserted); }\n\n ensureCursorVisible(cm);\n if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n }\n\n function handlePaste(e, cm) {\n var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n if (pasted) {\n e.preventDefault();\n if (!cm.isReadOnly() && !cm.options.disableInput && cm.hasFocus())\n { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n return true\n }\n }\n\n function triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n var sel = cm.doc.sel;\n\n for (var i = sel.ranges.length - 1; i >= 0; i--) {\n var range = sel.ranges[i];\n if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }\n var mode = cm.getModeAt(range.head);\n var indented = false;\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++)\n { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indented = indentLine(cm, range.head.line, \"smart\");\n break\n } }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))\n { indented = indentLine(cm, range.head.line, \"smart\"); }\n }\n if (indented) { signalLater(cm, \"electricInput\", cm, range.head.line); }\n }\n }\n\n function copyableRanges(cm) {\n var text = [], ranges = [];\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n return {text: text, ranges: ranges}\n }\n\n function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n field.setAttribute(\"autocorrect\", autocorrect ? \"\" : \"off\");\n field.setAttribute(\"autocapitalize\", autocapitalize ? \"\" : \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\n }\n\n function hiddenTextarea() {\n var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n if (webkit) { te.style.width = \"1000px\"; }\n else { te.setAttribute(\"wrap\", \"off\"); }\n // If border: 0; -- iOS fails to open keyboard (issue #1287)\n if (ios) { te.style.border = \"1px solid black\"; }\n disableBrowserMagic(te);\n return div\n }\n\n // The publicly visible API. Note that methodOp(f) means\n // 'wrap f in an operation, performed on its `this` parameter'.\n\n // This is not the complete set of editor methods. Most of the\n // methods defined on the Doc type are also injected into\n // CodeMirror.prototype, for backwards compatibility and\n // convenience.\n\n function addEditorMethods(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n var helpers = CodeMirror.helpers = {};\n\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function(){win(this).focus(); this.display.input.focus();},\n\n setOption: function(option, value) {\n var options = this.options, old = options[option];\n if (options[option] == value && option != \"mode\") { return }\n options[option] = value;\n if (optionHandlers.hasOwnProperty(option))\n { operation(this, optionHandlers[option])(this, value, old); }\n signal(this, \"optionChange\", this, option);\n },\n\n getOption: function(option) {return this.options[option]},\n getDoc: function() {return this.doc},\n\n addKeyMap: function(map, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n },\n removeKeyMap: function(map) {\n var maps = this.state.keyMaps;\n for (var i = 0; i < maps.length; ++i)\n { if (maps[i] == map || maps[i].name == map) {\n maps.splice(i, 1);\n return true\n } }\n },\n\n addOverlay: methodOp(function(spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n insertSorted(this.state.overlays,\n {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n priority: (options && options.priority) || 0},\n function (overlay) { return overlay.priority; });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function(spec) {\n var overlays = this.state.overlays;\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this.state.modeGen++;\n regChange(this);\n return\n }\n }\n }),\n\n indentLine: methodOp(function(n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n else { dir = dir ? \"add\" : \"subtract\"; }\n }\n if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n }),\n indentSelection: methodOp(function(how) {\n var ranges = this.doc.sel.ranges, end = -1;\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (!range.empty()) {\n var from = range.from(), to = range.to();\n var start = Math.max(end, from.line);\n end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n for (var j = start; j < end; ++j)\n { indentLine(this, j, how); }\n var newRanges = this.doc.sel.ranges;\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n } else if (range.head.line > end) {\n indentLine(this, range.head.line, how, true);\n end = range.head.line;\n if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); }\n }\n }\n }),\n\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function(pos, precise) {\n return takeToken(this, pos, precise)\n },\n\n getLineTokens: function(line, precise) {\n return takeToken(this, Pos(line), precise, true)\n },\n\n getTokenTypeAt: function(pos) {\n pos = clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n var type;\n if (ch == 0) { type = styles[2]; }\n else { for (;;) {\n var mid = (before + after) >> 1;\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n else { type = styles[mid * 2 + 2]; break }\n } }\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n },\n\n getModeAt: function(pos) {\n var mode = this.doc.mode;\n if (!mode.innerMode) { return mode }\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n },\n\n getHelper: function(pos, type) {\n return this.getHelpers(pos, type)[0]\n },\n\n getHelpers: function(pos, type) {\n var found = [];\n if (!helpers.hasOwnProperty(type)) { return found }\n var help = helpers[type], mode = this.getModeAt(pos);\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) { found.push(help[mode[type]]); }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n if (val) { found.push(val); }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n { found.push(cur.val); }\n }\n return found\n },\n\n getStateAfter: function(line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n return getContextBefore(this, line + 1, precise).state\n },\n\n cursorCoords: function(start, mode) {\n var pos, range = this.doc.sel.primary();\n if (start == null) { pos = range.head; }\n else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n else { pos = start ? range.from() : range.to(); }\n return cursorCoords(this, pos, mode || \"page\")\n },\n\n charCoords: function(pos, mode) {\n return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n },\n\n coordsChar: function(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return coordsChar(this, coords.left, coords.top)\n },\n\n lineAtHeight: function(height, mode) {\n height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n return lineAtHeight(this.doc, height + this.display.viewOffset)\n },\n heightAtLine: function(line, mode, includeWidgets) {\n var end = false, lineObj;\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n if (line < this.doc.first) { line = this.doc.first; }\n else if (line > last) { line = last; end = true; }\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n (end ? this.doc.height - heightAtLine(lineObj) : 0)\n },\n\n defaultTextHeight: function() { return textHeight(this.display) },\n defaultCharWidth: function() { return charWidth(this.display) },\n\n getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n addWidget: function(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = cursorCoords(this, clipPos(this.doc, pos));\n var top = pos.bottom, left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n // Default to positioning above (if specified and possible); otherwise default to positioning below\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n { top = pos.top - node.offsetHeight; }\n else if (pos.bottom + node.offsetHeight <= vspace)\n { top = pos.bottom; }\n if (left + node.offsetWidth > hspace)\n { left = hspace - node.offsetWidth; }\n }\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") { left = 0; }\n else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n node.style.left = left + \"px\";\n }\n if (scroll)\n { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n },\n\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n\n execCommand: function(cmd) {\n if (commands.hasOwnProperty(cmd))\n { return commands[cmd].call(null, this) }\n },\n\n triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n findPosH: function(from, amount, unit, visually) {\n var dir = 1;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n cur = findPosH(this.doc, cur, dir, unit, visually);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveH: methodOp(function(dir, unit) {\n var this$1 = this;\n\n this.extendSelectionsBy(function (range) {\n if (this$1.display.shift || this$1.doc.extend || range.empty())\n { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }\n else\n { return dir < 0 ? range.from() : range.to() }\n }, sel_move);\n }),\n\n deleteH: methodOp(function(dir, unit) {\n var sel = this.doc.sel, doc = this.doc;\n if (sel.somethingSelected())\n { doc.replaceSelection(\"\", null, \"+delete\"); }\n else\n { deleteNearSelection(this, function (range) {\n var other = findPosH(doc, range.head, dir, unit, false);\n return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}\n }); }\n }),\n\n findPosV: function(from, amount, unit, goalColumn) {\n var dir = 1, x = goalColumn;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n var coords = cursorCoords(this, cur, \"div\");\n if (x == null) { x = coords.left; }\n else { coords.left = x; }\n cur = findPosV(this, coords, dir, unit);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveV: methodOp(function(dir, unit) {\n var this$1 = this;\n\n var doc = this.doc, goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range) {\n if (collapse)\n { return dir < 0 ? range.from() : range.to() }\n var headPos = cursorCoords(this$1, range.head, \"div\");\n if (range.goalColumn != null) { headPos.left = range.goalColumn; }\n goals.push(headPos.left);\n var pos = findPosV(this$1, headPos, dir, unit);\n if (unit == \"page\" && range == doc.sel.primary())\n { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n return pos\n }, sel_move);\n if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n { doc.sel.ranges[i].goalColumn = goals[i]; } }\n }),\n\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function(pos) {\n var doc = this.doc, line = getLine(doc, pos.line).text;\n var start = pos.ch, end = pos.ch;\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper)\n ? function (ch) { return isWordChar(ch, helper); }\n : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n while (start > 0 && check(line.charAt(start - 1))) { --start; }\n while (end < line.length && check(line.charAt(end))) { ++end; }\n }\n return new Range(Pos(pos.line, start), Pos(pos.line, end))\n },\n\n toggleOverwrite: function(value) {\n if (value != null && value == this.state.overwrite) { return }\n if (this.state.overwrite = !this.state.overwrite)\n { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n else\n { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function() { return this.display.input.getField() == activeElt(doc(this)) },\n isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n getScrollInfo: function() {\n var scroller = this.display.scroller;\n return {left: scroller.scrollLeft, top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n },\n\n scrollIntoView: methodOp(function(range, margin) {\n if (range == null) {\n range = {from: this.doc.sel.primary().head, to: null};\n if (margin == null) { margin = this.options.cursorScrollMargin; }\n } else if (typeof range == \"number\") {\n range = {from: Pos(range, 0), to: null};\n } else if (range.from == null) {\n range = {from: range, to: null};\n }\n if (!range.to) { range.to = range.from; }\n range.margin = margin || 0;\n\n if (range.from.line != null) {\n scrollToRange(this, range);\n } else {\n scrollToCoordsRange(this, range.from, range.to, range.margin);\n }\n }),\n\n setSize: methodOp(function(width, height) {\n var this$1 = this;\n\n var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n if (width != null) { this.display.wrapper.style.width = interpret(width); }\n if (height != null) { this.display.wrapper.style.height = interpret(height); }\n if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n var lineNo = this.display.viewFrom;\n this.doc.iter(lineNo, this.display.viewTo, function (line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, \"widget\"); break } } }\n ++lineNo;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n\n operation: function(f){return runInOp(this, f)},\n startOperation: function(){return startOperation(this)},\n endOperation: function(){return endOperation(this)},\n\n refresh: methodOp(function() {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this.display);\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)\n { estimateLineHeights(this); }\n signal(this, \"refresh\", this);\n }),\n\n swapDoc: methodOp(function(doc) {\n var old = this.doc;\n old.cm = null;\n // Cancel the current text selection if any (#5821)\n if (this.state.selectingText) { this.state.selectingText(); }\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old\n }),\n\n phrase: function(phraseText) {\n var phrases = this.options.phrases;\n return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n },\n\n getInputField: function(){return this.display.input.getField()},\n getWrapperElement: function(){return this.display.wrapper},\n getScrollerElement: function(){return this.display.scroller},\n getGutterElement: function(){return this.display.gutters}\n };\n eventMixin(CodeMirror);\n\n CodeMirror.registerHelper = function(type, name, value) {\n if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n helpers[type][name] = value;\n };\n CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n helpers[type]._global.push({pred: predicate, val: value});\n };\n }\n\n // Used for horizontal relative motion. Dir is -1 or 1 (left or\n // right), unit can be \"codepoint\", \"char\", \"column\" (like char, but\n // doesn't cross line boundaries), \"word\" (across next word), or\n // \"group\" (to the start of next group of word or\n // non-word-non-whitespace chars). The visually param controls\n // whether, in right-to-left text, direction 1 means to move towards\n // the next index in the string, or towards the character to the right\n // of the current position. The resulting position will have a\n // hitSide=true property if it reached the end of the document.\n function findPosH(doc, pos, dir, unit, visually) {\n var oldPos = pos;\n var origDir = dir;\n var lineObj = getLine(doc, pos.line);\n var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n function findNextLine() {\n var l = pos.line + lineDir;\n if (l < doc.first || l >= doc.first + doc.size) { return false }\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l)\n }\n function moveOnce(boundToLine) {\n var next;\n if (unit == \"codepoint\") {\n var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1));\n if (isNaN(ch)) {\n next = null;\n } else {\n var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF;\n next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir);\n }\n } else if (visually) {\n next = moveVisually(doc.cm, lineObj, pos, dir);\n } else {\n next = moveLogically(lineObj, pos, dir);\n }\n if (next == null) {\n if (!boundToLine && findNextLine())\n { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }\n else\n { return false }\n } else {\n pos = next;\n }\n return true\n }\n\n if (unit == \"char\" || unit == \"codepoint\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null, group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) { break }\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\"\n : group && cur == \"\\n\" ? \"n\"\n : !group || /\\s/.test(cur) ? null\n : \"p\";\n if (group && !first && !type) { type = \"s\"; }\n if (sawType && sawType != type) {\n if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n break\n }\n\n if (type) { sawType = type; }\n if (dir > 0 && !moveOnce(!first)) { break }\n }\n }\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n return result\n }\n\n // For relative vertical movement. Dir may be -1 or 1. Unit can be\n // \"page\" or \"line\". The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n function findPosV(cm, pos, dir, unit) {\n var doc = cm.doc, x = pos.left, y;\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, win(cm).innerHeight || doc(cm).documentElement.clientHeight);\n var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n var target;\n for (;;) {\n target = coordsChar(cm, x, y);\n if (!target.outside) { break }\n if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n y += dir * 5;\n }\n return target\n }\n\n // CONTENTEDITABLE INPUT STYLE\n\n var ContentEditableInput = function(cm) {\n this.cm = cm;\n this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n this.polling = new Delayed();\n this.composing = null;\n this.gracePeriod = false;\n this.readDOMTimeout = null;\n };\n\n ContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = input.cm;\n var div = input.div = display.lineDiv;\n div.contentEditable = true;\n disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n function belongsToInput(e) {\n for (var t = e.target; t; t = t.parentNode) {\n if (t == div) { return true }\n if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) { break }\n }\n return false\n }\n\n on(div, \"paste\", function (e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n });\n\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {data: e.data, done: false};\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n this$1.composing.done = true;\n }\n });\n\n on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n on(div, \"input\", function () {\n if (!this$1.composing) { this$1.readFromDOMSoon(); }\n });\n\n function onCopyCut(e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.operation(function () {\n cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n cm.replaceSelection(\"\", null, \"cut\");\n });\n }\n }\n if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\");\n // iOS exposes the clipboard API, but seems to discard content inserted into it\n e.clipboardData.setData(\"Text\", content);\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return\n }\n }\n // Old-fashioned briefly-focus-a-textarea hack\n var kludge = hiddenTextarea(), te = kludge.firstChild;\n cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n te.value = lastCopied.text.join(\"\\n\");\n var hadFocus = activeElt(div.ownerDocument);\n selectInput(te);\n setTimeout(function () {\n cm.display.lineSpace.removeChild(kludge);\n hadFocus.focus();\n if (hadFocus == div) { input.showPrimarySelection(); }\n }, 50);\n }\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\n };\n\n ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if(label) {\n this.div.setAttribute('aria-label', label);\n } else {\n this.div.removeAttribute('aria-label');\n }\n };\n\n ContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = activeElt(this.div.ownerDocument) == this.div;\n return result\n };\n\n ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) { return }\n if (info.focus || takeFocus) { this.showPrimarySelection(); }\n this.showMultipleSelections(info);\n };\n\n ContentEditableInput.prototype.getSelection = function () {\n return this.cm.display.wrapper.ownerDocument.getSelection()\n };\n\n ContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n var from = prim.from(), to = prim.to();\n\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return\n }\n\n var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n cmp(minPos(curAnchor, curFocus), from) == 0 &&\n cmp(maxPos(curAnchor, curFocus), to) == 0)\n { return }\n\n var view = cm.display.view;\n var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n {node: view[0].measure.map[2], offset: 0};\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n if (!end) {\n var measure = view[view.length - 1].measure;\n var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};\n }\n\n if (!start || !end) {\n sel.removeAllRanges();\n return\n }\n\n var old = sel.rangeCount && sel.getRangeAt(0), rng;\n try { rng = range(start.node, start.offset, end.offset, end.node); }\n catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n if (old && sel.anchorNode == null) { sel.addRange(old); }\n else if (gecko) { this.startGracePeriod(); }\n }\n this.rememberSelection();\n };\n\n ContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n if (this$1.selectionChanged())\n { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n }, 20);\n };\n\n ContentEditableInput.prototype.showMultipleSelections = function (info) {\n removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n };\n\n ContentEditableInput.prototype.rememberSelection = function () {\n var sel = this.getSelection();\n this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n };\n\n ContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n if (!sel.rangeCount) { return false }\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node)\n };\n\n ContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor() || activeElt(this.div.ownerDocument) != this.div)\n { this.showSelection(this.prepareSelection(), true); }\n this.div.focus();\n }\n };\n ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n ContentEditableInput.prototype.getField = function () { return this.div };\n\n ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n ContentEditableInput.prototype.receivedFocus = function () {\n var this$1 = this;\n\n var input = this;\n if (this.selectionInEditor())\n { setTimeout(function () { return this$1.pollSelection(); }, 20); }\n else\n { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n this.polling.set(this.cm.options.pollInterval, poll);\n };\n\n ContentEditableInput.prototype.selectionChanged = function () {\n var sel = this.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n };\n\n ContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n var sel = this.getSelection(), cm = this.cm;\n // On Android Chrome (version 56, at least), backspacing into an\n // uneditable block element will put the cursor in that element,\n // and then, because it's not editable, hide the virtual keyboard.\n // Because Android doesn't allow us to actually detect backspace\n // presses in a sane way, this code checks for when that happens\n // and simulates a backspace press in this case.\n if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n this.blur();\n this.focus();\n return\n }\n if (this.composing) { return }\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (anchor && head) { runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n }); }\n };\n\n ContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n\n var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n var from = sel.from(), to = sel.to();\n if (from.ch == 0 && from.line > cm.firstLine())\n { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n { to = Pos(to.line + 1, 0); }\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n var fromIndex, fromLine, fromNode;\n if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n fromLine = lineNo(display.view[0].line);\n fromNode = display.view[0].node;\n } else {\n fromLine = lineNo(display.view[fromIndex].line);\n fromNode = display.view[fromIndex - 1].node.nextSibling;\n }\n var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\n if (toIndex == display.view.length - 1) {\n toLine = display.viewTo - 1;\n toNode = display.lineDiv.lastChild;\n } else {\n toLine = lineNo(display.view[toIndex + 1].line) - 1;\n toNode = display.view[toIndex + 1].node.previousSibling;\n }\n\n if (!fromNode) { return false }\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n else { break }\n }\n\n var cutFront = 0, cutEnd = 0;\n var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n { ++cutFront; }\n var newBot = lst(newText), oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n oldBot.length - (oldText.length == 1 ? cutFront : 0));\n while (cutEnd < maxCutEnd &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n { ++cutEnd; }\n // Try to move start of change to start of selection if ambiguous\n if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n return true\n }\n };\n\n ContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) { return }\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n };\n ContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n\n if (this.readDOMTimeout != null) { return }\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n if (this$1.composing) {\n if (this$1.composing.done) { this$1.composing = null; }\n else { return }\n }\n this$1.updateFromDOM();\n }, 80);\n };\n\n ContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n\n if (this.cm.isReadOnly() || !this.pollContent())\n { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n };\n\n ContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n };\n\n ContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0 || this.composing) { return }\n e.preventDefault();\n if (!this.cm.isReadOnly())\n { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n };\n\n ContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n };\n\n ContentEditableInput.prototype.onContextMenu = function () {};\n ContentEditableInput.prototype.resetPosition = function () {};\n\n ContentEditableInput.prototype.needsContentAttribute = true;\n\n function posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n if (!view || view.hidden) { return null }\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n\n var order = getOrder(line, cm.doc.direction), side = \"left\";\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\n }\n var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n result.offset = result.collapse == \"right\" ? result.end : result.start;\n return result\n }\n\n function isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode)\n { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n return false\n }\n\n function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n function domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n function close() {\n if (closing) {\n text += lineSep;\n if (extraLinebreak) { text += lineSep; }\n closing = extraLinebreak = false;\n }\n }\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n if (cmText) {\n addText(cmText);\n return\n }\n var markerID = node.getAttribute(\"cm-marker\"), range;\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n if (found.length && (range = found[0].find(0)))\n { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }\n return\n }\n if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n if (isBlock) { close(); }\n for (var i = 0; i < node.childNodes.length; i++)\n { walk(node.childNodes[i]); }\n\n if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n if (isBlock) { closing = true; }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n for (;;) {\n walk(from);\n if (from == to) { break }\n from = from.nextSibling;\n extraLinebreak = false;\n }\n return text\n }\n\n function domToPos(cm, node, offset) {\n var lineNode;\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n node = null; offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n }\n }\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n if (lineView.node == lineNode)\n { return locateNodeInLineView(lineView, node, offset) }\n }\n }\n\n function locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild, bad = false;\n if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\n if (!node) {\n var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n return badPos(Pos(lineNo(line), line.text.length), bad)\n }\n }\n\n var textNode = node.nodeType == 3 ? node : null, topNode = node;\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n if (offset) { offset = textNode.nodeValue.length; }\n }\n while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n var measure = lineView.measure, maps = measure.maps;\n\n function find(textNode, topNode, offset) {\n for (var i = -1; i < (maps ? maps.length : 0); i++) {\n var map = i < 0 ? measure.map : maps[i];\n for (var j = 0; j < map.length; j += 3) {\n var curNode = map[j + 2];\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map[j] + offset;\n if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }\n return Pos(line, ch)\n }\n }\n }\n }\n var found = find(textNode, topNode, offset);\n if (found) { return badPos(found, bad) }\n\n // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n found = find(after, after.firstChild, 0);\n if (found)\n { return badPos(Pos(found.line, found.ch - dist), bad) }\n else\n { dist += after.textContent.length; }\n }\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\n if (found)\n { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n else\n { dist$1 += before.textContent.length; }\n }\n }\n\n // TEXTAREA INPUT STYLE\n\n var TextareaInput = function(cm) {\n this.cm = cm;\n // See input.poll and input.reset\n this.prevInput = \"\";\n\n // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n this.pollingFast = false;\n // Self-resetting timeout for the poller\n this.polling = new Delayed();\n // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n this.hasSelection = false;\n this.composing = null;\n this.resetting = false;\n };\n\n TextareaInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n if (ios) { te.style.width = \"0px\"; }\n\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n input.poll();\n });\n\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n cm.state.pasteIncoming = +new Date;\n input.fastPoll();\n });\n\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.setSelections(ranges.ranges, null, sel_dontScroll);\n } else {\n input.prevInput = \"\";\n te.value = ranges.text.join(\"\\n\");\n selectInput(te);\n }\n }\n if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n }\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n if (!te.dispatchEvent) {\n cm.state.pasteIncoming = +new Date;\n input.focus();\n return\n }\n\n // Pass the `paste` event to the textarea so it's handled by its event listener.\n var event = new Event(\"paste\");\n event.clipboardData = e.clipboardData;\n te.dispatchEvent(event);\n });\n\n // Prevent normal selection in the editor (we handle our own)\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) { e_preventDefault(e); }\n });\n\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n if (input.composing) { input.composing.range.clear(); }\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n };\n\n TextareaInput.prototype.createField = function (_display) {\n // Wraps and hides input textarea\n this.wrapper = hiddenTextarea();\n // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n this.textarea = this.wrapper.firstChild;\n };\n\n TextareaInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if(label) {\n this.textarea.setAttribute('aria-label', label);\n } else {\n this.textarea.removeAttribute('aria-label');\n }\n };\n\n TextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm, display = cm.display, doc = cm.doc;\n var result = prepareSelection(cm);\n\n // Move the hidden textarea near the cursor to prevent scrolling artifacts\n if (cm.options.moveInputWithCursor) {\n var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result\n };\n\n TextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm, display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n };\n\n // Reset the input to correspond to the selection (or to be empty,\n // when not typing and nothing is selected)\n TextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing && typing) { return }\n var cm = this.cm;\n this.resetting = true;\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n if (cm.state.focused) { selectInput(this.textarea); }\n if (ie && ie_version >= 9) { this.hasSelection = content; }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n }\n this.resetting = false;\n };\n\n TextareaInput.prototype.getField = function () { return this.textarea };\n\n TextareaInput.prototype.supportsTouch = function () { return false };\n\n TextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt(this.textarea.ownerDocument) != this.textarea)) {\n try { this.textarea.focus(); }\n catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n }\n };\n\n TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n TextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n };\n\n TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n // Poll for input changes, using the normal rate of polling. This\n // runs as long as the editor is focused.\n TextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n\n if (this.pollingFast) { return }\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n if (this$1.cm.state.focused) { this$1.slowPoll(); }\n });\n };\n\n // When an event has just come in that is likely to add or change\n // something in the input textarea, we poll faster, to ensure that\n // the change appears on the screen quickly.\n TextareaInput.prototype.fastPoll = function () {\n var missed = false, input = this;\n input.pollingFast = true;\n function p() {\n var changed = input.poll();\n if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n else {input.pollingFast = false; input.slowPoll();}\n }\n input.polling.set(20, p);\n };\n\n // Read input from the textarea, and update the document to match.\n // When something is selected, it is present in the textarea, and\n // selected (unless it is huge, in which case a placeholder is\n // used). When nothing is selected, the cursor sits after previously\n // seen text (can be empty), which is stored in prevInput (we must\n // not reset the textarea when typing, because that breaks IME).\n TextareaInput.prototype.poll = function () {\n var this$1 = this;\n\n var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n if (this.contextMenuPending || this.resetting || !cm.state.focused ||\n (hasSelection(input) && !prevInput && !this.composing) ||\n cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n { return false }\n\n var text = input.value;\n // If nothing changed, bail.\n if (text == prevInput && !cm.somethingSelected()) { return false }\n // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n if (ie && ie_version >= 9 && this.hasSelection === text ||\n mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false\n }\n\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n }\n // Find the part of the input that is actually new\n var same = 0, l = Math.min(prevInput.length, text.length);\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same,\n null, this$1.composing ? \"*compose\" : null);\n\n // Don't leave long text in the textarea, since it makes further polling slow\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n else { this$1.prevInput = text; }\n\n if (this$1.composing) {\n this$1.composing.range.clear();\n this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n {className: \"CodeMirror-composing\"});\n }\n });\n return true\n };\n\n TextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n };\n\n TextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n this.fastPoll();\n };\n\n TextareaInput.prototype.onContextMenu = function (e) {\n var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n if (input.contextMenuPending) { input.contextMenuPending(); }\n var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n if (!pos || presto) { return } // Opera is difficult.\n\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n var reset = cm.options.resetSelectionOnContextMenu;\n if (reset && cm.doc.sel.contains(pos) == -1)\n { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n input.wrapper.style.cssText = \"position: static\";\n te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n var oldScrollY;\n if (webkit) { oldScrollY = te.ownerDocument.defaultView.scrollY; } // Work around Chrome issue (#2712)\n display.input.focus();\n if (webkit) { te.ownerDocument.defaultView.scrollTo(null, oldScrollY); }\n display.input.reset();\n // Adds \"Select all\" to context menu in FF\n if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n input.contextMenuPending = rehide;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll);\n\n // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n function prepareSelectAllHack() {\n if (te.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = \"\\u200b\" + (selected ? te.value : \"\");\n te.value = \"\\u21da\"; // Used to catch context-menu undo\n te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200b\";\n te.selectionStart = 1; te.selectionEnd = extval.length;\n // Re-set this, in case some other handler touched the\n // selection in the meantime.\n display.selForContextMenu = cm.doc.sel;\n }\n }\n function rehide() {\n if (input.contextMenuPending != rehide) { return }\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n // Try to detect the user choosing select-all\n if (te.selectionStart != null) {\n if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n var i = 0, poll = function () {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n if (captureRightClick) {\n e_stop(e);\n var mouseup = function () {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n };\n\n TextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) { this.reset(); }\n this.textarea.disabled = val == \"nocursor\";\n this.textarea.readOnly = !!val;\n };\n\n TextareaInput.prototype.setUneditable = function () {};\n\n TextareaInput.prototype.needsContentAttribute = false;\n\n function fromTextArea(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n if (!options.tabindex && textarea.tabIndex)\n { options.tabindex = textarea.tabIndex; }\n if (!options.placeholder && textarea.placeholder)\n { options.placeholder = textarea.placeholder; }\n // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n if (options.autofocus == null) {\n var hasFocus = activeElt(textarea.ownerDocument);\n options.autofocus = hasFocus == textarea ||\n textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {textarea.value = cm.getValue();}\n\n var realSubmit;\n if (textarea.form) {\n on(textarea.form, \"submit\", save);\n // Deplorable hack to make the submit method do the right thing.\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\n try {\n var wrappedSubmit = form.submit = function () {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch(e) {}\n }\n }\n\n options.finishInit = function (cm) {\n cm.save = save;\n cm.getTextArea = function () { return textarea; };\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\")\n { textarea.form.submit = realSubmit; }\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n options);\n return cm\n }\n\n function addLegacyProps(CodeMirror) {\n CodeMirror.off = off;\n CodeMirror.on = on;\n CodeMirror.wheelEventPixels = wheelEventPixels;\n CodeMirror.Doc = Doc;\n CodeMirror.splitLines = splitLinesAuto;\n CodeMirror.countColumn = countColumn;\n CodeMirror.findColumn = findColumn;\n CodeMirror.isWordChar = isWordCharBasic;\n CodeMirror.Pass = Pass;\n CodeMirror.signal = signal;\n CodeMirror.Line = Line;\n CodeMirror.changeEnd = changeEnd;\n CodeMirror.scrollbarModel = scrollbarModel;\n CodeMirror.Pos = Pos;\n CodeMirror.cmpPos = cmp;\n CodeMirror.modes = modes;\n CodeMirror.mimeModes = mimeModes;\n CodeMirror.resolveMode = resolveMode;\n CodeMirror.getMode = getMode;\n CodeMirror.modeExtensions = modeExtensions;\n CodeMirror.extendMode = extendMode;\n CodeMirror.copyState = copyState;\n CodeMirror.startState = startState;\n CodeMirror.innerMode = innerMode;\n CodeMirror.commands = commands;\n CodeMirror.keyMap = keyMap;\n CodeMirror.keyName = keyName;\n CodeMirror.isModifierKey = isModifierKey;\n CodeMirror.lookupKey = lookupKey;\n CodeMirror.normalizeKeyMap = normalizeKeyMap;\n CodeMirror.StringStream = StringStream;\n CodeMirror.SharedTextMarker = SharedTextMarker;\n CodeMirror.TextMarker = TextMarker;\n CodeMirror.LineWidget = LineWidget;\n CodeMirror.e_preventDefault = e_preventDefault;\n CodeMirror.e_stopPropagation = e_stopPropagation;\n CodeMirror.e_stop = e_stop;\n CodeMirror.addClass = addClass;\n CodeMirror.contains = contains;\n CodeMirror.rmClass = rmClass;\n CodeMirror.keyNames = keyNames;\n }\n\n // EDITOR CONSTRUCTOR\n\n defineOptions(CodeMirror);\n\n addEditorMethods(CodeMirror);\n\n // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n { CodeMirror.prototype[prop] = (function(method) {\n return function() {return method.apply(this.doc, arguments)}\n })(Doc.prototype[prop]); } }\n\n eventMixin(Doc);\n CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n CodeMirror.defineMode = function(name/*, mode, …*/) {\n if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n defineMode.apply(this, arguments);\n };\n\n CodeMirror.defineMIME = defineMIME;\n\n // Minimal default mode.\n CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n // EXTENSIONS\n\n CodeMirror.defineExtension = function (name, func) {\n CodeMirror.prototype[name] = func;\n };\n CodeMirror.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n };\n\n CodeMirror.fromTextArea = fromTextArea;\n\n addLegacyProps(CodeMirror);\n\n CodeMirror.version = \"5.65.8\";\n\n return CodeMirror;\n\n})));\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n var indentUnit = config.indentUnit;\n var statementIndent = parserConfig.statementIndent;\n var jsonldMode = parserConfig.jsonld;\n var jsonMode = parserConfig.json || jsonldMode;\n var trackScope = parserConfig.trackScope !== false\n var isTS = parserConfig.typescript;\n var wordRE = parserConfig.wordCharacters || /[\\w$\\xa1-\\uffff]/;\n\n // Tokenizer\n\n var keywords = function(){\n function kw(type) {return {type: type, style: \"keyword\"};}\n var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\"), D = kw(\"keyword d\");\n var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n\n return {\n \"if\": kw(\"if\"), \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n \"return\": D, \"break\": D, \"continue\": D, \"new\": kw(\"new\"), \"delete\": C, \"void\": C, \"throw\": C,\n \"debugger\": kw(\"debugger\"), \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom,\n \"this\": kw(\"this\"), \"class\": kw(\"class\"), \"super\": kw(\"atom\"),\n \"yield\": C, \"export\": kw(\"export\"), \"import\": kw(\"import\"), \"extends\": C,\n \"await\": C\n };\n }();\n\n var isOperatorChar = /[+\\-*&%=<>!?|~^@]/;\n var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;\n\n function readRegexp(stream) {\n var escaped = false, next, inSet = false;\n while ((next = stream.next()) != null) {\n if (!escaped) {\n if (next == \"/\" && !inSet) return;\n if (next == \"[\") inSet = true;\n else if (inSet && next == \"]\") inSet = false;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n }\n\n // Used as scratch variables to communicate multiple values without\n // consing up tons of objects.\n var type, content;\n function ret(tp, style, cont) {\n type = tp; content = cont;\n return style;\n }\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"' || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n } else if (ch == \".\" && stream.match(/^\\d[\\d_]*(?:[eE][+\\-]?[\\d_]+)?/)) {\n return ret(\"number\", \"number\");\n } else if (ch == \".\" && stream.match(\"..\")) {\n return ret(\"spread\", \"meta\");\n } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n return ret(ch);\n } else if (ch == \"=\" && stream.eat(\">\")) {\n return ret(\"=>\", \"operator\");\n } else if (ch == \"0\" && stream.match(/^(?:x[\\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) {\n return ret(\"number\", \"number\");\n } else if (/\\d/.test(ch)) {\n stream.match(/^[\\d_]*(?:n|(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)?/);\n return ret(\"number\", \"number\");\n } else if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize = tokenComment;\n return tokenComment(stream, state);\n } else if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return ret(\"comment\", \"comment\");\n } else if (expressionAllowed(stream, state, 1)) {\n readRegexp(stream);\n stream.match(/^\\b(([gimyus])(?![gimyus]*\\2))+\\b/);\n return ret(\"regexp\", \"string-2\");\n } else {\n stream.eat(\"=\");\n return ret(\"operator\", \"operator\", stream.current());\n }\n } else if (ch == \"`\") {\n state.tokenize = tokenQuasi;\n return tokenQuasi(stream, state);\n } else if (ch == \"#\" && stream.peek() == \"!\") {\n stream.skipToEnd();\n return ret(\"meta\", \"meta\");\n } else if (ch == \"#\" && stream.eatWhile(wordRE)) {\n return ret(\"variable\", \"property\")\n } else if (ch == \"<\" && stream.match(\"!--\") ||\n (ch == \"-\" && stream.match(\"->\") && !/\\S/.test(stream.string.slice(0, stream.start)))) {\n stream.skipToEnd()\n return ret(\"comment\", \"comment\")\n } else if (isOperatorChar.test(ch)) {\n if (ch != \">\" || !state.lexical || state.lexical.type != \">\") {\n if (stream.eat(\"=\")) {\n if (ch == \"!\" || ch == \"=\") stream.eat(\"=\")\n } else if (/[<>*+\\-|&?]/.test(ch)) {\n stream.eat(ch)\n if (ch == \">\") stream.eat(ch)\n }\n }\n if (ch == \"?\" && stream.eat(\".\")) return ret(\".\")\n return ret(\"operator\", \"operator\", stream.current());\n } else if (wordRE.test(ch)) {\n stream.eatWhile(wordRE);\n var word = stream.current()\n if (state.lastType != \".\") {\n if (keywords.propertyIsEnumerable(word)) {\n var kw = keywords[word]\n return ret(kw.type, kw.style, word)\n }\n if (word == \"async\" && stream.match(/^(\\s|\\/\\*([^*]|\\*(?!\\/))*?\\*\\/)*[\\[\\(\\w]/, false))\n return ret(\"async\", \"keyword\", word)\n }\n return ret(\"variable\", \"variable\", word)\n }\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, next;\n if (jsonldMode && stream.peek() == \"@\" && stream.match(isJsonldKeyword)){\n state.tokenize = tokenBase;\n return ret(\"jsonld-keyword\", \"meta\");\n }\n while ((next = stream.next()) != null) {\n if (next == quote && !escaped) break;\n escaped = !escaped && next == \"\\\\\";\n }\n if (!escaped) state.tokenize = tokenBase;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize = tokenBase;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return ret(\"comment\", \"comment\");\n }\n\n function tokenQuasi(stream, state) {\n var escaped = false, next;\n while ((next = stream.next()) != null) {\n if (!escaped && (next == \"`\" || next == \"$\" && stream.eat(\"{\"))) {\n state.tokenize = tokenBase;\n break;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n return ret(\"quasi\", \"string-2\", stream.current());\n }\n\n var brackets = \"([{}])\";\n // This is a crude lookahead trick to try and notice that we're\n // parsing the argument patterns for a fat-arrow function before we\n // actually hit the arrow token. It only works if the arrow is on\n // the same line as the arguments and there's no strange noise\n // (comments) in between. Fallback is to only notice when we hit the\n // arrow, and not declare the arguments as locals for the arrow\n // body.\n function findFatArrow(stream, state) {\n if (state.fatArrowAt) state.fatArrowAt = null;\n var arrow = stream.string.indexOf(\"=>\", stream.start);\n if (arrow < 0) return;\n\n if (isTS) { // Try to skip TypeScript return type declarations after the arguments\n var m = /:\\s*(?:\\w+(?:<[^>]*>|\\[\\])?|\\{[^}]*\\})\\s*$/.exec(stream.string.slice(stream.start, arrow))\n if (m) arrow = m.index\n }\n\n var depth = 0, sawSomething = false;\n for (var pos = arrow - 1; pos >= 0; --pos) {\n var ch = stream.string.charAt(pos);\n var bracket = brackets.indexOf(ch);\n if (bracket >= 0 && bracket < 3) {\n if (!depth) { ++pos; break; }\n if (--depth == 0) { if (ch == \"(\") sawSomething = true; break; }\n } else if (bracket >= 3 && bracket < 6) {\n ++depth;\n } else if (wordRE.test(ch)) {\n sawSomething = true;\n } else if (/[\"'\\/`]/.test(ch)) {\n for (;; --pos) {\n if (pos == 0) return\n var next = stream.string.charAt(pos - 1)\n if (next == ch && stream.string.charAt(pos - 2) != \"\\\\\") { pos--; break }\n }\n } else if (sawSomething && !depth) {\n ++pos;\n break;\n }\n }\n if (sawSomething && !depth) state.fatArrowAt = pos;\n }\n\n // Parser\n\n var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true,\n \"regexp\": true, \"this\": true, \"import\": true, \"jsonld-keyword\": true};\n\n function JSLexical(indented, column, type, align, prev, info) {\n this.indented = indented;\n this.column = column;\n this.type = type;\n this.prev = prev;\n this.info = info;\n if (align != null) this.align = align;\n }\n\n function inScope(state, varname) {\n if (!trackScope) return false\n for (var v = state.localVars; v; v = v.next)\n if (v.name == varname) return true;\n for (var cx = state.context; cx; cx = cx.prev) {\n for (var v = cx.vars; v; v = v.next)\n if (v.name == varname) return true;\n }\n }\n\n function parseJS(state, style, type, content, stream) {\n var cc = state.cc;\n // Communicate our context to the combinators.\n // (Less wasteful than consing up a hundred closures on every call.)\n cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;\n\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = true;\n\n while(true) {\n var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n if (combinator(type, content)) {\n while(cc.length && cc[cc.length - 1].lex)\n cc.pop()();\n if (cx.marked) return cx.marked;\n if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n return style;\n }\n }\n }\n\n // Combinator utils\n\n var cx = {state: null, column: null, marked: null, cc: null};\n function pass() {\n for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n }\n function cont() {\n pass.apply(null, arguments);\n return true;\n }\n function inList(name, list) {\n for (var v = list; v; v = v.next) if (v.name == name) return true\n return false;\n }\n function register(varname) {\n var state = cx.state;\n cx.marked = \"def\";\n if (!trackScope) return\n if (state.context) {\n if (state.lexical.info == \"var\" && state.context && state.context.block) {\n // FIXME function decls are also not block scoped\n var newContext = registerVarScoped(varname, state.context)\n if (newContext != null) {\n state.context = newContext\n return\n }\n } else if (!inList(varname, state.localVars)) {\n state.localVars = new Var(varname, state.localVars)\n return\n }\n }\n // Fall through means this is global\n if (parserConfig.globalVars && !inList(varname, state.globalVars))\n state.globalVars = new Var(varname, state.globalVars)\n }\n function registerVarScoped(varname, context) {\n if (!context) {\n return null\n } else if (context.block) {\n var inner = registerVarScoped(varname, context.prev)\n if (!inner) return null\n if (inner == context.prev) return context\n return new Context(inner, context.vars, true)\n } else if (inList(varname, context.vars)) {\n return context\n } else {\n return new Context(context.prev, new Var(varname, context.vars), false)\n }\n }\n\n function isModifier(name) {\n return name == \"public\" || name == \"private\" || name == \"protected\" || name == \"abstract\" || name == \"readonly\"\n }\n\n // Combinators\n\n function Context(prev, vars, block) { this.prev = prev; this.vars = vars; this.block = block }\n function Var(name, next) { this.name = name; this.next = next }\n\n var defaultVars = new Var(\"this\", new Var(\"arguments\", null))\n function pushcontext() {\n cx.state.context = new Context(cx.state.context, cx.state.localVars, false)\n cx.state.localVars = defaultVars\n }\n function pushblockcontext() {\n cx.state.context = new Context(cx.state.context, cx.state.localVars, true)\n cx.state.localVars = null\n }\n pushcontext.lex = pushblockcontext.lex = true\n function popcontext() {\n cx.state.localVars = cx.state.context.vars\n cx.state.context = cx.state.context.prev\n }\n popcontext.lex = true\n function pushlex(type, info) {\n var result = function() {\n var state = cx.state, indent = state.indented;\n if (state.lexical.type == \"stat\") indent = state.lexical.indented;\n else for (var outer = state.lexical; outer && outer.type == \")\" && outer.align; outer = outer.prev)\n indent = outer.indented;\n state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);\n };\n result.lex = true;\n return result;\n }\n function poplex() {\n var state = cx.state;\n if (state.lexical.prev) {\n if (state.lexical.type == \")\")\n state.indented = state.lexical.indented;\n state.lexical = state.lexical.prev;\n }\n }\n poplex.lex = true;\n\n function expect(wanted) {\n function exp(type) {\n if (type == wanted) return cont();\n else if (wanted == \";\" || type == \"}\" || type == \")\" || type == \"]\") return pass();\n else return cont(exp);\n };\n return exp;\n }\n\n function statement(type, value) {\n if (type == \"var\") return cont(pushlex(\"vardef\", value), vardef, expect(\";\"), poplex);\n if (type == \"keyword a\") return cont(pushlex(\"form\"), parenExpr, statement, poplex);\n if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n if (type == \"keyword d\") return cx.stream.match(/^\\s*$/, false) ? cont() : cont(pushlex(\"stat\"), maybeexpression, expect(\";\"), poplex);\n if (type == \"debugger\") return cont(expect(\";\"));\n if (type == \"{\") return cont(pushlex(\"}\"), pushblockcontext, block, poplex, popcontext);\n if (type == \";\") return cont();\n if (type == \"if\") {\n if (cx.state.lexical.info == \"else\" && cx.state.cc[cx.state.cc.length - 1] == poplex)\n cx.state.cc.pop()();\n return cont(pushlex(\"form\"), parenExpr, statement, poplex, maybeelse);\n }\n if (type == \"function\") return cont(functiondef);\n if (type == \"for\") return cont(pushlex(\"form\"), pushblockcontext, forspec, statement, popcontext, poplex);\n if (type == \"class\" || (isTS && value == \"interface\")) {\n cx.marked = \"keyword\"\n return cont(pushlex(\"form\", type == \"class\" ? type : value), className, poplex)\n }\n if (type == \"variable\") {\n if (isTS && value == \"declare\") {\n cx.marked = \"keyword\"\n return cont(statement)\n } else if (isTS && (value == \"module\" || value == \"enum\" || value == \"type\") && cx.stream.match(/^\\s*\\w/, false)) {\n cx.marked = \"keyword\"\n if (value == \"enum\") return cont(enumdef);\n else if (value == \"type\") return cont(typename, expect(\"operator\"), typeexpr, expect(\";\"));\n else return cont(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), block, poplex, poplex)\n } else if (isTS && value == \"namespace\") {\n cx.marked = \"keyword\"\n return cont(pushlex(\"form\"), expression, statement, poplex)\n } else if (isTS && value == \"abstract\") {\n cx.marked = \"keyword\"\n return cont(statement)\n } else {\n return cont(pushlex(\"stat\"), maybelabel);\n }\n }\n if (type == \"switch\") return cont(pushlex(\"form\"), parenExpr, expect(\"{\"), pushlex(\"}\", \"switch\"), pushblockcontext,\n block, poplex, poplex, popcontext);\n if (type == \"case\") return cont(expression, expect(\":\"));\n if (type == \"default\") return cont(expect(\":\"));\n if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, maybeCatchBinding, statement, poplex, popcontext);\n if (type == \"export\") return cont(pushlex(\"stat\"), afterExport, poplex);\n if (type == \"import\") return cont(pushlex(\"stat\"), afterImport, poplex);\n if (type == \"async\") return cont(statement)\n if (value == \"@\") return cont(expression, statement)\n return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n }\n function maybeCatchBinding(type) {\n if (type == \"(\") return cont(funarg, expect(\")\"))\n }\n function expression(type, value) {\n return expressionInner(type, value, false);\n }\n function expressionNoComma(type, value) {\n return expressionInner(type, value, true);\n }\n function parenExpr(type) {\n if (type != \"(\") return pass()\n return cont(pushlex(\")\"), maybeexpression, expect(\")\"), poplex)\n }\n function expressionInner(type, value, noComma) {\n if (cx.state.fatArrowAt == cx.stream.start) {\n var body = noComma ? arrowBodyNoComma : arrowBody;\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, expect(\"=>\"), body, popcontext);\n else if (type == \"variable\") return pass(pushcontext, pattern, expect(\"=>\"), body, popcontext);\n }\n\n var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;\n if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);\n if (type == \"function\") return cont(functiondef, maybeop);\n if (type == \"class\" || (isTS && value == \"interface\")) { cx.marked = \"keyword\"; return cont(pushlex(\"form\"), classExpression, poplex); }\n if (type == \"keyword c\" || type == \"async\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, expect(\")\"), poplex, maybeop);\n if (type == \"operator\" || type == \"spread\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"[\") return cont(pushlex(\"]\"), arrayLiteral, poplex, maybeop);\n if (type == \"{\") return contCommasep(objprop, \"}\", null, maybeop);\n if (type == \"quasi\") return pass(quasi, maybeop);\n if (type == \"new\") return cont(maybeTarget(noComma));\n return cont();\n }\n function maybeexpression(type) {\n if (type.match(/[;\\}\\)\\],]/)) return pass();\n return pass(expression);\n }\n\n function maybeoperatorComma(type, value) {\n if (type == \",\") return cont(maybeexpression);\n return maybeoperatorNoComma(type, value, false);\n }\n function maybeoperatorNoComma(type, value, noComma) {\n var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;\n var expr = noComma == false ? expression : expressionNoComma;\n if (type == \"=>\") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);\n if (type == \"operator\") {\n if (/\\+\\+|--/.test(value) || isTS && value == \"!\") return cont(me);\n if (isTS && value == \"<\" && cx.stream.match(/^([^<>]|<[^<>]*>)*>\\s*\\(/, false))\n return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, me);\n if (value == \"?\") return cont(expression, expect(\":\"), expr);\n return cont(expr);\n }\n if (type == \"quasi\") { return pass(quasi, me); }\n if (type == \";\") return;\n if (type == \"(\") return contCommasep(expressionNoComma, \")\", \"call\", me);\n if (type == \".\") return cont(property, me);\n if (type == \"[\") return cont(pushlex(\"]\"), maybeexpression, expect(\"]\"), poplex, me);\n if (isTS && value == \"as\") { cx.marked = \"keyword\"; return cont(typeexpr, me) }\n if (type == \"regexp\") {\n cx.state.lastType = cx.marked = \"operator\"\n cx.stream.backUp(cx.stream.pos - cx.stream.start - 1)\n return cont(expr)\n }\n }\n function quasi(type, value) {\n if (type != \"quasi\") return pass();\n if (value.slice(value.length - 2) != \"${\") return cont(quasi);\n return cont(maybeexpression, continueQuasi);\n }\n function continueQuasi(type) {\n if (type == \"}\") {\n cx.marked = \"string-2\";\n cx.state.tokenize = tokenQuasi;\n return cont(quasi);\n }\n }\n function arrowBody(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expression);\n }\n function arrowBodyNoComma(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expressionNoComma);\n }\n function maybeTarget(noComma) {\n return function(type) {\n if (type == \".\") return cont(noComma ? targetNoComma : target);\n else if (type == \"variable\" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma)\n else return pass(noComma ? expressionNoComma : expression);\n };\n }\n function target(_, value) {\n if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorComma); }\n }\n function targetNoComma(_, value) {\n if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorNoComma); }\n }\n function maybelabel(type) {\n if (type == \":\") return cont(poplex, statement);\n return pass(maybeoperatorComma, expect(\";\"), poplex);\n }\n function property(type) {\n if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n }\n function objprop(type, value) {\n if (type == \"async\") {\n cx.marked = \"property\";\n return cont(objprop);\n } else if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n if (value == \"get\" || value == \"set\") return cont(getterSetter);\n var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params\n if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\\s*:\\s*/, false)))\n cx.state.fatArrowAt = cx.stream.pos + m[0].length\n return cont(afterprop);\n } else if (type == \"number\" || type == \"string\") {\n cx.marked = jsonldMode ? \"property\" : (cx.style + \" property\");\n return cont(afterprop);\n } else if (type == \"jsonld-keyword\") {\n return cont(afterprop);\n } else if (isTS && isModifier(value)) {\n cx.marked = \"keyword\"\n return cont(objprop)\n } else if (type == \"[\") {\n return cont(expression, maybetype, expect(\"]\"), afterprop);\n } else if (type == \"spread\") {\n return cont(expressionNoComma, afterprop);\n } else if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(objprop);\n } else if (type == \":\") {\n return pass(afterprop)\n }\n }\n function getterSetter(type) {\n if (type != \"variable\") return pass(afterprop);\n cx.marked = \"property\";\n return cont(functiondef);\n }\n function afterprop(type) {\n if (type == \":\") return cont(expressionNoComma);\n if (type == \"(\") return pass(functiondef);\n }\n function commasep(what, end, sep) {\n function proceed(type, value) {\n if (sep ? sep.indexOf(type) > -1 : type == \",\") {\n var lex = cx.state.lexical;\n if (lex.info == \"call\") lex.pos = (lex.pos || 0) + 1;\n return cont(function(type, value) {\n if (type == end || value == end) return pass()\n return pass(what)\n }, proceed);\n }\n if (type == end || value == end) return cont();\n if (sep && sep.indexOf(\";\") > -1) return pass(what)\n return cont(expect(end));\n }\n return function(type, value) {\n if (type == end || value == end) return cont();\n return pass(what, proceed);\n };\n }\n function contCommasep(what, end, info) {\n for (var i = 3; i < arguments.length; i++)\n cx.cc.push(arguments[i]);\n return cont(pushlex(end, info), commasep(what, end), poplex);\n }\n function block(type) {\n if (type == \"}\") return cont();\n return pass(statement, block);\n }\n function maybetype(type, value) {\n if (isTS) {\n if (type == \":\") return cont(typeexpr);\n if (value == \"?\") return cont(maybetype);\n }\n }\n function maybetypeOrIn(type, value) {\n if (isTS && (type == \":\" || value == \"in\")) return cont(typeexpr)\n }\n function mayberettype(type) {\n if (isTS && type == \":\") {\n if (cx.stream.match(/^\\s*\\w+\\s+is\\b/, false)) return cont(expression, isKW, typeexpr)\n else return cont(typeexpr)\n }\n }\n function isKW(_, value) {\n if (value == \"is\") {\n cx.marked = \"keyword\"\n return cont()\n }\n }\n function typeexpr(type, value) {\n if (value == \"keyof\" || value == \"typeof\" || value == \"infer\" || value == \"readonly\") {\n cx.marked = \"keyword\"\n return cont(value == \"typeof\" ? expressionNoComma : typeexpr)\n }\n if (type == \"variable\" || value == \"void\") {\n cx.marked = \"type\"\n return cont(afterType)\n }\n if (value == \"|\" || value == \"&\") return cont(typeexpr)\n if (type == \"string\" || type == \"number\" || type == \"atom\") return cont(afterType);\n if (type == \"[\") return cont(pushlex(\"]\"), commasep(typeexpr, \"]\", \",\"), poplex, afterType)\n if (type == \"{\") return cont(pushlex(\"}\"), typeprops, poplex, afterType)\n if (type == \"(\") return cont(commasep(typearg, \")\"), maybeReturnType, afterType)\n if (type == \"<\") return cont(commasep(typeexpr, \">\"), typeexpr)\n if (type == \"quasi\") { return pass(quasiType, afterType); }\n }\n function maybeReturnType(type) {\n if (type == \"=>\") return cont(typeexpr)\n }\n function typeprops(type) {\n if (type.match(/[\\}\\)\\]]/)) return cont()\n if (type == \",\" || type == \";\") return cont(typeprops)\n return pass(typeprop, typeprops)\n }\n function typeprop(type, value) {\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\"\n return cont(typeprop)\n } else if (value == \"?\" || type == \"number\" || type == \"string\") {\n return cont(typeprop)\n } else if (type == \":\") {\n return cont(typeexpr)\n } else if (type == \"[\") {\n return cont(expect(\"variable\"), maybetypeOrIn, expect(\"]\"), typeprop)\n } else if (type == \"(\") {\n return pass(functiondecl, typeprop)\n } else if (!type.match(/[;\\}\\)\\],]/)) {\n return cont()\n }\n }\n function quasiType(type, value) {\n if (type != \"quasi\") return pass();\n if (value.slice(value.length - 2) != \"${\") return cont(quasiType);\n return cont(typeexpr, continueQuasiType);\n }\n function continueQuasiType(type) {\n if (type == \"}\") {\n cx.marked = \"string-2\";\n cx.state.tokenize = tokenQuasi;\n return cont(quasiType);\n }\n }\n function typearg(type, value) {\n if (type == \"variable\" && cx.stream.match(/^\\s*[?:]/, false) || value == \"?\") return cont(typearg)\n if (type == \":\") return cont(typeexpr)\n if (type == \"spread\") return cont(typearg)\n return pass(typeexpr)\n }\n function afterType(type, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n if (value == \"|\" || type == \".\" || value == \"&\") return cont(typeexpr)\n if (type == \"[\") return cont(typeexpr, expect(\"]\"), afterType)\n if (value == \"extends\" || value == \"implements\") { cx.marked = \"keyword\"; return cont(typeexpr) }\n if (value == \"?\") return cont(typeexpr, expect(\":\"), typeexpr)\n }\n function maybeTypeArgs(_, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n }\n function typeparam() {\n return pass(typeexpr, maybeTypeDefault)\n }\n function maybeTypeDefault(_, value) {\n if (value == \"=\") return cont(typeexpr)\n }\n function vardef(_, value) {\n if (value == \"enum\") {cx.marked = \"keyword\"; return cont(enumdef)}\n return pass(pattern, maybetype, maybeAssign, vardefCont);\n }\n function pattern(type, value) {\n if (isTS && isModifier(value)) { cx.marked = \"keyword\"; return cont(pattern) }\n if (type == \"variable\") { register(value); return cont(); }\n if (type == \"spread\") return cont(pattern);\n if (type == \"[\") return contCommasep(eltpattern, \"]\");\n if (type == \"{\") return contCommasep(proppattern, \"}\");\n }\n function proppattern(type, value) {\n if (type == \"variable\" && !cx.stream.match(/^\\s*:/, false)) {\n register(value);\n return cont(maybeAssign);\n }\n if (type == \"variable\") cx.marked = \"property\";\n if (type == \"spread\") return cont(pattern);\n if (type == \"}\") return pass();\n if (type == \"[\") return cont(expression, expect(']'), expect(':'), proppattern);\n return cont(expect(\":\"), pattern, maybeAssign);\n }\n function eltpattern() {\n return pass(pattern, maybeAssign)\n }\n function maybeAssign(_type, value) {\n if (value == \"=\") return cont(expressionNoComma);\n }\n function vardefCont(type) {\n if (type == \",\") return cont(vardef);\n }\n function maybeelse(type, value) {\n if (type == \"keyword b\" && value == \"else\") return cont(pushlex(\"form\", \"else\"), statement, poplex);\n }\n function forspec(type, value) {\n if (value == \"await\") return cont(forspec);\n if (type == \"(\") return cont(pushlex(\")\"), forspec1, poplex);\n }\n function forspec1(type) {\n if (type == \"var\") return cont(vardef, forspec2);\n if (type == \"variable\") return cont(forspec2);\n return pass(forspec2)\n }\n function forspec2(type, value) {\n if (type == \")\") return cont()\n if (type == \";\") return cont(forspec2)\n if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression, forspec2) }\n return pass(expression, forspec2)\n }\n function functiondef(type, value) {\n if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondef);}\n if (type == \"variable\") {register(value); return cont(functiondef);}\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, mayberettype, statement, popcontext);\n if (isTS && value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, functiondef)\n }\n function functiondecl(type, value) {\n if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondecl);}\n if (type == \"variable\") {register(value); return cont(functiondecl);}\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, mayberettype, popcontext);\n if (isTS && value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, functiondecl)\n }\n function typename(type, value) {\n if (type == \"keyword\" || type == \"variable\") {\n cx.marked = \"type\"\n return cont(typename)\n } else if (value == \"<\") {\n return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex)\n }\n }\n function funarg(type, value) {\n if (value == \"@\") cont(expression, funarg)\n if (type == \"spread\") return cont(funarg);\n if (isTS && isModifier(value)) { cx.marked = \"keyword\"; return cont(funarg); }\n if (isTS && type == \"this\") return cont(maybetype, maybeAssign)\n return pass(pattern, maybetype, maybeAssign);\n }\n function classExpression(type, value) {\n // Class expressions may have an optional name.\n if (type == \"variable\") return className(type, value);\n return classNameAfter(type, value);\n }\n function className(type, value) {\n if (type == \"variable\") {register(value); return cont(classNameAfter);}\n }\n function classNameAfter(type, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, classNameAfter)\n if (value == \"extends\" || value == \"implements\" || (isTS && type == \",\")) {\n if (value == \"implements\") cx.marked = \"keyword\";\n return cont(isTS ? typeexpr : expression, classNameAfter);\n }\n if (type == \"{\") return cont(pushlex(\"}\"), classBody, poplex);\n }\n function classBody(type, value) {\n if (type == \"async\" ||\n (type == \"variable\" &&\n (value == \"static\" || value == \"get\" || value == \"set\" || (isTS && isModifier(value))) &&\n cx.stream.match(/^\\s+[\\w$\\xa1-\\uffff]/, false))) {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n return cont(classfield, classBody);\n }\n if (type == \"number\" || type == \"string\") return cont(classfield, classBody);\n if (type == \"[\")\n return cont(expression, maybetype, expect(\"]\"), classfield, classBody)\n if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n if (isTS && type == \"(\") return pass(functiondecl, classBody)\n if (type == \";\" || type == \",\") return cont(classBody);\n if (type == \"}\") return cont();\n if (value == \"@\") return cont(expression, classBody)\n }\n function classfield(type, value) {\n if (value == \"!\") return cont(classfield)\n if (value == \"?\") return cont(classfield)\n if (type == \":\") return cont(typeexpr, maybeAssign)\n if (value == \"=\") return cont(expressionNoComma)\n var context = cx.state.lexical.prev, isInterface = context && context.info == \"interface\"\n return pass(isInterface ? functiondecl : functiondef)\n }\n function afterExport(type, value) {\n if (value == \"*\") { cx.marked = \"keyword\"; return cont(maybeFrom, expect(\";\")); }\n if (value == \"default\") { cx.marked = \"keyword\"; return cont(expression, expect(\";\")); }\n if (type == \"{\") return cont(commasep(exportField, \"}\"), maybeFrom, expect(\";\"));\n return pass(statement);\n }\n function exportField(type, value) {\n if (value == \"as\") { cx.marked = \"keyword\"; return cont(expect(\"variable\")); }\n if (type == \"variable\") return pass(expressionNoComma, exportField);\n }\n function afterImport(type) {\n if (type == \"string\") return cont();\n if (type == \"(\") return pass(expression);\n if (type == \".\") return pass(maybeoperatorComma);\n return pass(importSpec, maybeMoreImports, maybeFrom);\n }\n function importSpec(type, value) {\n if (type == \"{\") return contCommasep(importSpec, \"}\");\n if (type == \"variable\") register(value);\n if (value == \"*\") cx.marked = \"keyword\";\n return cont(maybeAs);\n }\n function maybeMoreImports(type) {\n if (type == \",\") return cont(importSpec, maybeMoreImports)\n }\n function maybeAs(_type, value) {\n if (value == \"as\") { cx.marked = \"keyword\"; return cont(importSpec); }\n }\n function maybeFrom(_type, value) {\n if (value == \"from\") { cx.marked = \"keyword\"; return cont(expression); }\n }\n function arrayLiteral(type) {\n if (type == \"]\") return cont();\n return pass(commasep(expressionNoComma, \"]\"));\n }\n function enumdef() {\n return pass(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), commasep(enummember, \"}\"), poplex, poplex)\n }\n function enummember() {\n return pass(pattern, maybeAssign);\n }\n\n function isContinuedStatement(state, textAfter) {\n return state.lastType == \"operator\" || state.lastType == \",\" ||\n isOperatorChar.test(textAfter.charAt(0)) ||\n /[,.]/.test(textAfter.charAt(0));\n }\n\n function expressionAllowed(stream, state, backUp) {\n return state.tokenize == tokenBase &&\n /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\\[{}\\(,;:]|=>)$/.test(state.lastType) ||\n (state.lastType == \"quasi\" && /\\{\\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))\n }\n\n // Interface\n\n return {\n startState: function(basecolumn) {\n var state = {\n tokenize: tokenBase,\n lastType: \"sof\",\n cc: [],\n lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n localVars: parserConfig.localVars,\n context: parserConfig.localVars && new Context(null, null, false),\n indented: basecolumn || 0\n };\n if (parserConfig.globalVars && typeof parserConfig.globalVars == \"object\")\n state.globalVars = parserConfig.globalVars;\n return state;\n },\n\n token: function(stream, state) {\n if (stream.sol()) {\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = false;\n state.indented = stream.indentation();\n findFatArrow(stream, state);\n }\n if (state.tokenize != tokenComment && stream.eatSpace()) return null;\n var style = state.tokenize(stream, state);\n if (type == \"comment\") return style;\n state.lastType = type == \"operator\" && (content == \"++\" || content == \"--\") ? \"incdec\" : type;\n return parseJS(state, style, type, content, stream);\n },\n\n indent: function(state, textAfter) {\n if (state.tokenize == tokenComment || state.tokenize == tokenQuasi) return CodeMirror.Pass;\n if (state.tokenize != tokenBase) return 0;\n var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top\n // Kludge to prevent 'maybelse' from blocking lexical scope pops\n if (!/^\\s*else\\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {\n var c = state.cc[i];\n if (c == poplex) lexical = lexical.prev;\n else if (c != maybeelse && c != popcontext) break;\n }\n while ((lexical.type == \"stat\" || lexical.type == \"form\") &&\n (firstChar == \"}\" || ((top = state.cc[state.cc.length - 1]) &&\n (top == maybeoperatorComma || top == maybeoperatorNoComma) &&\n !/^[,\\.=+\\-*:?[\\(]/.test(textAfter))))\n lexical = lexical.prev;\n if (statementIndent && lexical.type == \")\" && lexical.prev.type == \"stat\")\n lexical = lexical.prev;\n var type = lexical.type, closing = firstChar == type;\n\n if (type == \"vardef\") return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? lexical.info.length + 1 : 0);\n else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n else if (type == \"form\") return lexical.indented + indentUnit;\n else if (type == \"stat\")\n return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);\n else if (lexical.info == \"switch\" && !closing && parserConfig.doubleIndentSwitch != false)\n return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n else return lexical.indented + (closing ? 0 : indentUnit);\n },\n\n electricInput: /^\\s*(?:case .*?:|default:|\\{|\\})$/,\n blockCommentStart: jsonMode ? null : \"/*\",\n blockCommentEnd: jsonMode ? null : \"*/\",\n blockCommentContinue: jsonMode ? null : \" * \",\n lineComment: jsonMode ? null : \"//\",\n fold: \"brace\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n\n helperType: jsonMode ? \"json\" : \"javascript\",\n jsonldMode: jsonldMode,\n jsonMode: jsonMode,\n\n expressionAllowed: expressionAllowed,\n\n skipExpression: function(state) {\n parseJS(state, \"atom\", \"atom\", \"true\", new CodeMirror.StringStream(\"\", 2, null))\n }\n };\n});\n\nCodeMirror.registerHelper(\"wordChars\", \"javascript\", /[\\w$]/);\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"text/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/x-javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", { name: \"javascript\", json: true });\nCodeMirror.defineMIME(\"application/x-json\", { name: \"javascript\", json: true });\nCodeMirror.defineMIME(\"application/manifest+json\", { name: \"javascript\", json: true })\nCodeMirror.defineMIME(\"application/ld+json\", { name: \"javascript\", jsonld: true });\nCodeMirror.defineMIME(\"text/typescript\", { name: \"javascript\", typescript: true });\nCodeMirror.defineMIME(\"application/typescript\", { name: \"javascript\", typescript: true });\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"sql\", function(config, parserConfig) {\n var client = parserConfig.client || {},\n atoms = parserConfig.atoms || {\"false\": true, \"true\": true, \"null\": true},\n builtin = parserConfig.builtin || set(defaultBuiltin),\n keywords = parserConfig.keywords || set(sqlKeywords),\n operatorChars = parserConfig.operatorChars || /^[*+\\-%<>!=&|~^\\/]/,\n support = parserConfig.support || {},\n hooks = parserConfig.hooks || {},\n dateSQL = parserConfig.dateSQL || {\"date\" : true, \"time\" : true, \"timestamp\" : true},\n backslashStringEscapes = parserConfig.backslashStringEscapes !== false,\n brackets = parserConfig.brackets || /^[\\{}\\(\\)\\[\\]]/,\n punctuation = parserConfig.punctuation || /^[;.,:]/\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n\n // call hooks from the mime type\n if (hooks[ch]) {\n var result = hooks[ch](stream, state);\n if (result !== false) return result;\n }\n\n if (support.hexNumber &&\n ((ch == \"0\" && stream.match(/^[xX][0-9a-fA-F]+/))\n || (ch == \"x\" || ch == \"X\") && stream.match(/^'[0-9a-fA-F]*'/))) {\n // hex\n // ref: https://dev.mysql.com/doc/refman/8.0/en/hexadecimal-literals.html\n return \"number\";\n } else if (support.binaryNumber &&\n (((ch == \"b\" || ch == \"B\") && stream.match(/^'[01]*'/))\n || (ch == \"0\" && stream.match(/^b[01]+/)))) {\n // bitstring\n // ref: https://dev.mysql.com/doc/refman/8.0/en/bit-value-literals.html\n return \"number\";\n } else if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) {\n // numbers\n // ref: https://dev.mysql.com/doc/refman/8.0/en/number-literals.html\n stream.match(/^[0-9]*(\\.[0-9]+)?([eE][-+]?[0-9]+)?/);\n support.decimallessFloat && stream.match(/^\\.(?!\\.)/);\n return \"number\";\n } else if (ch == \"?\" && (stream.eatSpace() || stream.eol() || stream.eat(\";\"))) {\n // placeholders\n return \"variable-3\";\n } else if (ch == \"'\" || (ch == '\"' && support.doubleQuote)) {\n // strings\n // ref: https://dev.mysql.com/doc/refman/8.0/en/string-literals.html\n state.tokenize = tokenLiteral(ch);\n return state.tokenize(stream, state);\n } else if ((((support.nCharCast && (ch == \"n\" || ch == \"N\"))\n || (support.charsetCast && ch == \"_\" && stream.match(/[a-z][a-z0-9]*/i)))\n && (stream.peek() == \"'\" || stream.peek() == '\"'))) {\n // charset casting: _utf8'str', N'str', n'str'\n // ref: https://dev.mysql.com/doc/refman/8.0/en/string-literals.html\n return \"keyword\";\n } else if (support.escapeConstant && (ch == \"e\" || ch == \"E\")\n && (stream.peek() == \"'\" || (stream.peek() == '\"' && support.doubleQuote))) {\n // escape constant: E'str', e'str'\n // ref: https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-ESCAPE\n state.tokenize = function(stream, state) {\n return (state.tokenize = tokenLiteral(stream.next(), true))(stream, state);\n }\n return \"keyword\";\n } else if (support.commentSlashSlash && ch == \"/\" && stream.eat(\"/\")) {\n // 1-line comment\n stream.skipToEnd();\n return \"comment\";\n } else if ((support.commentHash && ch == \"#\")\n || (ch == \"-\" && stream.eat(\"-\") && (!support.commentSpaceRequired || stream.eat(\" \")))) {\n // 1-line comments\n // ref: https://kb.askmonty.org/en/comment-syntax/\n stream.skipToEnd();\n return \"comment\";\n } else if (ch == \"/\" && stream.eat(\"*\")) {\n // multi-line comments\n // ref: https://kb.askmonty.org/en/comment-syntax/\n state.tokenize = tokenComment(1);\n return state.tokenize(stream, state);\n } else if (ch == \".\") {\n // .1 for 0.1\n if (support.zerolessFloat && stream.match(/^(?:\\d+(?:e[+-]?\\d+)?)/i))\n return \"number\";\n if (stream.match(/^\\.+/))\n return null\n // .table_name (ODBC)\n // // ref: https://dev.mysql.com/doc/refman/8.0/en/identifier-qualifiers.html\n if (support.ODBCdotTable && stream.match(/^[\\w\\d_$#]+/))\n return \"variable-2\";\n } else if (operatorChars.test(ch)) {\n // operators\n stream.eatWhile(operatorChars);\n return \"operator\";\n } else if (brackets.test(ch)) {\n // brackets\n return \"bracket\";\n } else if (punctuation.test(ch)) {\n // punctuation\n stream.eatWhile(punctuation);\n return \"punctuation\";\n } else if (ch == '{' &&\n (stream.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/) || stream.match(/^( )*(d|D|t|T|ts|TS)( )*\"[^\"]*\"( )*}/))) {\n // dates (weird ODBC syntax)\n // ref: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html\n return \"number\";\n } else {\n stream.eatWhile(/^[_\\w\\d]/);\n var word = stream.current().toLowerCase();\n // dates (standard SQL syntax)\n // ref: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html\n if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+\"[^\"]*\"/)))\n return \"number\";\n if (atoms.hasOwnProperty(word)) return \"atom\";\n if (builtin.hasOwnProperty(word)) return \"type\";\n if (keywords.hasOwnProperty(word)) return \"keyword\";\n if (client.hasOwnProperty(word)) return \"builtin\";\n return null;\n }\n }\n\n // 'string', with char specified in quote escaped by '\\'\n function tokenLiteral(quote, backslashEscapes) {\n return function(stream, state) {\n var escaped = false, ch;\n while ((ch = stream.next()) != null) {\n if (ch == quote && !escaped) {\n state.tokenize = tokenBase;\n break;\n }\n escaped = (backslashStringEscapes || backslashEscapes) && !escaped && ch == \"\\\\\";\n }\n return \"string\";\n };\n }\n function tokenComment(depth) {\n return function(stream, state) {\n var m = stream.match(/^.*?(\\/\\*|\\*\\/)/)\n if (!m) stream.skipToEnd()\n else if (m[1] == \"/*\") state.tokenize = tokenComment(depth + 1)\n else if (depth > 1) state.tokenize = tokenComment(depth - 1)\n else state.tokenize = tokenBase\n return \"comment\"\n }\n }\n\n function pushContext(stream, state, type) {\n state.context = {\n prev: state.context,\n indent: stream.indentation(),\n col: stream.column(),\n type: type\n };\n }\n\n function popContext(state) {\n state.indent = state.context.indent;\n state.context = state.context.prev;\n }\n\n return {\n startState: function() {\n return {tokenize: tokenBase, context: null};\n },\n\n token: function(stream, state) {\n if (stream.sol()) {\n if (state.context && state.context.align == null)\n state.context.align = false;\n }\n if (state.tokenize == tokenBase && stream.eatSpace()) return null;\n\n var style = state.tokenize(stream, state);\n if (style == \"comment\") return style;\n\n if (state.context && state.context.align == null)\n state.context.align = true;\n\n var tok = stream.current();\n if (tok == \"(\")\n pushContext(stream, state, \")\");\n else if (tok == \"[\")\n pushContext(stream, state, \"]\");\n else if (state.context && state.context.type == tok)\n popContext(state);\n return style;\n },\n\n indent: function(state, textAfter) {\n var cx = state.context;\n if (!cx) return CodeMirror.Pass;\n var closing = textAfter.charAt(0) == cx.type;\n if (cx.align) return cx.col + (closing ? 0 : 1);\n else return cx.indent + (closing ? 0 : config.indentUnit);\n },\n\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: support.commentSlashSlash ? \"//\" : support.commentHash ? \"#\" : \"--\",\n closeBrackets: \"()[]{}''\\\"\\\"``\"\n };\n});\n\n // `identifier`\n function hookIdentifier(stream) {\n // MySQL/MariaDB identifiers\n // ref: https://dev.mysql.com/doc/refman/8.0/en/identifier-qualifiers.html\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"`\" && !stream.eat(\"`\")) return \"variable-2\";\n }\n stream.backUp(stream.current().length - 1);\n return stream.eatWhile(/\\w/) ? \"variable-2\" : null;\n }\n\n // \"identifier\"\n function hookIdentifierDoublequote(stream) {\n // Standard SQL /SQLite identifiers\n // ref: http://web.archive.org/web/20160813185132/http://savage.net.au/SQL/sql-99.bnf.html#delimited%20identifier\n // ref: http://sqlite.org/lang_keywords.html\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"\\\"\" && !stream.eat(\"\\\"\")) return \"variable-2\";\n }\n stream.backUp(stream.current().length - 1);\n return stream.eatWhile(/\\w/) ? \"variable-2\" : null;\n }\n\n // variable token\n function hookVar(stream) {\n // variables\n // @@prefix.varName @varName\n // varName can be quoted with ` or ' or \"\n // ref: https://dev.mysql.com/doc/refman/8.0/en/user-variables.html\n if (stream.eat(\"@\")) {\n stream.match('session.');\n stream.match('local.');\n stream.match('global.');\n }\n\n if (stream.eat(\"'\")) {\n stream.match(/^.*'/);\n return \"variable-2\";\n } else if (stream.eat('\"')) {\n stream.match(/^.*\"/);\n return \"variable-2\";\n } else if (stream.eat(\"`\")) {\n stream.match(/^.*`/);\n return \"variable-2\";\n } else if (stream.match(/^[0-9a-zA-Z$\\.\\_]+/)) {\n return \"variable-2\";\n }\n return null;\n };\n\n // short client keyword token\n function hookClient(stream) {\n // \\N means NULL\n // ref: https://dev.mysql.com/doc/refman/8.0/en/null-values.html\n if (stream.eat(\"N\")) {\n return \"atom\";\n }\n // \\g, etc\n // ref: https://dev.mysql.com/doc/refman/8.0/en/mysql-commands.html\n return stream.match(/^[a-zA-Z.#!?]/) ? \"variable-2\" : null;\n }\n\n // these keywords are used by all SQL dialects (however, a mode can still overwrite it)\n var sqlKeywords = \"alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit \";\n\n // turn a space-separated list into an array\n function set(str) {\n var obj = {}, words = str.split(\" \");\n for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n return obj;\n }\n\n var defaultBuiltin = \"bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric\"\n\n // A generic SQL Mode. It's not a standard, it just tries to support what is generally supported\n CodeMirror.defineMIME(\"text/x-sql\", {\n name: \"sql\",\n keywords: set(sqlKeywords + \"begin\"),\n builtin: set(defaultBuiltin),\n atoms: set(\"false true null unknown\"),\n dateSQL: set(\"date time timestamp\"),\n support: set(\"ODBCdotTable doubleQuote binaryNumber hexNumber\")\n });\n\n CodeMirror.defineMIME(\"text/x-mssql\", {\n name: \"sql\",\n client: set(\"$partition binary_checksum checksum connectionproperty context_info current_request_id error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big xact_state object_id\"),\n keywords: set(sqlKeywords + \"begin trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare exec go if use index holdlock nolock nowait paglock readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot tablock tablockx updlock with\"),\n builtin: set(\"bigint numeric bit smallint decimal smallmoney int tinyint money float real char varchar text nchar nvarchar ntext binary varbinary image cursor timestamp hierarchyid uniqueidentifier sql_variant xml table \"),\n atoms: set(\"is not null like and or in left right between inner outer join all any some cross unpivot pivot exists\"),\n operatorChars: /^[*+\\-%<>!=^\\&|\\/]/,\n brackets: /^[\\{}\\(\\)]/,\n punctuation: /^[;.,:/]/,\n backslashStringEscapes: false,\n dateSQL: set(\"date datetimeoffset datetime2 smalldatetime datetime time\"),\n hooks: {\n \"@\": hookVar\n }\n });\n\n CodeMirror.defineMIME(\"text/x-mysql\", {\n name: \"sql\",\n client: set(\"charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee\"),\n keywords: set(sqlKeywords + \"accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat\"),\n builtin: set(\"bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric\"),\n atoms: set(\"false true null unknown\"),\n operatorChars: /^[*+\\-%<>!=&|^]/,\n dateSQL: set(\"date time timestamp\"),\n support: set(\"ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired\"),\n hooks: {\n \"@\": hookVar,\n \"`\": hookIdentifier,\n \"\\\\\": hookClient\n }\n });\n\n CodeMirror.defineMIME(\"text/x-mariadb\", {\n name: \"sql\",\n client: set(\"charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee\"),\n keywords: set(sqlKeywords + \"accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group group_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat\"),\n builtin: set(\"bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric\"),\n atoms: set(\"false true null unknown\"),\n operatorChars: /^[*+\\-%<>!=&|^]/,\n dateSQL: set(\"date time timestamp\"),\n support: set(\"ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired\"),\n hooks: {\n \"@\": hookVar,\n \"`\": hookIdentifier,\n \"\\\\\": hookClient\n }\n });\n\n // provided by the phpLiteAdmin project - phpliteadmin.org\n CodeMirror.defineMIME(\"text/x-sqlite\", {\n name: \"sql\",\n // commands of the official SQLite client, ref: https://www.sqlite.org/cli.html#dotcmd\n client: set(\"auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width\"),\n // ref: http://sqlite.org/lang_keywords.html\n keywords: set(sqlKeywords + \"abort action add after all analyze attach autoincrement before begin cascade case cast check collate column commit conflict constraint cross current_date current_time current_timestamp database default deferrable deferred detach each else end escape except exclusive exists explain fail for foreign full glob if ignore immediate index indexed initially inner instead intersect isnull key left limit match natural no notnull null of offset outer plan pragma primary query raise recursive references regexp reindex release rename replace restrict right rollback row savepoint temp temporary then to transaction trigger unique using vacuum view virtual when with without\"),\n // SQLite is weakly typed, ref: http://sqlite.org/datatype3.html. This is just a list of some common types.\n builtin: set(\"bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text clob bigint int int2 int8 integer float double char varchar date datetime year unsigned signed numeric real\"),\n // ref: http://sqlite.org/syntax/literal-value.html\n atoms: set(\"null current_date current_time current_timestamp\"),\n // ref: http://sqlite.org/lang_expr.html#binaryops\n operatorChars: /^[*+\\-%<>!=&|/~]/,\n // SQLite is weakly typed, ref: http://sqlite.org/datatype3.html. This is just a list of some common types.\n dateSQL: set(\"date time timestamp datetime\"),\n support: set(\"decimallessFloat zerolessFloat\"),\n identifierQuote: \"\\\"\", //ref: http://sqlite.org/lang_keywords.html\n hooks: {\n // bind-parameters ref:http://sqlite.org/lang_expr.html#varparam\n \"@\": hookVar,\n \":\": hookVar,\n \"?\": hookVar,\n \"$\": hookVar,\n // The preferred way to escape Identifiers is using double quotes, ref: http://sqlite.org/lang_keywords.html\n \"\\\"\": hookIdentifierDoublequote,\n // there is also support for backticks, ref: http://sqlite.org/lang_keywords.html\n \"`\": hookIdentifier\n }\n });\n\n // the query language used by Apache Cassandra is called CQL, but this mime type\n // is called Cassandra to avoid confusion with Contextual Query Language\n CodeMirror.defineMIME(\"text/x-cassandra\", {\n name: \"sql\",\n client: { },\n keywords: set(\"add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime\"),\n builtin: set(\"ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint\"),\n atoms: set(\"false true infinity NaN\"),\n operatorChars: /^[<>=]/,\n dateSQL: { },\n support: set(\"commentSlashSlash decimallessFloat\"),\n hooks: { }\n });\n\n // this is based on Peter Raganitsch's 'plsql' mode\n CodeMirror.defineMIME(\"text/x-plsql\", {\n name: \"sql\",\n client: set(\"appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap\"),\n keywords: set(\"abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work\"),\n builtin: set(\"abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml\"),\n operatorChars: /^[*\\/+\\-%<>!=~]/,\n dateSQL: set(\"date time timestamp\"),\n support: set(\"doubleQuote nCharCast zerolessFloat binaryNumber hexNumber\")\n });\n\n // Created to support specific hive keywords\n CodeMirror.defineMIME(\"text/x-hive\", {\n name: \"sql\",\n keywords: set(\"select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with admin authorization char compact compactions conf cube current current_date current_timestamp day decimal defined dependency directories elem_type exchange file following for grouping hour ignore inner interval jar less logical macro minute month more none noscan over owner partialscan preceding pretty principals protection reload rewrite role roles rollup rows second server sets skewed transactions truncate unbounded unset uri user values window year\"),\n builtin: set(\"bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype key_type utctimestamp value_type varchar\"),\n atoms: set(\"false true null unknown\"),\n operatorChars: /^[*+\\-%<>!=]/,\n dateSQL: set(\"date timestamp\"),\n support: set(\"ODBCdotTable doubleQuote binaryNumber hexNumber\")\n });\n\n CodeMirror.defineMIME(\"text/x-pgsql\", {\n name: \"sql\",\n client: set(\"source\"),\n // For PostgreSQL - https://www.postgresql.org/docs/11/sql-keywords-appendix.html\n // For pl/pgsql lang - https://github.com/postgres/postgres/blob/REL_11_2/src/pl/plpgsql/src/pl_scanner.c\n keywords: set(sqlKeywords + \"a abort abs absent absolute access according action ada add admin after aggregate alias all allocate also alter always analyse analyze and any are array array_agg array_max_cardinality as asc asensitive assert assertion assignment asymmetric at atomic attach attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli between bigint binary bit bit_length blob blocked bom boolean both breadth by c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain char char_length character character_length character_set_catalog character_set_name character_set_schema characteristics characters check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column column_name columns command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constant constraint constraint_catalog constraint_name constraint_schema constraints constructor contains content continue control conversion convert copy corr corresponding cost count covar_pop covar_samp create cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datatype date datetime_interval_code datetime_interval_precision day db deallocate debug dec decimal declare default defaults deferrable deferred defined definer degree delete delimiter delimiters dense_rank depends depth deref derived desc describe descriptor detach detail deterministic diagnostics dictionary disable discard disconnect dispatch distinct dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain double drop dump dynamic dynamic_function dynamic_function_code each element else elseif elsif empty enable encoding encrypted end end_frame end_partition endexec enforced enum equals errcode error escape event every except exception exclude excluding exclusive exec execute exists exit exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreach foreign fortran forward found frame_row free freeze from fs full function functions fusion g general generated get global go goto grant granted greatest group grouping groups handler having header hex hierarchy hint hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import in include including increment indent index indexes indicator info inherit inherits initially inline inner inout input insensitive insert instance instantiable instead int integer integrity intersect intersection interval into invoker is isnull isolation join k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like like_regex limit link listen ln load local localtime localtimestamp location locator lock locked log logged loop lower m map mapping match matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized not nothing notice notify notnull nowait nth_value ntile null nullable nullif nulls number numeric object occurrences_regex octet_length octets of off offset oids old on only open operator option options or order ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parallel parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password path percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding precision prepare prepared preserve primary print_strict_params prior privileges procedural procedure procedures program public publication query quote raise range rank read reads real reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result result_oid return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns reverse revoke right role rollback rollup routine routine_catalog routine_name routine_schema routines row row_count row_number rows rowtype rule savepoint scale schema schema_name schemas scope scope_catalog scope_name scope_schema scroll search second section security select selective self sensitive sequence sequences serializable server server_name session session_user set setof sets share show similar simple size skip slice smallint snapshot some source space specific specific_name specifictype sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable stacked standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time system_user t table table_name tables tablesample tablespace temp template temporary text then ties time timestamp timezone_hour timezone_minute to token top_level_count trailing transaction transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted union unique unknown unlink unlisten unlogged unnamed unnest until untyped update upper uri usage use_column use_variable user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of values var_pop var_samp varbinary varchar variable_conflict variadic varying verbose version versioning view views volatile warning when whenever where while whitespace width_bucket window with within without work wrapper write xml xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes zone\"),\n // https://www.postgresql.org/docs/11/datatype.html\n builtin: set(\"bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml\"),\n atoms: set(\"false true null unknown\"),\n operatorChars: /^[*\\/+\\-%<>!=&|^\\/#@?~]/,\n backslashStringEscapes: false,\n dateSQL: set(\"date time timestamp\"),\n support: set(\"ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast escapeConstant\")\n });\n\n // Google's SQL-like query language, GQL\n CodeMirror.defineMIME(\"text/x-gql\", {\n name: \"sql\",\n keywords: set(\"ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where\"),\n atoms: set(\"false true\"),\n builtin: set(\"blob datetime first key __key__ string integer double boolean null\"),\n operatorChars: /^[*+\\-%<>!=]/\n });\n\n // Greenplum\n CodeMirror.defineMIME(\"text/x-gpsql\", {\n name: \"sql\",\n client: set(\"source\"),\n //https://github.com/greenplum-db/gpdb/blob/master/src/include/parser/kwlist.h\n keywords: set(\"abort absolute access action active add admin after aggregate all also alter always analyse analyze and any array as asc assertion assignment asymmetric at authorization backward before begin between bigint binary bit boolean both by cache called cascade cascaded case cast chain char character characteristics check checkpoint class close cluster coalesce codegen collate column comment commit committed concurrency concurrently configuration connection constraint constraints contains content continue conversion copy cost cpu_rate_limit create createdb createexttable createrole createuser cross csv cube current current_catalog current_date current_role current_schema current_time current_timestamp current_user cursor cycle data database day deallocate dec decimal declare decode default defaults deferrable deferred definer delete delimiter delimiters deny desc dictionary disable discard distinct distributed do document domain double drop dxl each else enable encoding encrypted end enum errors escape every except exchange exclude excluding exclusive execute exists explain extension external extract false family fetch fields filespace fill filter first float following for force foreign format forward freeze from full function global grant granted greatest group group_id grouping handler hash having header hold host hour identity if ignore ilike immediate immutable implicit in including inclusive increment index indexes inherit inherits initially inline inner inout input insensitive insert instead int integer intersect interval into invoker is isnull isolation join key language large last leading least left level like limit list listen load local localtime localtimestamp location lock log login mapping master match maxvalue median merge minute minvalue missing mode modifies modify month move name names national natural nchar new newline next no nocreatedb nocreateexttable nocreaterole nocreateuser noinherit nologin none noovercommit nosuperuser not nothing notify notnull nowait null nullif nulls numeric object of off offset oids old on only operator option options or order ordered others out outer over overcommit overlaps overlay owned owner parser partial partition partitions passing password percent percentile_cont percentile_disc placing plans position preceding precision prepare prepared preserve primary prior privileges procedural procedure protocol queue quote randomly range read readable reads real reassign recheck recursive ref references reindex reject relative release rename repeatable replace replica reset resource restart restrict returning returns revoke right role rollback rollup rootpartition row rows rule savepoint scatter schema scroll search second security segment select sequence serializable session session_user set setof sets share show similar simple smallint some split sql stable standalone start statement statistics stdin stdout storage strict strip subpartition subpartitions substring superuser symmetric sysid system table tablespace temp template temporary text then threshold ties time timestamp to trailing transaction treat trigger trim true truncate trusted type unbounded uncommitted unencrypted union unique unknown unlisten until update user using vacuum valid validation validator value values varchar variadic varying verbose version view volatile web when where whitespace window with within without work writable write xml xmlattributes xmlconcat xmlelement xmlexists xmlforest xmlparse xmlpi xmlroot xmlserialize year yes zone\"),\n builtin: set(\"bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml\"),\n atoms: set(\"false true null unknown\"),\n operatorChars: /^[*+\\-%<>!=&|^\\/#@?~]/,\n dateSQL: set(\"date time timestamp\"),\n support: set(\"ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast\")\n });\n\n // Spark SQL\n CodeMirror.defineMIME(\"text/x-sparksql\", {\n name: \"sql\",\n keywords: set(\"add after all alter analyze and anti archive array as asc at between bucket buckets by cache cascade case cast change clear cluster clustered codegen collection column columns comment commit compact compactions compute concatenate cost create cross cube current current_date current_timestamp database databases data dbproperties defined delete delimited deny desc describe dfs directories distinct distribute drop else end escaped except exchange exists explain export extended external false fields fileformat first following for format formatted from full function functions global grant group grouping having if ignore import in index indexes inner inpath inputformat insert intersect interval into is items join keys last lateral lazy left like limit lines list load local location lock locks logical macro map minus msck natural no not null nulls of on optimize option options or order out outer outputformat over overwrite partition partitioned partitions percent preceding principals purge range recordreader recordwriter recover reduce refresh regexp rename repair replace reset restrict revoke right rlike role roles rollback rollup row rows schema schemas select semi separated serde serdeproperties set sets show skewed sort sorted start statistics stored stratify struct table tables tablesample tblproperties temp temporary terminated then to touch transaction transactions transform true truncate unarchive unbounded uncache union unlock unset use using values view when where window with\"),\n builtin: set(\"abs acos acosh add_months aggregate and any approx_count_distinct approx_percentile array array_contains array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_repeat array_sort array_union arrays_overlap arrays_zip ascii asin asinh assert_true atan atan2 atanh avg base64 between bigint bin binary bit_and bit_count bit_get bit_length bit_or bit_xor bool_and bool_or boolean bround btrim cardinality case cast cbrt ceil ceiling char char_length character_length chr coalesce collect_list collect_set concat concat_ws conv corr cos cosh cot count count_if count_min_sketch covar_pop covar_samp crc32 cume_dist current_catalog current_database current_date current_timestamp current_timezone current_user date date_add date_format date_from_unix_date date_part date_sub date_trunc datediff day dayofmonth dayofweek dayofyear decimal decode degrees delimited dense_rank div double e element_at elt encode every exists exp explode explode_outer expm1 extract factorial filter find_in_set first first_value flatten float floor forall format_number format_string from_csv from_json from_unixtime from_utc_timestamp get_json_object getbit greatest grouping grouping_id hash hex hour hypot if ifnull in initcap inline inline_outer input_file_block_length input_file_block_start input_file_name inputformat instr int isnan isnotnull isnull java_method json_array_length json_object_keys json_tuple kurtosis lag last last_day last_value lcase lead least left length levenshtein like ln locate log log10 log1p log2 lower lpad ltrim make_date make_dt_interval make_interval make_timestamp make_ym_interval map map_concat map_entries map_filter map_from_arrays map_from_entries map_keys map_values map_zip_with max max_by md5 mean min min_by minute mod monotonically_increasing_id month months_between named_struct nanvl negative next_day not now nth_value ntile nullif nvl nvl2 octet_length or outputformat overlay parse_url percent_rank percentile percentile_approx pi pmod posexplode posexplode_outer position positive pow power printf quarter radians raise_error rand randn random rank rcfile reflect regexp regexp_extract regexp_extract_all regexp_like regexp_replace repeat replace reverse right rint rlike round row_number rpad rtrim schema_of_csv schema_of_json second sentences sequence sequencefile serde session_window sha sha1 sha2 shiftleft shiftright shiftrightunsigned shuffle sign signum sin sinh size skewness slice smallint some sort_array soundex space spark_partition_id split sqrt stack std stddev stddev_pop stddev_samp str_to_map string struct substr substring substring_index sum tan tanh textfile timestamp timestamp_micros timestamp_millis timestamp_seconds tinyint to_csv to_date to_json to_timestamp to_unix_timestamp to_utc_timestamp transform transform_keys transform_values translate trim trunc try_add try_divide typeof ucase unbase64 unhex uniontype unix_date unix_micros unix_millis unix_seconds unix_timestamp upper uuid var_pop var_samp variance version weekday weekofyear when width_bucket window xpath xpath_boolean xpath_double xpath_float xpath_int xpath_long xpath_number xpath_short xpath_string xxhash64 year zip_with\"),\n atoms: set(\"false true null\"),\n operatorChars: /^[*\\/+\\-%<>!=~&|^]/,\n dateSQL: set(\"date time timestamp\"),\n support: set(\"ODBCdotTable doubleQuote zerolessFloat\")\n });\n\n // Esper\n CodeMirror.defineMIME(\"text/x-esper\", {\n name: \"sql\",\n client: set(\"source\"),\n // http://www.espertech.com/esper/release-5.5.0/esper-reference/html/appendix_keywords.html\n keywords: set(\"alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit after all and as at asc avedev avg between by case cast coalesce count create current_timestamp day days delete define desc distinct else end escape events every exists false first from full group having hour hours in inner insert instanceof into irstream is istream join last lastweekday left limit like max match_recognize matches median measures metadatasql min minute minutes msec millisecond milliseconds not null offset on or order outer output partition pattern prev prior regexp retain-union retain-intersection right rstream sec second seconds select set some snapshot sql stddev sum then true unidirectional until update variable weekday when where window\"),\n builtin: {},\n atoms: set(\"false true null\"),\n operatorChars: /^[*+\\-%<>!=&|^\\/#@?~]/,\n dateSQL: set(\"time\"),\n support: set(\"decimallessFloat zerolessFloat binaryNumber hexNumber\")\n });\n\n // Trino (formerly known as Presto)\n CodeMirror.defineMIME(\"text/x-trino\", {\n name: \"sql\",\n // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L859-L1129\n // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/docs/src/main/sphinx/functions/list.rst\n keywords: set(\"abs absent acos add admin after all all_match alter analyze and any any_match approx_distinct approx_most_frequent approx_percentile approx_set arbitrary array_agg array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_sort array_union arrays_overlap as asc asin at at_timezone atan atan2 authorization avg bar bernoulli beta_cdf between bing_tile bing_tile_at bing_tile_coordinates bing_tile_polygon bing_tile_quadkey bing_tile_zoom_level bing_tiles_around bit_count bitwise_and bitwise_and_agg bitwise_left_shift bitwise_not bitwise_or bitwise_or_agg bitwise_right_shift bitwise_right_shift_arithmetic bitwise_xor bool_and bool_or both by call cardinality cascade case cast catalogs cbrt ceil ceiling char2hexint checksum chr classify coalesce codepoint column columns combinations comment commit committed concat concat_ws conditional constraint contains contains_sequence convex_hull_agg copartition corr cos cosh cosine_similarity count count_if covar_pop covar_samp crc32 create cross cube cume_dist current current_catalog current_date current_groups current_path current_role current_schema current_time current_timestamp current_timezone current_user data date_add date_diff date_format date_parse date_trunc day day_of_month day_of_week day_of_year deallocate default define definer degrees delete dense_rank deny desc describe descriptor distinct distributed dow doy drop e element_at else empty empty_approx_set encoding end error escape evaluate_classifier_predictions every except excluding execute exists exp explain extract false features fetch filter final first first_value flatten floor following for format format_datetime format_number from from_base from_base32 from_base64 from_base64url from_big_endian_32 from_big_endian_64 from_encoded_polyline from_geojson_geometry from_hex from_ieee754_32 from_ieee754_64 from_iso8601_date from_iso8601_timestamp from_iso8601_timestamp_nanos from_unixtime from_unixtime_nanos from_utf8 full functions geometric_mean geometry_from_hadoop_shape geometry_invalid_reason geometry_nearest_points geometry_to_bing_tiles geometry_union geometry_union_agg grant granted grants graphviz great_circle_distance greatest group grouping groups hamming_distance hash_counts having histogram hmac_md5 hmac_sha1 hmac_sha256 hmac_sha512 hour human_readable_seconds if ignore in including index infinity initial inner input insert intersect intersection_cardinality into inverse_beta_cdf inverse_normal_cdf invoker io is is_finite is_infinite is_json_scalar is_nan isolation jaccard_index join json_array json_array_contains json_array_get json_array_length json_exists json_extract json_extract_scalar json_format json_object json_parse json_query json_size json_value keep key keys kurtosis lag last last_day_of_month last_value lateral lead leading learn_classifier learn_libsvm_classifier learn_libsvm_regressor learn_regressor least left length level levenshtein_distance like limit line_interpolate_point line_interpolate_points line_locate_point listagg ln local localtime localtimestamp log log10 log2 logical lower lpad ltrim luhn_check make_set_digest map_agg map_concat map_entries map_filter map_from_entries map_keys map_union map_values map_zip_with match match_recognize matched matches materialized max max_by md5 measures merge merge_set_digest millisecond min min_by minute mod month multimap_agg multimap_from_entries murmur3 nan natural next nfc nfd nfkc nfkd ngrams no none none_match normal_cdf normalize not now nth_value ntile null nullif nulls numeric_histogram object objectid_timestamp of offset omit on one only option or order ordinality outer output over overflow parse_data_size parse_datetime parse_duration partition partitions passing past path pattern per percent_rank permute pi position pow power preceding prepare privileges properties prune qdigest_agg quarter quotes radians rand random range rank read recursive reduce reduce_agg refresh regexp_count regexp_extract regexp_extract_all regexp_like regexp_position regexp_replace regexp_split regr_intercept regr_slope regress rename render repeat repeatable replace reset respect restrict returning reverse revoke rgb right role roles rollback rollup round row_number rows rpad rtrim running scalar schema schemas second security seek select sequence serializable session set sets sha1 sha256 sha512 show shuffle sign simplify_geometry sin skewness skip slice some soundex spatial_partitioning spatial_partitions split split_part split_to_map split_to_multimap spooky_hash_v2_32 spooky_hash_v2_64 sqrt st_area st_asbinary st_astext st_boundary st_buffer st_centroid st_contains st_convexhull st_coorddim st_crosses st_difference st_dimension st_disjoint st_distance st_endpoint st_envelope st_envelopeaspts st_equals st_exteriorring st_geometries st_geometryfromtext st_geometryn st_geometrytype st_geomfrombinary st_interiorringn st_interiorrings st_intersection st_intersects st_isclosed st_isempty st_isring st_issimple st_isvalid st_length st_linefromtext st_linestring st_multipoint st_numgeometries st_numinteriorring st_numpoints st_overlaps st_point st_pointn st_points st_polygon st_relate st_startpoint st_symdifference st_touches st_union st_within st_x st_xmax st_xmin st_y st_ymax st_ymin start starts_with stats stddev stddev_pop stddev_samp string strpos subset substr substring sum system table tables tablesample tan tanh tdigest_agg text then ties timestamp_objectid timezone_hour timezone_minute to to_base to_base32 to_base64 to_base64url to_big_endian_32 to_big_endian_64 to_char to_date to_encoded_polyline to_geojson_geometry to_geometry to_hex to_ieee754_32 to_ieee754_64 to_iso8601 to_milliseconds to_spherical_geography to_timestamp to_unixtime to_utf8 trailing transaction transform transform_keys transform_values translate trim trim_array true truncate try try_cast type typeof uescape unbounded uncommitted unconditional union unique unknown unmatched unnest update upper url_decode url_encode url_extract_fragment url_extract_host url_extract_parameter url_extract_path url_extract_port url_extract_protocol url_extract_query use user using utf16 utf32 utf8 validate value value_at_quantile values values_at_quantiles var_pop var_samp variance verbose version view week week_of_year when where width_bucket wilson_interval_lower wilson_interval_upper window with with_timezone within without word_stem work wrapper write xxhash64 year year_of_week yow zip zip_with\"),\n // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/core/trino-main/src/main/java/io/trino/metadata/TypeRegistry.java#L131-L168\n // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/plugin/trino-ml/src/main/java/io/trino/plugin/ml/MLPlugin.java#L35\n // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoPlugin.java#L32\n // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/GeoPlugin.java#L37\n builtin: set(\"array bigint bingtile boolean char codepoints color date decimal double function geometry hyperloglog int integer interval ipaddress joniregexp json json2016 jsonpath kdbtree likepattern map model objectid p4hyperloglog precision qdigest re2jregexp real regressor row setdigest smallint sphericalgeography tdigest time timestamp tinyint uuid varbinary varchar zone\"),\n atoms: set(\"false true null unknown\"),\n // https://trino.io/docs/current/functions/list.html#id1\n operatorChars: /^[[\\]|<>=!\\-+*/%]/,\n dateSQL: set(\"date time timestamp zone\"),\n // hexNumber is necessary for VARBINARY literals, e.g. X'65683F'\n // but it also enables 0xFF hex numbers, which Trino doesn't support.\n support: set(\"ODBCdotTable decimallessFloat zerolessFloat hexNumber\")\n });\n});\n\n/*\n How Properties of Mime Types are used by SQL Mode\n =================================================\n\n keywords:\n A list of keywords you want to be highlighted.\n builtin:\n A list of builtin types you want to be highlighted (if you want types to be of class \"builtin\" instead of \"keyword\").\n operatorChars:\n All characters that must be handled as operators.\n client:\n Commands parsed and executed by the client (not the server).\n support:\n A list of supported syntaxes which are not common, but are supported by more than 1 DBMS.\n * ODBCdotTable: .tableName\n * zerolessFloat: .1\n * decimallessFloat: 1.\n * hexNumber: X'01AF' X'01af' x'01AF' x'01af' 0x01AF 0x01af\n * binaryNumber: b'01' B'01' 0b01\n * doubleQuote: \"string\"\n * escapeConstant: E''\n * nCharCast: N'string'\n * charsetCast: _utf8'string'\n * commentHash: use # char for comments\n * commentSlashSlash: use // for comments\n * commentSpaceRequired: require a space after -- for comments\n atoms:\n Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others:\n UNKNOWN, INFINITY, UNDERFLOW, NaN...\n dateSQL:\n Used for date/time SQL standard syntax, because not all DBMS's support same temporal types.\n*/\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nfunction Context(indented, column, type, info, align, prev) {\n this.indented = indented;\n this.column = column;\n this.type = type;\n this.info = info;\n this.align = align;\n this.prev = prev;\n}\nfunction pushContext(state, col, type, info) {\n var indent = state.indented;\n if (state.context && state.context.type == \"statement\" && type != \"statement\")\n indent = state.context.indented;\n return state.context = new Context(indent, col, type, info, null, state.context);\n}\nfunction popContext(state) {\n var t = state.context.type;\n if (t == \")\" || t == \"]\" || t == \"}\")\n state.indented = state.context.indented;\n return state.context = state.context.prev;\n}\n\nfunction typeBefore(stream, state, pos) {\n if (state.prevToken == \"variable\" || state.prevToken == \"type\") return true;\n if (/\\S(?:[^- ]>|[*\\]])\\s*$|\\*$/.test(stream.string.slice(0, pos))) return true;\n if (state.typeAtEndOfLine && stream.column() == stream.indentation()) return true;\n}\n\nfunction isTopScope(context) {\n for (;;) {\n if (!context || context.type == \"top\") return true;\n if (context.type == \"}\" && context.prev.info != \"namespace\") return false;\n context = context.prev;\n }\n}\n\nCodeMirror.defineMode(\"clike\", function(config, parserConfig) {\n var indentUnit = config.indentUnit,\n statementIndentUnit = parserConfig.statementIndentUnit || indentUnit,\n dontAlignCalls = parserConfig.dontAlignCalls,\n keywords = parserConfig.keywords || {},\n types = parserConfig.types || {},\n builtin = parserConfig.builtin || {},\n blockKeywords = parserConfig.blockKeywords || {},\n defKeywords = parserConfig.defKeywords || {},\n atoms = parserConfig.atoms || {},\n hooks = parserConfig.hooks || {},\n multiLineStrings = parserConfig.multiLineStrings,\n indentStatements = parserConfig.indentStatements !== false,\n indentSwitch = parserConfig.indentSwitch !== false,\n namespaceSeparator = parserConfig.namespaceSeparator,\n isPunctuationChar = parserConfig.isPunctuationChar || /[\\[\\]{}\\(\\),;\\:\\.]/,\n numberStart = parserConfig.numberStart || /[\\d\\.]/,\n number = parserConfig.number || /^(?:0x[a-f\\d]+|0b[01]+|(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?)(u|ll?|l|f)?/i,\n isOperatorChar = parserConfig.isOperatorChar || /[+\\-*&%=<>!?|\\/]/,\n isIdentifierChar = parserConfig.isIdentifierChar || /[\\w\\$_\\xa1-\\uffff]/,\n // An optional function that takes a {string} token and returns true if it\n // should be treated as a builtin.\n isReservedIdentifier = parserConfig.isReservedIdentifier || false;\n\n var curPunc, isDefKeyword;\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (hooks[ch]) {\n var result = hooks[ch](stream, state);\n if (result !== false) return result;\n }\n if (ch == '\"' || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n }\n if (numberStart.test(ch)) {\n stream.backUp(1)\n if (stream.match(number)) return \"number\"\n stream.next()\n }\n if (isPunctuationChar.test(ch)) {\n curPunc = ch;\n return null;\n }\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize = tokenComment;\n return tokenComment(stream, state);\n }\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return \"comment\";\n }\n }\n if (isOperatorChar.test(ch)) {\n while (!stream.match(/^\\/[\\/*]/, false) && stream.eat(isOperatorChar)) {}\n return \"operator\";\n }\n stream.eatWhile(isIdentifierChar);\n if (namespaceSeparator) while (stream.match(namespaceSeparator))\n stream.eatWhile(isIdentifierChar);\n\n var cur = stream.current();\n if (contains(keywords, cur)) {\n if (contains(blockKeywords, cur)) curPunc = \"newstatement\";\n if (contains(defKeywords, cur)) isDefKeyword = true;\n return \"keyword\";\n }\n if (contains(types, cur)) return \"type\";\n if (contains(builtin, cur)\n || (isReservedIdentifier && isReservedIdentifier(cur))) {\n if (contains(blockKeywords, cur)) curPunc = \"newstatement\";\n return \"builtin\";\n }\n if (contains(atoms, cur)) return \"atom\";\n return \"variable\";\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == quote && !escaped) {end = true; break;}\n escaped = !escaped && next == \"\\\\\";\n }\n if (end || !(escaped || multiLineStrings))\n state.tokenize = null;\n return \"string\";\n };\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize = null;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function maybeEOL(stream, state) {\n if (parserConfig.typeFirstDefinitions && stream.eol() && isTopScope(state.context))\n state.typeAtEndOfLine = typeBefore(stream, state, stream.pos)\n }\n\n // Interface\n\n return {\n startState: function(basecolumn) {\n return {\n tokenize: null,\n context: new Context((basecolumn || 0) - indentUnit, 0, \"top\", null, false),\n indented: 0,\n startOfLine: true,\n prevToken: null\n };\n },\n\n token: function(stream, state) {\n var ctx = state.context;\n if (stream.sol()) {\n if (ctx.align == null) ctx.align = false;\n state.indented = stream.indentation();\n state.startOfLine = true;\n }\n if (stream.eatSpace()) { maybeEOL(stream, state); return null; }\n curPunc = isDefKeyword = null;\n var style = (state.tokenize || tokenBase)(stream, state);\n if (style == \"comment\" || style == \"meta\") return style;\n if (ctx.align == null) ctx.align = true;\n\n if (curPunc == \";\" || curPunc == \":\" || (curPunc == \",\" && stream.match(/^\\s*(?:\\/\\/.*)?$/, false)))\n while (state.context.type == \"statement\") popContext(state);\n else if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");\n else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");\n else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");\n else if (curPunc == \"}\") {\n while (ctx.type == \"statement\") ctx = popContext(state);\n if (ctx.type == \"}\") ctx = popContext(state);\n while (ctx.type == \"statement\") ctx = popContext(state);\n }\n else if (curPunc == ctx.type) popContext(state);\n else if (indentStatements &&\n (((ctx.type == \"}\" || ctx.type == \"top\") && curPunc != \";\") ||\n (ctx.type == \"statement\" && curPunc == \"newstatement\"))) {\n pushContext(state, stream.column(), \"statement\", stream.current());\n }\n\n if (style == \"variable\" &&\n ((state.prevToken == \"def\" ||\n (parserConfig.typeFirstDefinitions && typeBefore(stream, state, stream.start) &&\n isTopScope(state.context) && stream.match(/^\\s*\\(/, false)))))\n style = \"def\";\n\n if (hooks.token) {\n var result = hooks.token(stream, state, style);\n if (result !== undefined) style = result;\n }\n\n if (style == \"def\" && parserConfig.styleDefs === false) style = \"variable\";\n\n state.startOfLine = false;\n state.prevToken = isDefKeyword ? \"def\" : style || curPunc;\n maybeEOL(stream, state);\n return style;\n },\n\n indent: function(state, textAfter) {\n if (state.tokenize != tokenBase && state.tokenize != null || state.typeAtEndOfLine) return CodeMirror.Pass;\n var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);\n var closing = firstChar == ctx.type;\n if (ctx.type == \"statement\" && firstChar == \"}\") ctx = ctx.prev;\n if (parserConfig.dontIndentStatements)\n while (ctx.type == \"statement\" && parserConfig.dontIndentStatements.test(ctx.info))\n ctx = ctx.prev\n if (hooks.indent) {\n var hook = hooks.indent(state, ctx, textAfter, indentUnit);\n if (typeof hook == \"number\") return hook\n }\n var switchBlock = ctx.prev && ctx.prev.info == \"switch\";\n if (parserConfig.allmanIndentation && /[{(]/.test(firstChar)) {\n while (ctx.type != \"top\" && ctx.type != \"}\") ctx = ctx.prev\n return ctx.indented\n }\n if (ctx.type == \"statement\")\n return ctx.indented + (firstChar == \"{\" ? 0 : statementIndentUnit);\n if (ctx.align && (!dontAlignCalls || ctx.type != \")\"))\n return ctx.column + (closing ? 0 : 1);\n if (ctx.type == \")\" && !closing)\n return ctx.indented + statementIndentUnit;\n\n return ctx.indented + (closing ? 0 : indentUnit) +\n (!closing && switchBlock && !/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 0);\n },\n\n electricInput: indentSwitch ? /^\\s*(?:case .*?:|default:|\\{\\}?|\\})$/ : /^\\s*[{}]$/,\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n blockCommentContinue: \" * \",\n lineComment: \"//\",\n fold: \"brace\"\n };\n});\n\n function words(str) {\n var obj = {}, words = str.split(\" \");\n for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n return obj;\n }\n function contains(words, word) {\n if (typeof words === \"function\") {\n return words(word);\n } else {\n return words.propertyIsEnumerable(word);\n }\n }\n var cKeywords = \"auto if break case register continue return default do sizeof \" +\n \"static else struct switch extern typedef union for goto while enum const \" +\n \"volatile inline restrict asm fortran\";\n\n // Keywords from https://en.cppreference.com/w/cpp/keyword includes C++20.\n var cppKeywords = \"alignas alignof and and_eq audit axiom bitand bitor catch \" +\n \"class compl concept constexpr const_cast decltype delete dynamic_cast \" +\n \"explicit export final friend import module mutable namespace new noexcept \" +\n \"not not_eq operator or or_eq override private protected public \" +\n \"reinterpret_cast requires static_assert static_cast template this \" +\n \"thread_local throw try typeid typename using virtual xor xor_eq\";\n\n var objCKeywords = \"bycopy byref in inout oneway out self super atomic nonatomic retain copy \" +\n \"readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd \" +\n \"@interface @implementation @end @protocol @encode @property @synthesize @dynamic @class \" +\n \"@public @package @private @protected @required @optional @try @catch @finally @import \" +\n \"@selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available\";\n\n var objCBuiltins = \"FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION \" +\n \" NS_RETURNS_RETAINEDNS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER \" +\n \"NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION \" +\n \"NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT\"\n\n // Do not use this. Use the cTypes function below. This is global just to avoid\n // excessive calls when cTypes is being called multiple times during a parse.\n var basicCTypes = words(\"int long char short double float unsigned signed \" +\n \"void bool\");\n\n // Do not use this. Use the objCTypes function below. This is global just to avoid\n // excessive calls when objCTypes is being called multiple times during a parse.\n var basicObjCTypes = words(\"SEL instancetype id Class Protocol BOOL\");\n\n // Returns true if identifier is a \"C\" type.\n // C type is defined as those that are reserved by the compiler (basicTypes),\n // and those that end in _t (Reserved by POSIX for types)\n // http://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html\n function cTypes(identifier) {\n return contains(basicCTypes, identifier) || /.+_t$/.test(identifier);\n }\n\n // Returns true if identifier is a \"Objective C\" type.\n function objCTypes(identifier) {\n return cTypes(identifier) || contains(basicObjCTypes, identifier);\n }\n\n var cBlockKeywords = \"case do else for if switch while struct enum union\";\n var cDefKeywords = \"struct enum union\";\n\n function cppHook(stream, state) {\n if (!state.startOfLine) return false\n for (var ch, next = null; ch = stream.peek();) {\n if (ch == \"\\\\\" && stream.match(/^.$/)) {\n next = cppHook\n break\n } else if (ch == \"/\" && stream.match(/^\\/[\\/\\*]/, false)) {\n break\n }\n stream.next()\n }\n state.tokenize = next\n return \"meta\"\n }\n\n function pointerHook(_stream, state) {\n if (state.prevToken == \"type\") return \"type\";\n return false;\n }\n\n // For C and C++ (and ObjC): identifiers starting with __\n // or _ followed by a capital letter are reserved for the compiler.\n function cIsReservedIdentifier(token) {\n if (!token || token.length < 2) return false;\n if (token[0] != '_') return false;\n return (token[1] == '_') || (token[1] !== token[1].toLowerCase());\n }\n\n function cpp14Literal(stream) {\n stream.eatWhile(/[\\w\\.']/);\n return \"number\";\n }\n\n function cpp11StringHook(stream, state) {\n stream.backUp(1);\n // Raw strings.\n if (stream.match(/^(?:R|u8R|uR|UR|LR)/)) {\n var match = stream.match(/^\"([^\\s\\\\()]{0,16})\\(/);\n if (!match) {\n return false;\n }\n state.cpp11RawStringDelim = match[1];\n state.tokenize = tokenRawString;\n return tokenRawString(stream, state);\n }\n // Unicode strings/chars.\n if (stream.match(/^(?:u8|u|U|L)/)) {\n if (stream.match(/^[\"']/, /* eat */ false)) {\n return \"string\";\n }\n return false;\n }\n // Ignore this hook.\n stream.next();\n return false;\n }\n\n function cppLooksLikeConstructor(word) {\n var lastTwo = /(\\w+)::~?(\\w+)$/.exec(word);\n return lastTwo && lastTwo[1] == lastTwo[2];\n }\n\n // C#-style strings where \"\" escapes a quote.\n function tokenAtString(stream, state) {\n var next;\n while ((next = stream.next()) != null) {\n if (next == '\"' && !stream.eat('\"')) {\n state.tokenize = null;\n break;\n }\n }\n return \"string\";\n }\n\n // C++11 raw string literal is \"( anything )\", where\n // can be a string up to 16 characters long.\n function tokenRawString(stream, state) {\n // Escape characters that have special regex meanings.\n var delim = state.cpp11RawStringDelim.replace(/[^\\w\\s]/g, '\\\\$&');\n var match = stream.match(new RegExp(\".*?\\\\)\" + delim + '\"'));\n if (match)\n state.tokenize = null;\n else\n stream.skipToEnd();\n return \"string\";\n }\n\n function def(mimes, mode) {\n if (typeof mimes == \"string\") mimes = [mimes];\n var words = [];\n function add(obj) {\n if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop))\n words.push(prop);\n }\n add(mode.keywords);\n add(mode.types);\n add(mode.builtin);\n add(mode.atoms);\n if (words.length) {\n mode.helperType = mimes[0];\n CodeMirror.registerHelper(\"hintWords\", mimes[0], words);\n }\n\n for (var i = 0; i < mimes.length; ++i)\n CodeMirror.defineMIME(mimes[i], mode);\n }\n\n def([\"text/x-csrc\", \"text/x-c\", \"text/x-chdr\"], {\n name: \"clike\",\n keywords: words(cKeywords),\n types: cTypes,\n blockKeywords: words(cBlockKeywords),\n defKeywords: words(cDefKeywords),\n typeFirstDefinitions: true,\n atoms: words(\"NULL true false\"),\n isReservedIdentifier: cIsReservedIdentifier,\n hooks: {\n \"#\": cppHook,\n \"*\": pointerHook,\n },\n modeProps: {fold: [\"brace\", \"include\"]}\n });\n\n def([\"text/x-c++src\", \"text/x-c++hdr\"], {\n name: \"clike\",\n keywords: words(cKeywords + \" \" + cppKeywords),\n types: cTypes,\n blockKeywords: words(cBlockKeywords + \" class try catch\"),\n defKeywords: words(cDefKeywords + \" class namespace\"),\n typeFirstDefinitions: true,\n atoms: words(\"true false NULL nullptr\"),\n dontIndentStatements: /^template$/,\n isIdentifierChar: /[\\w\\$_~\\xa1-\\uffff]/,\n isReservedIdentifier: cIsReservedIdentifier,\n hooks: {\n \"#\": cppHook,\n \"*\": pointerHook,\n \"u\": cpp11StringHook,\n \"U\": cpp11StringHook,\n \"L\": cpp11StringHook,\n \"R\": cpp11StringHook,\n \"0\": cpp14Literal,\n \"1\": cpp14Literal,\n \"2\": cpp14Literal,\n \"3\": cpp14Literal,\n \"4\": cpp14Literal,\n \"5\": cpp14Literal,\n \"6\": cpp14Literal,\n \"7\": cpp14Literal,\n \"8\": cpp14Literal,\n \"9\": cpp14Literal,\n token: function(stream, state, style) {\n if (style == \"variable\" && stream.peek() == \"(\" &&\n (state.prevToken == \";\" || state.prevToken == null ||\n state.prevToken == \"}\") &&\n cppLooksLikeConstructor(stream.current()))\n return \"def\";\n }\n },\n namespaceSeparator: \"::\",\n modeProps: {fold: [\"brace\", \"include\"]}\n });\n\n def(\"text/x-java\", {\n name: \"clike\",\n keywords: words(\"abstract assert break case catch class const continue default \" +\n \"do else enum extends final finally for goto if implements import \" +\n \"instanceof interface native new package private protected public \" +\n \"return static strictfp super switch synchronized this throw throws transient \" +\n \"try volatile while @interface\"),\n types: words(\"var byte short int long float double boolean char void Boolean Byte Character Double Float \" +\n \"Integer Long Number Object Short String StringBuffer StringBuilder Void\"),\n blockKeywords: words(\"catch class do else finally for if switch try while\"),\n defKeywords: words(\"class interface enum @interface\"),\n typeFirstDefinitions: true,\n atoms: words(\"true false null\"),\n number: /^(?:0x[a-f\\d_]+|0b[01_]+|(?:[\\d_]+\\.?\\d*|\\.\\d+)(?:e[-+]?[\\d_]+)?)(u|ll?|l|f)?/i,\n hooks: {\n \"@\": function(stream) {\n // Don't match the @interface keyword.\n if (stream.match('interface', false)) return false;\n\n stream.eatWhile(/[\\w\\$_]/);\n return \"meta\";\n },\n '\"': function(stream, state) {\n if (!stream.match(/\"\"$/)) return false;\n state.tokenize = tokenTripleString;\n return state.tokenize(stream, state);\n }\n },\n modeProps: {fold: [\"brace\", \"import\"]}\n });\n\n def(\"text/x-csharp\", {\n name: \"clike\",\n keywords: words(\"abstract as async await base break case catch checked class const continue\" +\n \" default delegate do else enum event explicit extern finally fixed for\" +\n \" foreach goto if implicit in interface internal is lock namespace new\" +\n \" operator out override params private protected public readonly ref return sealed\" +\n \" sizeof stackalloc static struct switch this throw try typeof unchecked\" +\n \" unsafe using virtual void volatile while add alias ascending descending dynamic from get\" +\n \" global group into join let orderby partial remove select set value var yield\"),\n types: words(\"Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func\" +\n \" Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32\" +\n \" UInt64 bool byte char decimal double short int long object\" +\n \" sbyte float string ushort uint ulong\"),\n blockKeywords: words(\"catch class do else finally for foreach if struct switch try while\"),\n defKeywords: words(\"class interface namespace struct var\"),\n typeFirstDefinitions: true,\n atoms: words(\"true false null\"),\n hooks: {\n \"@\": function(stream, state) {\n if (stream.eat('\"')) {\n state.tokenize = tokenAtString;\n return tokenAtString(stream, state);\n }\n stream.eatWhile(/[\\w\\$_]/);\n return \"meta\";\n }\n }\n });\n\n function tokenTripleString(stream, state) {\n var escaped = false;\n while (!stream.eol()) {\n if (!escaped && stream.match('\"\"\"')) {\n state.tokenize = null;\n break;\n }\n escaped = stream.next() == \"\\\\\" && !escaped;\n }\n return \"string\";\n }\n\n function tokenNestedComment(depth) {\n return function (stream, state) {\n var ch\n while (ch = stream.next()) {\n if (ch == \"*\" && stream.eat(\"/\")) {\n if (depth == 1) {\n state.tokenize = null\n break\n } else {\n state.tokenize = tokenNestedComment(depth - 1)\n return state.tokenize(stream, state)\n }\n } else if (ch == \"/\" && stream.eat(\"*\")) {\n state.tokenize = tokenNestedComment(depth + 1)\n return state.tokenize(stream, state)\n }\n }\n return \"comment\"\n }\n }\n\n def(\"text/x-scala\", {\n name: \"clike\",\n keywords: words(\n /* scala */\n \"abstract case catch class def do else extends final finally for forSome if \" +\n \"implicit import lazy match new null object override package private protected return \" +\n \"sealed super this throw trait try type val var while with yield _ \" +\n\n /* package scala */\n \"assert assume require print println printf readLine readBoolean readByte readShort \" +\n \"readChar readInt readLong readFloat readDouble\"\n ),\n types: words(\n \"AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either \" +\n \"Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable \" +\n \"Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering \" +\n \"Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder \" +\n \"StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector \" +\n\n /* package java.lang */\n \"Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable \" +\n \"Compiler Double Exception Float Integer Long Math Number Object Package Pair Process \" +\n \"Runtime Runnable SecurityManager Short StackTraceElement StrictMath String \" +\n \"StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void\"\n ),\n multiLineStrings: true,\n blockKeywords: words(\"catch class enum do else finally for forSome if match switch try while\"),\n defKeywords: words(\"class enum def object package trait type val var\"),\n atoms: words(\"true false null\"),\n indentStatements: false,\n indentSwitch: false,\n isOperatorChar: /[+\\-*&%=<>!?|\\/#:@]/,\n hooks: {\n \"@\": function(stream) {\n stream.eatWhile(/[\\w\\$_]/);\n return \"meta\";\n },\n '\"': function(stream, state) {\n if (!stream.match('\"\"')) return false;\n state.tokenize = tokenTripleString;\n return state.tokenize(stream, state);\n },\n \"'\": function(stream) {\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n return \"atom\";\n },\n \"=\": function(stream, state) {\n var cx = state.context\n if (cx.type == \"}\" && cx.align && stream.eat(\">\")) {\n state.context = new Context(cx.indented, cx.column, cx.type, cx.info, null, cx.prev)\n return \"operator\"\n } else {\n return false\n }\n },\n\n \"/\": function(stream, state) {\n if (!stream.eat(\"*\")) return false\n state.tokenize = tokenNestedComment(1)\n return state.tokenize(stream, state)\n }\n },\n modeProps: {closeBrackets: {pairs: '()[]{}\"\"', triples: '\"'}}\n });\n\n function tokenKotlinString(tripleString){\n return function (stream, state) {\n var escaped = false, next, end = false;\n while (!stream.eol()) {\n if (!tripleString && !escaped && stream.match('\"') ) {end = true; break;}\n if (tripleString && stream.match('\"\"\"')) {end = true; break;}\n next = stream.next();\n if(!escaped && next == \"$\" && stream.match('{'))\n stream.skipTo(\"}\");\n escaped = !escaped && next == \"\\\\\" && !tripleString;\n }\n if (end || !tripleString)\n state.tokenize = null;\n return \"string\";\n }\n }\n\n def(\"text/x-kotlin\", {\n name: \"clike\",\n keywords: words(\n /*keywords*/\n \"package as typealias class interface this super val operator \" +\n \"var fun for is in This throw return annotation \" +\n \"break continue object if else while do try when !in !is as? \" +\n\n /*soft keywords*/\n \"file import where by get set abstract enum open inner override private public internal \" +\n \"protected catch finally out final vararg reified dynamic companion constructor init \" +\n \"sealed field property receiver param sparam lateinit data inline noinline tailrec \" +\n \"external annotation crossinline const operator infix suspend actual expect setparam value\"\n ),\n types: words(\n /* package java.lang */\n \"Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable \" +\n \"Compiler Double Exception Float Integer Long Math Number Object Package Pair Process \" +\n \"Runtime Runnable SecurityManager Short StackTraceElement StrictMath String \" +\n \"StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray \" +\n \"ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy \" +\n \"LazyThreadSafetyMode LongArray Nothing ShortArray Unit\"\n ),\n intendSwitch: false,\n indentStatements: false,\n multiLineStrings: true,\n number: /^(?:0x[a-f\\d_]+|0b[01_]+|(?:[\\d_]+(\\.\\d+)?|\\.\\d+)(?:e[-+]?[\\d_]+)?)(u|ll?|l|f)?/i,\n blockKeywords: words(\"catch class do else finally for if where try while enum\"),\n defKeywords: words(\"class val var object interface fun\"),\n atoms: words(\"true false null this\"),\n hooks: {\n \"@\": function(stream) {\n stream.eatWhile(/[\\w\\$_]/);\n return \"meta\";\n },\n '*': function(_stream, state) {\n return state.prevToken == '.' ? 'variable' : 'operator';\n },\n '\"': function(stream, state) {\n state.tokenize = tokenKotlinString(stream.match('\"\"'));\n return state.tokenize(stream, state);\n },\n \"/\": function(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenNestedComment(1);\n return state.tokenize(stream, state)\n },\n indent: function(state, ctx, textAfter, indentUnit) {\n var firstChar = textAfter && textAfter.charAt(0);\n if ((state.prevToken == \"}\" || state.prevToken == \")\") && textAfter == \"\")\n return state.indented;\n if ((state.prevToken == \"operator\" && textAfter != \"}\" && state.context.type != \"}\") ||\n state.prevToken == \"variable\" && firstChar == \".\" ||\n (state.prevToken == \"}\" || state.prevToken == \")\") && firstChar == \".\")\n return indentUnit * 2 + ctx.indented;\n if (ctx.align && ctx.type == \"}\")\n return ctx.indented + (state.context.type == (textAfter || \"\").charAt(0) ? 0 : indentUnit);\n }\n },\n modeProps: {closeBrackets: {triples: '\"'}}\n });\n\n def([\"x-shader/x-vertex\", \"x-shader/x-fragment\"], {\n name: \"clike\",\n keywords: words(\"sampler1D sampler2D sampler3D samplerCube \" +\n \"sampler1DShadow sampler2DShadow \" +\n \"const attribute uniform varying \" +\n \"break continue discard return \" +\n \"for while do if else struct \" +\n \"in out inout\"),\n types: words(\"float int bool void \" +\n \"vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 \" +\n \"mat2 mat3 mat4\"),\n blockKeywords: words(\"for while do if else struct\"),\n builtin: words(\"radians degrees sin cos tan asin acos atan \" +\n \"pow exp log exp2 sqrt inversesqrt \" +\n \"abs sign floor ceil fract mod min max clamp mix step smoothstep \" +\n \"length distance dot cross normalize ftransform faceforward \" +\n \"reflect refract matrixCompMult \" +\n \"lessThan lessThanEqual greaterThan greaterThanEqual \" +\n \"equal notEqual any all not \" +\n \"texture1D texture1DProj texture1DLod texture1DProjLod \" +\n \"texture2D texture2DProj texture2DLod texture2DProjLod \" +\n \"texture3D texture3DProj texture3DLod texture3DProjLod \" +\n \"textureCube textureCubeLod \" +\n \"shadow1D shadow2D shadow1DProj shadow2DProj \" +\n \"shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod \" +\n \"dFdx dFdy fwidth \" +\n \"noise1 noise2 noise3 noise4\"),\n atoms: words(\"true false \" +\n \"gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex \" +\n \"gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 \" +\n \"gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 \" +\n \"gl_FogCoord gl_PointCoord \" +\n \"gl_Position gl_PointSize gl_ClipVertex \" +\n \"gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor \" +\n \"gl_TexCoord gl_FogFragCoord \" +\n \"gl_FragCoord gl_FrontFacing \" +\n \"gl_FragData gl_FragDepth \" +\n \"gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix \" +\n \"gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse \" +\n \"gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse \" +\n \"gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose \" +\n \"gl_ProjectionMatrixInverseTranspose \" +\n \"gl_ModelViewProjectionMatrixInverseTranspose \" +\n \"gl_TextureMatrixInverseTranspose \" +\n \"gl_NormalScale gl_DepthRange gl_ClipPlane \" +\n \"gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel \" +\n \"gl_FrontLightModelProduct gl_BackLightModelProduct \" +\n \"gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ \" +\n \"gl_FogParameters \" +\n \"gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords \" +\n \"gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats \" +\n \"gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits \" +\n \"gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits \" +\n \"gl_MaxDrawBuffers\"),\n indentSwitch: false,\n hooks: {\"#\": cppHook},\n modeProps: {fold: [\"brace\", \"include\"]}\n });\n\n def(\"text/x-nesc\", {\n name: \"clike\",\n keywords: words(cKeywords + \" as atomic async call command component components configuration event generic \" +\n \"implementation includes interface module new norace nx_struct nx_union post provides \" +\n \"signal task uses abstract extends\"),\n types: cTypes,\n blockKeywords: words(cBlockKeywords),\n atoms: words(\"null true false\"),\n hooks: {\"#\": cppHook},\n modeProps: {fold: [\"brace\", \"include\"]}\n });\n\n def(\"text/x-objectivec\", {\n name: \"clike\",\n keywords: words(cKeywords + \" \" + objCKeywords),\n types: objCTypes,\n builtin: words(objCBuiltins),\n blockKeywords: words(cBlockKeywords + \" @synthesize @try @catch @finally @autoreleasepool @synchronized\"),\n defKeywords: words(cDefKeywords + \" @interface @implementation @protocol @class\"),\n dontIndentStatements: /^@.*$/,\n typeFirstDefinitions: true,\n atoms: words(\"YES NO NULL Nil nil true false nullptr\"),\n isReservedIdentifier: cIsReservedIdentifier,\n hooks: {\n \"#\": cppHook,\n \"*\": pointerHook,\n },\n modeProps: {fold: [\"brace\", \"include\"]}\n });\n\n def(\"text/x-objectivec++\", {\n name: \"clike\",\n keywords: words(cKeywords + \" \" + objCKeywords + \" \" + cppKeywords),\n types: objCTypes,\n builtin: words(objCBuiltins),\n blockKeywords: words(cBlockKeywords + \" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch\"),\n defKeywords: words(cDefKeywords + \" @interface @implementation @protocol @class class namespace\"),\n dontIndentStatements: /^@.*$|^template$/,\n typeFirstDefinitions: true,\n atoms: words(\"YES NO NULL Nil nil true false nullptr\"),\n isReservedIdentifier: cIsReservedIdentifier,\n hooks: {\n \"#\": cppHook,\n \"*\": pointerHook,\n \"u\": cpp11StringHook,\n \"U\": cpp11StringHook,\n \"L\": cpp11StringHook,\n \"R\": cpp11StringHook,\n \"0\": cpp14Literal,\n \"1\": cpp14Literal,\n \"2\": cpp14Literal,\n \"3\": cpp14Literal,\n \"4\": cpp14Literal,\n \"5\": cpp14Literal,\n \"6\": cpp14Literal,\n \"7\": cpp14Literal,\n \"8\": cpp14Literal,\n \"9\": cpp14Literal,\n token: function(stream, state, style) {\n if (style == \"variable\" && stream.peek() == \"(\" &&\n (state.prevToken == \";\" || state.prevToken == null ||\n state.prevToken == \"}\") &&\n cppLooksLikeConstructor(stream.current()))\n return \"def\";\n }\n },\n namespaceSeparator: \"::\",\n modeProps: {fold: [\"brace\", \"include\"]}\n });\n\n def(\"text/x-squirrel\", {\n name: \"clike\",\n keywords: words(\"base break clone continue const default delete enum extends function in class\" +\n \" foreach local resume return this throw typeof yield constructor instanceof static\"),\n types: cTypes,\n blockKeywords: words(\"case catch class else for foreach if switch try while\"),\n defKeywords: words(\"function local class\"),\n typeFirstDefinitions: true,\n atoms: words(\"true false null\"),\n hooks: {\"#\": cppHook},\n modeProps: {fold: [\"brace\", \"include\"]}\n });\n\n // Ceylon Strings need to deal with interpolation\n var stringTokenizer = null;\n function tokenCeylonString(type) {\n return function(stream, state) {\n var escaped = false, next, end = false;\n while (!stream.eol()) {\n if (!escaped && stream.match('\"') &&\n (type == \"single\" || stream.match('\"\"'))) {\n end = true;\n break;\n }\n if (!escaped && stream.match('``')) {\n stringTokenizer = tokenCeylonString(type);\n end = true;\n break;\n }\n next = stream.next();\n escaped = type == \"single\" && !escaped && next == \"\\\\\";\n }\n if (end)\n state.tokenize = null;\n return \"string\";\n }\n }\n\n def(\"text/x-ceylon\", {\n name: \"clike\",\n keywords: words(\"abstracts alias assembly assert assign break case catch class continue dynamic else\" +\n \" exists extends finally for function given if import in interface is let module new\" +\n \" nonempty object of out outer package return satisfies super switch then this throw\" +\n \" try value void while\"),\n types: function(word) {\n // In Ceylon all identifiers that start with an uppercase are types\n var first = word.charAt(0);\n return (first === first.toUpperCase() && first !== first.toLowerCase());\n },\n blockKeywords: words(\"case catch class dynamic else finally for function if interface module new object switch try while\"),\n defKeywords: words(\"class dynamic function interface module object package value\"),\n builtin: words(\"abstract actual aliased annotation by default deprecated doc final formal late license\" +\n \" native optional sealed see serializable shared suppressWarnings tagged throws variable\"),\n isPunctuationChar: /[\\[\\]{}\\(\\),;\\:\\.`]/,\n isOperatorChar: /[+\\-*&%=<>!?|^~:\\/]/,\n numberStart: /[\\d#$]/,\n number: /^(?:#[\\da-fA-F_]+|\\$[01_]+|[\\d_]+[kMGTPmunpf]?|[\\d_]+\\.[\\d_]+(?:[eE][-+]?\\d+|[kMGTPmunpf]|)|)/i,\n multiLineStrings: true,\n typeFirstDefinitions: true,\n atoms: words(\"true false null larger smaller equal empty finished\"),\n indentSwitch: false,\n styleDefs: false,\n hooks: {\n \"@\": function(stream) {\n stream.eatWhile(/[\\w\\$_]/);\n return \"meta\";\n },\n '\"': function(stream, state) {\n state.tokenize = tokenCeylonString(stream.match('\"\"') ? \"triple\" : \"single\");\n return state.tokenize(stream, state);\n },\n '`': function(stream, state) {\n if (!stringTokenizer || !stream.match('`')) return false;\n state.tokenize = stringTokenizer;\n stringTokenizer = null;\n return state.tokenize(stream, state);\n },\n \"'\": function(stream) {\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n return \"atom\";\n },\n token: function(_stream, state, style) {\n if ((style == \"variable\" || style == \"type\") &&\n state.prevToken == \".\") {\n return \"variable-2\";\n }\n }\n },\n modeProps: {\n fold: [\"brace\", \"import\"],\n closeBrackets: {triples: '\"'}\n }\n });\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n function wordRegexp(words) {\n return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n }\n\n var wordOperators = wordRegexp([\"and\", \"or\", \"not\", \"is\"]);\n var commonKeywords = [\"as\", \"assert\", \"break\", \"class\", \"continue\",\n \"def\", \"del\", \"elif\", \"else\", \"except\", \"finally\",\n \"for\", \"from\", \"global\", \"if\", \"import\",\n \"lambda\", \"pass\", \"raise\", \"return\",\n \"try\", \"while\", \"with\", \"yield\", \"in\"];\n var commonBuiltins = [\"abs\", \"all\", \"any\", \"bin\", \"bool\", \"bytearray\", \"callable\", \"chr\",\n \"classmethod\", \"compile\", \"complex\", \"delattr\", \"dict\", \"dir\", \"divmod\",\n \"enumerate\", \"eval\", \"filter\", \"float\", \"format\", \"frozenset\",\n \"getattr\", \"globals\", \"hasattr\", \"hash\", \"help\", \"hex\", \"id\",\n \"input\", \"int\", \"isinstance\", \"issubclass\", \"iter\", \"len\",\n \"list\", \"locals\", \"map\", \"max\", \"memoryview\", \"min\", \"next\",\n \"object\", \"oct\", \"open\", \"ord\", \"pow\", \"property\", \"range\",\n \"repr\", \"reversed\", \"round\", \"set\", \"setattr\", \"slice\",\n \"sorted\", \"staticmethod\", \"str\", \"sum\", \"super\", \"tuple\",\n \"type\", \"vars\", \"zip\", \"__import__\", \"NotImplemented\",\n \"Ellipsis\", \"__debug__\"];\n CodeMirror.registerHelper(\"hintWords\", \"python\", commonKeywords.concat(commonBuiltins).concat([\"exec\", \"print\"]));\n\n function top(state) {\n return state.scopes[state.scopes.length - 1];\n }\n\n CodeMirror.defineMode(\"python\", function(conf, parserConf) {\n var ERRORCLASS = \"error\";\n\n var delimiters = parserConf.delimiters || parserConf.singleDelimiters || /^[\\(\\)\\[\\]\\{\\}@,:`=;\\.\\\\]/;\n // (Backwards-compatibility with old, cumbersome config system)\n var operators = [parserConf.singleOperators, parserConf.doubleOperators, parserConf.doubleDelimiters, parserConf.tripleDelimiters,\n parserConf.operators || /^([-+*/%\\/&|^]=?|[<>=]+|\\/\\/=?|\\*\\*=?|!=|[~!@]|\\.\\.\\.)/]\n for (var i = 0; i < operators.length; i++) if (!operators[i]) operators.splice(i--, 1)\n\n var hangingIndent = parserConf.hangingIndent || conf.indentUnit;\n\n var myKeywords = commonKeywords, myBuiltins = commonBuiltins;\n if (parserConf.extra_keywords != undefined)\n myKeywords = myKeywords.concat(parserConf.extra_keywords);\n\n if (parserConf.extra_builtins != undefined)\n myBuiltins = myBuiltins.concat(parserConf.extra_builtins);\n\n var py3 = !(parserConf.version && Number(parserConf.version) < 3)\n if (py3) {\n // since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator\n var identifiers = parserConf.identifiers|| /^[_A-Za-z\\u00A1-\\uFFFF][_A-Za-z0-9\\u00A1-\\uFFFF]*/;\n myKeywords = myKeywords.concat([\"nonlocal\", \"False\", \"True\", \"None\", \"async\", \"await\"]);\n myBuiltins = myBuiltins.concat([\"ascii\", \"bytes\", \"exec\", \"print\"]);\n var stringPrefixes = new RegExp(\"^(([rbuf]|(br)|(rb)|(fr)|(rf))?('{3}|\\\"{3}|['\\\"]))\", \"i\");\n } else {\n var identifiers = parserConf.identifiers|| /^[_A-Za-z][_A-Za-z0-9]*/;\n myKeywords = myKeywords.concat([\"exec\", \"print\"]);\n myBuiltins = myBuiltins.concat([\"apply\", \"basestring\", \"buffer\", \"cmp\", \"coerce\", \"execfile\",\n \"file\", \"intern\", \"long\", \"raw_input\", \"reduce\", \"reload\",\n \"unichr\", \"unicode\", \"xrange\", \"False\", \"True\", \"None\"]);\n var stringPrefixes = new RegExp(\"^(([rubf]|(ur)|(br))?('{3}|\\\"{3}|['\\\"]))\", \"i\");\n }\n var keywords = wordRegexp(myKeywords);\n var builtins = wordRegexp(myBuiltins);\n\n // tokenizers\n function tokenBase(stream, state) {\n var sol = stream.sol() && state.lastToken != \"\\\\\"\n if (sol) state.indent = stream.indentation()\n // Handle scope changes\n if (sol && top(state).type == \"py\") {\n var scopeOffset = top(state).offset;\n if (stream.eatSpace()) {\n var lineOffset = stream.indentation();\n if (lineOffset > scopeOffset)\n pushPyScope(state);\n else if (lineOffset < scopeOffset && dedent(stream, state) && stream.peek() != \"#\")\n state.errorToken = true;\n return null;\n } else {\n var style = tokenBaseInner(stream, state);\n if (scopeOffset > 0 && dedent(stream, state))\n style += \" \" + ERRORCLASS;\n return style;\n }\n }\n return tokenBaseInner(stream, state);\n }\n\n function tokenBaseInner(stream, state, inFormat) {\n if (stream.eatSpace()) return null;\n\n // Handle Comments\n if (!inFormat && stream.match(/^#.*/)) return \"comment\";\n\n // Handle Number Literals\n if (stream.match(/^[0-9\\.]/, false)) {\n var floatLiteral = false;\n // Floats\n if (stream.match(/^[\\d_]*\\.\\d+(e[\\+\\-]?\\d+)?/i)) { floatLiteral = true; }\n if (stream.match(/^[\\d_]+\\.\\d*/)) { floatLiteral = true; }\n if (stream.match(/^\\.\\d+/)) { floatLiteral = true; }\n if (floatLiteral) {\n // Float literals may be \"imaginary\"\n stream.eat(/J/i);\n return \"number\";\n }\n // Integers\n var intLiteral = false;\n // Hex\n if (stream.match(/^0x[0-9a-f_]+/i)) intLiteral = true;\n // Binary\n if (stream.match(/^0b[01_]+/i)) intLiteral = true;\n // Octal\n if (stream.match(/^0o[0-7_]+/i)) intLiteral = true;\n // Decimal\n if (stream.match(/^[1-9][\\d_]*(e[\\+\\-]?[\\d_]+)?/)) {\n // Decimal literals may be \"imaginary\"\n stream.eat(/J/i);\n // TODO - Can you have imaginary longs?\n intLiteral = true;\n }\n // Zero by itself with no other piece of number.\n if (stream.match(/^0(?![\\dx])/i)) intLiteral = true;\n if (intLiteral) {\n // Integer literals may be \"long\"\n stream.eat(/L/i);\n return \"number\";\n }\n }\n\n // Handle Strings\n if (stream.match(stringPrefixes)) {\n var isFmtString = stream.current().toLowerCase().indexOf('f') !== -1;\n if (!isFmtString) {\n state.tokenize = tokenStringFactory(stream.current(), state.tokenize);\n return state.tokenize(stream, state);\n } else {\n state.tokenize = formatStringFactory(stream.current(), state.tokenize);\n return state.tokenize(stream, state);\n }\n }\n\n for (var i = 0; i < operators.length; i++)\n if (stream.match(operators[i])) return \"operator\"\n\n if (stream.match(delimiters)) return \"punctuation\";\n\n if (state.lastToken == \".\" && stream.match(identifiers))\n return \"property\";\n\n if (stream.match(keywords) || stream.match(wordOperators))\n return \"keyword\";\n\n if (stream.match(builtins))\n return \"builtin\";\n\n if (stream.match(/^(self|cls)\\b/))\n return \"variable-2\";\n\n if (stream.match(identifiers)) {\n if (state.lastToken == \"def\" || state.lastToken == \"class\")\n return \"def\";\n return \"variable\";\n }\n\n // Handle non-detected items\n stream.next();\n return inFormat ? null :ERRORCLASS;\n }\n\n function formatStringFactory(delimiter, tokenOuter) {\n while (\"rubf\".indexOf(delimiter.charAt(0).toLowerCase()) >= 0)\n delimiter = delimiter.substr(1);\n\n var singleline = delimiter.length == 1;\n var OUTCLASS = \"string\";\n\n function tokenNestedExpr(depth) {\n return function(stream, state) {\n var inner = tokenBaseInner(stream, state, true)\n if (inner == \"punctuation\") {\n if (stream.current() == \"{\") {\n state.tokenize = tokenNestedExpr(depth + 1)\n } else if (stream.current() == \"}\") {\n if (depth > 1) state.tokenize = tokenNestedExpr(depth - 1)\n else state.tokenize = tokenString\n }\n }\n return inner\n }\n }\n\n function tokenString(stream, state) {\n while (!stream.eol()) {\n stream.eatWhile(/[^'\"\\{\\}\\\\]/);\n if (stream.eat(\"\\\\\")) {\n stream.next();\n if (singleline && stream.eol())\n return OUTCLASS;\n } else if (stream.match(delimiter)) {\n state.tokenize = tokenOuter;\n return OUTCLASS;\n } else if (stream.match('{{')) {\n // ignore {{ in f-str\n return OUTCLASS;\n } else if (stream.match('{', false)) {\n // switch to nested mode\n state.tokenize = tokenNestedExpr(0)\n if (stream.current()) return OUTCLASS;\n else return state.tokenize(stream, state)\n } else if (stream.match('}}')) {\n return OUTCLASS;\n } else if (stream.match('}')) {\n // single } in f-string is an error\n return ERRORCLASS;\n } else {\n stream.eat(/['\"]/);\n }\n }\n if (singleline) {\n if (parserConf.singleLineStringErrors)\n return ERRORCLASS;\n else\n state.tokenize = tokenOuter;\n }\n return OUTCLASS;\n }\n tokenString.isString = true;\n return tokenString;\n }\n\n function tokenStringFactory(delimiter, tokenOuter) {\n while (\"rubf\".indexOf(delimiter.charAt(0).toLowerCase()) >= 0)\n delimiter = delimiter.substr(1);\n\n var singleline = delimiter.length == 1;\n var OUTCLASS = \"string\";\n\n function tokenString(stream, state) {\n while (!stream.eol()) {\n stream.eatWhile(/[^'\"\\\\]/);\n if (stream.eat(\"\\\\\")) {\n stream.next();\n if (singleline && stream.eol())\n return OUTCLASS;\n } else if (stream.match(delimiter)) {\n state.tokenize = tokenOuter;\n return OUTCLASS;\n } else {\n stream.eat(/['\"]/);\n }\n }\n if (singleline) {\n if (parserConf.singleLineStringErrors)\n return ERRORCLASS;\n else\n state.tokenize = tokenOuter;\n }\n return OUTCLASS;\n }\n tokenString.isString = true;\n return tokenString;\n }\n\n function pushPyScope(state) {\n while (top(state).type != \"py\") state.scopes.pop()\n state.scopes.push({offset: top(state).offset + conf.indentUnit,\n type: \"py\",\n align: null})\n }\n\n function pushBracketScope(stream, state, type) {\n var align = stream.match(/^[\\s\\[\\{\\(]*(?:#|$)/, false) ? null : stream.column() + 1\n state.scopes.push({offset: state.indent + hangingIndent,\n type: type,\n align: align})\n }\n\n function dedent(stream, state) {\n var indented = stream.indentation();\n while (state.scopes.length > 1 && top(state).offset > indented) {\n if (top(state).type != \"py\") return true;\n state.scopes.pop();\n }\n return top(state).offset != indented;\n }\n\n function tokenLexer(stream, state) {\n if (stream.sol()) {\n state.beginningOfLine = true;\n state.dedent = false;\n }\n\n var style = state.tokenize(stream, state);\n var current = stream.current();\n\n // Handle decorators\n if (state.beginningOfLine && current == \"@\")\n return stream.match(identifiers, false) ? \"meta\" : py3 ? \"operator\" : ERRORCLASS;\n\n if (/\\S/.test(current)) state.beginningOfLine = false;\n\n if ((style == \"variable\" || style == \"builtin\")\n && state.lastToken == \"meta\")\n style = \"meta\";\n\n // Handle scope changes.\n if (current == \"pass\" || current == \"return\")\n state.dedent = true;\n\n if (current == \"lambda\") state.lambda = true;\n if (current == \":\" && !state.lambda && top(state).type == \"py\" && stream.match(/^\\s*(?:#|$)/, false))\n pushPyScope(state);\n\n if (current.length == 1 && !/string|comment/.test(style)) {\n var delimiter_index = \"[({\".indexOf(current);\n if (delimiter_index != -1)\n pushBracketScope(stream, state, \"])}\".slice(delimiter_index, delimiter_index+1));\n\n delimiter_index = \"])}\".indexOf(current);\n if (delimiter_index != -1) {\n if (top(state).type == current) state.indent = state.scopes.pop().offset - hangingIndent\n else return ERRORCLASS;\n }\n }\n if (state.dedent && stream.eol() && top(state).type == \"py\" && state.scopes.length > 1)\n state.scopes.pop();\n\n return style;\n }\n\n var external = {\n startState: function(basecolumn) {\n return {\n tokenize: tokenBase,\n scopes: [{offset: basecolumn || 0, type: \"py\", align: null}],\n indent: basecolumn || 0,\n lastToken: null,\n lambda: false,\n dedent: 0\n };\n },\n\n token: function(stream, state) {\n var addErr = state.errorToken;\n if (addErr) state.errorToken = false;\n var style = tokenLexer(stream, state);\n\n if (style && style != \"comment\")\n state.lastToken = (style == \"keyword\" || style == \"punctuation\") ? stream.current() : style;\n if (style == \"punctuation\") style = null;\n\n if (stream.eol() && state.lambda)\n state.lambda = false;\n return addErr ? style + \" \" + ERRORCLASS : style;\n },\n\n indent: function(state, textAfter) {\n if (state.tokenize != tokenBase)\n return state.tokenize.isString ? CodeMirror.Pass : 0;\n\n var scope = top(state)\n var closing = scope.type == textAfter.charAt(0) ||\n scope.type == \"py\" && !state.dedent && /^(else:|elif |except |finally:)/.test(textAfter)\n if (scope.align != null)\n return scope.align - (closing ? 1 : 0)\n else\n return scope.offset - (closing ? hangingIndent : 0)\n },\n\n electricInput: /^\\s*([\\}\\]\\)]|else:|elif |except |finally:)$/,\n closeBrackets: {triples: \"'\\\"\"},\n lineComment: \"#\",\n fold: \"indent\"\n };\n return external;\n });\n\n CodeMirror.defineMIME(\"text/x-python\", \"python\");\n\n var words = function(str) { return str.split(\" \"); };\n\n CodeMirror.defineMIME(\"text/x-cython\", {\n name: \"python\",\n extra_keywords: words(\"by cdef cimport cpdef ctypedef enum except \"+\n \"extern gil include nogil property public \"+\n \"readonly struct union DEF IF ELIF ELSE\")\n });\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"octave\", function() {\n function wordRegexp(words) {\n return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n }\n\n var singleOperators = new RegExp(\"^[\\\\+\\\\-\\\\*/&|\\\\^~<>!@'\\\\\\\\]\");\n var singleDelimiters = new RegExp('^[\\\\(\\\\[\\\\{\\\\},:=;\\\\.]');\n var doubleOperators = new RegExp(\"^((==)|(~=)|(<=)|(>=)|(<<)|(>>)|(\\\\.[\\\\+\\\\-\\\\*/\\\\^\\\\\\\\]))\");\n var doubleDelimiters = new RegExp(\"^((!=)|(\\\\+=)|(\\\\-=)|(\\\\*=)|(/=)|(&=)|(\\\\|=)|(\\\\^=))\");\n var tripleDelimiters = new RegExp(\"^((>>=)|(<<=))\");\n var expressionEnd = new RegExp(\"^[\\\\]\\\\)]\");\n var identifiers = new RegExp(\"^[_A-Za-z\\xa1-\\uffff][_A-Za-z0-9\\xa1-\\uffff]*\");\n\n var builtins = wordRegexp([\n 'error', 'eval', 'function', 'abs', 'acos', 'atan', 'asin', 'cos',\n 'cosh', 'exp', 'log', 'prod', 'sum', 'log10', 'max', 'min', 'sign', 'sin', 'sinh',\n 'sqrt', 'tan', 'reshape', 'break', 'zeros', 'default', 'margin', 'round', 'ones',\n 'rand', 'syn', 'ceil', 'floor', 'size', 'clear', 'zeros', 'eye', 'mean', 'std', 'cov',\n 'det', 'eig', 'inv', 'norm', 'rank', 'trace', 'expm', 'logm', 'sqrtm', 'linspace', 'plot',\n 'title', 'xlabel', 'ylabel', 'legend', 'text', 'grid', 'meshgrid', 'mesh', 'num2str',\n 'fft', 'ifft', 'arrayfun', 'cellfun', 'input', 'fliplr', 'flipud', 'ismember'\n ]);\n\n var keywords = wordRegexp([\n 'return', 'case', 'switch', 'else', 'elseif', 'end', 'endif', 'endfunction',\n 'if', 'otherwise', 'do', 'for', 'while', 'try', 'catch', 'classdef', 'properties', 'events',\n 'methods', 'global', 'persistent', 'endfor', 'endwhile', 'printf', 'sprintf', 'disp', 'until',\n 'continue', 'pkg'\n ]);\n\n\n // tokenizers\n function tokenTranspose(stream, state) {\n if (!stream.sol() && stream.peek() === '\\'') {\n stream.next();\n state.tokenize = tokenBase;\n return 'operator';\n }\n state.tokenize = tokenBase;\n return tokenBase(stream, state);\n }\n\n\n function tokenComment(stream, state) {\n if (stream.match(/^.*%}/)) {\n state.tokenize = tokenBase;\n return 'comment';\n };\n stream.skipToEnd();\n return 'comment';\n }\n\n function tokenBase(stream, state) {\n // whitespaces\n if (stream.eatSpace()) return null;\n\n // Handle one line Comments\n if (stream.match('%{')){\n state.tokenize = tokenComment;\n stream.skipToEnd();\n return 'comment';\n }\n\n if (stream.match(/^[%#]/)){\n stream.skipToEnd();\n return 'comment';\n }\n\n // Handle Number Literals\n if (stream.match(/^[0-9\\.+-]/, false)) {\n if (stream.match(/^[+-]?0x[0-9a-fA-F]+[ij]?/)) {\n stream.tokenize = tokenBase;\n return 'number'; };\n if (stream.match(/^[+-]?\\d*\\.\\d+([EeDd][+-]?\\d+)?[ij]?/)) { return 'number'; };\n if (stream.match(/^[+-]?\\d+([EeDd][+-]?\\d+)?[ij]?/)) { return 'number'; };\n }\n if (stream.match(wordRegexp(['nan','NaN','inf','Inf']))) { return 'number'; };\n\n // Handle Strings\n var m = stream.match(/^\"(?:[^\"]|\"\")*(\"|$)/) || stream.match(/^'(?:[^']|'')*('|$)/)\n if (m) { return m[1] ? 'string' : \"string error\"; }\n\n // Handle words\n if (stream.match(keywords)) { return 'keyword'; } ;\n if (stream.match(builtins)) { return 'builtin'; } ;\n if (stream.match(identifiers)) { return 'variable'; } ;\n\n if (stream.match(singleOperators) || stream.match(doubleOperators)) { return 'operator'; };\n if (stream.match(singleDelimiters) || stream.match(doubleDelimiters) || stream.match(tripleDelimiters)) { return null; };\n\n if (stream.match(expressionEnd)) {\n state.tokenize = tokenTranspose;\n return null;\n };\n\n\n // Handle non-detected items\n stream.next();\n return 'error';\n };\n\n\n return {\n startState: function() {\n return {\n tokenize: tokenBase\n };\n },\n\n token: function(stream, state) {\n var style = state.tokenize(stream, state);\n if (style === 'number' || style === 'variable'){\n state.tokenize = tokenTranspose;\n }\n return style;\n },\n\n lineComment: '%',\n\n fold: 'indent'\n };\n});\n\nCodeMirror.defineMIME(\"text/x-octave\", \"octave\");\n\n});\n"],"names":["module","exports","userAgent","navigator","platform","gecko","test","ie_upto10","ie_11up","exec","edge","ie","ie_version","document","documentMode","webkit","qtwebkit","chrome","chrome_version","presto","safari","vendor","mac_geMountainLion","phantom","ios","maxTouchPoints","android","mobile","mac","chromeOS","windows","presto_version","match","Number","flipCtrlCmd","captureRightClick","classTest","cls","RegExp","range","rmClass","node","current","className","after","slice","index","length","removeChildren","e","count","childNodes","removeChild","firstChild","removeChildrenAndAdd","parent","appendChild","elt","tag","content","style","createElement","cssText","createTextNode","i","eltP","setAttribute","contains","child","nodeType","parentNode","host","activeElt","doc","activeElement","body","shadowRoot","addClass","joinClasses","a","b","as","split","createRange","start","end","endNode","r","setEnd","setStart","createTextRange","moveToElementText","collapse","moveEnd","moveStart","selectInput","select","cm","display","wrapper","ownerDocument","win","defaultView","bind","f","args","Array","prototype","call","arguments","apply","copyObj","obj","target","overwrite","prop","hasOwnProperty","countColumn","string","tabSize","startIndex","startValue","search","n","nextTab","indexOf","selectionStart","selectionEnd","value","_e","Delayed","this","id","time","handler","onTimeout","array","self","Date","setTimeout","set","ms","clearTimeout","Pass","toString","sel_dontScroll","scroll","sel_mouse","origin","sel_move","findColumn","goal","pos","col","skipped","Math","min","spaceStrs","spaceStr","push","lst","arr","map","out","nothing","createObj","base","props","inst","Object","create","nonASCIISingleCaseWordChar","isWordCharBasic","ch","toUpperCase","toLowerCase","isWordChar","helper","source","isEmpty","extendingChars","isExtendingChar","charCodeAt","skipExtendingChars","str","dir","charAt","findFirst","pred","from","to","midF","mid","ceil","floor","bidiOther","getBidiPartAt","order","sticky","found","cur","bidiOrdering","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","BidiSpan","level","direction","code","outerType","len","types","i$1","prev","type","i$2","type$1","i$3","prev$1","type$2","i$4","type$3","replace","j","i$5","cur$1","type$4","i$6","end$1","before","replace$1","j$1","m","i$7","at","isRTL","j$2","splice","nstart","unshift","reverse","getOrder","line","text","noHandlers","on","emitter","addEventListener","attachEvent","_handlers","concat","getHandlers","off","removeEventListener","detachEvent","signal","handlers","signalDOMEvent","override","preventDefault","defaultPrevented","e_defaultPrevented","codemirrorIgnore","signalCursorActivity","cursorActivity","curOp","cursorActivityHandlers","hasHandler","eventMixin","ctor","e_preventDefault","returnValue","e_stopPropagation","stopPropagation","cancelBubble","e_stop","e_target","srcElement","e_button","which","button","ctrlKey","zwspSupported","badBidiRects","dragAndDrop","div","zeroWidthElement","measure","offsetHeight","offsetWidth","hasBadBidiRects","txt","r0","getBoundingClientRect","r1","left","right","splitLinesAuto","result","l","nl","rt","hasSelection","window","getSelection","te","selection","parentElement","compareEndPoints","hasCopyEvent","oncopy","badZoomedRects","modes","mimeModes","defineMode","name","mode","dependencies","resolveMode","spec","getMode","options","mfactory","modeObj","modeExtensions","exts","helperType","modeProps","prop$1","extendMode","properties","copyState","state","nstate","val","innerMode","info","startState","a1","a2","StringStream","lineOracle","lastColumnPos","lastColumnValue","lineStart","getLine","first","size","Error","chunk","lines","children","sz","chunkSize","getBetween","iter","getLines","updateLineHeight","height","diff","lineNo","no","lineAtHeight","h","outer","lh","isLine","lineNumberFor","String","lineNumberFormatter","firstLineNumber","Pos","cmp","equalCursorPos","copyPos","x","maxPos","minPos","clipLine","max","clipPos","last","linelen","clipToLen","clipPosArray","eol","sol","peek","undefined","next","eat","eatWhile","eatSpace","skipToEnd","skipTo","backUp","column","indentation","pattern","consume","caseInsensitive","cased","substr","hideFirstChars","inner","lookAhead","oracle","baseToken","SavedContext","Context","maxLookAhead","baseTokens","baseTokenPos","highlightLine","context","forceToEnd","st","modeGen","lineClasses","runMode","loop","o","overlay","overlays","i_end","opaque","styles","classes","bgClass","textClass","getLineStyles","updateFrontier","getContextBefore","resetState","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","precise","minindent","minline","lim","indented","findStartLine","saved","fromSaved","processLine","viewFrom","viewTo","nextLine","startAt","stream","callBlankLine","readToken","blankLine","token","copy","Token","takeToken","asArray","tokens","extractLineClasses","output","lineClass","flattenSpans","curStart","curStyle","addModeClass","mName","sawReadOnlySpans","sawCollapsedSpans","MarkedSpan","marker","getMarkedSpanFor","spans","span","removeMarkedSpan","stretchSpansOverChange","change","full","oldFirst","markedSpans","oldLast","startCh","endCh","isInsert","old","nw","inclusiveLeft","insertLeft","endsAfter","inclusiveRight","markedSpansBefore","startsBefore","markedSpansAfter","sameLine","offset","span$1","clearEmptySpans","newMarkers","gapMarkers","gap","clearWhenEmpty","detachMarkedSpans","detachLine","attachMarkedSpans","attachLine","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","find","bPos","fromCmp","collapsedSpanAtSide","sps","sp","collapsed","collapsedSpanAtStart","collapsedSpanAtEnd","collapsedSpanAround","conflictingCollapsedRange","toCmp","visualLine","merged","visualLineNo","lineN","vis","visualLineEndNo","lastLine","lineIsHidden","widgetNode","lineIsHiddenInner","heightAtLine","lineObj","p","lineLength","found$1","findMaxLine","d","maxLine","maxLineLength","maxLineChanged","Line","estimateHeight","cleanUpLine","styleToClassCache","styleToClassCacheWithMode","interpretTokenStyle","cache","buildLineContent","lineView","builder","pre","trailingSpace","splitSpaces","getOption","rest","addToken","buildToken","buildTokenBadBidi","insertLineContent","externalMeasured","maps","caches","lastChild","querySelector","defaultSpecialCharPlaceholder","title","startStyle","endStyle","css","attributes","displayText","trailingBefore","spaceBefore","special","specialChars","mustWrap","createDocumentFragment","lastIndex","txt$1","tabWidth","specialCharPlaceholder","fullStyle","attr","part","buildCollapsedSpan","ignoreWidget","widget","input","needsContentAttribute","setUneditable","allText","spanStyle","spanEndStyle","spanStartStyle","nextChange","Infinity","foundBookmarks","endStyles","upto","tokenText","LineView","visualLineContinued","hidden","buildViewArray","nextPos","view","operationGroup","orphanDelayedCallbacks","signalLater","list","delayedCallbacks","fireOrphanDelayed","delayed","updateLineForChanges","dims","changes","updateLineText","updateLineGutter","updateLineClasses","updateLineWidgets","ensureLineWrapped","replaceChild","zIndex","getLineContent","ext","built","background","wrap","insertBefore","updateLineBackground","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","markers","gutterMarkers","lineNumbers","wrap$1","gutterWrap","lineNumber","gutterLeft","k","gutterSpecs","gutterWidth","alignable","isWidget","nextSibling","insertLineWidgets","buildLineElement","insertLineWidgetsFor","allowAbove","widgets","ws","handleMouseEvents","positionLineWidget","above","noHScroll","width","wrapperWidth","coverGutter","paddingLeft","position","marginLeft","widgetHeight","parentStyle","gutters","clientWidth","eventInWidget","getAttribute","sizer","mover","paddingTop","lineSpace","offsetTop","paddingVert","paddingH","cachedPaddingH","getComputedStyle","currentStyle","data","parseInt","paddingRight","isNaN","scrollGap","nativeBarWidth","displayWidth","scroller","barWidth","displayHeight","clientHeight","barHeight","mapFromLineView","measureChar","bias","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","getDimensions","forceUpdate","lineMeasure","updateExternalMeasurement","rect","hasHeights","prepared","varHeight","key","wrapping","lineWrapping","curWidth","heights","rects","getClientRects","abs","bottom","top","ensureLineHeights","place","nodeAndOffsetInLineMap","coverStart","coverEnd","getUsefulRect","screen","logicalXDPI","deviceXDPI","normal","fromRange","hasBadZoomedRects","scaleX","scaleY","logicalYDPI","deviceYDPI","maybeUpdateRectForZooming","rSpan","charWidth","nullRect","rtop","rbot","bot","bogus","singleCursorHeightPerLine","rbottom","measureCharInner","measureText","mStart","mEnd","clearLineMeasurementCacheFor","clearLineMeasurementCache","externalMeasure","clearCaches","cachedCharWidth","cachedTextHeight","lineNumChars","pageScrollX","pageXOffset","documentElement","scrollLeft","pageScrollY","marginTop","pageYOffset","scrollTop","widgetTopHeight","intoCoordSystem","includeWidgets","yOff","viewOffset","lOff","xOff","fromCoordSystem","coords","localBox","lineSpaceBox","charCoords","cursorCoords","preparedMeasure","get","getBidi","partPos","invert","other","estimateCoords","PosWithInfo","outside","xRel","coordsChar","y","coordsCharInner","rangeEnd","wrappedLineExtent","begin","wrappedLineExtentChar","boxIsAfter","box","ltr","coordsBidiPartWrapped","coordsBidiPart","baseX","chAround","boxAround","atLeft","atStart","_lineNo","ref","closestDist","endX","dist","textHeight","anchor","clientLeft","offsetLeft","compensateForHScroll","th","perLine","widgetsHeight","estimateLineHeights","est","estHeight","posFromMouse","liberal","forRect","space","clientX","clientY","e$1","colDiff","round","regChange","lendiff","updateLineNumbers","viewChanged","resetView","cut","viewCuttingPoint","cut$1","cutTop","cutBot","regLineChange","oldN","newN","countDirtyView","dirty","updateSelection","showSelection","prepareSelection","primary","curFragment","cursors","selFragment","customCursor","$customCursor","sel","ranges","primIndex","empty","head","drawSelectionCursor","showCursorWhenSelecting","drawSelectionRange","cursor","cursorHeight","getWrapperElement","charPos","defaultCharWidth","otherCursor","cmpCoords","fragment","padding","leftSide","rightSide","sizerWidth","docLTR","add","drawForLine","fromArg","toArg","lineLen","wrapX","side","extent","iterateBidiSections","fromPos","toPos","openStart","openEnd","openRight","topLeft","topRight","botLeft","botRight","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","restartBlink","focused","clearInterval","blinker","cursorDiv","visibility","cursorBlinkRate","setInterval","hasFocus","onBlur","ensureFocus","focus","onFocus","delayBlurEvent","delayingBlurEvent","draggingText","readOnly","selForContextMenu","reset","receivedFocus","shift","updateHeightsInViewport","prevBottom","lineDiv","viewTop","oldHeight","mustScroll","updateWidgetHeight","chWidth","w","visibleLines","viewport","ensure","ensureFrom","ensureTo","calculateScrollPos","snapMargin","screentop","docBottom","atTop","atBottom","newTop","gutterSpace","screenleft","screenw","tooWide","addToScrollTop","resolveScrollToPos","ensureCursorVisible","getCursor","scrollToPos","margin","cursorScrollMargin","scrollToCoords","scrollToCoordsRange","sPos","updateScrollTop","updateDisplaySimple","setScrollTop","startWorker","forceScroll","scrollHeight","scrollbars","setScrollLeft","isScroller","scrollWidth","alignHorizontally","measureForScrollbars","gutterW","docH","viewHeight","viewWidth","barLeft","docHeight","NativeScrollbars","vert","horiz","tabIndex","checkedZeroWidth","minHeight","minWidth","update","needsH","needsV","sWidth","totalHeight","totalWidth","zeroWidthHack","disableHoriz","enableZeroWidthBar","disableVert","bar","delay","maybeDisable","elementFromPoint","clear","NullScrollbars","updateScrollbars","startWidth","startHeight","updateScrollbarsInner","sizes","paddingBottom","heightForcer","borderBottom","scrollbarFiller","coverGutterNextToScrollbar","gutterFiller","scrollbarModel","initScrollbars","scrollbarStyle","axis","nextOpId","startOperation","op","updateInput","typing","changeObjs","cursorActivityCalled","selectionChanged","updateMaxLine","markArrays","ops","ownsGroup","endOperation","endCb","group","callbacks","fireCallbacksForOps","finishOperation","endOperation_R1","endOperation_W1","endOperation_R2","endOperation_W2","endOperation_finish","endOperations","scrollbarsClipped","marginBottom","borderRightWidth","maybeClipScrollbars","mustUpdate","DisplayUpdate","updatedDisplay","updateDisplayIfNeeded","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","takeFocus","setDocumentHeight","postUpdateDisplay","wheelStartX","wheelStartY","doScroll","innerHeight","scrollNode","scrollIntoView","maybeScrollWindow","limit","changed","endCoords","scrollPos","startTop","startLeft","scrollPosIntoView","maybeHiddenMarkers","unhidden","maybeUnhiddenMarkers","finish","runInOp","operation","methodOp","docMethodOp","highlight","highlightWorker","workTime","changedLines","oldStyles","highlighted","oldCls","newCls","ischange","workDelay","force","visible","editorIsHidden","wrapperHeight","oldDisplayWidth","events","selectionSnapshot","active","anchorNode","extend","anchorOffset","focusNode","focusOffset","renderedView","maybeUpdateLineNumberWidth","viewportMargin","different","lastWrapHeight","lastWrapWidth","adjustView","toUpdate","selSnapshot","updateNumbersFrom","container","rm","currentWheelTarget","updateNumber","patchDisplay","snapshot","nodeName","removeAllRanges","addRange","restoreSelection","selectionDiv","reportedViewFrom","reportedViewTo","updateGutterSpace","alignWidgets","comp","align","innerW","lineGutter","lineNumInnerWidth","lineNumWidth","getGutters","sawLineNumbers","renderGutters","specs","gElt","updateGutters","Display","draggable","wheelDX","wheelDY","activeTouch","init","wheelSamples","wheelPixelsPerUnit","wheelEventDelta","dx","wheelDeltaX","dy","wheelDeltaY","detail","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","delta","onScrollWheel","chromeScrollHack","pointerEvents","pixelsPerUnit","deltaMode","deltaX","deltaY","canScrollX","canScrollY","pixels","movedX","movedY","sample","Selection","equals","here","there","deepCopy","Range","somethingSelected","normalizeSelection","mayTouch","selectionsMayTouch","prim","sort","inv","simpleSelection","changeEnd","adjustForChange","computeSelAfterChange","offsetPos","loadMode","modeOption","resetModeState","isWholeLineUpdate","wholeLineUpdateBefore","updateDoc","spansFor","updateLine","linesFor","firstLine","lastText","lastSpans","nlines","insert","remove","added","added$1","added$2","linkedDocs","sharedHistOnly","propagate","skip","sharedHist","linked","rel","shared","attachDoc","setDirectionClass","History","done","undone","undoDepth","lastModTime","lastSelTime","lastOp","lastSelOp","lastOrigin","lastSelOrigin","generation","maxGeneration","historyChangeFromChange","histChange","attachLocalSpans","clearSelectionEvents","pop","addChangeToHistory","selAfter","opId","hist","history","historyEventDelay","lastChangeEvent","pushSelectionToHistory","addSelectionToHistory","selectionEventCanBeMerged","clearRedo","dest","existing","removeClearedSpans","explicitlyCleared","mergeOldSpans","getOldSpans","stretched","oldCur","stretchCur","copyHistoryArray","newGroup","instantiateSel","event","newChanges","extendRange","posBefore","extendSelection","setSelection","extendSelections","heads","replaceOneSelection","setSimpleSelection","setSelectionReplaceHistory","setSelectionNoUndo","NaN","filterSelectionChange","setSelectionInner","skipAtomicInSelection","reCheckSelection","mayClear","newAnchor","skipAtomic","newHead","skipAtomicInner","oldPos","preventCursorLeft","selectLeft","preventCursorRight","selectRight","atomic","near","movePos","far","cantEdit","selectAll","filterChange","canceled","cancel","makeChange","ignoreReadOnly","suppressEdits","mark","parts","mk","newParts","dfrom","dto","removeReadOnlyRanges","makeChangeInner","makeChangeSingleDoc","rebased","rebaseHist","makeChangeFromHistory","allowSelectionOnly","suppress","antiChanges","filter","returned","v","shiftDoc","distance","removed","recomputeMaxLength","checkWidthStart","retreatFrontier","changesHandler","changeHandler","makeChangeSingleDocInEditor","replaceRange","assign","splitLines","rebaseHistSelSingle","rebaseHistArray","sub","ok","copied","changeLine","handle","changeType","LeafChunk","BranchChunk","removeInner","insertInner","iterN","remaining","leaf","maybeSpill","me","sibling","myIndex","used","LineWidget","opt","adjustScrollWhenAboveVisible","this$1","oldH","nextMarkerId","TextMarker","markText","cloneNode","isParent","SharedTextMarker","markTextShared","replacedWith","addToHistory","curLine","inThisOp","WeakSet","has","addMarkedSpan","clearOnEnter","clearHistory","withOp","visual","dHeight","findSharedMarkers","findMarks","detachSharedMarkers","subMarker","nextDocId","Doc","lineSep","cleanGeneration","constructor","getValue","join","lineSeparator","setValue","getRange","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","listSelections","setCursor","extendSelectionsBy","setSelections","addSelection","getSelections","replaceSelection","dup","replaceSelections","newSel","hint","oldPrev","newPrev","computeReplacedSel","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","gen","getHistory","setHistory","histData","setGutterMarker","gutterID","clearGutter","lineInfo","addLineClass","where","removeLineClass","addLineWidget","insertAt","aboveVisible","removeLineWidget","setBookmark","realOpts","findMarksAt","getAllMarks","posFromIndex","sepSize","indexFromPos","copyHistory","linkedDoc","mFrom","mTo","subMark","copySharedMarkers","unlinkDoc","CodeMirror","splitIds","iterLinkedDocs","getEditor","setDirection","eachLine","lastDrop","onDrop","clearDragCursor","files","dataTransfer","isReadOnly","FileReader","File","read","markAsReadAndPasteIfAllFilesAreRead","t","readTextFromFile","file","allowDropFileTypes","reader","onerror","onload","readAsText","text$1","getData","selected","dragCursor","forEachCodeMirror","getElementsByClassName","byClass","editors","globalsRegistered","ensureGlobalHandlers","resizeTimer","onResize","setSize","keyNames","fromCharCode","keyMap","normalizeKeyName","alt","ctrl","cmd","mod","normalizeKeyMap","keymap","keyname","keys","lookupKey","getKeyMap","fallthrough","isModifierKey","keyCode","addModifierNames","noShift","altKey","metaKey","shiftKey","keyName","altGraphKey","deleteNearSelection","compute","kill","toKill","replaced","moveCharLogically","moveLogically","endOfLine","visually","prep","targetTop","basic","pcDefault","emacsy","macDefault","commands","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","delWrappedLineRight","rightPos","goDocStart","goDocEnd","goLineStart","goLineStartSmart","lineStartSmart","goLineEnd","visualLineEnd","lineEnd","goLineRight","goLineLeft","goLineLeftSmart","goLineUp","moveV","goLineDown","goPageUp","goPageDown","goCharLeft","moveH","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","deleteH","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentSelection","indentMore","indentLess","insertTab","insertSoftTab","spaces","defaultTab","execCommand","transposeChars","newlineAndIndent","sels","indentLine","openLine","toggleOverwrite","firstNonWS","inWS","doHandleBinding","bound","dropShift","ensurePolled","prevShift","stopSeq","dispatchKey","seq","keySeq","dispatchKeyInner","keyMaps","extraKeys","lookupKeyForEditor","handleKeyBinding","motion","lastStoppedKey","onKeyDown","getField","handled","up","showCrossHair","onKeyUp","onKeyPress","charCode","handleCharBinding","lastClick","lastDoubleClick","PastClick","onMouseDown","supportsTouch","clickInGutter","repeat","now","compare","clickRepeat","selectingText","handleMappedButton","contained","behavior","option","unit","addNew","moveOnDrag","configureMouse","dragDrop","moved","dragEnd","mouseMove","dragStart","preventScroll","e2","leftButtonStartDrag","doc$1","ourRange","ourIndex","startSel","rangeForUnit","lastPos","extendTo","startCol","posCol","leftPos","oldRange","ranges$1","anchorLine","boundary","headIndex","usePart","bidiSimplify","editorSize","counter","curCount","move","buttons","leftButtonSelect","leftButtonDown","onContextMenu","findWordAt","gutterEvent","prevent","mX","mY","touches","lineBox","g","contextMenuInGutter","themeChanged","theme","Init","defaults","optionHandlers","dragDropChanged","funcs","dragFunctions","toggle","enter","over","leave","drop","wrappingChanged","inputStyles","inputStyle","pasteIncoming","cutIncoming","autofocus","word","touchFinished","prevTouch","finishTouch","isMouseLikeTouchEvent","touch","radiusX","radiusY","farAway","pageX","pageY","frag","onDragOver","setData","effectAllowed","setDragImage","img","src","_top","onDragStart","inp","registerEventHandlers","finishInit","initHooks","textRendering","how","aggressive","indent","curSpace","curSpaceString","indentUnit","indentString","indentWithTabs","pos$1","defineInitHook","lastCopied","setLastCopied","newLastCopied","applyTextInput","inserted","deleted","recent","paste","textLines","multiPaste","pasteLinesPerSelection","lineWise","changeEvent","triggerElectric","handlePaste","pasted","clipboardData","disableInput","electricChars","smartIndent","getModeAt","electricInput","copyableRanges","lineRange","disableBrowserMagic","field","spellcheck","autocorrect","autocapitalize","hiddenTextarea","border","findPosH","origDir","lineDir","moveOnce","boundToLine","astral","bidi","mv","getWrappedLineExtent","moveInStorageOrder","searchInVisualLine","getRes","res","nextCh","moveVisually","sawType","getHelper","hitSide","findPosV","pageSize","moveAmount","ContentEditableInput","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","posToDOM","badPos","bad","domToPos","lineNode","locateNodeInLineView","textNode","topNode","nodeValue","curNode","textContent","previousSibling","dist$1","belongsToInput","onCopyCut","lineWiseCopyCut","clearData","kludge","hadFocus","showPrimarySelection","contentEditable","updateFromDOM","readFromDOMSoon","forceCompositionEnd","screenReaderLabelChanged","label","removeAttribute","showMultipleSelections","curAnchor","curFocus","rng","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","blur","pollSelection","pollInterval","poll","scan","isInGutter","triggerOnKeyDown","pollContent","fromIndex","fromNode","toNode","toIndex","newText","closing","extraLinebreak","close","addText","walk","cmText","markerID","isBlock","domTextBetween","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","readOnlyChanged","resetPosition","TextareaInput","prevInput","pollingFast","resetting","createField","textarea","prepareCopyCut","fastPoll","dispatchEvent","Event","_display","moveInputWithCursor","headPos","wrapOff","lineOff","teTop","teLeft","drawn","contextMenuPending","slowPoll","missed","same","resetSelectionOnContextMenu","oldScrollY","oldCSS","oldWrapperCSS","wrapperBox","offsetParent","scrollY","scrollTo","rehide","detectingSelectAll","prepareSelectAllHack","mouseup","extval","disabled","deflt","notOnInit","defineOption","newBreaks","refresh","getInputField","detach","attach","integer","defineOptions","helpers","setOption","getDoc","addKeyMap","removeKeyMap","addOverlay","score","priority","insertSorted","modeSpec","removeOverlay","newRanges","getTokenAt","getLineTokens","getTokenTypeAt","getHelpers","help","_global","getStateAfter","defaultTextHeight","getViewport","addWidget","vspace","hspace","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","amount","rtlMoveVisually","goalColumn","goals","startChar","check","getScrollInfo","scrollToRange","interpret","swapDoc","phrase","phraseText","phrases","getScrollerElement","getGutterElement","registerHelper","registerGlobalHelper","predicate","addEditorMethods","dontDelegate","method","defineMIME","mime","defineExtension","func","defineDocExtension","fromTextArea","tabindex","placeholder","realSubmit","form","leaveSubmitMethodAlone","submit","wrappedSubmit","getTextArea","toTextArea","cmpPos","addLegacyProps","version","factory","config","parserConfig","statementIndent","jsonldMode","jsonld","jsonMode","json","trackScope","isTS","typescript","wordRE","wordCharacters","keywords","kw","A","B","C","D","operator","atom","isOperatorChar","isJsonldKeyword","ret","tp","cont","tokenBase","quote","tokenize","escaped","tokenComment","expressionAllowed","inSet","readRegexp","tokenQuasi","lexical","lastType","propertyIsEnumerable","maybeEnd","findFatArrow","fatArrowAt","arrow","depth","sawSomething","bracket","atomicTypes","JSLexical","inScope","varname","localVars","cx","vars","parseJS","cc","marked","expression","statement","lex","pass","inList","register","block","newContext","registerVarScoped","Var","globalVars","isModifier","defaultVars","pushcontext","pushblockcontext","popcontext","pushlex","poplex","expect","wanted","exp","vardef","parenExpr","maybeexpression","maybeelse","functiondef","forspec","enumdef","typename","typeexpr","maybelabel","maybeCatchBinding","afterExport","afterImport","funarg","expressionInner","expressionNoComma","noComma","arrowBodyNoComma","arrowBody","commasep","maybeop","maybeoperatorNoComma","maybeoperatorComma","classExpression","arrayLiteral","contCommasep","objprop","quasi","targetNoComma","maybeTypeArgs","maybeTarget","expr","property","continueQuasi","_","getterSetter","afterprop","maybetype","what","sep","proceed","maybetypeOrIn","mayberettype","isKW","afterType","typeprops","typearg","maybeReturnType","quasiType","typeprop","functiondecl","continueQuasiType","typeparam","maybeTypeDefault","maybeAssign","vardefCont","eltpattern","proppattern","_type","forspec1","forspec2","classNameAfter","classBody","classfield","maybeFrom","exportField","importSpec","maybeMoreImports","maybeAs","enummember","basecolumn","textAfter","firstChar","c","isContinuedStatement","doubleIndentSwitch","blockCommentStart","blockCommentEnd","blockCommentContinue","lineComment","fold","closeBrackets","skipExpression","hookIdentifier","hookVar","hookClient","client","atoms","builtin","defaultBuiltin","sqlKeywords","operatorChars","support","hooks","dateSQL","backslashStringEscapes","brackets","punctuation","hexNumber","binaryNumber","decimallessFloat","doubleQuote","tokenLiteral","nCharCast","charsetCast","escapeConstant","commentSlashSlash","commentHash","commentSpaceRequired","zerolessFloat","ODBCdotTable","backslashEscapes","pushContext","tok","popContext","words","identifierQuote","typeBefore","prevToken","typeAtEndOfLine","isTopScope","curPunc","isDefKeyword","statementIndentUnit","dontAlignCalls","blockKeywords","defKeywords","multiLineStrings","indentStatements","indentSwitch","namespaceSeparator","isPunctuationChar","numberStart","number","isIdentifierChar","isReservedIdentifier","maybeEOL","typeFirstDefinitions","startOfLine","ctx","styleDefs","dontIndentStatements","hook","switchBlock","allmanIndentation","cKeywords","cppKeywords","objCKeywords","objCBuiltins","basicCTypes","basicObjCTypes","cTypes","identifier","objCTypes","cBlockKeywords","cDefKeywords","cppHook","pointerHook","_stream","cIsReservedIdentifier","cpp14Literal","cpp11StringHook","cpp11RawStringDelim","tokenRawString","cppLooksLikeConstructor","lastTwo","tokenAtString","delim","def","mimes","tokenTripleString","tokenNestedComment","pairs","triples","intendSwitch","tripleString","stringTokenizer","tokenCeylonString","wordRegexp","wordOperators","commonKeywords","commonBuiltins","scopes","conf","parserConf","ERRORCLASS","delimiters","singleDelimiters","operators","singleOperators","doubleOperators","doubleDelimiters","tripleDelimiters","hangingIndent","myKeywords","myBuiltins","extra_keywords","extra_builtins","py3","identifiers","stringPrefixes","builtins","lastToken","scopeOffset","lineOffset","pushPyScope","dedent","errorToken","tokenBaseInner","inFormat","floatLiteral","intLiteral","delimiter","tokenOuter","singleline","OUTCLASS","tokenNestedExpr","tokenString","singleLineStringErrors","isString","formatStringFactory","tokenStringFactory","tokenLexer","beginningOfLine","lambda","delimiter_index","pushBracketScope","addErr","scope","expressionEnd","tokenTranspose"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/296.37eb8c05642d8ef9.js.map.gz b/_static/296.37eb8c05642d8ef9.js.map.gz new file mode 100644 index 0000000..c34ebfb Binary files /dev/null and b/_static/296.37eb8c05642d8ef9.js.map.gz differ diff --git a/_static/340.c525bd899366c5f9.js b/_static/340.c525bd899366c5f9.js new file mode 100644 index 0000000..9c148da --- /dev/null +++ b/_static/340.c525bd899366c5f9.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[340],{28340:(e,t,i)=>{i.r(t),i.d(t,{default:()=>o});var n=i(78673);class o extends n.A{constructor(e){super(e);var t=e.orig;this.origElem=t,this.divid=t.id,this.resultsViewer=$(t).data("results"),this.getIFrameAndQuizname(),this.renderKhanex(),this.caption="Khanex",this.addCaption("runestone")}getIFrameAndQuizname(){var e=$(this.origElem).html(),t=e.search("");this.iframe=e.slice(t,i+8),t=e.search("khanex/qs/"),i=e.search(".html"),this.quizname=e.slice(t+10,i)}renderKhanex(){this.containerDiv=document.createElement("div"),this.containerDiv.id=this.divid,$(this.containerDiv).html(this.iframe),$(this.origElem).replaceWith(this.containerDiv)}submitKhanex(e){e.complete;var t=1==e.complete?"T":"F",i={event:"khanex",act:"answer:"+("T"==t?"correct":"no"),answer:e.attempt_content,correct:t,div_id:this.divid};this.logBookEvent(i),localStorage.setItem(this.divid,"true")}}$(document).on("runestone:login-complete",(function(){$("[data-component=khanex").each((function(e){try{var t=new o({orig:this});window.componentMap[this.id]=t,function(e,t){void 0===window.component_factory&&(window.component_factory={});var i="khanex_"+t;window.component_factory[i]=function(t){e.submitKhanex(t)}}(t,t.quizname)}catch(e){console.log(`Error rendering Khanex Exercise ${this.id}\n Details: ${e}`),console.log(e.stack)}}))}))}}]); +//# sourceMappingURL=340.c525bd899366c5f9.js.map \ No newline at end of file diff --git a/_static/340.c525bd899366c5f9.js.gz b/_static/340.c525bd899366c5f9.js.gz new file mode 100644 index 0000000..725ccea Binary files /dev/null and b/_static/340.c525bd899366c5f9.js.gz differ diff --git a/_static/340.c525bd899366c5f9.js.map b/_static/340.c525bd899366c5f9.js.map new file mode 100644 index 0000000..6a288d6 --- /dev/null +++ b/_static/340.c525bd899366c5f9.js.map @@ -0,0 +1 @@ +{"version":3,"file":"340.c525bd899366c5f9.js","mappings":"2JAsBe,MAAMA,UAAe,IAChC,WAAAC,CAAYC,GACRC,MAAMD,GACN,IAAIE,EAAOF,EAAKE,KAKhBC,KAAKC,SAAWF,EAChBC,KAAKE,MAAQH,EAAKI,GAClBH,KAAKI,cAAgBC,EAAEN,GAAMO,KAAK,WAClCN,KAAKO,uBACLP,KAAKQ,eAGLR,KAAKS,QAAU,SACfT,KAAKU,WAAW,YACpB,CAGA,oBAAAH,GACI,IAAII,EAAON,EAAEL,KAAKC,UAAUU,OACxBC,EAAKD,EAAKE,OAAO,WACjBC,EAAKH,EAAKE,OAAO,aACrBb,KAAKe,OAASJ,EAAKK,MAAMJ,EAAIE,EAAK,GAIlCF,EAAKD,EAAKE,OAAO,cACjBC,EAAKH,EAAKE,OAAO,SACjBb,KAAKiB,SAAWN,EAAKK,MAAMJ,EAAK,GAAIE,EAExC,CAGA,YAAAN,GAGIR,KAAKkB,aAAeC,SAASC,cAAc,OAC3CpB,KAAKkB,aAAaf,GAAKH,KAAKE,MAC5BG,EAAEL,KAAKkB,cAAcP,KAAKX,KAAKe,QAC/BV,EAAEL,KAAKC,UAAUoB,YAAYrB,KAAKkB,aAKtC,CAOA,YAAAI,CAAaC,GAKIA,EAAiB,SAE9B,IAAIC,EAAgC,GAAtBD,EAAiB,SAAS,IAAM,IAE1CE,EAAY,CACZC,MAAO,SACPC,IAHY,WAAwB,KAAXH,EAAiB,UAAY,MAItDI,OAAQL,EAAwB,gBAChCC,QAASA,EACTK,OAAQ7B,KAAKE,OAGjBF,KAAK8B,aAAaL,GAOlBM,aAAaC,QAAQhC,KAAKE,MAAO,OACrC,EAOJG,EAAEc,UAAUc,GAAG,4BAA4B,WAEvC5B,EAAE,0BAA0B6B,MAAK,SAAUC,GAEvC,IACI,IAAIC,EAAS,IAAIzC,EAAO,CAAEI,KAAMC,OAChCqC,OAAOC,aAAatC,KAAKG,IAAMiC,EAY3C,SAAuBA,EAAQnB,QACa,IAA7BoB,OAAOE,oBACdF,OAAOE,kBAAoB,CAAC,GAEhC,IAAIC,EAAU,UAAYvB,EAC1BoB,OAAOE,kBAAkBC,GAAW,SAAUjB,GAC1Ca,EAAOd,aAAaC,EACxB,CACJ,CAnBYkB,CAAcL,EAAQA,EAAOnB,SACjC,CAAE,MAAOyB,GACLC,QAAQC,IAAI,mCAAmC5C,KAAKG,0CAC3BuC,KACzBC,QAAQC,IAAIF,EAAIG,MACpB,CACJ,GACJ,G","sources":["webpack://WebComponents/./runestone/khanex/js/khanex.js"],"sourcesContent":["/*\n__author__ = Ralph Morelli\n__date__ = 5/4/2021 \n*/\n\n/* **********\n This script renders the khanex HTML code and sets up functions\n to process the exercise when the user clicks on the khanex 'Check Answer'\n button. \n\n It gets the data it needs from the Khanex node created by khanex.py\n during the runestone build step.\n\n NOTE: An entry for khanex.js script must be added to the webpack.config.js.\n ************** */\n\n\"use strict\";\n\nimport RunestoneBase from \"../../common/js/runestonebase.js\";\n\nvar DEBUG = false;\n\nexport default class Khanex extends RunestoneBase {\n constructor(opts) {\n super(opts);\n var orig = opts.orig; // Looks something like: {\"orig\":{\"jQuery351095558298548049562\":{\"question_label\":\"1.1.2\"}}}\n if (DEBUG)\n console.log(\n \"DEBUG: Khanex constructor, opts=\" + JSON.stringify(opts)\n );\n this.origElem = orig;\n this.divid = orig.id;\n this.resultsViewer = $(orig).data(\"results\");\n this.getIFrameAndQuizname();\n this.renderKhanex(); //generates HTML\n // Checks localStorage to see if this khanex has already been completed by this user.\n // this.checkKhanexStorage();\n this.caption = \"Khanex\";\n this.addCaption(\"runestone\");\n }\n\n // The main content of the khanex node is the iframe.\n getIFrameAndQuizname() {\n var html = $(this.origElem).html();\n var p1 = html.search(\"\");\n this.iframe = html.slice(p1, p2 + 8);\n if (DEBUG) console.log(\"DEBUG: getQuestionText() html = \" + html);\n if (DEBUG)\n console.log(\"DEBUG: getQuestionText() iframe = \" + this.iframe);\n p1 = html.search(\"khanex/qs/\");\n p2 = html.search(\".html\");\n this.quizname = html.slice(p1 + 10, p2); // Grab the quizname from iframe\n if (DEBUG) console.log(\"DEBUG quizname= \", this.quizname);\n }\n\n //generates the HTML that the user interacts with\n renderKhanex() {\n var _this = this;\n if (DEBUG) console.log(\"--------------------DEBUG: renderKhanex()\");\n this.containerDiv = document.createElement(\"div\");\n this.containerDiv.id = this.divid;\n $(this.containerDiv).html(this.iframe);\n $(this.origElem).replaceWith(this.containerDiv);\n if (DEBUG)\n console.log(\n \"DEBUG: renderKhanex(), this = \" + JSON.stringify(this)\n );\n }\n\n // This is what a khanex logging event looks like for a correct answer\n // logging event {\"event\":\"khanex\",\"act\":\"answer:correct\",\"answer\":{\"complete\":1,\"count_hints\":0,\"time_taken\":87,\"attempt_number\":1,\"attempt_content\":\"\\\"100011\\\"\",\"sha1\":\"decimal-to-binary\",\"seed\":194953274,\"problem_type\":\"0\",\"review_mode\":0},\"correct\":\"T\",\"div_id\":\"ex2\",\"course\":\"mobilecsp\",\"clientLoginStatus\":false,\"timezoneoffset\":4}\n\n // Called when user clicks submit button\n // Checks for the result, sets localstorage and submits to the server\n submitKhanex(result) {\n if (DEBUG)\n console.log(\n \"DEBUG: submitKhanex result = \" + JSON.stringify(result)\n );\n var answer = result[\"complete\"];\n if (DEBUG) console.log(\"DEBUG: submitKhanex answer = \" + answer);\n var correct = result[\"complete\"] == 1 ? \"T\" : \"F\";\n var loganswer = \"answer:\" + (correct == \"T\" ? \"correct\" : \"no\"); // backward compatible\n var eventInfo = {\n event: \"khanex\",\n act: loganswer,\n answer: result[\"attempt_content\"],\n correct: correct,\n div_id: this.divid,\n };\n // log the response to the database\n this.logBookEvent(eventInfo); // in bookfuncs.js\n if (DEBUG)\n console.log(\n \"DEBUG: submitkhanex logbookevent = \" +\n JSON.stringify(eventInfo)\n );\n // log the fact that the user has attempted this khanex exercise to local storage\n localStorage.setItem(this.divid, \"true\");\n }\n}\n\n/*=================================\n== Find the custom HTML tags and ==\n== execute our code on them ==\n=================================*/\n$(document).on(\"runestone:login-complete\", function () {\n if (DEBUG) console.log(\"DEBUG: Khanex bind\");\n $(\"[data-component=khanex\").each(function (index) {\n if (DEBUG) console.log(\"DEBUG: Khanex rendering\");\n try {\n var khanex = new Khanex({ orig: this });\n window.componentMap[this.id] = khanex;\n setupCallback(khanex, khanex.quizname);\n } catch (err) {\n console.log(`Error rendering Khanex Exercise ${this.id}\n Details: ${err}`);\n console.log(err.stack);\n }\n });\n});\n\n// Sets up a call back function on the window containing the khanex component\n// We need to pass a reference to this khanex object so that it can be use during callback.\nfunction setupCallback(khanex, quizname) {\n if (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n }\n var fn_name = \"khanex_\" + quizname; // Unique function name\n window.component_factory[fn_name] = function (result) {\n khanex.submitKhanex(result);\n };\n}\n"],"names":["Khanex","constructor","opts","super","orig","this","origElem","divid","id","resultsViewer","$","data","getIFrameAndQuizname","renderKhanex","caption","addCaption","html","p1","search","p2","iframe","slice","quizname","containerDiv","document","createElement","replaceWith","submitKhanex","result","correct","eventInfo","event","act","answer","div_id","logBookEvent","localStorage","setItem","on","each","index","khanex","window","componentMap","component_factory","fn_name","setupCallback","err","console","log","stack"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/340.c525bd899366c5f9.js.map.gz b/_static/340.c525bd899366c5f9.js.map.gz new file mode 100644 index 0000000..8eedce9 Binary files /dev/null and b/_static/340.c525bd899366c5f9.js.map.gz differ diff --git a/_static/357.a6fa55aea0c38a63.js b/_static/357.a6fa55aea0c38a63.js new file mode 100644 index 0000000..4f5a0b0 --- /dev/null +++ b/_static/357.a6fa55aea0c38a63.js @@ -0,0 +1,3 @@ +/*! For license information please see 357.a6fa55aea0c38a63.js.LICENSE.txt */ +"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[357],{15357:(t,e,s)=>{s.r(e),s.d(e,{BTM:()=>R,MENV:()=>N,exprType:()=>S,exprValue:()=>q,opPrec:()=>T,toTeX:()=>E});class i{constructor(t,e,s,i,n){this.refExpr=t,this.eqExpr=e,this.description=s,this.isValid=i,this.isActive=!0,this.idNum=n}}class n{constructor(t,e){var s=t.eqExpr.dependencies(),i=[];for(var n in s)void 0===e[s[n]]&&i.push(s[n]);for(var n in i)e[i[n]]="input"+(+n+1);this.subExpr=t.eqExpr.compose(e),this.subTeX=this.subExpr.toTeX(),this.subStr=this.subExpr.toString(),this.name=t.description,this.subExpr.type==S.binop&&this.subExpr.valueType==q.bool?this.equation=t.refExpr.toTeX()+" \\iff "+t.eqExpr.toTeX():this.equation=t.refExpr.toTeX()+"="+t.eqExpr.toTeX(),this.bindings=e,this.numInputs=i.length,this.ruleID=t.idNum}}function r(t,e,s,n,r,a,h){var u=s.split("==");if(2!=u.length)console.log("Invalid equation in identity list: "+s);else for(var p=0;p<=1&&(1!=p||void 0===a||!a);p++){var o,l=t.parse(u[p],"formula"),c=t.parse(u[1-p],"formula"),v=(l.dependencies().length,[u[p]]),m=[];for(var d in v){var b=t.parse(v[d],"formula"),f=!0;for(var y in m)null!==m[y].match(b,{})&&(f=!1);if(f){var g=e.length+1;o=new i(b,c,n,r,g),e.push(o),m.push(b)}}}}function a(t,e,s){var i,r,a=[];for(i in t){var h=(r=t[i]).refExpr.match(e,{});if(r.isActive&&null!==h){var u=new n(r,h);a.push(u)}}return a}class h{constructor(t){this.menv=t,this.select=!1,this.parent=null,this.inputs=[],this.valueType=q.undef,this.context=void 0}value(t){}setContext(t){for(var e in this.context=t,this.inputs)this.inputs[e].setContext(t)}setParsingError(t){this.parseError=t}hasParsingError(){var t=!1,e=0;for(this.parseError&&(t=!0);!t&&e"+this.toString()+""}allStringEquivs(){return[]}flatten(){return this.copy()}isConstant(){return!1}isExpression(){return!1}}class u extends h{constructor(t){super(t),this.select=!1,this.parent=null,this.inputs=[],this.valueType=q.numeric}value(t){return this.evaluate(t)}setParsingError(t){this.parseError=t}hasParsingError(){var t=!1,e=0;for(this.parseError&&(t=!0);!t&&e"+this.toString()+""}operateToTeX(){return this.toTeX()}treeToTeX(t){var e={};if(e.parent=void 0===this.parent||null===this.parent?null:this.parent.operateToTeX(),void 0!==t&&t)for(var s in e.current=this.operateToTeX(),e.inputs=[],this.inputs)e.inputs[s]=this.inputs[s].toTeX();else e.current=this.toTeX(),e.inputs=null;return e}allStringEquivs(){return[]}flatten(){return this.copy()}copy(){var t=new u;for(var e in t.valueType=this.valueType,t.context=this.context,this.inputs)t.inputs[e]=t.inputs[e].copy(),t.inputs[e].parent=t;return t}simplifyConstants(){for(var t in this.inputs)this.inputs[t]=this.inputs[t].simplifyConstants(),this.inputs[t].parent=this;return this}dependencies(t){var e,s,i=new Array,n={};if(null!=t)for(var r=0;r=this.inputs.length)throw"Attempt to get an undefined input expression.";return this.inputs[t]}isConstant(){var t=!0;for(var e in this.inputs)t&=this.inputs[e].isConstant();return t}evaluate(t){return 0}compose(t){return new u}compare(t,e,s){var i,n=!0;null==s&&(s=!1),null==e&&(e=this.menv.options);var r=Object.keys(e),a=[],h=1e-8;void 0!==e.rTol&&(h=e.rTol,i=r.indexOf("rTol"),r.splice(i,1));var u=this.dependencies(),p=t.dependencies();for(i=0;ih&&(n=!1):(isFinite(S)&&!isNaN(q)||isFinite(q)&&!isNaN(S))&&(n=!1),g=0,T=!0;g=y[g].length)){T=!1;break}w[g]=0,g++}}if(s&&n&&("+"==this.op||"-"==this.op?k="+":"*"!=this.op&&"/"!=this.op||(k="*"),("+"==k&&"+"!=t.op&&"-"!=t.op||"*"==k&&"*"!=t.op&&"/"!=t.op)&&(n=!1),n))if(x=this.flatten(),M=t.flatten(),x.inputs.length==M.inputs.length){var N=[];for(i=0;i0;)e=t[0].subExpr,t=a(this.menv.reduceRules,e);return e}derivative(t,e){return w(0)}match(t,e){var s=null;if(this.type==t.type&&this.operateToTeX()==t.operateToTeX()){s=e;for(var i=0;i=0&&(this.inputs[s]=e,void 0!==e&&(e.parent=this))}}class p extends u{constructor(t){super(t),this.type=S.undef,this.valueType=q.undef}value(t){return Number.NaN}compare(t,e,s){return!1}copy(){return new p(this.menv)}compose(t){return new p(this.menv)}derivative(t,e){return new p(this.menv)}match(t,e){return null}}class o{constructor(t){"number"==typeof t||t instanceof Number?this.number=t:t instanceof o&&(this.number=t.number)}value(){return this.number}simplify(){}equal(t){return"number"==typeof t&&(t=new o(t)),this.value()==t.value()}add(t){return"number"==typeof t&&(t=new o(t)),new o(this.number+t.value())}subtract(t){return"number"==typeof t&&(t=new o(t)),new o(this.number-t.value())}multiply(t){return"number"==typeof t&&(t=new o(t)),new o(this.number*t.value())}divide(t){return"number"==typeof t&&(t=new o(t)),0!=t.value?new o(this.number/t.value()):new o(NaN)}addInverse(){return new o(-this.number)}multInverse(){return 0!=this.number?new o(this.number):new o(NaN)}toString(t){void 0===t&&(t=!1);var e=t&&this.number>0?"+":"";return isNaN(this.number)?e="NaN":e+=Number(this.number.toFixed(10)),e}toTeX(t){void 0===t&&(t=!1);var e=t&&this.number>0?"+":"";return isNaN(this.number)?e="\\mathrm{NaN}":e+=Number(this.toString(t)),e}toMathML(t){return""+this.toString()+""}}function l(t){return void 0===Number.isInteger?t==Math.floor(t):Number.isInteger(t)}class c extends o{constructor(t,e){null==e?(super(t),this.p=t,this.q=1):(super(t/e),0==e?(this.p=Math.sqrt(-1),this.q=1):0==t?(this.p=0,this.q=1):(e<0?(this.p=-t,this.q=-e):(this.p=t,this.q=e),this.simplify()))}value(){return this.p/this.q}simplify(){var t;this.p%1==0&&this.q%1==0&&(t=function(t,e){var s;if((t=Math.abs(t))<(e=Math.abs(e))&&(s=t,t=e,e=s),0==e)return 0;for(;e>0;)s=t%e,t=e,e=s;return t}(this.p,this.q),this.p/=t,this.q/=t)}equal(t){return t instanceof c?this.p.valueOf()==t.p.valueOf()&&this.q.valueOf()==t.q.valueOf():this.value()==t.value()}add(t){return t instanceof c?new c(this.p*t.q+t.p*this.q,this.q*t.q):l(t)?new c(this.p+t*this.q,this.q):new o(this.value()+t)}subtract(t){return t instanceof c?new c(this.p*t.q-t.p*this.q,this.q*t.q):l(t)?new c(this.p-t*this.q,this.q):new o(this.value()-t)}multiply(t){return t instanceof c?new c(this.p*t.p,this.q*t.q):l(t)?new c(this.p*t,this.q):new o(this.value()*t)}divide(t){return t instanceof c?new c(this.p*t.q,this.q*t.p):l(t)?new c(this.p,this.q*t):new o(this.value()/t)}addInverse(){return new c(-this.p,this.q)}multInverse(){return 0!=this.p?new c(this.q,this.p):new o(NaN)}toString(t){void 0===t&&(t=!1);var e=t&&this.p>0?"+":"";return isNaN(this.p)?e="NaN":1==this.q?e+=this.p:e=e+this.p+"/"+this.q,e}toTeX(t){void 0===t&&(t=!1);var e=t&&this.p>0?"+":"";return isNaN(this.p)?e="\\mathrm{NaN}":1==this.q?e+=this.p:e=this.p<0?"-\\frac{"+-this.p+"}{"+this.q+"}":e+"\\frac{"+this.p+"}{"+this.q+"}",e}toMathML(){return"undefined"==typeof leadSign&&(leadSign=!1),this.p,this.q,""+this.toString()+""}}function v(t,e,s){var i=[];for(let t in s)s[t].type==S.multiop&&s[t].op==e?i.push(...s[t].inputs):i.push(s[t]);return new m(t,e,i)}class m extends u{constructor(t,e,s){for(var i in super(t),this.type=S.multiop,this.op=e,this.inputs=s,s)void 0===s[i]&&(s[i]=new u(t)),s[i].parent=this;switch(e){case"+":this.prec=T.addsub;break;case"*":this.prec=T.multdiv;break;default:alert("Unknown multi-operand operator: '"+e+"'.")}}toString(){var t,e;for(var s in t="",this.inputs)void 0===this.inputs[s]?e="?":(e=this.inputs[s].toString(),(this.inputs[s].type>=S.unop&&this.inputs[s].prec<=this.prec||this.inputs[s].type==S.number&&1!=this.inputs[s].number.q&&T.multdiv<=this.prec)&&(e="("+e+")")),t+=(s>0?this.op:"")+e;return t}allStringEquivs(){var t=[],e=[];for(var s in this.inputs)t[s]=this.inputs[s].allStringEquivs(),e.push(s);var i=permutations(e),n=[],r=this.op;function a(e,s){if(void 0===s?s="":e.length>0&&(s+=r),e.length>0){var i=t[e[0]];for(var h in i)a(e.slice(1),s+"("+i[h]+")")}else n.push(s)}for(var s in"|"==r&&(r=" $ "),i)a(i[s]);return n}toTeX(t){var e,s,i,n,r,a,h;void 0===t&&(t=!1),s=this.op,"*"==this.op&&(s=t&&this.select?"\\times":" "),t&&this.select?(n="{\\color{blue}",r="}",a="{\\color{red}",h="}"):(n="",r="",a="",h=""),e="";var u=this.prec;for(var p in this.inputs)void 0===this.inputs[p]?e+=(p>0?a+s+h:"")+(i="?"):"*"!=this.op||this.inputs[p].type!=S.unop||"/"!=this.inputs[p].op||t&&this.select?"+"!=this.op||this.inputs[p].type!=S.unop||"-"!=this.inputs[p].op||t&&this.select?(i=n+this.inputs[p].toTeX(t)+r,(this.inputs[p].type>=S.unop&&this.inputs[p].prec<=u||p>0&&"*"==this.op&&this.inputs[p].type==S.number)&&(i="\\left("+i+"\\right)"),e+=(p>0?a+s+h:"")+i):e+=i=n+this.inputs[p].toTeX(t)+r:(i=n+this.inputs[p].inputs[0].toTeX(t)+r,this.inputs[p].inputs[0].type>=S.unop&&this.inputs[p].inputs[0].prec"}operateToTeX(){var t=this.op;return"*"===t&&(t="\\times"),t}isCommutative(){var t=!1;return"+"!==this.op&&"*"!==this.op||(t=!0),t}evaluate(t){var e,s;switch(this.op){case"+":for(e in s=0,this.inputs)s+=this.inputs[e].evaluate(t);break;case"*":for(e in s=1,this.inputs)s*=this.inputs[e].evaluate(t);break;default:console.log("The binary operator '"+this.op+"' is not defined."),s=void 0}return s}flatten(){var t,e=[];for(var s in this.inputs){var i=this.inputs[s].flatten();if(i.type==S.multiop&&i.op==this.op)for(var n in i.inputs)e.push(i.inputs[n]);else e.push(i)}if(0==e.length)t=w(this.menv,"+"==this.op?0:1);else if(1==e.length)t=e[0];else{var r;if("*"==this.op)for(s=0;se[n].type&&(r=e[s],e[s]=e[n],e[n]=r);t=v(this.menv,this.op,e)}return t}reduce(){var t=super.reduce(),e=t;return t.type==S.multiop&&t.inputs.length<=1&&((e=0==t.inputs.length?w(this.menv,"+"==t.op?0:1):t.inputs[0]).parent=this.parent,null!==this.parent&&this.parent.inputSubst(this,e)),e}simplifyConstants(){var t=[],e=[];for(let s in this.inputs)this.inputs[s]=this.inputs[s].simplifyConstants(),this.inputs[s].parent=this,this.inputs[s].type==S.number||this.inputs[s].type==S.unop&&this.inputs[s].inputs[0].type==S.number?t.push(s):e.push(this.inputs[s]);var s=this;if(t.length>1){var i,n;switch(this.op){case"+":i=new c(0);for(let e in t)if(this.inputs[t[e]].type==S.number)i=i.add(this.inputs[t[e]].number);else if(this.inputs[t[e]].type==S.unop)switch(this.inputs[t[e]].op){case"+":case"*":i=i.add(this.inputs[t[e]].inputs[0].number);break;case"-":i=i.subtract(this.inputs[t[e]].inputs[0].number);break;case"/":i=i.add(this.inputs[t[e]].inputs[0].number.multInverse())}break;case"*":i=new c(1);for(let e in t)if(this.inputs[t[e]].type==S.number)i=i.multiply(this.inputs[t[e]].number);else if(this.inputs[t[e]].type==S.unop)switch(this.inputs[t[e]].op){case"+":case"*":i=i.multiply(this.inputs[t[e]].inputs[0].number);break;case"-":i=i.multiply(this.inputs[t[e]].inputs[0].number.addInverse());break;case"/":i=i.divide(this.inputs[t[e]].inputs[0].number)}}switch(this.op){case"+":e.push(n=w(this.menv,i));break;case"*":e.splice(0,0,n=w(this.menv,i))}1==e.length?s=e[0]:(n.parent=this,s=v(this.menv,this.op,e))}return s}match(t,e){function s(t){var e={};for(var s in t)e[s]=t[s];return e}var i=null,n=this.inputs.length;if((t.type==S.multiop||t.type==S.binop)&&this.op==t.op&&n<=t.inputs.length){for(var r,a=[],h=0;h0&&(this.derivs=e.slice(s).length),this.isConst=!1,this.isSpecial=!1,this.name){case"e":case"pi":case"dne":case"inf":this.isConst=!0,this.isSpecial=!0}}toString(t){return void 0===t&&(t=!1),this.name}allStringEquivs(){return[this.toString()]}toTeX(t){void 0===t&&(t=!1);var e=this.toString();switch(this.name){case"alpha":case"beta":case"gamma":case"delta":case"epsilon":case"zeta":case"eta":case"theta":case"kappa":case"lambda":case"mu":case"nu":case"xi":case"pi":case"rho":case"sigma":case"tau":case"upsilon":case"phi":case"chi":case"psi":case"omega":case"Gamma":case"Delta":case"Theta":case"Lambda":case"Xi":case"Pi":case"Sigma":case"Upsilon":case"Phi":case"Psi":case"Omega":e="\\"+this.name;break;case"inf":e="\\infty";break;default:this.isSpecial&&(e="\\mathrm{"+this.name+"}")}return 0==this.name.indexOf("input")&&(e="\\boxed{\\dots?^{"+this.name.slice(5)+"}}"),t&&this.select&&(e="{\\color{red}"+e+"}"),e}dependencies(t){var e=new Array;if(null!=t)for(var s=0;s1?alert("An array reference can only have one index variable."):this.k=s[0]}toString(t){return void 0===t&&(t=!1),this.name+"["+this.index.toString()+"]"}toTeX(t){return void 0===t&&(t=!1),word=this.name+"_{"+this.index.toString()+"}",t&&this.select&&(word="{\\color{red}"+word+"}"),word}toMathML(){return''+this.name+""+this.index.toString()+""}dependencies(t){var e=new Array;if(null!=t)for(var s=0;s=0&&i0?(this.name=e.slice(0,n),this.derivs=e.slice(n).length):this.name=e,void 0===s&&(s=new u),this.inputs=[s],s.parent=this,this.domain=i,this.alternate=null,this.builtin=!0,this.name){case"asin":case"acos":case"atan":case"asec":case"acsc":case"acot":this.name="arc"+this.name.slice(1,4);break;case"log":this.name="ln";break;case"sin":case"cos":case"tan":case"csc":case"sec":case"cot":case"arcsin":case"arccos":case"arctan":case"arcsec":case"arccsc":case"arccot":case"sqrt":case"root":case"abs":case"exp":case"expb":case"ln":case"log10":break;default:this.builtin=!1}if(this.builtin&&this.derivs>0){for(var r=new d(this.menv,"x"),a=new f(this.menv,this.name,r),h=0;h1?"\\mathrm{"+this.name+"}":this.name}return this.derivs>0&&(this.derivs<=3?e+="'".repeat(this.derivs):e=e+"^{("+this.derivs+")}"),t&&this.select&&(e="\\color{red}{"+e+"}",s=""),""==s&&(s=e+" \\mathopen{}\\left("+i.join(",")+"\\right)\\mathclose{}"),s}toMathML(){var t,e;switch(e=void 0===this.inputs[0]?"?":this.inputs[0].toMathML(),this.name){case"sin":case"cos":case"tan":case"csc":case"sec":case"cot":case"arcsin":case"arccos":case"arctan":case"exp":case"expb":case"ln":case"abs":t="<"+this.name+"/>"+e+"";break;case"sqrt":t=""+e+"";break;case"log10":t="10"+e+"";break;default:t=""+this.name+""+e+""}return t}operateToTeX(){var t;switch(this.name){case"sin":t="\\sin";break;case"cos":t="\\cos";break;case"tan":t="\\tan";break;case"csc":t="\\csc";break;case"sec":t="\\sec";break;case"cot":t="\\cot";break;case"arcsin":t="\\sin^{-1}";break;case"arccos":t="\\cos^{-1}";break;case"arctan":t="\\tan^{-1}";break;case"arccsc":t="\\csc^{-1}";break;case"arcsec":t="\\sec^{-1}";break;case"arccot":t="\\cot^{-1}";break;case"sqrt":t="\\mathrm{sqrt}";break;case"abs":t="\\abs";break;case"exp":case"expb":t="\\exp";break;case"ln":t="\\ln";break;case"log10":t="\\log_{10}";break;default:t=this.name.length>1?"\\mathrm{"+this.name+"}":this.name}return this.derivs>0&&(this.derivs<=3?t+="'".repeat(this.derivs):t=t+"^{("+this.derivs+")}"),t+"(\\Box)"}evaluate(t){var e=this.inputs[0].evaluate(t),s=void 0;if(null!=e){if(this.builtin&&this.derivs>0)null!=this.alternate?s=this.alternate.evaluate(t):console.log("Error: Built-in function called with unspecified derivative formula.");else if(null==t[this.name])switch(this.name){case"sin":s=Math.sin(e);break;case"cos":s=Math.cos(e);break;case"tan":s=Math.tan(e);break;case"csc":s=1/Math.sin(e);break;case"sec":s=1/Math.cos(e);break;case"cot":s=1/Math.tan(e);break;case"arcsin":Math.abs(e)<=1&&(s=Math.asin(e));break;case"arccos":Math.abs(e)<=1&&(s=Math.acos(e));break;case"arctan":s=Math.atan(e);break;case"arccsc":Math.abs(e)>=1&&(s=Math.asin(1/e));break;case"arcsec":Math.abs(e)>=1&&(s=Math.acos(1/e));break;case"arccot":s=0==e?Math.PI/2:Math.PI/2-Math.atan(1/e);break;case"sqrt":e>=0&&(s=Math.sqrt(e));break;case"abs":s=Math.abs(e);break;case"exp":case"expb":s=Math.exp(e);break;case"ln":e>0&&(s=Math.log(e));break;case"log10":e>0&&(s=Math.LOG10E*Math.log(e));break;default:null==(u=this.menv.functions[this.name])&&console.log("Error: A custom function never had a backend definition.");var i={};Object.keys(t).forEach((function(e){i[e]=t[e]}));var n=u.input;if(Array.isArray(n)&&console.log("Error: Function is defined to expect multiple inputs. Not yet implemented."),i[n]=e,this.derivs>=u.value.length){(h={})[a=new d(this.menv,n)]=0;for(var r=u.value.length;r<=this.derivs;r++)u.value[r]=u.value[r-1].derivative(a,h)}s=u.value[this.derivs].evaluate(i)}else{var a,h,u=t[this.name];if(i={},Object.keys(t).forEach((function(e){i[e]=t[e]})),n=u.input,Array.isArray(n)&&console.log("Error: Function is defined to expect multiple inputs. Not yet implemented."),i[n]=e,this.derivs>=u.value.length)for((h={})[a=new d(this.menv,n)]=0,r=u.value.length;r<=this.derivs;r++)u.value[r]=u.value[r-1].derivative(a,h);s=u.value[this.derivs].evaluate(i)}return s}}flatten(){return new f(this.menv,this.getName(),this.inputs[0].flatten())}copy(){return new f(this.menv,this.getName(),this.inputs[0].copy())}compose(t){return new f(this.menv,this.getName(),this.inputs[0].compose(t))}derivative(t,e){for(var s,i=this.inputs[0].dependencies(),n=!0,r="string"==typeof t?t:t.name,a=0;a=S.unop&&this.inputs[0].prec=0&&T.multdiv<=this.prec)&&(t="("+t+")")),void 0===this.inputs[1]?e="?":(e=this.inputs[1].toString(),(this.inputs[1].type>=S.unop&&this.inputs[1].prec<=this.prec||this.inputs[1].type==S.number&&e.indexOf("/")>=0&&T.multdiv<=this.prec)&&(e="("+e+")"));var s=this.op;return"|"==s&&(s=" $ "),t+s+e}allStringEquivs(){var t=this.inputs[0].allStringEquivs(),e=this.inputs[1].allStringEquivs(),s=[],i=this.op;for(var n in"|"==i&&(i=" $ "),t)for(var r in e)opAStr=t[n],this.inputs[0].type>=S.unop&&this.inputs[0].prec=S.unop&&this.inputs[1].prec<=this.prec&&(opBStr="("+opBStr+")"),s.push(opAStr+i+opBStr),"+"!=this.op&&"*"!=this.op&&"&"!=this.op&&"$"!=this.op||(opBStr=e[r],this.inputs[1].type>=S.unop&&this.inputs[1].prec=S.unop&&this.inputs[0].prec<=this.prec&&(opAStr="("+opAStr+")"),s.push(opBStr+i+opAStr));return s}toTeX(t){var e,s,i,n;if(void 0===t&&(t=!1),i=void 0===this.inputs[0]?"?":this.inputs[0].toTeX(t),n=void 0===this.inputs[1]?"?":this.inputs[1].toTeX(t),s=this.op,t&&this.select)switch(s){case"*":s="\\cdot ";break;case"/":s="\\div ";break;case"^":s="\\wedge ";break;case"|":case"$":s="\\hbox{ or }";break;case"&":s="\\hbox{ and }"}else switch(s){case"*":s=this.inputs[1]&&this.inputs[1].type==S.number||this.inputs[1]&&this.inputs[1].type==S.binop&&"^"==this.inputs[1].op&&this.inputs[1].inputs[0].type==S.number?"\\cdot ":" ";break;case"|":case"$":s="\\hbox{ or }";break;case"&":s="\\hbox{ and }"}if("/"==s)e="\\frac{"+i+"}{"+n+"}";else if("^"==s)e=this.inputs[0]&&this.inputs[0].type>=S.fcn?"\\left("+i+"\\right)":i,e+=s+"{"+n+"}";else{var r="",a="",h="",u="";t&&this.select&&(r="{\\color{blue}",a="}",h="{\\color{red}",u="}"),e=this.inputs[0]&&this.inputs[0].type>=S.unop&&this.inputs[0].prec=S.unop&&this.inputs[1].prec<=this.prec?e+="\\left("+r+n+a+"\\right)":e+=r+n+a}return t&&this.select&&(e="{\\color{red}\\boxed{"+e+"}}"),e.replace(/\+-/g,"-")}toMathML(){var t,e,s;switch(e=void 0===this.inputs[0]?"?":this.inputs[0].toMathML(),s=void 0===this.inputs[1]?"?":this.inputs[1].toMathML(),this.op){case"+":t="";break;case"-":t="";break;case"*":t="";break;case"/":t="";break;case"^":t=""}return""+t+e+s+""}operateToTeX(){var t=this.op;switch(t){case"*":t="\\times ";break;case"/":t="\\div ";break;case"^":t="\\wedge ";break;case"|":case"$":t="\\hbox{ or }";break;case"&":t="\\hbox{ and }"}return t}isCommutative(){var t=!1;return"+"!==this.op&&"*"!==this.op||(t=!0),t}evaluate(t){var e=this.inputs[0].evaluate(t),s=this.inputs[1].evaluate(t);if(null!=e&&null!=s){var i=void 0;switch(this.op){case"+":i=e+s;break;case"-":i=e-s;break;case"*":i=e*s;break;case"/":i=e/s;break;case"^":i=this.inputs[1].isConstant()&&(e>=0||s%1==0)?Math.pow(e,s):Math.exp(s*Math.log(e));break;case"=":i=Math.abs(e-s)0&&(i=new c(Math.pow(e.p,s.p),Math.pow(e.q,s.p)))}void 0!==i&&(t=!this.menv.options.negativeNumbers&&i.p<0?new g(this.menv,"-",w(this.menv,i.multiply(-1))):w(this.menv,i))}else switch(this.op){case"+":if(this.inputs[0].type==S.number&&0==this.inputs[0].number.value())t=this.inputs[1];else if(this.inputs[1].type==S.number&&0==this.inputs[1].number.value())t=this.inputs[0];else if(this.inputs[1].type==S.number&&this.inputs[0].type==S.binop&&"+"==this.inputs[0].op){let e=this.inputs[0];e.inputs[0].type==S.number?t=new y(this.menv,"+",w(this.menv,e.inputs[0].number.add(this.inputs[1].number)),e.inputs[1].copy()):e.inputs[1].type==S.number&&(t=new y(this.menv,"+",e.inputs[0].copy(),w(this.menv,e.inputs[1].number.add(this.inputs[1].number))))}else if(this.inputs[0].type==S.number&&this.inputs[1].type==S.binop&&"+"==this.inputs[1].op){let e=this.inputs[1];e.inputs[0].type==S.number?t=new y(this.menv,"+",w(this.menv,this.inputs[0].number.add(e.inputs[0].number)),e.inputs[1].copy()):e.inputs[1].type==S.number&&(t=new y(this.menv,"+",w(this.menv,this.inputs[0].number.add(e.inputs[1].number)),e.inputs[0].copy()))}break;case"-":this.inputs[0].type==S.number&&0==this.inputs[0].number.value()?t=new g(this.menv,"-",this.inputs[1]):this.inputs[1].type==S.number&&0==this.inputs[1].number.value()?t=this.inputs[0]:this.inputs[1].type==S.number&&this.inputs[1].number.value()<0&&(t=new y(this.menv,"+",this.inputs[0].copy(),w(this.menv,this.inputs[1].number.addInverse())));break;case"*":if(this.inputs[0].type==S.number&&1==this.inputs[0].number.value())t=this.inputs[1];else if(this.inputs[1].type==S.number&&1==this.inputs[1].number.value())t=this.inputs[0];else if(this.inputs[1].type==S.number&&this.inputs[0].type==S.binop&&"*"==this.inputs[0].op){let e=this.inputs[0];e.inputs[0].type==S.number?t=new y(this.menv,"*",w(this.menv,e.inputs[0].number.multiply(this.inputs[1].number)),e.inputs[1].copy()):e.inputs[1].type==S.number&&(t=new y(this.menv,"*",w(this.menv,e.inputs[1].number.multiply(this.inputs[1].number)),e.inputs[0].copy()))}else if(this.inputs[0].type==S.number&&this.inputs[1].type==S.binop&&"*"==this.inputs[1].op){let e=this.inputs[1];e.inputs[0].type==S.number?t=new y(this.menv,"*",w(this.menv,this.inputs[0].number.multiply(e.inputs[0].number)),e.inputs[1].copy()):e.inputs[1].type==S.number&&(t=new y(this.menv,"*",w(this.menv,this.inputs[0].number.multiply(e.inputs[1].number)),e.inputs[0].copy()))}break;case"/":this.inputs[0].type==S.number&&1==this.inputs[0].number.value()?t=new g(this.menv,"/",this.inputs[1]):this.inputs[1].type==S.number&&1==this.inputs[1].number.value()&&(t=this.inputs[0]);break;case"^":this.inputs[0].type==S.number&&0==this.inputs[0].number.value()?t=w(this.menv,0):this.inputs[0].type==S.number&&1==this.inputs[0].number.value()?t=w(this.menv,1):this.inputs[1].type==S.number&&1==this.inputs[1].number.value()&&(t=this.inputs[0])}return t}flatten(){var t,e=this.inputs[0].flatten(),s=this.inputs[1].flatten();switch(this.op){case"+":case"-":var i=[];if(e.type!=S.multiop&&e.type!=S.binop||"+"!=e.op&&"-"!=e.op)i.push(e);else{var n=e.flatten();for(var r in n.inputs)i.push(n.inputs[r])}if(s.type!=S.multiop&&s.type!=S.binop||"+"!=s.op&&"-"!=s.op)if("-"==this.op)if(s.type!=S.multiop&&s.type!=S.binop||"+"!=s.op&&"-"!=s.op)i.push(new g(this.menv,"-",s));else for(var r in(n=s.flatten()).inputs)i.push(new g(this.menv,"-",n.inputs[r]));else i.push(s);else{n=s.flatten();for(var r in n.inputs)i.push(n.inputs[r])}t=v(this.menv,"+",i);break;case"*":case"/":if(i=[],e.type!=S.multiop&&e.type!=S.binop||"*"!=e.op&&"/"!=e.op)i.push(e);else for(var r in(n=e.flatten()).inputs)i.push(n.inputs[r]);if(s.type!=S.multiop&&s.type!=S.binop||"*"!=s.op&&"/"!=s.op)if("/"==this.op)if(s.type!=S.multiop&&s.type!=S.binop||"*"!=s.op&&"/"!=s.op)i.push(new g(this.menv,"/",s));else for(var r in(n=s.flatten()).inputs)i.push(new g(this.menv,"/",n.inputs[r]));else i.push(s);else for(var r in(n=s.flatten()).inputs)i.push(n.inputs[r]);t=v(this.menv,"*",i);break;default:t=new y(this.menv,this.op,e,s)}return t}match(t,e){function s(t){var e={};for(var s in t)e[s]=t[s];return e}var i=null;if((t.type==S.multiop||t.type==S.binop)&&this.op==t.op&&2<=t.inputs.length){var n,r,a;if(r=t.inputs[0].copy(),t.inputs.length>2){let e=[];for(let s=0;s0&&o.indexOf(l)>=0){var c=new y(this.menv,"*",this.inputs[1],new f(this.menv,"log",this.inputs[0]));s=new f(this.menv,"exp",c).derivative(t,e)}else if(n)s=w(this.menv,0);else{var v=new y(this.menv,"-",this.inputs[1],w(this.menv,1)),m=new y(this.menv,"*",this.inputs[1],new y(this.menv,"^",this.inputs[0],v));if(this.inputs[0].type==S.variable&&this.inputs[0].name==l)s=m;else{var d=this.inputs[0].derivative(t,e);s=new y(this.menv,"*",m,d)}}break;default:console.log("The binary operator '"+this.op+"' is not defined."),s=void 0}return this.menv.options.doFlatten&&(s=s.flatten()),s}}class g extends u{constructor(t,e,s){switch(super(t),this.type=S.unop,this.op=e,void 0===s&&(s=new u(t)),this.inputs=[s],s.parent=this,e){case"+":case"-":this.prec=T.multdiv;break;case"/":this.prec=T.power;break;default:alert("Unknown unary operator: '"+e+"'.")}}toString(){var t;return t=void 0===this.inputs[0]?"?":this.inputs[0].toString(),this.inputs[0].type>=S.unop&&this.inputs[0].prec=0&&T.multdiv<=this.prec?this.op+"("+t+")":this.op+t}allStringEquivs(){var t=this.inputs[0].allStringEquivs(),e=[];for(var s in t)this.inputs[0].type>=S.unop&&this.inputs[0].prec<=this.prec?e[s]=this.op+"("+t[s]+")":e[s]=this.op+t[s];return e}toTeX(t){var e,s,i;return void 0===t&&(t=!1),s=void 0===this.inputs[0]?"?":this.inputs[0].toTeX(t),"/"==(i=this.op)?(i="\\div ",e=t&&this.select?"{\\color{red}"+this.op+"}\\left({\\color{blue}"+s+"}\\right)":"\\frac{1}{"+s+"}"):e=t&&this.select?"{\\color{red}"+this.op+"}\\left({\\color{blue}"+s+"}\\right)":this.inputs[0].type>=S.unop&&this.inputs[0].prec<=this.prec&&(this.inputs[0].type!=S.unop||"-"!=this.op||"/"!=this.inputs[0].op)?i+"\\left("+s+"\\right)":i+s,e}toMathML(){var t,e;switch(e=void 0===this.inputs[0]?"?":this.inputs[0].toMathML(),this.op){case"+":t=e;break;case"-":t=""+e+"";break;case"/":t="1"+e+""}return t}operateToTeX(){var t=this.op;return"/"===t&&(t="\\div"),t}evaluate(t){var e,s=this.inputs[0].evaluate(t);if(null!=s){switch(this.op){case"+":e=s;break;case"-":e=-1*s;break;case"/":e=1/s;break;default:alert("The unary operator '"+this.op+"' is not defined."),e=void 0}return e}}reduce(){var t=super.reduce(),e=t;return t.type==S.unop&&"-"==t.op&&t.inputs[0].isConstant()&&0==t.value()&&(e=w(this.menv,0)),e}simplifyConstants(){var t;if(this.inputs[0]=this.inputs[0].simplifyConstants(),this.inputs[0].parent=this,this.inputs[0].type==S.number){var e=this.inputs[0].number;switch(this.op){case"-":t=this.menv.options.negativeNumbers?w(this.menv,e.addInverse()):0==e.value()?w(this.menv,0):this;break;case"/":t=w(this.menv,e.multInverse())}}else t=this;return t}flatten(){return new g(this.menv,this.op,this.inputs[0].flatten())}copy(){return new g(this.menv,this.op,this.inputs[0].copy())}compose(t){return new g(this.menv,this.op,this.inputs[0].compose(t))}derivative(t,e){var s;if(this.inputs[0].isConstant())s=w(this.menv,0);else switch(this.op){case"+":s=this.inputs[0].derivative(t,e);break;case"-":(s=new g(this.menv,"-",this.inputs[0].derivative(t,e))).isConstant()&&(s=s.simplifyConstants());break;case"/":var i=new y(this.menv,"*",this.inputs[0],this.inputs[0]);s=new g(this.menv,"-",new y(this.menv,"/",this.inputs[0].derivative(t,e),i));break;default:console.log("The derivative of the unary operator '"+this.op+"' is not defined."),s=void 0}return s}match(t,e){var s=null;if(this.isConstant()&&t.isConstant()){var i=t.simplifyConstants(),n=this.simplifyConstants();(i.toString()===n.toString()||i.type==S.number&&n.type==S.number&&n.number.equal(i.number))&&(s=e)}else s=u.prototype.match.call(this,t,e);return s}}function w(t,e){var s;return"number"==typeof e||e instanceof Number?s=Math.floor(e)==e?new c(e,1):new o(e):e instanceof o?s=e:e instanceof k?s=e.number:console.log("Trying to create a scalar_expr with a non-number object: "+e),t.options.negativeNumbers||s.value()>=0?new k(t,s):new g(t,"-",new k(t,s.multiply(-1)))}class k extends u{constructor(t,e){super(t),this.type=S.number,"number"==typeof e||e instanceof Number?Math.floor(e)==e?this.number=new c(e,1):this.number=new o(e):e instanceof o?this.number=e:e instanceof k?this.number=e.number:console.log("Trying to instantiate a scalar_expr with a non-number object: "+e),this.context="number"}toString(t){return void 0===t&&(t=!1),this.number.toString()}toTeX(t){void 0===t&&(t=!1);var e=this.number.toTeX();return t&&this.select&&(e="{\\color{red}"+e+"}"),e}toMathML(){return""+this.toString()+""}allStringEquivs(){return[this.toString()]}isConstant(){return!0}simplifyConstants(){var t;if(!this.menv.options.negativeNumbers&&this.number.value()<0){var e=this.number.multiply(-1);t=new g(this.menv,"-",new k(this.menv,e))}else t=this;return t}value(){return this.number.value()}evaluate(t){return this.value()}copy(){return w(this.menv,this.number)}compose(t){return w(this.menv,this.number)}derivative(t,e){return w(this.menv,0)}match(t,e){var s=null,i=t;return t.isConstant()&&t.type!=S.number?(i=t.copy().simplifyConstants(),this.toString()===i.toString()&&(s=e)):i.type==S.number&&this.number.equal(i.number)&&(s=e),s}}class x extends u{constructor(t,e,s,i){super(t),this.type=S.operator,this.op="D",void 0===e&&(e=new u(t)),void 0===s?s=new d(t,"x"):"string"==typeof s&&(s=new d(t,s)),this.ivar=s,this.ivarValue=i,this.inputs=[e],this.isRate=!1,e.parent=this}toString(){var t,e;return e=this.ivar.toString(),t=this.inputs[0].toString(),void 0!==this.ivarValue?"D("+t+","+e+","+this.ivarValue.toString()+")":"D("+t+","+e+")"}toTeX(t){var e,s;return e=this.ivar.toTeX(),s=this.inputs[0].toTeX(),this.isRate&&this.inputs[0].type==S.variable?void 0!==this.ivarValue?"\\left. \\frac{d"+s+"}{d"+e+"} \\right|_{"+e+"="+this.ivarValue.toTeX()+"}":"\\frac{d"+s+"}{d"+e+"}":(void 0!==this.ivarValue?"\\left. \\frac{d}{d"+e+"} \\right|_{"+e+"="+this.ivarValue.toTeX()+"}":"\\frac{d}{d"+e+"}")+"\\Big["+s+"\\Big]"}allStringEquivs(){var t,e,s=this.inputs[0].allStringEquivs(),i=[];for(var n in t=this.ivar.toString(),void 0!==this.ivarValue&&(e=this.ivarValue.toString()),s)void 0!==this.ivarValue?i[n]="D("+s[n]+","+t+","+e+")":i[n]="D("+s[n]+","+t+")";return s}toMathML(){return""+(void 0===this.inputs[0]?"?":this.inputs[0].toMathML())+""}evaluate(t){var e={};return void 0!==this.ivarValue&&(e[this.ivar.name]=this.ivarValue),this.inputs[0].derivative(this.ivar,t).compose(e).evaluate(t)}simplifyConstants(){return this}flatten(){return new x(this.menv,this.inputs[0].flatten(),this.ivar,this.ivarValue)}copy(){return new x(this.menv,this.inputs[0].copy(),this.ivar,this.ivarValue)}compose(t){}derivative(t,e){var s={};void 0!==this.ivarValue&&(s[this.ivar]=this.ivarValue);var i=this.inputs[0].derivative(this.ivar,e);return i.compose(s),i.derivative(t,e)}}class M{constructor(t){if(t.rand)this.rand=t.rand;else{let e;e=null==t.seed?(new Date).getTime().toString():t.seed,this.rand=function(){return function(t){const e="aleaPRNG 1.1.0";var s,i,n,r,a,h=new Uint32Array(3),u="";function p(t){var e=function(){var t=4022871197,e=function(e){for(var s=0,i=(e=e.toString()).length;s>>0,t=(n*=t)>>>0,t+=4294967296*(n-=t)}return 2.3283064365386963e-10*(t>>>0)};return e.version="Mash 0.9",e}();s=e(" "),i=e(" "),n=e(" "),r=1;for(var a=0;aarguments[1]&&(t=arguments[1],e=arguments[0]),o(t)&&o(e)?Math.floor(l()*(e-t+1))+t:l()*(e-t)+t},l.restart=function(){p(a)},l.seed=function(){p(Array.prototype.slice.call(arguments))},l.version=function(){return e},l.versions=function(){return e+", "+u},0===t.length&&(window.crypto.getRandomValues(h),t=[h[0],h[1],h[2]]),a=t,p(t),l}(Array.prototype.slice.call(arguments))}(e)}}setSeed(t){this.alea.seed(t.toString())}random(){return this.rand()}randSign(){return 2*Math.floor(2*this.random())-1}randInt(t,e){return t+Math.floor((e-t+1)*this.random())}randUniform(t,e){return t+(e-t)*this.random()}randDiscrete(t,e,s,i){var n;(arguments.length<3||0==s)&&(s=1),arguments.length<4&&(i=!1);let r=Math.floor((e-t)/s)+1;do{n=t+s*this.randInt(0,r-1)}while(i&&Math.abs(n)<1e-16);return n}randChoice(t,e,s){var i,n,r=new Array,a=new Array;for(i=0;i<=e-t;i++)r[i]=t+i;for(i=0;i2)console.log("Invalid equation in identity list: "+s);else for(var r in i=t.parse(n[0],"formula"),e)null!==e[r].refExpr.match(i,{})&&(e[r].isActive=!1)}(this,this.reduceRules,t)}addRule(t,e,s,i){r(this,t,e,s,!0,i)}findMatchRules(t,e,s){return a(t,e)}generateRandom(t,e){var s,i,n,r,a;switch(t){case"uniform":"function"==typeof(i=e.min).value&&(i=i.value()),null==i&&(i=0),"function"==typeof(n=e.max).value&&(n=n.value()),null==n&&(n=1),s=this.rng.randUniform(i,n);break;case"sign":s=this.rng.randSign();break;case"integer":"function"==typeof(i=e.min).value&&(i=i.value()),null==i&&(i=0),i=Math.floor(i),"function"==typeof(n=e.max).value&&(n=n.value()),null==n&&(n=1),n=Math.floor(n),s=this.rng.randInt(i,n);break;case"discrete":"function"==typeof(i=e.min).value&&(i=i.value()),"function"==typeof(n=e.max).value&&(n=n.value()),"function"==typeof(r=e.by).value&&(r=r.value()),a=!!e.nonzero,s=this.rng.randDiscrete(i,n,r,a)}return w(this,s)}addFunction(t,e,s){if(arguments.length<2&&(e="x"),arguments.length<3){for(var i,n=w(this,this.rng.randRational([-20,20],[1,15])),r=1;r<=6;r++){if(Array.isArray(e)){i=this.parse("sin("+r+"*"+e[0]+")","formula");for(var a=1;a=o.length&&(v=!0,o=o.slice(1,-1));var m=new Array,k=new Array;function M(t,e,s,i){for(var n=0;e.length>0&&(n=e.pop(),!i||!(i.type==S.unop||n.prec0){var a=s.pop();r=t.options.negativeNumbers&&a.type==S.number&&"-"==n.op?w(t,a.number.multiply(-1)):new g(t,n.op,a)}else(r=new u(t)).setParsingError("Incomplete formula: missing value for "+n.op);else if(s.length>1){var h=s.pop(),p=s.pop();r=new y(t,n.op,p,h)}else(r=new u(t)).setParsingError("Incomplete formula: missing value for "+n.op);s.push(r),n=0}0!=n&&e.push(n),i&&e.push(i)}var q,E,N=-1;for(l=0;l2&&(U=this.parse(Z[2],e,s)),F=new x(this,$,_,U))}else j=this.parse(o.slice(h+1,D),e,s),F=new f(this,L,j);m.push(F),q=0,l=D}else if("["==o.charAt(h)){var z=!1;try{D=X(o,h,!0)}catch(t){c=t,z=!0,D=h+1}var G=this.parse(o.slice(h+1,D),e,s);F=new b(this,L,G),z&&(F.setParsingError(c),c=""),m.push(F),q=0,l=D}else F=new d(this,L),m.push(F),q=0,l=h-1}else if(0==o.substr(l).search(a)){q=1;var W=o.charAt(l),H=new A(W);0!=N&&("-"==W||"/"==W?(H.type=S.unop,H.prec=T.multdiv):c="Error: consecutive operators"),M(this,k,m,H)}if(0==N&&0==q){var J=m.pop();M(this,k,m,H=new A("*")),m.push(J)}N=q}if(M(this,k,m),E=m.length>0?m.pop():new p(this),c.length>0)E.setParsingError(c);else{if(E=E.compose(s),"number"===e){if(!E.isConstant())throw new TypeError(`The expression ${t} is expected to be a constant but depends on variables.`);E.simplifyConstants()}E.setContext(e)}return i.doFlatten&&E.flatten(),E}}function A(t){switch(this.op=t,t){case"+":case"-":this.prec=T.addsub,this.type=S.binop,this.valueType=q.numeric;break;case"*":case"/":this.prec=T.multdiv,this.type=S.binop,this.valueType=q.numeric;break;case"^":this.prec=T.power,this.type=S.binop,this.valueType=q.numeric;break;case"&":this.prec=T.conj,this.type=S.binop,this.valueType=q.bool;break;case"$":this.prec=T.disj,this.type=S.binop,this.valueType=q.bool;break;case"=":this.prec=T.equal,this.type=S.binop,this.valueType=q.bool;break;case",":this.prec=T.fop,this.type=S.array,this.valueType=q.vector;break;default:this.prec=T.fcn,this.type=S.fcn}}function C(t,e){for(var s=1,i=e,n=!0;s>0&&i=0?n=!0:" "!=t.charAt(i)&&(n=!1);return i}function I(t,e){for(var s=1,i=e;s>0&&i0&&n 2) {\n console.log(\"Invalid equation in identity list: \" + equation);\n return;\n } else {\n refExpr = menv.parse(exprFormulas[0],\"formula\");\n }\n for (var i in reductionList) {\n var testRule = reductionList[i];\n var bindings = testRule.refExpr.match(refExpr, {})\n if (bindings !== null) {\n reductionList[i].isActive = false;\n }\n}\n}\n\n/* *******************\n** Given a list of reduction rules and a given expression,\n** test each reduction rule to see if it matches the structure.\n** Create an array of new objects with bindings stating what\n** substitutions are necessary to make the matches.\n******************* */\nexport function findMatchRules(reductionList, testExpr, doValidate) {\n var matchList = [];\n var i, testRule;\n for (i in reductionList) {\n testRule = reductionList[i];\n var bindings = testRule.refExpr.match(testExpr, {})\n if (testRule.isActive && bindings !== null) {\n var match = new Match(testRule, bindings);\n matchList.push(match);\n }\n }\n return(matchList);\n}\n\n\nexport function defaultReductions(menv) {\n var reduceRules = new Array();\n\n newRule(menv, reduceRules, '0+x==x', 'Additive Identity', true, true);\n newRule(menv, reduceRules, 'x+0==x', 'Additive Identity', true, true);\n newRule(menv, reduceRules, '0-x==-x', 'Additive Inverse', true, true);\n newRule(menv, reduceRules, 'x-0==x', 'Additive Identity', true, true);\n newRule(menv, reduceRules, 'x+-(0)==x', 'Additive Identity', true, true);\n newRule(menv, reduceRules, '0*x==0', 'Multiply by Zero', true, true);\n newRule(menv, reduceRules, 'x*0==0', 'Multiply by Zero', true, true);\n newRule(menv, reduceRules, '1*x==x', 'Multiplicative Identity', true, true);\n newRule(menv, reduceRules, 'x*1==x', 'Multiplicative Identity', true, true);\n newRule(menv, reduceRules, '0/x==0', 'Multiply by Zero', true, true);\n newRule(menv, reduceRules, 'x/1==x', 'Divide by One', true, true);\n newRule(menv, reduceRules, 'x^1==x', 'First Power', true, true);\n newRule(menv, reduceRules, 'x^0==1', 'Zero Power', true, true);\n newRule(menv, reduceRules, 'x^(-a)==1/(x^a)', 'Negative Power', true, true);\n newRule(menv, reduceRules, '1^x==1', 'One to a Power', true, true);\n newRule(menv, reduceRules, '-1*x==-x', 'Multiplicative Identity', true, true);\n newRule(menv, reduceRules, 'x*-1==-x', 'Multiplicative Identity', true, true);\n newRule(menv, reduceRules, 'x-x==0', 'Additive Inverses Cancel', true, true);\n newRule(menv, reduceRules, 'x+-x==0', 'Additive Inverses Cancel', true, true);\n newRule(menv, reduceRules, '-x+x==0', 'Additive Inverses Cancel', true, true);\n newRule(menv, reduceRules, 'x+(-y)==x-y', \"Subtraction\", true, true);\n newRule(menv, reduceRules, '(-x)+(-y)==-(x+y)', \"Factor Negation from Addition\", true, true);\n newRule(menv, reduceRules, 'x-(-y)==x+y', \"Additive Inverse's Inverse\", true, true);\n newRule(menv, reduceRules, 'x*(-y)==(-x)*y', \"Factor Negation from Multiplication\", true, true);\n newRule(menv, reduceRules, '(-x)/y==-(x/y)', \"Factor Negation from Multiplication\", true, true);\n newRule(menv, reduceRules, 'x/(-y)==-(x/y)', \"Factor Negation from Multiplication\", true, true);\n newRule(menv, reduceRules, '-(-x)==x', \"Additive Inverse's Inverse\", true, true);\n newRule(menv, reduceRules, '/(/x)==x', \"Multiplicative Inverse's Inverse\", true, true);\n\n return(reduceRules);\n}\n\nexport function defaultSumReductions(menv) {\n var sumReductions = new Array();\n\n newRule(menv, sumReductions, 'a+0==a', 'Simplify Addition by Zero', true, true);\n newRule(menv, sumReductions, '0+a==a', 'Simplify Addition by Zero', true, true);\n newRule(menv, sumReductions, 'a-a==0', 'Cancel Additive Inverses', true, true);\n newRule(menv, sumReductions, 'a+-a==0', 'Cancel Additive Inverses', true, true);\n newRule(menv, sumReductions, '-a+a==0', 'Cancel Additive Inverses', true, true);\n newRule(menv, sumReductions, 'a*b+-a*b==0', 'Cancel Additive Inverses', true, true);\n newRule(menv, sumReductions, '-a*b+a*b==0', 'Cancel Additive Inverses', true, true);\n newRule(menv, sumReductions, 'a*(b+c)==a*b+a*c', 'Expand Products by Distributing', true, true);\n newRule(menv, sumReductions, '(a+b)*c==a*c+b*c', 'Expand Products by Distributing', true, true);\n newRule(menv, sumReductions, 'a*(b-c)==a*b-a*c', 'Expand Products by Distributing', true, true);\n newRule(menv, sumReductions, '(a-b)*c==a*c-b*c', 'Expand Products by Distributing', true, true);\n\n return(sumReductions);\n}\n\nexport function defaultProductReductions(menv) {\n var productReductions = new Array();\n\n newRule(menv, productReductions, '0*a==0', 'Simplify Multiplication by Zero', true, true);\n newRule(menv, productReductions, 'a*0==0', 'Simplify Multiplication by Zero', true, true);\n newRule(menv, productReductions, '1*a==a', 'Simplify Multiplication by One', true, true);\n newRule(menv, productReductions, 'a*1==a', 'Simplify Multiplication by One', true, true);\n newRule(menv, productReductions, 'a/a==1', 'Cancel Multiplicative Inverses', true, true);\n newRule(menv, productReductions, 'a*/a==1', 'Cancel Multiplicative Inverses', true, true);\n newRule(menv, productReductions, '/a*a==1', 'Cancel Multiplicative Inverses', true, true);\n newRule(menv, productReductions, '(a*b)/(a*c)==b/c', 'Cancel Common Factors', true,true);\n newRule(menv, productReductions, 'a^m/a^n==a^(m-n)', 'Cancel Common Factors', true,true);\n newRule(menv, productReductions, '(a^m*b)/(a^n*c)==(a^(m-n)*b)/c', 'Cancel Common Factors', true,true);\n newRule(menv, productReductions, 'a*a==a^2', 'Write Products of Common Terms as Powers', true, true);\n newRule(menv, productReductions, 'a*a^n==a^(n+1)', 'Write Products of Common Terms as Powers', true, true);\n newRule(menv, productReductions, 'a^n*a==a^(n+1)', 'Write Products of Common Terms as Powers', true, true);\n newRule(menv, productReductions, 'a^m*a^n==a^(m+n)', 'Write Products of Common Terms as Powers', true, true);\n newRule(menv, productReductions, '(a^-m*b)/c==b/(a^m*c)', 'Rewrite Using Positive Powers', true,true);\n newRule(menv, productReductions, '(b*a^-m)/c==b/(a^m*c)', 'Rewrite Using Positive Powers', true,true);\n newRule(menv, productReductions, 'b/(a^-m*c)==(a^m*b)/c', 'Rewrite Using Positive Powers', true,true);\n newRule(menv, productReductions, 'b/(c*a^-m)==(a^m*b)/c', 'Rewrite Using Positive Powers', true,true);\n\n return (productReductions);\n }","/*!\n * BTM JavaScript Library v@VERSION\n * https://github.com/dbrianwalton/BTM\n *\n * Copyright D. Brian Walton\n * Released under the MIT license (https://opensource.org/licenses/MIT)\n *\n * Date: @DATE\n */\n\nimport { MENV, exprType, exprValue } from \"./BTM_root.js\"\nimport { findMatchRules } from \"./reductions.js\"\nimport { create_scalar } from \"./scalar_expr.js\"\n\nexport class MathObject {\n constructor(menv) {\n this.menv = menv;\n\n this.select = false;\n this.parent = null;\n this.inputs = [];\n this.valueType = exprValue.undef;\n this.context = undefined;\n }\n \n // Method to *evaluate* the object.\n // - Return undefined\n value(bindings) {\n }\n \n // Update context setting\n setContext(context) {\n this.context = context;\n // Update context on inputs.\n for (var i in this.inputs) {\n this.inputs[i].setContext(context);\n }\n }\n\n // When the parser throws an error, need to record it.\n setParsingError(errorString) {\n this.parseError = errorString;\n }\n\n // Errors from parsing. Check all possible children (recursively)\n hasParsingError() {\n var retValue = false,\n i = 0;\n if (this.parseError) {\n retValue = true;\n }\n\n while (!retValue && i < this.inputs.length) {\n // Check for reductions on inputs.\n retValue = this.inputs[i].hasParsingError();\n i++;\n }\n return retValue;\n }\n \n // Errors from parsing. Find the *first* error in the parsing process.\n getParsingError() {\n var errString = this.parseError;\n var i=0;\n while (!errString && i < this.inputs.length) {\n errString = this.inputs[i].getParsingError();\n }\n return (errString);\n }\n \n // Method to generate the expression as input-style string.\n toString(elementOnly) {\n if (typeof elementOnly == 'undefined') {\n elementOnly = false;\n }\n var theStr = '';\n return(theStr);\n }\n \n // Method to generate the expression using presentation-style (LaTeX)\n // - showSelect is so that part of the expression can be highlighted\n toTeX(showSelect) {\n if (typeof showSelect == 'undefined') {\n showSelect = false;\n }\n return(this.toString());\n }\n\n // Method to represent the expression using MathML\n toMathML() {\n return(\"\" + this.toString() + \"\");\n }\n \n // Return an array containing all tested equivalent strings.\n allStringEquivs() {\n return([]);\n }\n \n // To convert binary tree structure to n-ary tree for supported operations (+ and *)\n // Most things can't flatten. Return a copy.\n flatten() {\n return this.copy();\n }\n \n // Test if the expression evaluates to a constant.\n isConstant() {\n var retValue = false;\n return(retValue);\n }\n \n // Test if the expression evaluates to a constant.\n isExpression() {\n var retValue = false;\n return(retValue);\n }\n\n}\n\nexport class expression extends MathObject {\n constructor(menv) {\n super(menv);\n this.select = false;\n this.parent = null;\n this.inputs = [];\n this.valueType = exprValue.numeric;\n }\n\n // Method to *evaluate* the value of the expression using given symbol bindings.\n // - Return native Number value\n value(bindings) {\n return(this.evaluate(bindings));\n }\n\n // When the parser throws an error, need to record it.\n setParsingError(errorString) {\n this.parseError = errorString;\n }\n\n // Errors from parsing. Check all possible children (recursively)\n hasParsingError() {\n var retValue = false,\n i = 0;\n if (this.parseError) {\n retValue = true;\n }\n\n while (!retValue && i < this.inputs.length) {\n // Check for reductions on inputs.\n retValue = this.inputs[i].hasParsingError();\n i++;\n }\n return retValue;\n }\n\n // Errors from parsing. Find the *first* error in the parsing process.\n getParsingError() {\n var errString = this.parseError;\n var i=0;\n while (!errString && i < this.inputs.length) {\n errString = this.inputs[i].getParsingError();\n }\n return (errString);\n }\n\n // Method to generate the expression as input-style string.\n toString(elementOnly) {\n if (typeof elementOnly == 'undefined') {\n elementOnly = false;\n }\n var theStr = '';\n return(theStr);\n }\n\n // Method to generate the expression using presentation-style (LaTeX)\n // - showSelect is so that part of the expression can be highlighted\n toTeX(showSelect) {\n if (typeof showSelect == 'undefined') {\n showSelect = false;\n }\n return(this.toString());\n }\n\n // Method to represent the expression using MathML\n toMathML() {\n return(\"\" + this.toString() + \"\");\n }\n\n operateToTeX() {\n return(this.toTeX());\n }\n\n treeToTeX(expand) {\n var retStruct = {};\n \n retStruct.parent = (typeof this.parent === 'undefined' || this.parent === null) ? null : this.parent.operateToTeX();\n if (typeof expand === 'undefined' || !expand) {\n retStruct.current = this.toTeX();\n retStruct.inputs = null;\n } else {\n retStruct.current = this.operateToTeX();\n retStruct.inputs = [];\n for (var i in this.inputs) {\n retStruct.inputs[i] = this.inputs[i].toTeX();\n }\n }\n return(retStruct);\n }\n\n\n // Return an array containing all tested equivalent strings.\n allStringEquivs() {\n return([]);\n }\n\n // To convert binary tree structure to n-ary tree for supported operations (+ and *)\n // Most things can't flatten. Return a copy.\n flatten() {\n return this.copy();\n }\n\n // Create a new expression that is a copy.\n copy() {\n var myCopy = new expression();\n myCopy.valueType = this.valueType;\n myCopy.context = this.context;\n for (var i in this.inputs) {\n myCopy.inputs[i] = myCopy.inputs[i].copy();\n myCopy.inputs[i].parent = myCopy;\n }\n return myCopy;\n }\n\n // When subtree only involves constants, simplify the formula to a value.\n // Default: Look at all descendants (inputs) and simplify there.\n simplifyConstants() {\n for (var i in this.inputs) {\n this.inputs[i] = this.inputs[i].simplifyConstants();\n this.inputs[i].parent = this;\n }\n return(this);\n }\n\n // Find all dependencies (symbols) required to evaluate expression.\n dependencies(forced) {\n var inDeps;\n var i, j;\n var depArray = new Array();\n\n var master = {};\n if (forced != undefined) {\n for (var i=0; i= this.inputs.length) {\n throw 'Attempt to get an undefined input expression.';\n } else {\n inputExpr = this.inputs[whichInput];\n }\n return(inputExpr);\n }\n\n // Test if the expression evaluates to a constant.\n isConstant() {\n var retValue = true;\n for (var i in this.inputs) {\n retValue = retValue & this.inputs[i].isConstant();\n }\n return(retValue);\n }\n\n // Evaluate the expression given the bindings to symbols.\n evaluate(bindings) {\n return(0);\n }\n\n // Create a *new* expression where a symbol is *replaced* by a bound expression\n compose(bindings) {\n return(new expression());\n }\n\n // Compare *this* expression to a given *testExpr*.\n // *options* gives options associated with testing (e.g., relative tolerance)\n // but also supports fixing certain bindings.\n // Supports abstract input matching against variables using *matchInputs*\n compare(testExpr, options, matchInputs) {\n var isEqual = true;\n var i, n;\n\n if (matchInputs == undefined) {\n matchInputs = false;\n }\n if (options == undefined) {\n options = this.menv.options;\n }\n var knownBindings = Object.keys(options);\n var unknownBindings = [];\n\n var rTol = 1e-8;\n if (typeof options.rTol !== 'undefined') {\n rTol = options.rTol;\n i = knownBindings.indexOf('rTol');\n knownBindings.splice(i, 1);\n }\n\n var dependA = this.dependencies();\n var dependB = testExpr.dependencies();\n\n for (i=0; irTol) {\n isEqual = false;\n }\n // If one is finite, other must be NaN\n } else if ( (isFinite(y1) && !isNaN(y2))\n || (isFinite(y2) && !isNaN(y1)) ) {\n isEqual = false;\n }\n\n // Advance the odometer.\n var j=0;\n done = true; // This will only persist when the odometer is done.\n while (j < variableList.length) {\n odometer[j]++;\n if (odometer[j] >= testPointList[j].length) {\n odometer[j] = 0;\n j++;\n } else {\n done = false;\n break;\n }\n }\n }\n if (matchInputs && isEqual) {\n var matchOp;\n if (this.op == '+' || this.op == '-') {\n matchOp = '+';\n } else if (this.op == '*' || this.op == '/') {\n matchOp = '*';\n }\n if ((matchOp=='+' && testExpr.op != '+' && testExpr.op != '-')\n || (matchOp=='*' && testExpr.op != '*' && testExpr.op != '/')) {\n isEqual = false;\n }\n if (isEqual) {\n var flatA, flatB;\n flatA = this.flatten();\n flatB = testExpr.flatten();\n if (flatA.inputs.length == flatB.inputs.length) {\n var inputMatched = [];\n for (i=0; i 0) {\n workExpr = matchRules[0].subExpr;\n matchRules = findMatchRules(this.menv.reduceRules, workExpr, true);\n }\n return workExpr;\n }\n\n \n derivative(ivar, varList) {\n return(create_scalar(0));\n }\n\n /*\n The match method is designed to compare \"this\" expression\n to the given \"expr\" expression and see if it is consistent with\n the current bindings. The bindings will be an object where\n variables in \"this\" are assigned to strings representing expressions.\n If there is a mismatch, return \"null\" and the matching process should terminate.\n\n Overrides:\n - numbers, to deal with scalar formula that simplify\n - variables, which can match arbitrary expressions.\n - indexed expressions might need a special method.\n - multiop, where should see if a variable can match a subcollection of inputs.\n */\n match(expr, bindings) {\n var retValue = null;\n if (this.type == expr.type && this.operateToTeX() == expr.operateToTeX()) {\n retValue = bindings;\n for (var i=0; i= 0) {\n this.inputs[i] = subExpr;\n if (subExpr !== undefined) {\n subExpr.parent = this;\n }\n }\n }\n}\n\n// Special class that can't match or be evaluated.\nexport class undef_expr extends expression {\n constructor(menv) {\n super(menv);\n this.type = exprType.undef;\n this.valueType = exprValue.undef;\n }\n value(bindings) {\n return Number.NaN;\n }\n compare(testExpr, options, matchInputs) {\n return false;\n }\n copy() {\n return(new undef_expr(this.menv));\n }\n compose(bindings) {\n return(new undef_expr(this.menv));\n }\n derivative(ivar, varList) {\n return(new undef_expr(this.menv));\n }\n match(expr, bindings) {\n return null;\n }\n} \n ","/*!\n * BTM JavaScript Library v@VERSION\n * https://github.com/dbrianwalton/BTM\n *\n * Copyright D. Brian Walton\n * Released under the MIT license (https://opensource.org/licenses/MIT)\n *\n * Date: @DATE\n */\n\n/* *******************************\n** Define a generic class to work numbers\n******************************* */\n\nexport class real_number {\n constructor(a) {\n if (typeof a === 'number' || a instanceof Number) {\n this.number = a;\n } else if (a instanceof real_number) {\n this.number = a.number;\n }\n }\n\n // Return a numerical value of the rational expression.\n value() {\n return this.number;\n }\n \n // Real numbers have no natural simplification, but declaring the method.\n simplify() {\n }\n\n equal(other) {\n if (typeof other === 'number') {\n other = new real_number(other);\n }\n return (this.value()==other.value());\n }\n\n // Add numbers.\n add(other) {\n if (typeof other === 'number') {\n other = new real_number(other);\n }\n var sum = new real_number(this.number + other.value());\n return(sum);\n }\n\n // Subtract this - other\n subtract(other) {\n if (typeof other === 'number') {\n other = new real_number(other);\n }\n var sum = new real_number(this.number - other.value());\n return(sum);\n }\n\n // Multiply this rational by another rational number and create new object.\n multiply(other) {\n if (typeof other === 'number') {\n other = new real_number(other);\n }\n var product = new real_number(this.number * other.value());\n return(product);\n }\n\n // Divide this rational by another rational number and create new object.\n divide(other) {\n if (typeof other === 'number') {\n other = new real_number(other);\n }\n var product;\n if (other.value != 0) {\n product = new real_number(this.number / other.value());\n } else {\n product = new real_number(NaN);\n }\n return(product);\n }\n\n // Additive Inverse\n addInverse() {\n var inverse = new real_number(-this.number);\n return(inverse);\n }\n\n // Multiplicative Inverse\n multInverse() {\n var inverse;\n if (this.number != 0) {\n inverse = new real_number(this.number);\n } else {\n inverse = new real_number(NaN);\n }\n return(inverse);\n }\n\n toString(leadSign) {\n if (typeof leadSign == 'undefined') {\n leadSign = false;\n }\n var str = (leadSign && this.number>0) ? '+' : '';\n if (isNaN(this.number)) {\n str = 'NaN';\n } else {\n str = str + Number(this.number.toFixed(10));\n }\n \n return(str);\n }\n \n // Format the rational number as TeX string.\n toTeX(leadSign) {\n if (typeof leadSign == 'undefined') {\n leadSign = false;\n }\n var str = (leadSign && this.number>0) ? '+' : '';\n if (isNaN(this.number)) {\n str = '\\\\mathrm{NaN}';\n } else {\n str = str + Number(this.toString(leadSign));\n }\n return(str);\n }\n\n // Format as a root MathML element.\n toMathML(leadSign) {\n return(\"\" + this.toString() + \"\");\n }\n}\n\n\n\n\n\n \n\n\n\n","/*!\n * BTM JavaScript Library v@VERSION\n * https://github.com/dbrianwalton/BTM\n *\n * Copyright D. Brian Walton\n * Released under the MIT license (https://opensource.org/licenses/MIT)\n *\n * Date: @DATE\n */\n\n/* *******************************\n** Define a class to work with rational numbers\n******************************* */\n\nimport { real_number } from \"./real_number.js\";\n\n/* Private utility commands. */\n \nfunction isInt(x) {\n var retValue = false;\n if (Number.isInteger === undefined) {\n retValue = (x == Math.floor(x));\n } else {\n retValue = Number.isInteger(x);\n }\n return retValue;\n}\n\n\n // Implement Euclid's algorithm.\n export function findGCD(a,b) {\n var c;\n a = Math.abs(a);\n b = Math.abs(b);\n if (a < b) {\n c=a; a=b; b=c;\n }\n\n if (b == 0)\n return 0;\n\n // In this loop, we always have a > b.\n while (b > 0) {\n c = a % b;\n a = b;\n b = c;\n }\n return a;\n}\n\nexport class rational_number extends real_number {\n constructor(p,q) {\n if (q == undefined) {\n super(p);\n this.p = p;\n this.q = 1;\n } else {\n super(p/q);\n if (q == 0) {\n this.p = Math.sqrt(-1);\n this.q = 1;\n } else if (p == 0) {\n this.p = 0;\n this.q = 1;\n } else {\n if (q < 0) {\n this.p = -p;\n this.q = -q;\n } else {\n this.p = p;\n this.q = q;\n }\n this.simplify();\n }\n }\n }\n\n // Return a numerical value of the rational expression.\n value() {\n return (this.p/this.q);\n }\n \n // Use Euclid's algorithm to find the gcd, then reduce\n simplify() {\n var a;\n\n // Don't simplify if not ratio of integers.\n if (this.p % 1 != 0 || this.q % 1 != 0) {\n return;\n }\n a = findGCD(this.p, this.q);\n this.p /= a;\n this.q /= a;\n }\n\n equal(other) {\n if (other instanceof rational_number) {\n return (this.p.valueOf()==other.p.valueOf()\n && this.q.valueOf() == other.q.valueOf());\n } else {\n return (this.value()==other.value());\n }\n }\n\n // Add to this rational another rational number and create new object.\n add(other) {\n var sum;\n if (other instanceof rational_number) {\n sum = new rational_number(this.p*other.q+other.p*this.q, this.q*other.q);\n } else if (isInt(other)) {\n sum = new rational_number(this.p+other*this.q, this.q);\n } else {\n sum = new real_number(this.value() + other);\n }\n return(sum);\n }\n\n // Subtract from this rational another rational number and create new object.\n subtract(other) {\n var sum;\n if (other instanceof rational_number) {\n sum = new rational_number(this.p*other.q-other.p*this.q, this.q*other.q);\n } else if (isInt(other)) {\n sum = new rational_number(this.p-other*this.q, this.q);\n } else {\n sum = new real_number(this.value() - other);\n }\n return(sum);\n }\n\n // Multiply this rational by another rational number and create new object.\n multiply(other) {\n var product;\n if (other instanceof rational_number) {\n product = new rational_number(this.p*other.p, this.q*other.q);\n } else if (isInt(other)) {\n product = new rational_number(this.p*other, this.q);\n } else {\n product = new real_number(this.value() * other);\n }\n\n return(product);\n }\n\n // Divide this rational by another rational number and create new object.\n divide(other) {\n var product;\n if (other instanceof rational_number) {\n product = new rational_number(this.p*other.q, this.q*other.p);\n } else if (isInt(other)) {\n product = new rational_number(this.p, this.q*other);\n } else {\n product = new real_number(this.value() / other);\n }\n\n return(product);\n }\n\n // Additive Inverse\n addInverse() {\n var inverse = new rational_number(-this.p, this.q);\n return(inverse);\n }\n\n // Multiplicative Inverse\n multInverse() {\n var inverse;\n if (this.p != 0) {\n inverse = new rational_number(this.q, this.p);\n } else {\n inverse = new real_number(NaN);\n }\n return(inverse);\n }\n\n // Format the rational number as string.\n toString(leadSign) {\n if (typeof leadSign == 'undefined') {\n leadSign = false;\n }\n var str = (leadSign && this.p>0) ? '+' : '';\n if (isNaN(this.p)) {\n str = 'NaN';\n } else if (this.q == 1) {\n str = str + this.p;\n } else {\n str = str + this.p + '/' + this.q;\n }\n\n return(str);\n }\n\n // Format the rational number as TeX string.\n toTeX(leadSign) {\n if (typeof leadSign == 'undefined') {\n leadSign = false;\n }\n var str = (leadSign && this.p>0) ? '+' : '';\n if (isNaN(this.p)) {\n str = '\\\\mathrm{NaN}';\n } else if (this.q == 1) {\n str = str + this.p;\n } else {\n if (this.p < 0) {\n str = '-\\\\frac{' + -this.p + '}{' + this.q + '}';\n } else {\n str = str + '\\\\frac{' + this.p + '}{' + this.q + '}';\n }\n }\n\n return(str);\n }\n\n toMathML() {\n if (typeof leadSign == 'undefined') {\n leadSign = false;\n }\n var opAStr = \"\" + this.p + \"\",\n opBStr = \"\" + this.q + \"\";\n\n return(\"\" + this.toString() + \"\");\n\n if (isNaN(this.p)) {\n str = \"?\";\n } else if (this.q == 1) {\n str = opAStr;\n } else {\n str = \"\"+opAStr+opBStr+\"\";\n }\n }\n}\n\n\n\n\n\n \n\n\n\n","/*!\n * BTM JavaScript Library v@VERSION\n * https://github.com/dbrianwalton/BTM\n *\n * Copyright D. Brian Walton\n * Released under the MIT license (https://opensource.org/licenses/MIT)\n *\n * Date: @DATE\n */\n\n/* ***************************************************\n* Define the Multi-Operand Expression (for sum and product)\n* *************************************************** */\n\nimport { exprType, opPrec } from \"./BTM_root.js\"\nimport { expression } from \"./expression.js\"\nimport { create_scalar } from \"./scalar_expr.js\"\nimport { rational_number } from \"./rational_number.js\"\n\n// Do some preliminary testing to reduce the op if redundant inputs.\nexport function create_multiop(menv, op, inputs) {\n var newInputs = [];\n for (let i in inputs) {\n if (inputs[i].type == exprType.multiop && inputs[i].op == op) {\n newInputs.push(...inputs[i].inputs);\n } else {\n newInputs.push(inputs[i]);\n }\n }\n return new multiop_expr(menv, op, newInputs);\n}\n\nexport class multiop_expr extends expression {\n constructor(menv, op, inputs) {\n super(menv);\n this.type = exprType.multiop;\n this.op = op;\n this.inputs = inputs; // an array\n for (var i in inputs) {\n if (typeof inputs[i] == 'undefined')\n inputs[i] = new expression(menv);\n inputs[i].parent = this;\n }\n switch (op) {\n case '+':\n this.prec = opPrec.addsub;\n break;\n case '*':\n this.prec = opPrec.multdiv;\n break;\n default:\n alert(\"Unknown multi-operand operator: '\"+op+\"'.\");\n break;\n }\n }\n\n toString() {\n var theStr,\n opStr,\n isError = false,\n showOp;\n\n theStr = '';\n for (var i in this.inputs) {\n showOp = true;\n if (typeof this.inputs[i] == 'undefined') {\n opStr = '?';\n isError = true;\n } else {\n opStr = this.inputs[i].toString();\n if ((this.inputs[i].type >= exprType.unop\n && this.inputs[i].prec <= this.prec)\n || (this.inputs[i].type == exprType.number\n && this.inputs[i].number.q != 1\n && opPrec.multdiv <= this.prec)\n ) {\n opStr = '(' + opStr + ')';\n }\n }\n theStr += ( i>0 ? this.op : '' ) + opStr;\n }\n\n return(theStr);\n }\n\n // Return an array containing all tested equivalent strings.\n allStringEquivs() {\n var allInputsArrays = [];\n\n var indexList = [];\n for (var i in this.inputs) {\n allInputsArrays[i] = this.inputs[i].allStringEquivs();\n indexList.push(i);\n }\n var inputPerms = permutations(indexList);\n\n var retValue = [];\n\n var theOp = this.op;\n if (theOp == '|') {\n // Don't want \"or\" to be translated as absolute value\n theOp = ' $ ';\n }\n\n function buildStringEquivs(indexList, leftStr) {\n if (typeof leftStr == \"undefined\") {\n leftStr = \"\";\n } else if (indexList.length > 0) {\n leftStr += theOp;\n }\n if (indexList.length > 0) {\n var workInputs = allInputsArrays[indexList[0]];\n for (var i in workInputs) {\n buildStringEquivs(indexList.slice(1), leftStr + \"(\" + workInputs[i] + \")\");\n }\n } else {\n retValue.push(leftStr);\n }\n }\n\n for (var i in inputPerms) {\n buildStringEquivs(inputPerms[i]);\n }\n\n return(retValue);\n }\n\n toTeX(showSelect) {\n var theStr;\n var theOp;\n var opStr;\n var argStrL, argStrR, opStrL, opStrR;\n\n if (typeof showSelect == 'undefined') {\n showSelect = false;\n }\n\n theOp = this.op;\n if (this.op == '*') {\n if (showSelect && this.select) {\n theOp = '\\\\times';\n } else {\n theOp = ' ';\n }\n }\n\n if (showSelect && this.select) {\n argStrL = '{\\\\color{blue}';\n argStrR = '}';\n opStrL = '{\\\\color{red}';\n opStrR = '}';\n } else {\n argStrL = '';\n argStrR = '';\n opStrL = '';\n opStrR = '';\n }\n\n theStr = '';\n var minPrec = this.prec;\n for (var i in this.inputs) {\n if (typeof this.inputs[i] == 'undefined') {\n opStr = '?';\n theStr += ( i>0 ? opStrL + theOp + opStrR : '' ) + opStr;\n } else {\n if (this.op == '*'\n && this.inputs[i].type == exprType.unop && this.inputs[i].op == '/'\n && !(showSelect && this.select))\n {\n opStr = argStrL + this.inputs[i].inputs[0].toTeX(showSelect) + argStrR;\n if (this.inputs[i].inputs[0].type >= exprType.unop && this.inputs[i].inputs[0].prec < minPrec) {\n opStr = '\\\\left(' + opStr + '\\\\right)';\n }\n if (theStr == '') {\n theStr = '1'\n }\n theStr = '\\\\frac{' + theStr + '}{' + opStr + '}';\n\n } else if (this.op == '+'\n && this.inputs[i].type == exprType.unop && this.inputs[i].op == '-'\n && !(showSelect && this.select))\n {\n opStr = argStrL + this.inputs[i].toTeX(showSelect) + argStrR;\n theStr += opStr;\n } else {\n opStr = argStrL + this.inputs[i].toTeX(showSelect) + argStrR;\n if ((this.inputs[i].type >= exprType.unop\n && this.inputs[i].prec <= minPrec)\n || (i>0 && this.op == '*' && this.inputs[i].type == exprType.number)) {\n opStr = '\\\\left(' + opStr + '\\\\right)';\n }\n theStr += ( i>0 ? opStrL + theOp + opStrR : '' ) + opStr;\n }\n }\n }\n\n return(theStr);\n }\n\n toMathML() {\n var theStr;\n var theOp;\n var opStr;\n\n switch (this.op) {\n case '+':\n theOp = \"\"\n break;\n case '*':\n theOp = \"\"\n break;\n }\n\n theStr = \"\" + theOp;\n for (var i in this.inputs) {\n if (typeof this.inputs[i] == 'undefined') {\n opStr = '?';\n } else {\n opStr = this.inputs[i].toMathML();\n }\n theStr += opStr;\n }\n theStr += \"\";\n\n return(theStr);\n }\n\n operateToTeX() {\n var opString = this.op;\n\n switch (opString) {\n case '*':\n opString = '\\\\times';\n break;\n }\n\n return(opString);\n }\n\n isCommutative() {\n var commutes = false;\n if (this.op === '+' || this.op === '*') {\n commutes = true;\n }\n return(commutes);\n }\n\n evaluate(bindings) {\n var inputVal;\n var i;\n var retVal;\n\n switch (this.op) {\n case '+':\n retVal = 0;\n for (i in this.inputs) {\n inputVal = this.inputs[i].evaluate(bindings);\n retVal += inputVal;\n }\n break;\n case '*':\n retVal = 1;\n for (i in this.inputs) {\n inputVal = this.inputs[i].evaluate(bindings);\n retVal *= inputVal;\n }\n break;\n default:\n console.log(\"The binary operator '\" + this.op + \"' is not defined.\");\n retVal = undefined;\n break;\n }\n return(retVal);\n }\n\n // Flatten and also sort terms.\n flatten() {\n var newInputs = [];\n for (var i in this.inputs) {\n var nextInput = this.inputs[i].flatten();\n if (nextInput.type == exprType.multiop && nextInput.op == this.op) {\n for (var j in nextInput.inputs) {\n newInputs.push(nextInput.inputs[j]);\n }\n } else {\n newInputs.push(nextInput);\n }\n }\n\n var retValue;\n if (newInputs.length == 0) {\n // Adding no elements = 0\n // Multiplying no elements = 1\n retValue = create_scalar(this.menv, this.op == '+' ? 0 : 1);\n } else if (newInputs.length == 1) {\n retValue = newInputs[0];\n } else {\n // Sort the inputs by precedence for products\n // Usually very small, so bubble sort is good enough\n if (this.op=='*') {\n var tmp;\n for (var i=0; i newInputs[j].type) {\n tmp = newInputs[i];\n newInputs[i] = newInputs[j];\n newInputs[j] = tmp;\n }\n }\n }\n }\n retValue = create_multiop(this.menv, this.op, newInputs);\n }\n return(retValue);\n }\n\n // See if this operator is now redundant.\n // Return the resulting expression.\n reduce() {\n var workExpr = super.reduce();\n var newExpr = workExpr;\n if (workExpr.type == exprType.multiop && workExpr.inputs.length <= 1) {\n if (workExpr.inputs.length == 0) {\n // Sum with no elements = 0\n // Product with no elements = 1\n newExpr = create_scalar(this.menv, workExpr.op == '+' ? 0 : 1);\n } else {\n // Sum or product with one element *is* that element.\n newExpr = workExpr.inputs[0];\n }\n newExpr.parent = this.parent;\n if (this.parent !== null) {\n this.parent.inputSubst(this, newExpr);\n }\n }\n return(newExpr);\n }\n\n simplifyConstants() {\n var constIndex = [],\n newInputs = [];\n // Simplify all inputs\n // Notice which inputs are themselves constant \n for (let i in this.inputs) {\n this.inputs[i] = this.inputs[i].simplifyConstants();\n this.inputs[i].parent = this;\n if (this.inputs[i].type == exprType.number ||\n (this.inputs[i].type == exprType.unop && this.inputs[i].inputs[0].type == exprType.number)\n ) {\n constIndex.push(i);\n } else {\n newInputs.push(this.inputs[i]);\n }\n }\n\n // For all inputs that are constants, group them together and simplify.\n var newExpr = this;\n if (constIndex.length > 1) {\n var newConstant;\n switch (this.op) {\n case '+':\n newConstant = new rational_number(0);\n for (let i in constIndex) {\n if (this.inputs[constIndex[i]].type == exprType.number) {\n newConstant = newConstant.add(this.inputs[constIndex[i]].number);\n } else if (this.inputs[constIndex[i]].type == exprType.unop) {\n switch (this.inputs[constIndex[i]].op) {\n case '+':\n case '*':\n newConstant = newConstant.add(this.inputs[constIndex[i]].inputs[0].number);\n break;\n case '-':\n newConstant = newConstant.subtract(this.inputs[constIndex[i]].inputs[0].number);\n break;\n case '/':\n newConstant = newConstant.add(this.inputs[constIndex[i]].inputs[0].number.multInverse());\n break;\n }\n }\n }\n break;\n case '*':\n newConstant = new rational_number(1);\n for (let i in constIndex) {\n if (this.inputs[constIndex[i]].type == exprType.number) {\n newConstant = newConstant.multiply(this.inputs[constIndex[i]].number);\n } else if (this.inputs[constIndex[i]].type == exprType.unop) {\n switch (this.inputs[constIndex[i]].op) {\n case '+':\n case '*':\n newConstant = newConstant.multiply(this.inputs[constIndex[i]].inputs[0].number);\n break;\n case '-':\n newConstant = newConstant.multiply(this.inputs[constIndex[i]].inputs[0].number.addInverse());\n break;\n case '/':\n newConstant = newConstant.divide(this.inputs[constIndex[i]].inputs[0].number);\n break;\n }\n }\n }\n break;\n }\n\n // For addition, the constant goes to the end.\n // For multiplication, the constant goes to the beginning.\n var newInput;\n switch (this.op) {\n case '+':\n newInputs.push(newInput = create_scalar(this.menv, newConstant));\n break;\n case '*':\n newInputs.splice(0, 0, newInput = create_scalar(this.menv, newConstant));\n break;\n }\n if (newInputs.length == 1) {\n newExpr = newInputs[0];\n } else {\n newInput.parent = this;\n newExpr = create_multiop(this.menv, this.op, newInputs);\n }\n }\n return(newExpr);\n }\n\n // This comparison routine needs to deal with two issues.\n // (1) The passed expression has more inputs than this (in which case we group them)\n // (2) Possibility of commuting makes the match work.\n match(expr, bindings) {\n function copyBindings(bindings)\n {\n var retValue = {};\n for (var key in bindings) {\n retValue[key] = bindings[key];\n }\n return(retValue);\n }\n\n var retValue = null,\n n = this.inputs.length;\n if ((expr.type == exprType.multiop || expr.type == exprType.binop)\n && this.op == expr.op && n <= expr.inputs.length) {\n\n // Match on first n-1 and group remainder at end.\n var cmpExpr,\n cmpInputs = [];\n\n for (var i=0; i 0) {\n this.derivs = name.slice(primePos).length;\n }\n\n this.isConst = false;\n this.isSpecial = false;\n switch(this.name) {\n case 'e':\n case 'pi':\n case 'dne':\n case 'inf':\n this.isConst = true;\n this.isSpecial = true;\n break;\n }\n }\n\n toString(elementOnly) {\n if (typeof elementOnly == 'undefined') {\n elementOnly = false;\n }\n return(this.name);\n }\n\n // Return an array containing all tested equivalent strings.\n allStringEquivs() {\n return([this.toString()]);\n }\n\n toTeX(showSelect) {\n if (typeof showSelect == 'undefined') {\n showSelect = false;\n }\n var str = this.toString();\n\n switch (this.name) {\n case 'alpha':\n case 'beta':\n case 'gamma':\n case 'delta':\n case 'epsilon':\n case 'zeta':\n case 'eta':\n case 'theta':\n case 'kappa':\n case 'lambda':\n case 'mu':\n case 'nu':\n case 'xi':\n case 'pi':\n case 'rho':\n case 'sigma':\n case 'tau':\n case 'upsilon':\n case 'phi':\n case 'chi':\n case 'psi':\n case 'omega':\n case 'Gamma':\n case 'Delta':\n case 'Theta':\n case 'Lambda':\n case 'Xi':\n case 'Pi':\n case 'Sigma':\n case 'Upsilon':\n case 'Phi':\n case 'Psi':\n case 'Omega':\n str = '\\\\' + this.name;\n break;\n case 'inf':\n str = '\\\\infty';\n break;\n default:\n if (this.isSpecial) {\n str = '\\\\mathrm{' + this.name + '}';\n }\n break;\n }\n if (this.name.indexOf(\"input\")==0) {\n str = \"\\\\boxed{\\\\dots?^{\" + this.name.slice(5) + \"}}\";\n }\n\n if (showSelect && this.select) {\n str = \"{\\\\color{red}\" + str + \"}\";\n }\n return(str);\n }\n\n dependencies(forced) {\n var depArray = new Array();\n if (forced != undefined) {\n for (var i=0; i 1) {\n alert(\"An array reference can only have one index variable.\");\n } else {\n this.k = depArray[0];\n }\n }\n\n toString(elementOnly) {\n if (typeof elementOnly == 'undefined') {\n elementOnly = false;\n }\n return(this.name + \"[\" + this.index.toString() + \"]\");\n }\n\n toTeX(showSelect) {\n if (typeof showSelect == 'undefined') {\n showSelect = false;\n }\n word = this.name + \"_{\" + this.index.toString() + \"}\";\n if (showSelect && this.select) {\n word = \"{\\\\color{red}\" + word + \"}\";\n }\n return(word);\n }\n\n toMathML() {\n return(\"\" + this.name + \"\" + this.index.toString() + \"\");\n }\n\n dependencies(forced) {\n var depArray = new Array();\n if (forced != undefined) {\n for (var i=0; i= 0 && i 0) {\n this.name = name.slice(0,primePos);\n this.derivs = name.slice(primePos).length;\n } else {\n this.name = name;\n }\n if (typeof inputExpr == 'undefined')\n inputExpr = new expression();\n this.inputs = [inputExpr];\n inputExpr.parent = this;\n this.domain = restrictDomain;\n\n this.alternate = null;\n this.builtin = true;\n switch(this.name) {\n case 'asin':\n case 'acos':\n case 'atan':\n case 'asec':\n case 'acsc':\n case 'acot':\n this.name = 'arc'+this.name.slice(1,4);\n break;\n case 'log':\n this.name = 'ln';\n break;\n case 'sin':\n case 'cos':\n case 'tan':\n case 'csc':\n case 'sec':\n case 'cot':\n case 'arcsin':\n case 'arccos':\n case 'arctan':\n case 'arcsec':\n case 'arccsc':\n case 'arccot':\n case 'sqrt':\n case 'root':\n case 'abs':\n case 'exp':\n case 'expb':\n case 'ln':\n case 'log10':\n break;\n default:\n this.builtin = false;\n break;\n }\n // If using a derivative of a known function, then we should compute that in advance.\n if (this.builtin && this.derivs > 0) {\n var xvar = new variable_expr(this.menv, \"x\");\n var deriv = new function_expr(this.menv, this.name, xvar);\n for (var i=0; i 1) {\n fcnString = '\\\\mathrm{' + this.name + '}';\n } else {\n fcnString = this.name;\n }\n break;\n }\n if (this.derivs > 0) {\n if (this.derivs <= 3) {\n fcnString = fcnString + \"'\".repeat(this.derivs);\n } else {\n fcnString = fcnString + \"^{(\"+this.derivs+\")}\";\n }\n }\n\n if (showSelect && this.select) {\n fcnString = \"\\\\color{red}{\" + fcnString + \"}\";\n texString = '';\n }\n if (texString == '') {\n texString = fcnString + ' \\\\mathopen{}\\\\left(' + argStrings.join(',') + '\\\\right)\\\\mathclose{}';\n }\n return(texString);\n }\n\n toMathML() {\n var texString;\n var argString;\n if (typeof this.inputs[0] == 'undefined') {\n argString = '?';\n } else {\n argString = this.inputs[0].toMathML();\n }\n switch(this.name) {\n case 'sin':\n case 'cos':\n case 'tan':\n case 'csc':\n case 'sec':\n case 'cot':\n case 'arcsin':\n case 'arccos':\n case 'arctan':\n case 'exp':\n case 'expb':\n case 'ln':\n case 'abs':\n texString = '<' + this.name + '/>' + argString + '';\n break;\n case 'sqrt':\n texString = '' + argString + '';\n break;\n case 'log10':\n texString = '10' + argString + '';\n break;\n default:\n texString = '' + this.name + '' + argString + '';\n break;\n }\n return(texString);\n }\n\n operateToTeX() {\n var fcnString;\n switch(this.name) {\n case 'sin':\n fcnString = '\\\\sin';\n break;\n case 'cos':\n fcnString = '\\\\cos';\n break;\n case 'tan':\n fcnString = '\\\\tan';\n break;\n case 'csc':\n fcnString = '\\\\csc';\n break;\n case 'sec':\n fcnString = '\\\\sec';\n break;\n case 'cot':\n fcnString = '\\\\cot';\n break;\n case 'arcsin':\n fcnString = '\\\\sin^{-1}';\n break;\n case 'arccos':\n fcnString = '\\\\cos^{-1}';\n break;\n case 'arctan':\n fcnString = '\\\\tan^{-1}';\n break;\n case 'arccsc':\n fcnString = '\\\\csc^{-1}';\n break;\n case 'arcsec':\n fcnString = '\\\\sec^{-1}';\n break;\n case 'arccot':\n fcnString = '\\\\cot^{-1}';\n break;\n case 'sqrt':\n fcnString = '\\\\mathrm{sqrt}';\n break;\n case 'abs':\n fcnString = '\\\\abs';\n break;\n case 'exp':\n case 'expb':\n fcnString = '\\\\exp';\n break;\n case 'ln':\n fcnString = '\\\\ln'\n break;\n case 'log10':\n fcnString = '\\\\log_{10}'\n break;\n default:\n if (this.name.length > 1) {\n fcnString = '\\\\mathrm{' + this.name + '}';\n } else {\n fcnString = this.name;\n }\n break;\n }\n if (this.derivs > 0) {\n if (this.derivs <= 3) {\n fcnString = fcnString + \"'\".repeat(this.derivs);\n } else {\n fcnString = fcnString + \"^{(\"+this.derivs+\")}\";\n }\n }\n\n return(fcnString+\"(\\\\Box)\");\n }\n\n evaluate(bindings) {\n var inputVal = this.inputs[0].evaluate(bindings);\n var retVal = undefined;\n\n if (inputVal == undefined) {\n return(undefined);\n }\n\n // Built-in functions with derivatives have computed derivative earlier.\n if (this.builtin && this.derivs > 0) {\n if (this.alternate != undefined) {\n retVal = this.alternate.evaluate(bindings);\n } else {\n console.log(\"Error: Built-in function called with unspecified derivative formula.\");\n }\n } else {\n if (bindings[this.name] == undefined) {\n // Check the list of common mathematical functions.\n switch(this.name) {\n case 'sin':\n retVal = Math.sin(inputVal);\n break;\n case 'cos':\n retVal = Math.cos(inputVal);\n break;\n case 'tan':\n retVal = Math.tan(inputVal);\n break;\n case 'csc':\n retVal = 1/Math.sin(inputVal);\n break;\n case 'sec':\n retVal = 1/Math.cos(inputVal);\n break;\n case 'cot':\n retVal = 1/Math.tan(inputVal);\n break;\n case 'arcsin':\n if (Math.abs(inputVal) <= 1) {\n retVal = Math.asin(inputVal);\n }\n break;\n case 'arccos':\n if (Math.abs(inputVal) <= 1) {\n retVal = Math.acos(inputVal);\n }\n break;\n case 'arctan':\n retVal = Math.atan(inputVal);\n break;\n case 'arccsc':\n if (Math.abs(inputVal) >= 1) {\n retVal = Math.asin(1/inputVal);\n }\n break;\n case 'arcsec':\n if (Math.abs(inputVal) >= 1) {\n retVal = Math.acos(1/inputVal);\n }\n break;\n case 'arccot':\n if (inputVal == 0) {\n retVal = Math.PI/2;\n } else {\n retVal = Math.PI/2 - Math.atan(1/inputVal);\n }\n break;\n case 'sqrt':\n if (inputVal >= 0) {\n retVal = Math.sqrt(inputVal);\n }\n break;\n case 'abs':\n retVal = Math.abs(inputVal);\n break;\n case 'exp':\n case 'expb':\n retVal = Math.exp(inputVal);\n break;\n case 'ln':\n if (inputVal > 0) {\n retVal = Math.log(inputVal);\n }\n break;\n case 'log10':\n if (inputVal > 0) {\n retVal = Math.LOG10E * Math.log(inputVal);\n }\n break;\n default:\n // See if we have already used this function.\n // For consistency, we should keep it the same.\n var functionEntry = this.menv.functions[this.name];\n // If never used previously, generate a random function.\n // This will allow valid comparisons to occur.\n if (functionEntry == undefined) {\n console.log(\"Error: A custom function never had a backend definition.\");\n }\n // Copy the bindings.\n var fBind = {};\n Object.keys(bindings).forEach(function(key) {\n fBind[ key ] = bindings[ key ];\n });\n // Now, use the variable of the function.\n var inVar = functionEntry[\"input\"];\n if (Array.isArray(inVar)) {\n console.log(\"Error: Function is defined to expect multiple inputs. Not yet implemented.\");\n }\n fBind[inVar] = inputVal;\n // See if we need additional derivatives in binding\n if (this.derivs >= functionEntry[\"value\"].length) {\n var ivar = new variable_expr(this.menv, inVar);\n var varBind = {};\n varBind[ivar] = 0;\n for (var i=functionEntry[\"value\"].length; i <= this.derivs; i++) {\n functionEntry[\"value\"][i] = functionEntry[\"value\"][i-1].derivative(ivar, varBind);\n }\n }\n retVal = functionEntry[\"value\"][this.derivs].evaluate(fBind);\n break;\n }\n } else {\n var functionEntry = bindings[this.name];\n // Copy the bindings.\n var fBind = {};\n Object.keys(bindings).forEach(function(key) {\n fBind[ key ] = bindings[ key ];\n });\n // Now, use the variable of the function.\n var inVar = functionEntry[\"input\"];\n if (Array.isArray(inVar)) {\n console.log(\"Error: Function is defined to expect multiple inputs. Not yet implemented.\");\n }\n fBind[inVar] = inputVal;\n // See if we need additional derivatives in binding\n if (this.derivs >= functionEntry[\"value\"].length) {\n var ivar = new variable_expr(this.menv, inVar);\n var varBind = {};\n varBind[ivar] = 0;\n for (var i=functionEntry[\"value\"].length; i <= this.derivs; i++) {\n functionEntry[\"value\"][i] = functionEntry[\"value\"][i-1].derivative(ivar, varBind);\n }\n }\n retVal = functionEntry[\"value\"][this.derivs].evaluate(fBind);\n }\n }\n return(retVal);\n }\n\n flatten() {\n return(new function_expr(this.menv, this.getName(), this.inputs[0].flatten()));\n }\n\n copy() {\n return(new function_expr(this.menv, this.getName(), this.inputs[0].copy()));\n }\n\n compose(bindings) {\n return(new function_expr(this.menv, this.getName(), this.inputs[0].compose(bindings)));\n }\n\n derivative(ivar, varList) {\n var theDeriv;\n var depArray = this.inputs[0].dependencies();\n var uConst = true;\n var ivarName = (typeof ivar == 'string') ? ivar : ivar.name;\n for (var i=0; i= exprType.unop\n && this.inputs[0].prec < this.prec)\n || (this.inputs[0].type == exprType.number\n && opAStr.indexOf(\"/\") >= 0\n && opPrec.multdiv <= this.prec)\n ) \n {\n opAStr = '(' + opAStr + ')';\n }\n }\n if (typeof this.inputs[1] == 'undefined') {\n opBStr = '?';\n isError = true;\n } else {\n opBStr = this.inputs[1].toString();\n if ((this.inputs[1].type >= exprType.unop\n && this.inputs[1].prec <= this.prec)\n || (this.inputs[1].type == exprType.number\n && opBStr.indexOf(\"/\") >= 0\n && opPrec.multdiv <= this.prec)\n ) \n {\n opBStr = '(' + opBStr + ')';\n }\n }\n\n var theOp = this.op;\n if (theOp == '|') {\n theOp = ' $ ';\n }\n\n theStr = opAStr + theOp + opBStr;\n return(theStr);\n }\n\n // Return an array containing all tested equivalent strings.\n allStringEquivs() {\n var allInputsA = this.inputs[0].allStringEquivs(),\n allInputsB = this.inputs[1].allStringEquivs();\n\n var retValue = [];\n\n var theOp = this.op;\n if (theOp == '|') {\n theOp = ' $ ';\n }\n\n for (var i in allInputsA) {\n for (var j in allInputsB) {\n opAStr = allInputsA[i];\n if (this.inputs[0].type >= exprType.unop && this.inputs[0].prec < this.prec) {\n opAStr = '(' + opAStr + ')';\n }\n opBStr = allInputsB[j];\n if (this.inputs[1].type >= exprType.unop && this.inputs[1].prec <= this.prec) {\n opBStr = '(' + opBStr + ')';\n }\n\n retValue.push(opAStr + theOp + opBStr);\n\n if (this.op == '+' || this.op == '*' || this.op == '&' || this.op == '$') {\n opBStr = allInputsB[j];\n if (this.inputs[1].type >= exprType.unop && this.inputs[1].prec < this.prec) {\n opBStr = '(' + opBStr + ')';\n }\n opAStr = allInputsA[i];\n if (this.inputs[0].type >= exprType.unop && this.inputs[0].prec <= this.prec) {\n opAStr = '(' + opAStr + ')';\n }\n retValue.push(opBStr + theOp + opAStr);\n }\n }\n }\n\n return(retValue);\n }\n\n toTeX(showSelect) {\n var theStr;\n var theOp;\n var opAStr, opBStr;\n\n if (typeof showSelect == 'undefined') {\n showSelect = false;\n }\n\n if (typeof this.inputs[0] == 'undefined') {\n opAStr = '?';\n } else {\n opAStr = this.inputs[0].toTeX(showSelect);\n }\n if (typeof this.inputs[1] == 'undefined') {\n opBStr = '?';\n } else {\n opBStr = this.inputs[1].toTeX(showSelect);\n }\n theOp = this.op;\n if (showSelect && this.select) {\n switch (theOp) {\n case '*':\n theOp = '\\\\cdot ';\n break;\n case '/':\n theOp = '\\\\div ';\n break;\n case '^':\n theOp = '\\\\wedge ';\n break;\n case '|':\n theOp = '\\\\hbox{ or }';\n break;\n case '$':\n theOp = '\\\\hbox{ or }';\n break;\n case '&':\n theOp = '\\\\hbox{ and }';\n break;\n }\n } else {\n switch (theOp) {\n case '*':\n if (this.inputs[1] && this.inputs[1].type == exprType.number) {\n theOp = '\\\\cdot ';\n } else if (this.inputs[1] && this.inputs[1].type == exprType.binop\n && this.inputs[1].op=='^' && this.inputs[1].inputs[0].type==exprType.number) {\n theOp = '\\\\cdot ';\n } else {\n theOp = ' ';\n }\n break;\n case '|':\n theOp = '\\\\hbox{ or }';\n break;\n case '$':\n theOp = '\\\\hbox{ or }';\n break;\n case '&':\n theOp = '\\\\hbox{ and }';\n break;\n }\n }\n if (theOp == '/') {\n theStr = '\\\\frac{' + opAStr + '}{' + opBStr + '}';\n } else if (theOp == '^') {\n if (this.inputs[0] && this.inputs[0].type >= exprType.fcn) {\n theStr = '\\\\left(' + opAStr + '\\\\right)';\n } else {\n theStr = opAStr;\n }\n theStr += theOp + '{' + opBStr + '}';\n } else {\n var argStrL='', argStrR='', opStrL='', opStrR='';\n\n if (showSelect && this.select) {\n argStrL = '{\\\\color{blue}';\n argStrR = '}';\n opStrL = '{\\\\color{red}';\n opStrR = '}';\n }\n if (this.inputs[0] && this.inputs[0].type >= exprType.unop && this.inputs[0].prec < this.prec) {\n theStr = '\\\\left(' + argStrL + opAStr + argStrR + '\\\\right)';\n } else {\n theStr = argStrL + opAStr + argStrR;\n }\n theStr += opStrL + theOp + opStrR;\n if (this.inputs[1] && this.inputs[1].type >= exprType.unop && this.inputs[1].prec <= this.prec) {\n theStr += '\\\\left(' + argStrL + opBStr + argStrR + '\\\\right)';\n } else {\n theStr += argStrL + opBStr + argStrR;\n }\n }\n if (showSelect && this.select) {\n theStr = \"{\\\\color{red}\\\\boxed{\" + theStr + \"}}\";\n }\n theStr = theStr.replace(/\\+-/g, '-');\n return(theStr);\n }\n\n toMathML() {\n var theStr;\n var theOp;\n var opAStr, opBStr;\n\n if (typeof this.inputs[0] == 'undefined') {\n opAStr = '?';\n } else {\n opAStr = this.inputs[0].toMathML();\n }\n if (typeof this.inputs[1] == 'undefined') {\n opBStr = '?';\n } else {\n opBStr = this.inputs[1].toMathML();\n }\n switch (this.op) {\n case '+':\n theOp = \"\"\n break;\n case '-':\n theOp = \"\"\n break;\n case '*':\n theOp = \"\"\n break;\n case '/':\n theOp = \"\"\n break;\n case '^':\n theOp = \"\"\n break;\n }\n theStr = \"\" + theOp + opAStr + opBStr + \"\";\n\n return(theStr);\n }\n\n operateToTeX() {\n var opString = this.op;\n\n switch (opString) {\n case '*':\n opString = '\\\\times ';\n break;\n case '/':\n opString = '\\\\div ';\n break;\n case '^':\n opString = '\\\\wedge ';\n break;\n case '|':\n opString = '\\\\hbox{ or }';\n break;\n case '$':\n opString = '\\\\hbox{ or }';\n break;\n case '&':\n opString = '\\\\hbox{ and }';\n break;\n }\n\n return(opString);\n }\n\n isCommutative() {\n var commutes = false;\n if (this.op === '+' || this.op === '*') {\n commutes = true;\n }\n return(commutes);\n }\n\n evaluate(bindings) {\n var inputAVal = this.inputs[0].evaluate(bindings);\n var inputBVal = this.inputs[1].evaluate(bindings);\n\n if (inputAVal == undefined || inputBVal == undefined) {\n return(undefined);\n }\n\n var retVal = undefined;\n switch (this.op) {\n case '+':\n retVal = inputAVal + inputBVal;\n break;\n case '-':\n retVal = inputAVal - inputBVal;\n break;\n case '*':\n retVal = inputAVal * inputBVal;\n break;\n case '/':\n retVal = inputAVal / inputBVal;\n break;\n case '^':\n if (!this.inputs[1].isConstant()) {\n retVal = Math.exp(inputBVal * Math.log(inputAVal));\n } else {\n if (inputAVal >= 0 || (inputBVal % 1 == 0)) {\n retVal = Math.pow(inputAVal,inputBVal);\n } else {\n retVal = Math.exp(inputBVal * Math.log(inputAVal));\n }\n }\n break;\n case '=':\n retVal = (Math.abs(inputAVal - inputBVal) < this.menv.options.absTol);\n break;\n case '&':\n retVal = inputAVal && inputBVal;\n break;\n case '|':\n case '$':\n retVal = inputAVal || inputBVal;\n break;\n default:\n console.log(\"The binary operator '\" + this.op + \"' is not defined.\");\n retVal = undefined;\n break;\n }\n return(retVal);\n }\n\n // See if this operator is now redundant.\n // Return the resulting expression.\n reduce() {\n var workExpr = super.reduce();\n var newExpr = workExpr;\n if (workExpr.type == exprType.binop && workExpr.inputs.length <= 1) {\n if (workExpr.inputs.length == 0) {\n // Sum with no elements = 0\n // Product with no elements = 1\n newExpr = create_scalar(this.menv, workExpr.op == '+' ? 0 : 1);\n } else {\n // Sum or product with one element *is* that element.\n newExpr = workExpr.inputs[0];\n }\n newExpr.parent = this.parent;\n if (this.parent !== null) {\n this.parent.inputSubst(this, newExpr);\n }\n }\n return(newExpr);\n }\n\n simplifyConstants() {\n var retVal = this;\n this.inputs[0] = this.inputs[0].simplifyConstants();\n this.inputs[0].parent = this;\n this.inputs[1] = this.inputs[1].simplifyConstants();\n this.inputs[1].parent = this;\n if ((this.inputs[0].type == exprType.number\n || (this.inputs[0].type == exprType.unop && this.inputs[0].inputs[0].type == exprType.number)\n ) &&\n (this.inputs[1].type == exprType.number\n || (this.inputs[1].type == exprType.unop && this.inputs[1].inputs[0].type == exprType.number)\n ))\n {\n var numA, numB, theNumber;\n if (this.inputs[0].type == exprType.number) {\n numA = this.inputs[0].number;\n } else {\n switch (this.inputs[0].op) {\n case '-':\n numA = this.inputs[0].inputs[0].number.addInverse();\n break;\n case '/':\n numA = this.inputs[0].inputs[0].number.multInverse();\n break;\n }\n }\n if (this.inputs[1].type == exprType.number) {\n numB = this.inputs[1].number;\n } else {\n switch (this.inputs[1].op) {\n case '-':\n numB = this.inputs[1].inputs[0].number.addInverse();\n break;\n case '/':\n numB = this.inputs[1].inputs[0].number.multInverse();\n break;\n }\n }\n switch (this.op) {\n case '+':\n theNumber = numA.add(numB);\n break;\n case '-':\n theNumber = numA.subtract(numB);\n break;\n case '*':\n theNumber = numA.multiply(numB);\n break;\n case '/':\n theNumber = numA.divide(numB);\n break;\n case '^':\n // Integer powers of a rational number can be represented exactly.\n if (numA instanceof rational_number && numB instanceof rational_number\n && numB.q == 1 && numB.p % 1 == 0 && numB.p > 0) {\n theNumber = new rational_number(Math.pow(numA.p, numB.p), Math.pow(numA.q, numB.p));\n }\n break;\n }\n if (theNumber !== undefined) {\n if (!this.menv.options.negativeNumbers && theNumber.p < 0) {\n retVal = new unop_expr(this.menv, '-', create_scalar(this.menv, theNumber.multiply(-1)));\n } else {\n retVal = create_scalar(this.menv, theNumber);\n }\n }\n } else {\n switch (this.op) {\n case '+':\n // Simplify 0+a\n if (this.inputs[0].type == exprType.number\n && this.inputs[0].number.value()==0) {\n retVal = this.inputs[1];\n }\n // Simplify a+0\n else if (this.inputs[1].type == exprType.number\n && this.inputs[1].number.value() == 0) {\n retVal = this.inputs[0];\n }\n // Simplify (u+a)+b to u+(a+b)\n else if (this.inputs[1].type == exprType.number\n && this.inputs[0].type == exprType.binop\n && this.inputs[0].op == '+') {\n let in0 = this.inputs[0];\n if (in0.inputs[0].type == exprType.number) {\n retVal = new binop_expr(this.menv, '+',\n create_scalar(this.menv, in0.inputs[0].number.add(this.inputs[1].number)),\n in0.inputs[1].copy()\n );\n } else if (in0.inputs[1].type == exprType.number) {\n retVal = new binop_expr(this.menv, '+',\n in0.inputs[0].copy(),\n create_scalar(this.menv, in0.inputs[1].number.add(this.inputs[1].number)),\n );\n }\n }\n // Simplify a+(u+b) to (a+b)+u\n else if (this.inputs[0].type == exprType.number\n && this.inputs[1].type == exprType.binop\n && this.inputs[1].op == '+') {\n let in1 = this.inputs[1];\n if (in1.inputs[0].type == exprType.number) {\n retVal = new binop_expr(this.menv, '+',\n create_scalar(this.menv, this.inputs[0].number.add(in1.inputs[0].number)),\n in1.inputs[1].copy()\n );\n } else if (in1.inputs[1].type == exprType.number) {\n retVal = new binop_expr(this.menv, '+',\n create_scalar(this.menv, this.inputs[0].number.add(in1.inputs[1].number)),\n in1.inputs[0].copy()\n );\n }\n }\n break;\n case '-':\n // Simplify 0-a\n if (this.inputs[0].type == exprType.number\n && this.inputs[0].number.value()==0) {\n retVal = new unop_expr(this.menv, \"-\", this.inputs[1]);\n }\n // Simplify a-0\n else if (this.inputs[1].type == exprType.number\n && this.inputs[1].number.value() == 0) {\n retVal = this.inputs[0];\n }\n // Simplify u--a\n else if (this.inputs[1].type == exprType.number\n && this.inputs[1].number.value() < 0) {\n retVal = new binop_expr(this.menv, '+',\n this.inputs[0].copy(),\n create_scalar(this.menv, this.inputs[1].number.addInverse())\n );\n }\n break;\n case '*':\n // Simplify 1*a\n if (this.inputs[0].type == exprType.number\n && this.inputs[0].number.value()==1) {\n retVal = this.inputs[1];\n }\n // Simplify a*1\n else if (this.inputs[1].type == exprType.number\n && this.inputs[1].number.value() == 1) {\n retVal = this.inputs[0];\n }\n // Simplify (u*a)*b to (a*b)*u\n else if (this.inputs[1].type == exprType.number\n && this.inputs[0].type == exprType.binop\n && this.inputs[0].op == '*') {\n let in0 = this.inputs[0];\n if (in0.inputs[0].type == exprType.number) {\n retVal = new binop_expr(this.menv, '*',\n create_scalar(this.menv, in0.inputs[0].number.multiply(this.inputs[1].number)),\n in0.inputs[1].copy()\n );\n } else if (in0.inputs[1].type == exprType.number) {\n retVal = new binop_expr(this.menv, '*',\n create_scalar(this.menv, in0.inputs[1].number.multiply(this.inputs[1].number)),\n in0.inputs[0].copy()\n );\n }\n }\n // Simplify a*(u*b) to (a*b)*u\n else if (this.inputs[0].type == exprType.number\n && this.inputs[1].type == exprType.binop\n && this.inputs[1].op == '*') {\n let in1 = this.inputs[1];\n if (in1.inputs[0].type == exprType.number) {\n retVal = new binop_expr(this.menv, '*',\n create_scalar(this.menv, this.inputs[0].number.multiply(in1.inputs[0].number)),\n in1.inputs[1].copy()\n );\n } else if (in1.inputs[1].type == exprType.number) {\n retVal = new binop_expr(this.menv, '*',\n create_scalar(this.menv, this.inputs[0].number.multiply(in1.inputs[1].number)),\n in1.inputs[0].copy()\n );\n }\n }\n break;\n case '/':\n // Simplify 1/a to unary operator of multiplicative inverse.\n if (this.inputs[0].type == exprType.number\n && this.inputs[0].number.value()==1) {\n retVal = new unop_expr(this.menv, \"/\", this.inputs[1]);\n }\n // Simplify a/1\n else if (this.inputs[1].type == exprType.number\n && this.inputs[1].number.value() == 1) {\n retVal = this.inputs[0];\n }\n break;\n case '^':\n // Simplify 0^p\n if (this.inputs[0].type == exprType.number\n && this.inputs[0].number.value()==0) {\n retVal = create_scalar(this.menv, 0);\n }\n // Simplify 1^p\n else if (this.inputs[0].type == exprType.number\n && this.inputs[0].number.value() == 1) {\n retVal = create_scalar(this.menv, 1);\n }\n // Simplify p^1\n else if (this.inputs[1].type == exprType.number\n && this.inputs[1].number.value() == 1) {\n retVal = this.inputs[0];\n }\n break;\n }\n }\n return(retVal);\n }\n\n flatten() {\n var inA = this.inputs[0].flatten();\n var inB = this.inputs[1].flatten();\n\n var retVal;\n switch (this.op) {\n case '+':\n case '-':\n var inputs = [];\n if ((inA.type == exprType.multiop || inA.type == exprType.binop)\n && (inA.op == '+' || inA.op == '-')) \n {\n var newInput = inA.flatten();\n for (var i in newInput.inputs) {\n inputs.push(newInput.inputs[i]);\n }\n } else {\n inputs.push(inA);\n }\n if ((inB.type == exprType.multiop || inB.type == exprType.binop)\n && (inB.op == '+' || inB.op == '-')) \n {\n var newInput = inB.flatten();\n for (var i in newInput.inputs) {\n inputs.push(newInput.inputs[i]);\n }\n } else {\n if (this.op == '-') {\n if ((inB.type == exprType.multiop || inB.type == exprType.binop)\n && (inB.op == '+' || inB.op == '-')) \n {\n var newInput = inB.flatten();\n for (var i in newInput.inputs) {\n inputs.push(new unop_expr(this.menv, '-',newInput.inputs[i]));\n }\n } else {\n inputs.push(new unop_expr(this.menv, '-',inB));\n }\n } else {\n inputs.push(inB);\n }\n }\n retVal = create_multiop(this.menv, '+', inputs);\n break;\n case '*':\n case '/':\n var inputs = [];\n if ((inA.type == exprType.multiop || inA.type == exprType.binop)\n && (inA.op == '*' || inA.op == '/')) \n {\n var newInput = inA.flatten();\n for (var i in newInput.inputs) {\n inputs.push(newInput.inputs[i]);\n }\n } else {\n inputs.push(inA);\n }\n if ((inB.type == exprType.multiop || inB.type == exprType.binop)\n && (inB.op == '*' || inB.op == '/'))\n {\n var newInput = inB.flatten();\n for (var i in newInput.inputs) {\n inputs.push(newInput.inputs[i]);\n }\n } else {\n if (this.op == '/') {\n if ((inB.type == exprType.multiop || inB.type == exprType.binop)\n && (inB.op == '*' || inB.op == '/')) \n {\n var newInput = inB.flatten();\n for (var i in newInput.inputs) {\n inputs.push(new unop_expr(this.menv, '/',newInput.inputs[i]));\n }\n } else {\n inputs.push(new unop_expr(this.menv, '/',inB));\n }\n } else {\n inputs.push(inB);\n }\n }\n retVal = create_multiop(this.menv, '*', inputs);\n break;\n default:\n retVal = new binop_expr(this.menv, this.op, inA, inB);\n }\n return(retVal);\n }\n\n // This comparison routine needs to deal with two issues.\n // (1) The passed expression has more inputs than this (in which case we group them)\n // (2) Possibility of commuting makes the match work.\n match(expr, bindings) {\n function copyBindings(bindings)\n {\n var retValue = {};\n for (var key in bindings) {\n retValue[key] = bindings[key];\n }\n return(retValue);\n }\n\n var retValue = null;\n if ((expr.type == exprType.multiop || expr.type == exprType.binop)\n && this.op == expr.op && 2 <= expr.inputs.length) {\n\n // Match with group at end.\n var cmpExpr,\n cmpInputA, cmpInputB;\n\n cmpInputA = expr.inputs[0].copy();\n if (expr.inputs.length > 2) {\n let newInputs = [];\n for (let j=0; j 0 && powDep.indexOf(ivarName) >= 0) {\n var theArg = new binop_expr(this.menv, '*', this.inputs[1], new function_expr(this.menv, 'log', this.inputs[0]));\n var theFcn = new function_expr(this.menv, 'exp', theArg);\n theDeriv = theFcn.derivative(ivar, varList);\n // Otherwise this is a simple application of the power rule\n } else if (!uConst) {\n var newPow = new binop_expr(this.menv, '-', this.inputs[1], create_scalar(this.menv, 1));\n var dydu = new binop_expr(this.menv, '*', this.inputs[1], new binop_expr(this.menv, '^', this.inputs[0], newPow));\n if (this.inputs[0].type == exprType.variable\n && this.inputs[0].name == ivarName) {\n theDeriv = dydu;\n } else {\n var dudx = this.inputs[0].derivative(ivar, varList);\n theDeriv = new binop_expr(this.menv, '*', dydu, dudx);\n }\n } else {\n theDeriv = create_scalar(this.menv, 0);\n }\n break;\n default:\n console.log(\"The binary operator '\" + this.op + \"' is not defined.\");\n theDeriv = undefined;\n break;\n }\n }\n if (this.menv.options.doFlatten) {\n theDeriv = theDeriv.flatten();\n }\n return(theDeriv);\n }\n}\n","/*!\n * BTM JavaScript Library v@VERSION\n * https://github.com/dbrianwalton/BTM\n *\n * Copyright D. Brian Walton\n * Released under the MIT license (https://opensource.org/licenses/MIT)\n *\n * Date: @DATE\n */\n\n/* ***************************************************\n* Define the Unary Expression -- defined by an operator and an input.\n* *************************************************** */\n\nimport { expression } from \"./expression.js\"\nimport { create_scalar } from \"./scalar_expr.js\"\nimport { binop_expr } from \"./binop_expr.js\"\nimport { exprType, opPrec } from \"./BTM_root.js\"\n\nexport class unop_expr extends expression {\n constructor(menv, op, input) {\n super(menv);\n this.type = exprType.unop;\n this.op = op;\n if (typeof input == 'undefined')\n input = new expression(menv);\n this.inputs = [input];\n input.parent = this;\n switch (op) {\n case '+':\n this.prec = opPrec.multdiv;\n break;\n case '-':\n this.prec = opPrec.multdiv;\n break;\n case '/':\n this.prec = opPrec.power;\n break;\n default:\n alert(\"Unknown unary operator: '\"+op+\"'.\");\n break;\n }\n }\n\n toString() {\n var theStr;\n var opStr;\n\n if (typeof this.inputs[0] == 'undefined') {\n opStr = '?';\n } else {\n opStr = this.inputs[0].toString();\n }\n if ((this.inputs[0].type >= exprType.unop\n && this.inputs[0].prec < this.prec)\n || (this.inputs[0].type == exprType.number\n && opStr.indexOf('/') >= 0\n && opPrec.multdiv <= this.prec)\n ) \n {\n theStr = this.op + '(' + opStr + ')';\n } else {\n theStr = this.op + opStr;\n }\n\n return(theStr);\n }\n\n // Return an array containing all tested equivalent strings.\n allStringEquivs() {\n var allInputs = this.inputs[0].allStringEquivs();\n var retValue = [];\n\n for (var i in allInputs) {\n if (this.inputs[0].type >= exprType.unop && this.inputs[0].prec <= this.prec) {\n retValue[i] = this.op + '(' + allInputs[i] + ')';\n } else {\n retValue[i] = this.op + allInputs[i];\n }\n }\n\n return(retValue);\n }\n\n toTeX(showSelect) {\n var theStr;\n var opStr, theOp;\n\n if (typeof showSelect == 'undefined') {\n showSelect = false;\n }\n\n if (typeof this.inputs[0] == 'undefined') {\n opStr = '?';\n } else {\n opStr = this.inputs[0].toTeX(showSelect);\n }\n\n theOp = this.op;\n if (theOp == '/') {\n theOp = '\\\\div ';\n if (showSelect && this.select) {\n theStr = \"{\\\\color{red}\" + this.op + \"}\"\n + '\\\\left({\\\\color{blue}' + opStr + '}\\\\right)';\n } else {\n theStr = '\\\\frac{1}{' + opStr + '}';\n }\n } else {\n if (showSelect && this.select) {\n theStr = \"{\\\\color{red}\" + this.op + \"}\"\n + '\\\\left({\\\\color{blue}' + opStr + '}\\\\right)';\n } else if (this.inputs[0].type >= exprType.unop && this.inputs[0].prec <= this.prec\n && (this.inputs[0].type != exprType.unop || this.op != '-' || this.inputs[0].op != '/')) {\n theStr = theOp + '\\\\left(' + opStr + '\\\\right)';\n } else {\n theStr = theOp + opStr;\n }\n }\n return(theStr);\n }\n\n toMathML() {\n var theStr;\n var opStr;\n\n if (typeof this.inputs[0] == 'undefined') {\n opStr = '?';\n } else {\n opStr = this.inputs[0].toMathML();\n }\n switch (this.op) {\n case '+':\n theStr = opStr;\n break;\n case '-':\n theStr = \"\" + opStr + \"\";\n break;\n case '/':\n theStr = \"1\" + opStr + \"\";\n break;\n }\n\n return(theStr);\n }\n\n operateToTeX() {\n var opString = this.op;\n\n if (opString === '/') {\n opString = '\\\\div';\n }\n\n return(opString);\n }\n\n evaluate(bindings) {\n var inputVal = this.inputs[0].evaluate(bindings);\n\n var retVal;\n if (inputVal == undefined) {\n return(undefined);\n }\n switch (this.op) {\n case '+':\n retVal = inputVal;\n break;\n case '-':\n retVal = -1*inputVal;\n break;\n case '/':\n // Even when divide by zero, we want to use this, since in the exception\n // we want the value to be Infinite and not undefined.\n retVal = 1/inputVal;\n break;\n default:\n alert(\"The unary operator '\" + this.op + \"' is not defined.\");\n retVal = undefined;\n break;\n }\n return(retVal);\n }\n\n reduce() {\n var workExpr = super.reduce();\n var newExpr = workExpr;\n if (workExpr.type == exprType.unop && workExpr.op == '-' \n && workExpr.inputs[0].isConstant() && workExpr.value()==0) {\n newExpr = create_scalar(this.menv, 0)\n }\n return(newExpr);\n }\n\n simplifyConstants() {\n var retVal;\n\n this.inputs[0] = this.inputs[0].simplifyConstants();\n this.inputs[0].parent = this;\n if (this.inputs[0].type == exprType.number) {\n var theNumber = this.inputs[0].number;\n switch (this.op) {\n case '-':\n if (this.menv.options.negativeNumbers) {\n retVal = create_scalar(this.menv, theNumber.addInverse());\n } else if (theNumber.value() == 0) {\n retVal = create_scalar(this.menv, 0);\n } else {\n retVal = this;\n }\n break;\n case '/':\n retVal = create_scalar(this.menv, theNumber.multInverse());\n break;\n }\n } else {\n retVal = this;\n }\n return(retVal);\n }\n\n flatten() {\n return(new unop_expr(this.menv, this.op, this.inputs[0].flatten()));\n }\n\n copy() {\n return(new unop_expr(this.menv, this.op, this.inputs[0].copy()));\n }\n\n compose(bindings) {\n return(new unop_expr(this.menv, this.op, this.inputs[0].compose(bindings)));\n }\n\n derivative(ivar, varList) {\n var theDeriv;\n\n var uConst = this.inputs[0].isConstant();\n if (uConst) {\n theDeriv = create_scalar(this.menv, 0);\n } else {\n switch (this.op) {\n case '+':\n theDeriv = this.inputs[0].derivative(ivar, varList);\n break;\n case '-':\n theDeriv = new unop_expr(this.menv, '-', this.inputs[0].derivative(ivar, varList));\n if (theDeriv.isConstant()) {\n theDeriv = theDeriv.simplifyConstants();\n }\n break;\n case '/':\n var denom = new binop_expr(this.menv, '*', this.inputs[0], this.inputs[0]);\n theDeriv = new unop_expr(this.menv, '-', new binop_expr(this.menv, '/', this.inputs[0].derivative(ivar, varList), denom));\n break;\n default:\n console.log(\"The derivative of the unary operator '\" + this.op + \"' is not defined.\");\n theDeriv = undefined;\n break;\n }\n }\n return(theDeriv);\n }\n\n match(expr, bindings) {\n var retValue = null;\n\n // Special named constants can not match expressions.\n if (this.isConstant() && expr.isConstant()) {\n var newExpr = expr.simplifyConstants(),\n newThis = this.simplifyConstants();\n\n if (newExpr.toString() === newThis.toString()\n || newExpr.type == exprType.number && newThis.type == exprType.number\n && newThis.number.equal(newExpr.number)) {\n retValue = bindings;\n }\n } else {\n retValue = expression.prototype.match.call(this, expr, bindings);\n }\n\n return(retValue);\n }\n}\n","/*!\n * BTM JavaScript Library v@VERSION\n * https://github.com/dbrianwalton/BTM\n *\n * Copyright D. Brian Walton\n * Released under the MIT license (https://opensource.org/licenses/MIT)\n *\n * Date: @DATE\n */\n\n/* ***************************************************\n* Define the Scalar Expression -- a numerical value\n* *************************************************** */\n\nimport { expression } from \"./expression.js\"\nimport { real_number } from \"./real_number.js\"\nimport { rational_number } from \"./rational_number.js\"\nimport { unop_expr } from \"./unop_expr.js\"\nimport { exprType } from \"./BTM_root.js\"\n\nexport function create_scalar(menv, number) {\n var theNumber;\n var numObj;\n if (typeof number === \"number\" || number instanceof Number) {\n if (Math.floor(number)==number) {\n theNumber = new rational_number(number, 1);\n } else {\n theNumber = new real_number(number);\n }\n } else if (number instanceof real_number) {\n theNumber = number;\n } else if (number instanceof scalar_expr) {\n theNumber = number.number;\n } else {\n console.log(\"Trying to create a scalar_expr with a non-number object: \" + number);\n }\n\n if (menv.options.negativeNumbers || theNumber.value() >=0) {\n numObj = new scalar_expr(menv, theNumber);\n } else {\n numObj = new unop_expr(menv, '-', new scalar_expr(menv, theNumber.multiply(-1)));\n }\n return (numObj);\n}\n\nexport class scalar_expr extends expression {\n constructor(menv, number) {\n super(menv);\n this.type = exprType.number;\n if (typeof number === \"number\" ||\n number instanceof Number) {\n if (Math.floor(number)==number) {\n this.number = new rational_number(number, 1);\n } else {\n this.number = new real_number(number);\n }\n } else if (number instanceof real_number) {\n this.number = number;\n } else if (number instanceof scalar_expr) {\n this.number = number.number;\n } else {\n console.log(\"Trying to instantiate a scalar_expr with a non-number object: \" + number);\n }\n this.context = \"number\";\n }\n\n // Parsed representation.\n toString(elementOnly) {\n if (typeof elementOnly == 'undefined') {\n elementOnly = false;\n }\n return(this.number.toString());\n }\n \n // Display representation.\n toTeX(showSelect) {\n if (typeof showSelect == 'undefined') {\n showSelect = false;\n }\n var word = this.number.toTeX();\n if (showSelect && this.select) {\n word = \"{\\\\color{red}\" + word + \"}\";\n }\n return(word);\n }\n \n // MathML representation.\n toMathML() {\n return(\"\" + this.toString() + \"\");\n }\n \n // Return an array containing all tested equivalent strings.\n allStringEquivs() {\n return([this.toString()]);\n }\n \n // Test if represents constant value.\n isConstant() {\n /*\n This could just use expression.prototype.constant, but use this\n because it ALWAYS is true for scalar_expr and does not need a check\n */\n return(true);\n }\n \n // Combine constants where possible\n simplifyConstants() {\n var retValue;\n if (!this.menv.options.negativeNumbers && this.number.value() < 0) {\n var theNumber = this.number.multiply(-1);\n retValue = new unop_expr(this.menv, '-', new scalar_expr(this.menv, theNumber));\n } else {\n retValue = this;\n }\n return(retValue);\n }\n \n value() {\n return(this.number.value());\n }\n\n evaluate(bindings) {\n return(this.value());\n }\n \n copy() {\n return(create_scalar(this.menv, this.number));\n }\n \n compose(bindings) {\n return(create_scalar(this.menv, this.number));\n }\n \n derivative(ivar, varList) {\n return(create_scalar(this.menv, 0));\n }\n \n /*\n See expressions.prototype.match for explanation.\n \n A scalar might match a constant formula.\n */\n match(expr, bindings) {\n var retValue = null,\n testExpr = expr;\n \n // Special named constants can not match expressions.\n if (expr.isConstant() && expr.type != exprType.number) {\n var testExpr = expr.copy().simplifyConstants();\n if (this.toString() === testExpr.toString()) {\n retValue = bindings;\n }\n }\n else if (testExpr.type == exprType.number\n && this.number.equal(testExpr.number)) {\n retValue = bindings;\n }\n \n return(retValue);\n } \n}\n\n","/*!\n * BTM JavaScript Library v@VERSION\n * https://github.com/dbrianwalton/BTM\n *\n * Copyright D. Brian Walton\n * Released under the MIT license (https://opensource.org/licenses/MIT)\n *\n * Date: @DATE\n */\n\n/* ***************************************************\n* Define the Derivative of an Expression\n* *************************************************** */\n\nimport { expression } from \"./expression.js\"\nimport { variable_expr } from \"./variable_expr.js\"\nimport { exprType } from \"./BTM_root.js\"\n\nexport class deriv_expr extends expression {\n constructor(menv, formula, variable, atValue) {\n super(menv);\n this.type = exprType.operator;\n this.op = \"D\";\n if (typeof formula == 'undefined')\n formula = new expression(menv);\n if (typeof variable == 'undefined') {\n variable = new variable_expr(menv, 'x');\n } else if (typeof variable == 'string') {\n variable = new variable_expr(menv, variable);\n }\n this.ivar = variable;\n this.ivarValue = atValue;\n this.inputs = [formula];\n this.isRate = false;\n formula.parent = this;\n }\n\n toString() {\n var theStr;\n var exprStr, varStr, valStr;\n\n varStr = this.ivar.toString();\n exprStr = this.inputs[0].toString();\n if (typeof this.ivarValue != 'undefined') {\n valStr = this.ivarValue.toString();\n theStr = \"D(\"+exprStr+\",\"+varStr+\",\"+valStr+\")\";\n } else {\n theStr = \"D(\"+exprStr+\",\"+varStr+\")\";\n }\n return(theStr);\n }\n\n toTeX(showSelect) {\n var theStr;\n var opStr, varStr, exprStr, valStr;\n\n varStr = this.ivar.toTeX();\n exprStr = this.inputs[0].toTeX();\n if (this.isRate && this.inputs[0].type == exprType.variable) {\n if (typeof this.ivarValue != 'undefined') {\n valStr = this.ivarValue.toTeX();\n theStr = \"\\\\left. \\\\frac{d\" + exprStr + \"}{d\"+varStr+\"} \\\\right|_{\"\n + varStr + \"=\" + valStr + \"}\";\n } else {\n theStr = \"\\\\frac{d\" + exprStr +\"}{d\"+varStr+\"}\";\n }\n } else {\n if (typeof this.ivarValue != 'undefined') {\n valStr = this.ivarValue.toTeX();\n opStr = \"\\\\left. \\\\frac{d}{d\"+varStr+\"} \\\\right|_{\"\n + varStr + \"=\" + valStr + \"}\";\n } else {\n opStr = \"\\\\frac{d}{d\"+varStr+\"}\";\n }\n theStr = opStr + \"\\\\Big[\" + exprStr + \"\\\\Big]\";\n }\n return(theStr);\n }\n\n // Return an array containing all tested equivalent strings.\n allStringEquivs() {\n var allInputs = this.inputs[0].allStringEquivs();\n var varStr, valStr;\n var retValue = [];\n\n varStr = this.ivar.toString();\n if (typeof this.ivarValue != 'undefined') {\n valStr = this.ivarValue.toString();\n }\n for (var i in allInputs) {\n if (typeof this.ivarValue != 'undefined') {\n retValue[i] = \"D(\"+allInputs[i]+\",\"+varStr+\",\"+valStr+\")\";\n } else {\n retValue[i] = \"D(\"+allInputs[i]+\",\"+varStr+\")\";\n }\n }\n\n return(allInputs);\n }\n\n toMathML() {\n var theStr;\n var exprStr;\n\n if (typeof this.inputs[0] == 'undefined') {\n exprStr = '?';\n } else {\n exprStr = this.inputs[0].toMathML();\n }\n theStr = \"\" + exprStr + \"\";\n\n return(theStr);\n }\n\n evaluate(bindings) {\n var retVal;\n var derivExpr;\n var dbind = {};\n\n if (typeof this.ivarValue != 'undefined') {\n dbind[this.ivar.name] = this.ivarValue;\n }\n // Compute the derivative of the expression, then evaluate at binding\n derivExpr = this.inputs[0].derivative(this.ivar, bindings);\n derivExpr = derivExpr.compose(dbind);\n retVal = derivExpr.evaluate(bindings);\n return(retVal);\n }\n\n simplifyConstants() {\n return(this);\n }\n\n flatten() {\n return (new deriv_expr(this.menv, this.inputs[0].flatten(), this.ivar, this.ivarValue));\n }\n\n copy() {\n return (new deriv_expr(this.menv, this.inputs[0].copy(), this.ivar, this.ivarValue));\n }\n\n\n compose(bindings) {\n }\n\n derivative(ivar, varList) {\n var dbind = {};\n\n if (typeof this.ivarValue != 'undefined') {\n dbind[this.ivar] = this.ivarValue;\n }\n // Evaluate the main expression using original binding\n var firstDeriv = this.inputs[0].derivative(this.ivar, varList);\n firstDeriv.compose(dbind);\n\n // Now differentiate that expression using new binding.\n return firstDeriv.derivative(ivar, varList);\n }\n}\n","/*!\n * BTM JavaScript Library v@VERSION\n * https://github.com/dbrianwalton/BTM\n *\n * Copyright D. Brian Walton\n * Released under the MIT license (https://opensource.org/licenses/MIT)\n *\n * Date: @DATE\n */\n\nimport { rational_number } from \"./rational_number.js\"\n\n/* ****************************************************\n* Routines for dealing with random values\n* **************************************************** */\n\n/* To use a seeded RNG, we rely on an open source project for the underlying mechanics. */\n\n/*////////////////////////////////////////////////////////////////\naleaPRNG 1.1\n//////////////////////////////////////////////////////////////////\nhttps://github.com/macmcmeans/aleaPRNG/blob/master/aleaPRNG-1.1.js\n//////////////////////////////////////////////////////////////////\nOriginal work copyright © 2010 Johannes Baagøe, under MIT license\nThis is a derivative work copyright (c) 2017-2020, W. Mac\" McMeans, under BSD license.\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n////////////////////////////////////////////////////////////////*/\nfunction aleaPRNG() {\n return( function( args ) {\n \"use strict\";\n\n const version = 'aleaPRNG 1.1.0';\n\n var s0\n , s1\n , s2\n , c\n , uinta = new Uint32Array( 3 )\n , initialArgs\n , mashver = ''\n ;\n\n /* private: initializes generator with specified seed */\n function _initState( _internalSeed ) {\n var mash = Mash();\n\n // internal state of generator\n s0 = mash( ' ' );\n s1 = mash( ' ' );\n s2 = mash( ' ' );\n\n c = 1;\n\n for( var i = 0; i < _internalSeed.length; i++ ) {\n s0 -= mash( _internalSeed[ i ] );\n if( s0 < 0 ) { s0 += 1; }\n\n s1 -= mash( _internalSeed[ i ] );\n if( s1 < 0 ) { s1 += 1; }\n \n s2 -= mash( _internalSeed[ i ] );\n if( s2 < 0 ) { s2 += 1; }\n }\n\n mashver = mash.version;\n\n mash = null;\n };\n\n /* private: dependent string hash function */\n function Mash() {\n var n = 4022871197; // 0xefc8249d\n\n var mash = function( data ) {\n data = data.toString();\n \n // cache the length\n for( var i = 0, l = data.length; i < l; i++ ) {\n n += data.charCodeAt( i );\n \n var h = 0.02519603282416938 * n;\n \n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 4294967296; // 0x100000000 2^32\n }\n return ( n >>> 0 ) * 2.3283064365386963e-10; // 2^-32\n };\n\n mash.version = 'Mash 0.9';\n return mash;\n };\n\n\n /* private: check if number is integer */\n function _isInteger( _int ) { \n return parseInt( _int, 10 ) === _int; \n };\n\n /* public: return a 32-bit fraction in the range [0, 1]\n This is the main function returned when aleaPRNG is instantiated\n */\n var random = function() {\n var t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32\n \n s0 = s1;\n s1 = s2;\n\n return s2 = t - ( c = t | 0 );\n };\n\n /* public: return a 53-bit fraction in the range [0, 1] */\n random.fract53 = function() {\n return random() + ( random() * 0x200000 | 0 ) * 1.1102230246251565e-16; // 2^-53\n };\n\n /* public: return an unsigned integer in the range [0, 2^32] */\n random.int32 = function() {\n return random() * 0x100000000; // 2^32\n };\n\n /* public: advance the generator the specified amount of cycles */\n random.cycle = function( _run ) {\n _run = typeof _run === 'undefined' ? 1 : +_run;\n if( _run < 1 ) { _run = 1; }\n for( var i = 0; i < _run; i++ ) { random(); }\n };\n\n /* public: return inclusive range */\n random.range = function() { \n var loBound\n , hiBound\n ;\n \n if( arguments.length === 1 ) {\n loBound = 0;\n hiBound = arguments[ 0 ];\n\n } else {\n loBound = arguments[ 0 ];\n hiBound = arguments[ 1 ];\n }\n\n if( arguments[ 0 ] > arguments[ 1 ] ) { \n loBound = arguments[ 1 ];\n hiBound = arguments[ 0 ];\n }\n\n // return integer\n if( _isInteger( loBound ) && _isInteger( hiBound ) ) { \n return Math.floor( random() * ( hiBound - loBound + 1 ) ) + loBound; \n\n // return float\n } else {\n return random() * ( hiBound - loBound ) + loBound; \n }\n };\n\n /* public: initialize generator with the seed values used upon instantiation */\n random.restart = function() {\n _initState( initialArgs );\n };\n\n /* public: seeding function */\n random.seed = function() { \n _initState( Array.prototype.slice.call( arguments ) );\n }; \n\n /* public: show the version of the RNG */\n random.version = function() { \n return version;\n }; \n\n /* public: show the version of the RNG and the Mash string hasher */\n random.versions = function() { \n return version + ', ' + mashver;\n }; \n\n // when no seed is specified, create a random one from Windows Crypto (Monte Carlo application) \n if( args.length === 0 ) {\n window.crypto.getRandomValues( uinta );\n args = [ uinta[ 0 ], uinta[ 1 ], uinta[ 2 ] ];\n };\n\n // store the seed used when the RNG was instantiated, if any\n initialArgs = args;\n\n // initialize the RNG\n _initState( args );\n\n return random;\n\n })( Array.prototype.slice.call( arguments ) );\n};\n\nexport class RNG {\n constructor(rngSettings) {\n if (rngSettings.rand) {\n this.rand = rngSettings.rand;\n } else {\n let seed;\n if (rngSettings.seed == undefined) {\n seed = new Date().getTime().toString();\n } else {\n seed = rngSettings.seed;\n }\n this.rand = aleaPRNG(seed);\n }\n }\n\n setSeed(seed) {\n this.alea.seed(seed.toString());\n }\n\n // Standard uniform generator values in [0,1)\n random() {\n return(this.rand());\n }\n\n // Randomly choose +1 or -1.\n randSign() {\n var a = 2*Math.floor(2*this.random())-1;\n return(a);\n }\n\n // Randomly choose integer uniformly in {min, ..., max}.\n randInt(min, max) {\n var a = min+Math.floor( (max-min+1)*this.random() );\n return(a);\n }\n \n // Randomly choose floating point uniformly in [min,max)\n randUniform(min, max) {\n var a = min+(max-min)*this.random();\n return(a);\n }\n\n // Randomly choose floating point uniformly in [min,max)\n randDiscrete(min, max, by, nonzero) {\n if (arguments.length < 3 || by == 0) {\n by = 1;\n }\n if (arguments.length < 4) {\n nonzero=false;\n }\n var rndVal;\n let Nvals = Math.floor((max-min) / by)+1;\n do {\n rndVal = min + by * this.randInt(0,Nvals-1);\n } while (nonzero && Math.abs(rndVal) < 1e-16);\n return(rndVal);\n }\n\n // Randomly a k-length permuted subsequence of {min, ..., max}\n randChoice(min, max, k) {\n var a = new Array();\n var b = new Array();\n var i,j;\n for (i=0; i<=max-min; i++) {\n a[i] = min+i;\n }\n for (i=0; i b: 1\n numberCmp(a,b,override) {\n // Work with actual values.\n var valA, valB, cmpResult;\n var useRelErr = this.options.useRelErr,\n relTol = this.options.relTol,\n absTol = this.options.absTol;\n\n if (typeof a === 'number' || typeof a === 'Number') {\n valA = a;\n } else {\n valA = a.value();\n }\n if (typeof b === 'number' || typeof b === 'Number') {\n valB = b;\n } else {\n valB = b.value();\n }\n\n // Pull out the options.\n if (typeof override !== 'undefined') {\n if (typeof override.useRelErr !== 'undefined') {\n useRelErr = override.useRelErr;\n }\n if (typeof override.relTol !== 'undefined') {\n relTol = override.relTol;\n }\n if (typeof override.absTol !== 'undefined') {\n absTol = override.absTol;\n }\n }\n\n if (!useRelErr || Math.abs(valA) < absTol) {\n if (Math.abs(valB-valA) < absTol) {\n cmpResult = 0;\n } else if (valA < valB) {\n cmpResult = -1;\n } else {\n cmpResult = 1;\n }\n } else {\n if (Math.abs(valB-valA)/Math.abs(valA) < relTol) {\n cmpResult = 0;\n } else if (valA < valB) {\n cmpResult = -1;\n } else {\n cmpResult = 1;\n }\n }\n return cmpResult;\n }\n\n /* Block of methods to deal with reduction rules in context */\n setReductionRules() {\n this.reduceRules = defaultReductions(this);\n }\n\n addReductionRule(equation, description, useOneWay) {\n newRule(this, this.reduceRules, equation, description, true, useOneWay);\n }\n\n disableReductionRule(equation) {\n disableRule(this, this.reduceRules, equation);\n }\n\n addRule(ruleList, equation, description, useOneWay){\n newRule(this, ruleList, equation, description, true, useOneWay);\n }\n\n findMatchRules(reductionList, testExpr, doValidate) {\n return findMatchRules(reductionList, testExpr, doValidate);\n }\n\n generateRandom(distr, options) {\n var rndVal, rndScalar;\n var min, max, by, nonzero;\n switch (distr) {\n case 'uniform':\n min=options.min;\n if (typeof min.value === 'function') {\n min = min.value();\n }\n if (min == undefined) {\n min = 0;\n }\n max=options.max;\n if (typeof max.value === 'function') {\n max = max.value();\n }\n if (max == undefined) {\n max = 1;\n }\n rndVal = this.rng.randUniform(min,max);\n break;\n case 'sign':\n rndVal = this.rng.randSign();\n break;\n case 'integer':\n min=options.min;\n if (typeof min.value === 'function') {\n min = min.value();\n }\n if (min == undefined) {\n min = 0;\n }\n min = Math.floor(min);\n max=options.max;\n if (typeof max.value === 'function') {\n max = max.value();\n }\n if (max == undefined) {\n max = 1;\n }\n max = Math.floor(max);\n rndVal = this.rng.randInt(min,max);\n break;\n case 'discrete':\n min = options.min;\n if (typeof min.value === 'function') {\n min = min.value();\n }\n max = options.max;\n if (typeof max.value === 'function') {\n max = max.value();\n }\n by = options.by;\n if (typeof by.value === 'function') {\n by = by.value();\n }\n nonzero = options.nonzero ? true : false;\n rndVal = this.rng.randDiscrete(min,max,by,nonzero);\n break;\n }\n rndScalar = create_scalar(this, rndVal);\n return rndScalar;\n }\n\n addFunction(name, input, expression) {\n if (arguments.length < 2) {\n input = \"x\";\n }\n // No expression? Make it random.\n if (arguments.length < 3) {\n var formula = create_scalar(this, this.rng.randRational([-20,20],[1,15]));\n var newTerm;\n for (var i=1; i<=6; i++) {\n if (Array.isArray(input)) {\n newTerm = this.parse(\"sin(\"+i+\"*\"+input[0]+\")\", \"formula\");\n for (var j=1; j= workingStr.length) {\n hasExtraParens = true;\n workingStr = workingStr.slice(1,-1);\n }\n }\n }\n\n // We build the tree as it is parsed. \n // Two stacks keep track of operands (expressions) and operators\n // which we will identify as the string is parsed left to right\n // At the time an operand is parsed, we don't know to which operator \n // it ultimately belongs, so we push it onto a stack until we know.\n var operandStack = new Array();\n var operatorStack = new Array();\n\n // When an operator is pushed, we want to compare it to the previous operator\n // and see if we need to apply the operators to some operands.\n // This is based on operator precedence (order of operations).\n // An empty newOp means to finish resolve the rest of the stacks.\n function resolveOperator(menv, operatorStack, operandStack, newOp) {\n // Test if the operator has lower precedence.\n var oldOp = 0;\n while (operatorStack.length > 0) {\n oldOp = operatorStack.pop();\n if (newOp && (newOp.type==exprType.unop || oldOp.prec < newOp.prec)) {\n break;\n }\n\n // To get here, the new operator must be *binary*\n // and the operator to the left has *higher* precedence.\n // So we need to peel off the operator to the left with its operands\n // to form an expression as a new compound operand for the new operator.\n var newExpr;\n // Unary: Either negative or reciprocal require *one* operand\n if (oldOp.type == exprType.unop) {\n if (operandStack.length > 0) {\n var input = operandStack.pop();\n\n // Deal with negative numbers separately.\n if (menv.options.negativeNumbers && input.type == exprType.number && oldOp.op == '-') {\n newExpr = create_scalar(menv, input.number.multiply(-1));\n } else {\n newExpr = new unop_expr(menv, oldOp.op, input);\n }\n } else {\n newExpr = new expression(menv);\n newExpr.setParsingError(\"Incomplete formula: missing value for \" + oldOp.op);\n }\n // Binary: Will be *two* operands.\n } else {\n if (operandStack.length > 1) {\n var inputB = operandStack.pop();\n var inputA = operandStack.pop();\n newExpr = new binop_expr(menv, oldOp.op, inputA, inputB);\n } else {\n newExpr = new expression(menv);\n newExpr.setParsingError(\"Incomplete formula: missing value for \" + oldOp.op);\n }\n }\n operandStack.push(newExpr);\n oldOp = 0;\n }\n // The new operator is unary or has higher precedence than the previous op.\n // We need to push the old operator back on the stack to use later.\n if (oldOp != 0) {\n operatorStack.push(oldOp);\n }\n // A new operation was added to deal with later.\n if (newOp) {\n operatorStack.push(newOp);\n }\n }\n\n // Now we begin to process the string representing the expression.\n var lastElement = -1, newElement; // 0 for operand, 1 for operator.\n\n // Read string left to right.\n // Identify what type of math object starts at this character.\n // Find the other end of that object by completion.\n // Interpret that object, possibly through a recursive parsing.\n for (charPos = 0; charPos 2) {\n ivarValue = this.parse(entries[2], context, bindings);\n }\n newExpr = new deriv_expr(this, expr, ivar, ivarValue);\n }\n } else {\n var subExpr = this.parse(workingStr.slice(endPos+1,endParen), context, bindings);\n newExpr = new function_expr(this, theName, subExpr);\n }\n operandStack.push(newExpr);\n newElement = 0;\n charPos = endParen;\n }\n // or a variable.\n else {\n // Test if needs index\n if (workingStr.charAt(endPos) == '[') {\n var endParen, hasError=false;\n try {\n endParen = completeBracket(workingStr, endPos, true);\n } catch (error) {\n parseError = error;\n hasError = true;\n endParen = endPos+1;\n }\n var indexExpr = this.parse(workingStr.slice(endPos+1,endParen), context, bindings);\n var newExpr = new index_expr(this, theName, indexExpr);\n if (hasError) {\n newExpr.setParsingError(parseError);\n parseError = \"\";\n }\n operandStack.push(newExpr);\n newElement = 0;\n charPos = endParen;\n } else {\n var newExpr = new variable_expr(this, theName);\n operandStack.push(newExpr);\n newElement = 0;\n charPos = endPos-1;\n }\n }\n\n // It could be an operator.\n } else if (workingStr.substr(charPos).search(opMatch) == 0) {\n newElement = 1;\n var op = workingStr.charAt(charPos);\n var newOp = new operator(op);\n\n // Consecutive operators? Better be sign change or reciprocal.\n if (lastElement != 0) {\n if (op == \"-\" || op == \"/\") {\n newOp.type = exprType.unop;\n newOp.prec = opPrec.multdiv;\n } else {\n // ERROR!!!\n parseError = \"Error: consecutive operators\";\n }\n }\n resolveOperator(this, operatorStack, operandStack, newOp);\n }\n\n // Two consecutive operands must have an implicit multiplication between them\n if (lastElement == 0 && newElement == 0) {\n var holdElement = operandStack.pop();\n\n // Push a multiplication\n var newOp = new operator('*');\n resolveOperator(this, operatorStack, operandStack, newOp);\n\n // Then restore the operand stack.\n operandStack.push(holdElement);\n }\n lastElement = newElement;\n }\n\n // Now finish up the operator stack: nothing new to include\n resolveOperator(this, operatorStack, operandStack);\n var finalExpression;\n if (operandStack.length > 0) {\n finalExpression = operandStack.pop();\n } else {\n finalExpression = new undef_expr(this);\n }\n if (parseError.length > 0) {\n finalExpression.setParsingError(parseError);\n } else {\n // Substitute any expressions provided\n finalExpression = finalExpression.compose(bindings);\n // Test if context is consistent\n switch (context) {\n case 'number':\n if (!finalExpression.isConstant()) {\n throw new TypeError(`The expression ${formulaStr} is expected to be a constant but depends on variables.`);\n }\n finalExpression.simplifyConstants();\n break;\n case 'formula':\n break;\n }\n finalExpression.setContext(context);\n }\n if (options.doFlatten) {\n finalExpression.flatten();\n }\n return finalExpression;\n }\n}\n\n// Used in parse\nfunction operator(opStr) {\n this.op = opStr;\n switch(opStr) {\n case '+':\n case '-':\n this.prec = opPrec.addsub;\n this.type = exprType.binop;\n this.valueType = exprValue.numeric;\n break;\n case '*':\n case '/':\n this.prec = opPrec.multdiv;\n this.type = exprType.binop;\n this.valueType = exprValue.numeric;\n break;\n case '^':\n this.prec = opPrec.power;\n this.type = exprType.binop;\n this.valueType = exprValue.numeric;\n break;\n case '&':\n this.prec = opPrec.conj;\n this.type = exprType.binop;\n this.valueType = exprValue.bool;\n break;\n case '$': // $=or since |=absolute value bar\n// this.op = '|'\n this.prec = opPrec.disj;\n this.type = exprType.binop;\n this.valueType = exprValue.bool;\n break;\n case '=':\n this.prec = opPrec.equal;\n this.type = exprType.binop;\n this.valueType = exprValue.bool;\n break;\n case ',':\n this.prec = opPrec.fop;\n this.type = exprType.array;\n this.valueType = exprValue.vector;\n break;\n default:\n this.prec = opPrec.fcn;\n this.type = exprType.fcn;\n break;\n }\n}\n\n\n\n/* An absolute value can be complicated because also a function. \nMay not be clear if nested: |2|x-3|- 5|.\nIs that 2x-15 or abs(2|x-3|-5)?\nResolve by requiring explicit operations: |2*|x-3|-5| or |2|*x-3*|-5|\n*/\nfunction completeAbsValue(formulaStr, startPos) {\n var pLevel = 1;\n var charPos = startPos;\n var wasOp = true; // open absolute value implicitly has previous operation.\n\n while (pLevel > 0 && charPos < formulaStr.length) {\n charPos++;\n // We encounter another absolute value.\n if (formulaStr.charAt(charPos) == '|') {\n if (wasOp) { // Must be opening a new absolute value.\n pLevel++;\n // wasOp is still true since can't close immediately\n } else { // Assume closing absolute value. If not wanted, need operator.\n pLevel--;\n // wasOp is still false since just closed a value.\n }\n // Keep track of whether just had operator or not.\n } else if (\"+-*/([\".search(formulaStr.charAt(charPos)) >= 0) {\n wasOp = true;\n } else if (formulaStr.charAt(charPos) != ' ') {\n wasOp = false;\n }\n }\n return(charPos);\n}\n\n// Find the balancing closing parenthesis.\nfunction completeParenthesis(formulaStr, startPos) {\n var pLevel = 1;\n var charPos = startPos;\n\n while (pLevel > 0 && charPos < formulaStr.length) {\n charPos++;\n if (formulaStr.charAt(charPos) == ')') {\n pLevel--;\n } else if (formulaStr.charAt(charPos) == '(') {\n pLevel++;\n }\n }\n return(charPos);\n}\n\n// Brackets are used for sequence indexing, not regular grouping.\nfunction completeBracket(formulaStr, startPos, asSubscript) {\n var pLevel = 1;\n var charPos = startPos;\n var fail = false;\n\n while (pLevel > 0 && charPos < formulaStr.length) {\n charPos++;\n if (formulaStr.charAt(charPos) == ']') {\n pLevel--;\n } else if (formulaStr.charAt(charPos) == '[') {\n if (asSubscript) {\n fail = true;\n }\n pLevel++;\n }\n }\n if (asSubscript && fail) {\n throw \"Nested brackets used for subscripts are not supported.\";\n }\n return(charPos);\n}\n\n/* Given a string and a starting position of a name, identify the entire name. */\n/* Require start with letter, then any sequence of *word* character */\n/* Also allow primes for derivatives at the end. */\nfunction completeName(formulaStr, startPos) {\n var matchRule = /[A-Za-z]\\w*'*/;\n var match = formulaStr.substr(startPos).match(matchRule);\n return(startPos + match[0].length);\n}\n\n/* Given a string and a starting position of a number, identify the entire number. */\nfunction completeNumber(formulaStr, startPos, options) {\n var matchRule;\n if (options && options.noDecimals) {\n matchRule = /[0-9]*/;\n } else {\n matchRule = /[0-9]*(\\.[0-9]*)?(e-?[0-9]+)?/;\n }\n var match = formulaStr.substr(startPos).match(matchRule);\n return(startPos + match[0].length);\n}\n\n/* Tests a string to see if it can be constructed as a concatentation of known names. */\n/* For example, abc could be a name or could be a*b*c */\n/* Pass in the bindings giving the known names and see if we can build this name */\n/* Return the *first* name that is part of the whole. */\nfunction TestNameIsComposite(text, bindings) {\n var retStruct = new Object();\n retStruct.isComposite = false;\n\n if (bindings !== undefined) {\n var remain, nextName;\n if (bindings[text] !== undefined) {\n retStruct.isComposite = true;\n retStruct.name = text;\n } else {\n // See if the text *starts* with a known name\n var knownNames = Object.keys(bindings);\n for (var ikey in knownNames) {\n nextName = knownNames[ikey];\n // If *this* name is the start of the text, see if the rest from known names.\n if (text.search(nextName)==0) {\n remain = TestNameIsComposite(text.slice(nextName.length), bindings);\n if (remain.isComposite) {\n retStruct.isComposite = true;\n retStruct.name = nextName;\n break;\n }\n }\n }\n }\n }\n return retStruct;\n}\n \nexport class BTM {\n constructor(settings) {\n this.menv = new MENV(settings);\n\n // Each instance of BTM environment needs bindings across all expressions.\n this.data = {};\n this.data.allValues = {};\n this.data.params = {};\n this.data.variables = {};\n this.data.expressions = {};\n }\n\n\n addMathObject(name, context, newObject) {\n switch(context) {\n case 'number':\n if (newObject.isConstant()) {\n this.data.params[name] = newObject;\n this.data.allValues[name] = newObject;\n } else {\n throw `Attempt to add math object '${name}' with context '${context}' that does not match.`;\n }\n break;\n case 'formula':\n this.data.allValues[name] = newObject;\n break;\n }\n return newObject;\n }\n\n generateRandom(distr, options) {\n return this.menv.generateRandom(distr,options);\n }\n\n addVariable(name, options) {\n var newVar = new variable_expr(this.menv, name);\n \n this.data.variables[name] = newVar;\n this.data.allValues[name] = newVar;\n\n return newVar;\n }\n\n parseExpression(expression, context) {\n var newExpr;\n // Not yet parsed\n if (typeof expression === 'string') {\n var formula = this.decodeFormula(expression);\n newExpr = this.menv.parse(formula, context, this.data.allValues)\n .compose(this.data.allValues);\n // Already parsed\n } else if (typeof expression === 'object') {\n newExpr = expression;\n }\n return newExpr;\n }\n\n evaluateExpression(expression, context, bindings) {\n var theExpr, newExpr, retValue;\n // Not yet parsed\n if (typeof expression === 'string') {\n var formula = this.decodeFormula(expression);\n theExpr = this.menv.parse(formula, \"formula\");\n // Already parsed\n } else if (typeof expression === 'object') {\n theExpr = expression;\n }\n retValue = theExpr.evaluate(bindings);\n newExpr = create_scalar(this.menv, retValue);\n return newExpr;\n }\n\n composeExpression(expression, substitution) {\n var myExpr;\n // Not yet parsed\n if (typeof expression === 'string') {\n var formula = this.decodeFormula(expression);\n myExpr = this.menv.parse(formula, \"formula\");\n // Already parsed\n } else if (typeof expression === 'object') {\n myExpr = expression;\n }\n var mySubs = Object.entries(substitution);\n var substVar, substExpr;\n [substVar, substExpr] = mySubs[0];\n if (typeof substExpr == \"string\") {\n substExpr = this.menv.parse(substExpr, \"formula\");\n }\n var binding = {};\n binding[substVar] = substExpr;\n return myExpr.compose(binding);\n }\n\n addExpression(name, expression) {\n var newExpr = this.parseExpression(expression, \"formula\");\n \n this.data.expressions[name] = newExpr;\n this.data.allValues[name] = newExpr;\n\n return newExpr;\n }\n\n addFunction(name, input, expression) {\n this.menv.addFunction(name, input, expression);\n }\n\n // This routine takes the text and looks for strings in mustaches {{name}}\n // It replaces this element with the corresponding parameter, variable, or expression.\n // These should have been previously parsed and stored in this.data.\n decodeFormula(statement, displayMode) {\n // First find all of the expected substitutions.\n var substRequestList = {};\n var matchRE = /\\{\\{[A-Za-z]\\w*\\}\\}/g;\n var substMatches = statement.match(matchRE);\n if (substMatches != null) {\n for (var i=0; i{"use strict";i.r(t),i.d(t,{default:()=>_});var s=i(78673);i(75794),i(56906),i(78811);class n{constructor(e){this.problem=e}inverseLISIndices(e){for(var t=[],i=0;in&&rh&&(h=c.length,l=c)}var d=[],u=0;for(let t=0;tl.length?d.push(t):e[t]==l[u]?u+=1:d.push(t);return d}grade(){var e=this.problem;e.clearFeedback(),this.correctLines=0,this.percentLines=0,this.incorrectIndents=0;var t,i=e.solution,s=e.answerLines();this.percentLines=Math.min(s.length,i.length)/Math.max(s.length,i.length),s.lengthe[s].indent&&this.indentLeft.push(t[s]);return this.incorrectIndents=this.indentLeft.length+this.indentRight.length,0==this.incorrectIndents}checkCorrectOrdering(e,t){let i=!0;this.correctLines=0,this.solutionLength=e.length;let s=Math.min(e.length,t.length);for(let n=0;n0&&u.length>0;)if(c.length<=u.length){a=c,c=[];for(let e of a)for(let t of o(e))if(l.has(t)||(c.push(t),l.set(t,e)),h.has(t))return[l,h,t]}else{a=u,u=[];for(let e of a)for(let t of r(e))if(h.has(t)||(u.push(t),h.set(t,e)),l.has(t))return[l,h,t]}throw new d("No path between "+t.toString()+" and "+i.toString()+".")}(e,t,i),o=[];null!=r;)o.push(r),r=s.get(r);for(r=n.get(o[0]),o.reverse();null!=r;)o.push(r),r=n.get(r)}(e,t,i)}catch(e){if(e instanceof d)return!1;throw e}return!0}class o{constructor(){this.graph={},this.node=new Map,this.adj=new Map,this.pred=new Map,this.succ=this.adj,this.edge=this.adj}addNode(e){this.succ.has(e)||(this.succ.set(e,new Map),this.pred.set(e,new Map),this.node.set(e))}addEdge(e,t){this.succ.has(e)||(this.succ.set(e,new Map),this.pred.set(e,new Map),this.node.set(e,{})),this.succ.has(t)||(this.succ.set(t,new Map),this.pred.set(t,new Map),this.node.set(t,{}));var i=this.adj.get(e).get(t)||{};this.succ.get(e).set(t,i),this.pred.get(t).set(e,i)}nodes(e=!1){return Array.from(e?this.node.entries():this.node.keys())}edges(e,t=!1){return Array.from(this.edgesIter(e,t))}nodesIter(e=!1){return e?toIterator(this.node):this.node.keys()}get(e){var t=this.adj.get(e);if(void 0===t)throw new KeyError("Graph does not contain node "+e+".");return t}numberOfNodes(){return this.node.size}*nbunchIter(e){if(null==e)yield*this.adj.keys();else if(this.hasNode(e))yield e;else{var t=this.adj;try{for(var i of toIterator(e))t.has(i)&&(yield i)}catch(e){if(e instanceof TypeError)throw new h("nbunch is not a node or a sequence of nodes")}}}*edgesIter(e,t=!1){var i;for(var s of((!0===(i=e)||!1===i||function(e){return!!e&&"object"==typeof e}(i)&&"[object Boolean]"==Object.prototype.toString.call(i))&&(t=e,e=void 0),void 0===e?this.adj:mapIterator(this.nbunchIter(e),(e=>tuple2(e,this.adj.get(e))))))for(var n of s[1]){var r=[s[0],n[0]];t&&(r[2]=n[1]),yield r}}reverse(e=!0){var t;if(e)(t=new this.constructor(null,{name:"Reverse of ("+this.name+")"})).addNodesFrom(this),t.addEdgesFrom(mapIterator(this.edgesIter(null,!0),(e=>tuple3c(e[1],e[0],deepcopy(e[2]),e)))),t.graph=deepcopy(this.graph),t.node=deepcopy(this.node);else{var i=this.pred,s=this.succ;this.succ=i,this.pred=s,this.adj=this.succ,t=this}return t}successorsIter(e){var t=this.succ.get(e);if(void 0!==t)return t.keys();throw new h(sprintf('The node "%j" is not in the digraph.',e))}predecessorsIter(e){var t=this.pred.get(e);if(void 0!==t)return t.keys();throw new h(sprintf('The node "%j" is not in the digraph.',e))}successors(e){return Array.from(this.successorsIter(e))}predecessors(e){return Array.from(this.predecessorsIter(e))}}class a{constructor(e){this.name="JSNetworkXException",this.message=e}}class l extends a{constructor(e){super(e),this.name="JSNetworkXAlgorithmError"}}class h extends a{constructor(e){super(e),this.name="JSNetworkXError"}}class c extends l{constructor(e){super(e),this.name="JSNetworkXUnfeasible"}}class d extends c{constructor(e){super(e),this.name="JSNetworkXNoPath"}}function u(e){var t=new o;for(let i of e){t.addNode(i.tag);for(let e of i.depends)t.addEdge(e,i.tag)}return t}function p(e,t){for(let i of e.edges())if(!t.has(i[0])&&!t.has(i[1]))return!1;return!0}class v extends n{inverseLISIndices(e,t){var i=this.problem.solution,s=t.map((e=>e.lines[0]));let n=u(i),a=new Set,l=new o;for(let e of s){for(let t of a)r(n,{source:e.tag,target:t.tag})&&l.addEdge(e.tag,t.tag);a.add(e)}let h=null,c=function(e){let t={};for(let i=0;i<=e.length;i++)t[i]=[];for(let i=0;i{for(let t=0;ti&&this.indentLeft.push(e.lines[0])}return this.incorrectIndents=this.indentLeft.length+this.indentRight.length,0==this.incorrectIndents}checkCorrectOrdering(e,t){if(!function(e){try{return function(e,t){var i=new Set,s=[],n=new Set;null==t&&(t=e.nodesIter());for(let l of t){if(n.has(l))return;for(var r=[l];r.length>0;){var o=r[r.length-1];if(n.has(o))r.pop();else{i.add(o);var a=[];e.get(o).forEach((function(e,t){if(!n.has(t)){if(i.has(t))throw new c("Graph contains a cycle.");a.push(t)}})),a.length>0?r.push.apply(r,a):(n.add(o),s.unshift(o))}}}}(e),!0}catch(e){if(e instanceof c)return!1;throw e}}(u(e)))throw"Dependency between blocks does not form a Directed Acyclic Graph; Problem unsolvable.";let i=new Set,s=!0;this.correctLines=0,this.solutionLength=e.length;let n=Math.min(e.length,t.length);for(let e=0;ee.trimStart().toLowerCase().startsWith("class ")))?this.text.toLowerCase().startsWith("class")?this.indent=0:this.indent=n.length-this.text.length:this.text.toLowerCase().startsWith("def")?this.indent=0:this.indent=n.length-this.text.length}else this.text=n.replace(/^\s*/,""),this.indent=n.length-this.text.length;"natural"==e.options.language||"math"==e.options.language?s=i?document.createElement("div"):document.createElement("p"):(s=document.createElement("code"),$(s).addClass(e.options.prettifyLanguage)),s.id=e.counterId+"-line-"+this.index,s.innerHTML+=this.text,this.view=s,e.lines.push(this)}initializeWidth(){this.width=$(this.view).outerWidth(!0)-this.problem.options.pixelsPerIndent*this.indent,this.view.fontSize=window.getComputedStyle(this.view,null).getPropertyValue("font-size"),this.view.pixelsPerIndent=this.problem.options.pixelsPerIndent,this.view.indent=this.indent;var e=document.createElement("canvas").getContext("2d"),t=window.getComputedStyle(this.view,null).getPropertyValue("font-family").split(", "),i="abcdefghijklmnopqrstuvwxyz0123456789,./!@#$%^&*-+";e.font=this.view.fontSize+" serif";var s=e.measureText(i).width;for(let n=0;n0&&$(o.view).addClass("indent"+r),n.appendChild(o.view)}var a=document.createElement("div");$(a).addClass("labels"),"left"==this.problem.options.numbered?($(n).addClass("border_left"),$(i).prepend(a),$(i).css({"justify-content":"flex-start"})):"right"==this.problem.options.numbered&&($(a).addClass("border_left"),$(a).css({float:"right"}),$(i).css({"justify-content":"space-between"}),$(i).append(a)),this.view=i,this.isPlaceholder=!1}addLine(e){if($(e.view).removeClass("indent1 indent2 indent3 indent4 indent5 indent6"),this.problem.noindent)e.indent>0&&$(e.view).addClass("indent"+e.indent);else{var t=this.lines,i=t[0].indent;for(let e=1;ee.indent)for(let i=0;i0&&($(e.view).removeClass("indent1 indent2 indent3 indent4 indent5 indent6"),$(e.view).addClass("indent"+e.indent))}this.indent=0,$(this.view).css({"padding-left":"",width:this.problem.areaWidth-22})}addLabel(e,t){var i=document.createElement("div");$(i).addClass("block-label"),"right"==this.problem.options.numbered&&$(i).addClass("right-label"),"left"==this.problem.options.numbered&&$(i).addClass("left-label"),$(i).append(document.createTextNode(e)),$(this.view).children(".labels")[0].append(i),0!=this.labels.length&&$(i).css("margin-top",(t-this.labels[this.labels.length-1][1]-1)*this.lines[t].view.offsetHeight),this.labels.push([e,t])}initializeInteractivity(){if($(this.view).hasClass("disabled"))return this;$(this.view).attr("tabindex","-1"),this.hammer=new(m().Manager)(this.view,{recognizers:[[m().Pan,{direction:m().DIRECTION_ALL,threshold:0,pointers:1}]]});var e=this;this.hammer.on("panstart",(function(t){e.panStart(t)})),this.hammer.on("panend",(function(t){e.panEnd(t)})),this.hammer.on("panmove",(function(t){e.panMove(t)}))}enabled(){return void 0!==$(this.view).attr("tabindex")}isDistractor(){return this.lines[0].distractor}inSourceArea(){var e=this.problem.sourceArea.childNodes;for(let t=0;t=0;s--){var i=e[s];if(i.pairedBin()==t)return i}return e[e.length-1]}}pairedBin(){for(var e=this.problem.pairedBins,t=0;t=0){for(e=0;e0)return s}for(e=0;e=s)break}this.problem.textMoving=!0,this.problem.sourceArea.insertBefore(this.view,t.view),$(this.view).focus()}else this.indent=this.indent-1;this.problem.state=void 0,this.problem.updateView()}}moveUp(){if(this.inSourceArea()){let n=this.problem.sourceBlocks();var e=this.verticalOffset(),t=this.validSourceIndexes();for(let r=0;r=e)return this.problem.textMoving=!0,this.problem.answerArea.insertBefore(this.view,s.view),$(this.view).focus(),this.problem.state=void 0,this.problem.updateView(),this}this.problem.textMoving=!0,this.problem.answerArea.appendChild(this.view),$(this.view).focus(),this.problem.state=void 0,this.problem.updateView()}else this.indent!==this.problem.indent&&(this.indent=this.indent+1,this.problem.state=void 0,this.problem.updateView())}moveDown(){if(this.inSourceArea()){let s=this.problem.sourceBlocks();var e=this.validSourceIndexes();for(let e=0;e1)return this.problem.textMoving=!0,this.problem.sourceArea.insertBefore(this.view,s[i].view),$(this.view).focus(),this.problem.state=void 0,this.problem.updateView(),this}}else{let e=this.problem.answerBlocks();for(var s=0;s=0;i--){var s=e[i];if(t)return this.problem.textFocus=s,s.makeTabIndex(),$(s.view).focus(),this;s.view.id==this.view.id&&(t=!0)}}selectRight(){if(this.inSourceArea()){var e=this.verticalOffset(),t=this.problem.enabledAnswerBlocks();if(0==t.length)return this;for(var i=t[0],s=i.verticalOffset()-e,n=1;n1?`${i} blocks are missing here`:`${i} block is missing here`,$(this.view).append(n),this.isPlaceholder=!0}}class k extends g{constructor(e){super(e,"placeholder",!1),this.isPlaceholderLine=!0}}class y extends b{constructor(e,t){super(e,t),this.isSettled=!0,$(this.view).addClass("settled-block"),$(this.view).addClass("disabled");let i=document.createElement("span");i.classList.add("settled-tooltip"),$(this.view).append(i),$(this.view).find(".settled-tooltip").text("OK")}setBlocksBefore(e){this.blocksBefore=e;var t=e>1?"s":"";if(this.blocksAfter){var i=this.blocksAfter>1?"s":"";$(this.view).find(".settled-tooltip").html(`${e} block${t} ⬆️️), ${this.blocksAfter} block${i} ⬇️`)}else $(this.view).find(".settled-tooltip").html(`${e} block${t} ⬆️️`)}setBlocksAfter(e){this.blocksAfter=e;var t=e>1?"s":"";if(this.blocksBefore){var i=this.blocksBefore>1?"s":"";$(this.view).find(".settled-tooltip").html(`${this.blocksBefore} block${i} ⬆️, ${e} block${t} ⬇️`)}else $(this.view).find(".settled-tooltip").html(`${e} block${t} ️️⬇️`)}}class x extends s.A{constructor(e){super(e);var t=e.orig;this.containerDiv=t,this.origElem=$(t).find("pre.parsonsblocks")[0],this.question=$(t).find(".parsons_question")[0],this.useRunestoneServices=e.useRunestoneServices,this.divid=e.orig.id;var i=super.localStorageKey();this.storageId=i,this.children=this.origElem.childNodes,this.contentArray=[],x.counter++,this.counterId="parsons-"+x.counter,this.initializeOptions(),this.grader="dag"===this.options.grader?new v(this):new n(this),this.grader.showfeedback=this.showfeedback;var s=$(this.origElem).html();this.blockIndex=0,this.checkCount=0,this.numDistinct=0,this.hasSolved=!1,this.initializeLines(s.trim()),this.initializeView(),this.caption="Parsons",this.addCaption("runestone"),this.checkServer("parsons",!0),this.runnableDiv=null}initializeOptions(){var e={pixelsPerIndent:30},t=$(this.origElem).data("maxdist"),i=$(this.origElem).data("order"),s=$(this.origElem).data("noindent"),n=$(this.origElem).data("adaptive"),r=$(this.origElem).data("numbered"),o=$(this.origElem).data("grader"),a=$(this.origElem).data("scaffolding");if(e.numbered=r,e.grader=o,e.scaffolding=a,void 0!==t&&(e.maxdist=t),void 0!==i){i=i.match(/\d+/g);for(var l=0;le.replace(/\s+/g,"")))).indexOf("#tag:"),""==(y=o.substring(w+5,o.indexOf(";",w+5)))&&(y="block-"+r),x=o.indexOf(";depends:");let e=o.substring(x+9,o.indexOf(";",x+9));h=e.length>0?e.split(","):[]}if(o.includes('class="displaymath')?a.displaymath=!0:a.displaymath=!1,o=o.replace(/#(paired|distractor|settled|tag:.*;.*;)/,(function(e,t){return a[t]=!0,""})),a.settled&&r>0&&u.length>0&&!u[u.length-1].isSettled){var d=new k(this);u.push(d),d.distractor=!0,d.paired=!1,d.distractHelptext="",d.groupWithNext=!1,d.indent=0}a.settled&&(n=!0);var u=[];if(a.displaymath)p=[o];else var p=o.split("\n");for(var v=0;v0){for(v=0;v0&&(n-=1),t.indent=n}}else{s=s.sort((function(e,t){return e-t}));for(let e=0;ee.replace(/\s+/g,"")))).indexOf("#tag:"),""==(y=o.substring(w+5,o.indexOf(";",w+5)))&&(y="block-"+r),x=o.indexOf(";depends:");let e=o.substring(x+9,o.indexOf(";",x+9));h=e.length>0?e.split(","):[]}if(o.includes('class="displaymath')?a.displaymath=!0:a.displaymath=!1,o=o.replace(/\s*#(paired|distractor|tag:.*;.*;)\s*/g,(function(e,t){return a[t]=!0,""})),u=[],a.displaymath)p=[o];else p=o.split("\n");for(v=0;v0){for(v=0;vawait f.queueMathJax(e[0]))):void 0!==MathJax.startup&&await f.queueMathJax(e[0])),u=Math.max(u,e.outerWidth(!0)),e.width(u-22);var t=3.8;let i=e.outerHeight(!0);38!=i&&(t=3.1*(i-38)/21),p+=i+g*t}.bind(this),s=0;s0&&a<=4?$(this.answerArea).addClass("answer"+a):$(this.answerArea).addClass("answer");var m=[],b=[];for(s=0;s0&&(m.push(b),b=[]):(b.push(w),w.groupWithNext||(m.push(b),b=[]))}var k,y=[],x=[],_=[];if(this.pairDistractors||!this.options.adaptive){for(s=m.length-1;s>-1;s--)if((b=m[s])[0].paired)for(k=b.length-1;k>-1;k--)x.unshift(b[k].index);else if(x.length>0){for(k=b.length-1;k>-1;k--)x.unshift(b[k].index);y.unshift(x),x=[]}for(s=0;sor{"),_.push(C),this.sourceArea.appendChild(C)}}else y=[];p+=10*y.length,this.areaHeight=p+40,$(this.sourceArea).css({width:this.areaWidth+2,height:p}),$(this.answerArea).css({width:this.options.pixelsPerIndent*a+this.areaWidth+2,height:p}),this.pairedBins=y,this.pairedDivs=_,null!=this.options.numbered&&this.addBlockLabels(e.concat(t)),this.state=void 0,this.updateView(),h&&$(l).replaceWith(this.outerDiv)}initializeInteractivity(){for(var e=0;e(s=this.dateFromTimestamp(s))?e:t}async loadData(e){if(!0===this.options.scaffolding){null==(i=e.source)&&(i=e.trash);var t=e.answer;void 0!==(n=null==(s=e.adaptive)?{}:this.optionsFromHash(s)).noindent&&(this.noindent=!0),void 0!==n.checkCount&&(this.checkCount=n.checkCount),void 0!==n.hasSolved&&(this.hasSolved=n.hasSolved),await this.initializeAreas(this.blocksFromSource(),this.settledBlocksFromSource(),n),!0!==this.needsReinitialization&&(this.initializeInteractivity(),this.isTimed&&!this.assessmentTaken&&this.resetView())}else{var i,s,n;null==(i=e.source)&&(i=e.trash),t=e.answer,void 0!==(n=null==(s=e.adaptive)?{}:this.optionsFromHash(s)).noindent&&(this.noindent=!0),void 0!==n.checkCount&&(this.checkCount=n.checkCount),void 0!==n.hasSolved&&(this.hasSolved=n.hasSolved),null==i||null==t||1==t.length?await this.initializeAreas(this.blocksFromSource(),[],n):(this.initializeAreas(this.blocksFromHash(i),this.blocksFromHash(t),n),this.grade=this.grader.grade(),"correct"==this.grade?this.correct=!0:0==this.answerLines().length?this.correct=null:this.correct=!1),!0!==this.needsReinitialization&&(this.initializeInteractivity(),this.isTimed&&!this.assessmentTaken&&this.resetView())}}localData(){var e=localStorage.getItem(this.storageId);return null!==e&&"{"==e.charAt(0)?JSON.parse(e):{}}restoreAnswers(e){this.loadData(e)}checkLocalStorage(){this.graderactive||this.loadData(this.localData())}setLocalStorage(e){var t;if(null==e){t={source:this.sourceHash(),answer:this.answerHash(),timestamp:new Date};var i=this.adaptiveHash();i.length>0&&(t.adaptive=i)}else t=e;localStorage.setItem(this.storageId,JSON.stringify(t))}async updatePlaceholders(){setTimeout((()=>{var e,t,i,s=this.answerBlocks();for(e=0;e0&&!s[e-1].isSettled&&!s[e-1].isPlaceholder&&(t=!0),e{for(var e=this.answerBlocks(),t=0;t=t;o--)if(e[o].afterSettledBlockCount==r){n=e[o];break}if(e[o].afterSettledBlockCount!=r)return void console.log("error moving up; no placeholder found");if($(n.view).hasClass("hide")){$(n.view).removeClass("hide");for(var a=0;a0&&(i.disabled=s),i}answerHash(){for(var e=[],t=this.answerBlocks(),i=0;ib&&(f-=1),t.lines[t.lines.length-1].indent==g.lines[0].indent&&(f+=1),f>=p&&(p=f,v=u)}for(t=d[v],g=d[v+1],u=0;u-1?r.push(t):a.push(s):r.push(t);n=r,r=[]}}if(this.recentAttempts<2?this.pairDistractors=!1:this.pairDistractors=!0,void 0===this.options.order){var c=[],d=[];for(s=0;s1)for(d=this.shuffled(d),p=0;p=0){for(var p=s;$.inArray(e[p-1],r)<0;)p--;var v=$.inArray(e[p-1],r),g=$.inArray(e[s],r);r.splice(g,1),r.splice(v,0,e[s])}return r}blockFromHash(e){for(var t=e.split("_"),i=[],s=0;s0&&l.setBlocksBefore(a),o=l,r++,n=0,s=[]}else s[0].distractor||n++,s=[];return i.length>0&&i[i.length-1].isSettled&&(this.lastBlockSettled=!0),console.log("settledblocksfromsource",i),i}getBlockById(e){for(var t=0;t1?$.i18n("msg_parson_correct",this.checkCount):$.i18n("msg_parson_correct_first_try");this.options.runnable&&(i+=" "+$.i18n("msg_parson_correct_runnable")),setTimeout((()=>{e.html(i)}),10)}if("incorrectTooShort"===this.grade&&(t.addClass("incorrect"),this.messageDiv.style.visibility="visible",e.attr("class","alert alert-danger"),setTimeout((()=>{e.html($.i18n("msg_parson_too_short"))}),10)),"incorrectIndent"===this.grade){var i=[];for(let e=0;e{1==i.length?e.html($.i18n("msg_parson_wrong_indent")):e.html($.i18n("msg_parson_wrong_indents"))}),10)}if("incorrectMoveBlocks"===this.grade){var s=this.answerBlocks(),n=[],r=[],o=[];for(let e=0;e{e.html($.i18n("msg_parson_wrong_order"))}),10)}}initializeAdaptive(){if(this.adaptiveId=super.localStorageKey(),this.canHelp=!0,this.checkCount=0,this.numDistinct=0,this.gotHelp=!1,localStorage.getItem(this.adaptiveId+"Problem")==this.divid)return this.checkCount=localStorage.getItem(this.adaptiveId+this.divid+"Count"),null==this.checkCount&&(this.checkCount=0),this;var e=localStorage.getItem(this.adaptiveId+this.divid+"Count");null!=e&&"NaN"!=e||(e=0),this.checkCount=e,this.recentAttempts=localStorage.getItem(this.adaptiveId+"recentAttempts"),null!=this.recentAttempts&&"NaN"!=this.recentAttempts||(this.recentAttempts=3),localStorage.setItem(this.adaptiveId+"recentAttempts",this.recentAttempts),localStorage.setItem(this.adaptiveId+"Problem",this.divid),localStorage.setItem(this.adaptiveId+this.divid+"Count",this.checkCount),localStorage.setItem(this.adaptiveId+"Solved",!1)}usesIndentation(){return!this.noindent&&0!=this.solutionIndent()}distractorToRemove(){var e,t=this.enabledAnswerBlocks();for(let i=0;i{t.html($.i18n("msg_parson_not_solution"))}),10),e.lines[0].distractHelptext&&(e.view.setAttribute("data-toggle","tooltip"),e.view.setAttribute("title",e.lines[0].distractHelptext)),e.disable(),e.inSourceArea())$(e.view).css({"border-color":"#000","background-color":"#fff"}),$(e.view).animate({opacity:.3,"border-color":"#d3d3d3","background-color":"#efefef"},{duration:2e3,complete:function(){$(e.view).css({"border-color":"","background-color":""})}});else{var i=this.sourceArea.getBoundingClientRect(),s=e.pageXCenter()-1,n=e.pageYCenter(),r=i.left+window.pageXOffset+i.width/2,o=i.top+window.pageYOffset+e.view.getBoundingClientRect().height/2,a=e.slideUnderBlock();void 0!==a&&(o+=a.view.getBoundingClientRect().height+20,o+=parseInt($(a.view).css("top")));var l=this;$(e.view).css({"border-color":"#000","background-color":"#fff"}),$(e.view).animate({opacity:1},{duration:4*Math.sqrt(Math.pow(o-n,2)+Math.pow(r-s,2))+500,start:function(){l.moving=e,l.movingX=s,l.movingY=n,l.updateView()},progress:function(e,t,i){l.movingX=s*(1-t)+r*t,l.movingY=n*(1-t)+o*t,l.updateView()},complete:function(){delete l.moving,delete l.movingX,delete l.movingY,l.updateView(),$(e.view).animate({opacity:.3,"border-color":"#d3d3d3","background-color":"#efefef"},{duration:1e3,complete:function(){$(e.view).css({opacity:"","border-color":"","background-color":""}),$(e.view).addClass("disabled")}})}})}}removeIndentation(){var e=$(this.messageDiv);this.messageDiv.style.visibility="visible",e.attr("class","alert alert-info"),setTimeout((()=>{e.html($.i18n("msg_parson_provided_indent"))}),10);for(var t,i,s=200,n=0;n0&&t.indexOf(s)<0)return s;return null}getFurthestBlock(){for(var e=this.solutionBlocks(),t=this.answerBlocks(),i=0,s=0,n=null,r=null,o=0,a=null,l=0,h=0;h0&&(a=e[o-1],l=t.indexOf(a),(s=Math.abs(h-l))>i&&(i=s,n=r));return n}combineBlocks(){var e=this.solutionBlocks(),t=this.answerBlocks(),i=this.sourceBlocks(),s=$(this.messageDiv);this.messageDiv.style.visibility="visible",s.attr("class","alert alert-info"),setTimeout((()=>{s.html($.i18n("msg_parson_combined_blocks"))}),10);var n=null,r=null;null==(r=this.getSolutionBlockInSource())&&(r=this.getFurthestBlock());var o=e.indexOf(r);n=e[o-1];var a=t.indexOf(n),l=t.indexOf(r),h=!1;a>=0&&l>=0?h=a+1!==l:a<0&&l<0?h=(a=i.indexOf(n))+1!==(l=i.indexOf(r)):(h=!0,a<0&&(a=i.indexOf(n)),l<0&&(l=i.indexOf(r)));var c=l3?(alert($.i18n("msg_parson_will_combine")),this.combineBlocks(),this.logMove("combinedBlocks")):(alert($.i18n("msg_parson_three_blocks_left")),this.canHelp=!1):(alert($.i18n("msg_parson_remove_incorrect")),this.removeDistractor(e),this.logMove("removedDistractor-"+e.hash()))}helpMe(){this.clearFeedback(),this.numDistinct<3?alert($.i18n("msg_parson_atleast_three_attempts")):(this.gotHelp=!0,this.makeEasier())}dateFromTimestamp(e){var t=new Date(e);if(isNaN(t.getTime())){var i=e.split(/[- :]/);t=new Date(i[0],i[1]-1,i[2],i[3],i[4],i[5])}return t}shuffled(e){for(var t,i,s=e.length,n=e.slice();0!==s;)i=Math.floor(Math.random()*s),t=n[s-=1],n[s]=n[i],n[i]=t;return n}enterKeyboardMode(){$(this.keyboardTip).show(),$(this.sourceLabel).hide(),$(this.answerLabel).hide(),this.clearFeedback()}exitKeyboardMode(){$(this.keyboardTip).hide(),$(this.sourceLabel).show(),$(this.answerLabel).show()}clearFeedback(){$(this.answerArea).removeClass("incorrect correct");for(var e=this.answerArea.childNodes,t=0;t=i.left&&e<=i.right&&t>=i.top&&t<=i.bottom?"answer":e>=(i=this.sourceArea.getBoundingClientRect()).left&&e<=i.right&&t>=i.top&&t<=i.bottom?"source":"moving"}updateView(){var e,t,i,s=this.state,n=this.movingState(),r=!0,o=!0,a="moving"==n;s==n&&("rest"==n?(r=!1,o=!1):"source"==n?o=!1:"answer"==n?r=!1:"moving"==n&&(o=!1,r=!1)),void 0!==this.moving&&(e=$(this.moving.view).outerHeight(!0),$(this.moving.view).detach());var l,h,c=this.areaWidth-22;if(r){t=0;var d=this.sourceBlocks();if("source"==n){var u=!1,p=this.moving.pairedBin(),v=[];for(y=0;yor{")}1==_.length&&$(C).html("")}}if(o)if(t=0,i=this.areaWidth+this.indent*this.options.pixelsPerIndent-22,d=this.answerBlocks(),"answer"==n){u=!1,f=this.movingX-this.answerArea.getBoundingClientRect().left-window.pageXOffset-c/2-11;var A=Math.round(f/this.options.pixelsPerIndent);for(A<0?A=0:A>this.indent?A=this.indent:f=A*this.options.pixelsPerIndent,m=this.movingY-this.answerArea.getBoundingClientRect().top-window.pageYOffset,this.moving.indent=A,y=0;y=10&&(o+=" "),e[a].addLabel(o,0),s++}n+this.pairedBins.length>=10&&(this.areaWidth+=5,$(this.sourceArea).css({width:$(this.sourceArea).width()+5}),$(this.answerArea).css({width:$(this.answerArea).width()+5}))}resetView(){if(this.clearFeedback(),!0===this.options.scaffolding){const e=document.querySelector(`#copy-answer-button-${this.divid}`);e&&e.classList.add("copy-button-hide")}var e,t=document.body.scrollTop;for(let t=0;t{$.i18n().load({"pt-br":{msg_parson_check_me:"Verificar",msg_parson_reset:"Resetar",msg_parson_help:"Ajuda",msg_parson_too_short:"Seu programa é muito curto. Adicione mais blocos.",msg_parson_drag_from_here:"Arraste daqui",msg_parson_drag_to_here:"Largue os blocos aqui",msg_parson_correct_first_try:"Perfeito! Você levou apenas uma tentativa para resolver. Bom trabalho!",msg_parson_correct:"Perfeito! Você levou $1 tentativas para resolver. Clique em Resetar para tentar resolver em uma tentativa.",msg_parson_wrong_indent:"Este bloco não está indentado corretamente. Indente mais arrastando-o para a direita ou reduza a indentação arrastando para a esquerda.",msg_parson_wrong_indents:"Estes blocos não estão indentados corretamente. Para indentar mais, arraste o bloco para a direita. Para reduzir a indentação, arraste para a esquerda.",msg_parson_wrong_order:"Blocos destacados no seu programa estão errados ou estão na ordem errada. Isso pode ser resolvido movendo, excluindo ou substituindo os blocos destacados.",msg_parson_arrow_navigate:"Use as teclas de setas para navegar. Espaço para selecionar/ desmarcar blocos para mover.",msg_parson_help_info:"Clique no botão Ajuda se você quiser facilitar o problema",msg_parson_not_solution:"Foi desabilitado um bloco de código desnecessário (que não faz parte da solução).",msg_parson_provided_indent:"Foi fornecida a indentação.",msg_parson_combined_blocks:"Dois blocos de códigos foram combinados em um.",msg_parson_remove_incorrect:"Será removido um bloco de código incorreto da área de resposta",msg_parson_will_combine:"Serão combinados dois blocos",msg_parson_atleast_three_attempts:"Você deve tentar pelo menos três vezes antes de pedir ajuda",msg_parson_three_blocks_left:"Restam apenas 3 blocos corretos. Você deve colocá-los em ordem",msg_parson_will_provide_indent:"Será fornecida a indentação"}})},75794:()=>{$.i18n().load({en:{msg_parson_check_me:"Check",msg_parson_reset:"Reset",msg_parson_help:"Help me",msg_parson_too_short:"Your answer is too short. Add more blocks.",msg_parson_drag_from_here:"Drag from here",msg_parson_drag_to_here:"Drop blocks here",msg_parson_correct_first_try:"Perfect! It took you only one try to solve this. Great job!",msg_parson_correct:"Perfect! It took you $1 tries to solve this. Click Reset to try to solve it in one attempt.",msg_parson_correct_runnable:"Click Run below to test out your solution.",msg_parson_wrong_indent:"This block is not indented correctly. Either indent it more by dragging it right or reduce the indention by dragging it left.",msg_parson_wrong_indents:"These blocks are not indented correctly. To indent a block more, drag it to the right. To reduce the indention, drag it to the left.",msg_parson_wrong_order:"Highlighted blocks in your answer are wrong or are in the wrong order. This can be fixed by moving, removing, or replacing highlighted blocks.",msg_parson_arrow_navigate:"Arrow keys to navigate. Space to select / deselect block to move.",msg_parson_help_info:"Click on the Help Me button if you want to make the problem easier",msg_parson_not_solution:"Disabled an unneeded code block (one that is not part of the solution).",msg_parson_provided_indent:"Provided the indentation.",msg_parson_combined_blocks:"Combined two code blocks into one.",msg_parson_remove_incorrect:"Will remove an incorrect code block from answer area",msg_parson_will_combine:"Will combine two blocks",msg_parson_atleast_three_attempts:"You must make at least three distinct full attempts at a solution before you can get help",msg_parson_three_blocks_left:"There are only 3 correct blocks left. You should be able to put them in order",msg_parson_will_provide_indent:"Will provide indentation"}})},78811:()=>{function e(){var t=navigator&&navigator.userAgent&&/\bMSIE 6\./.test(navigator.userAgent);return e=function(){return t},t}!function(){var t="break continue do else for if return while ",i=t+"auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try ",s=i+"alignof align_union asm axiom bool concept concept_map const_cast constexpr decltype dynamic_cast explicit export friend inline late_check mutable namespace nullptr reinterpret_cast static_assert static_cast template typeid typename typeof using virtual wchar_t where ",n=i+"boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient ",r=i+"debugger eval export function get null set undefined var with Infinity NaN ",o="caller delete die do dump elsif eval exit foreach for goto if import last local my next no our print package redo require sub undef unless until use wantarray while BEGIN END ",a=t+"and as assert class def del elif except exec finally from global import in is lambda nonlocal not or pass print raise try with yield False True None ",l=t+"alias and begin case class def defined elsif end ensure false in module next nil not or redo rescue retry self super then true undef unless until when yield BEGIN END ",h=t+"case done elif esac eval fi function in local set then until ",c=s+(n+"as base by checked decimal delegate descending event fixed foreach from group implicit in interface internal into is lock object out override orderby params readonly ref sbyte sealed stackalloc string select uint ulong unchecked unsafe ushort var ")+r+o+a+l+h;function d(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"}function u(e,t,i,s){e.unshift(i,s||0);try{t.splice.apply(t,e)}finally{e.splice(0,2)}}var p=function(){for(var e=["!","!=","!==","#","%","%=","&","&&","&&=","&=","(","*","*=","+=",",","-=","->","/","/=",":","::",";","<","<<","<<=","<=","=","==","===",">",">=",">>",">>=",">>>",">>>=","?","@","[","^","^=","^^","^^=","{","|","|=","||","||=","~","break","case","continue","delete","do","else","finally","instanceof","return","throw","try","typeof"],t="(?:(?:(?:^|[^0-9.])\\.{1,3})|(?:(?:^|[^\\+])\\+)|(?:(?:^|[^\\-])-)",i=0;i:&])/g,"\\$1")}return t+="|^)\\s*$",new RegExp(t)}(),v=/&/g,g=//g,m=/\"/g;function b(e){return e.replace(v,"&").replace(g,"<").replace(f,">")}var w=/</g,k=/>/g,y=/'/g,$=/"/g,x=/&/g,_=/ /g;function C(e){var t=e.indexOf("&");if(t<0)return e;for(--t;(t=e.indexOf("&#",t+1))>=0;){var i=e.indexOf(";",t);if(i>=0){var s=e.substring(t+3,i),n=10;s&&"x"===s.charAt(0)&&(s=s.substring(1),n=16);var r=parseInt(s,n);isNaN(r)||(e=e.substring(0,t)+String.fromCharCode(r)+e.substring(i+1))}}return e.replace(w,"<").replace(k,">").replace(y,"'").replace($,'"').replace(x,"&").replace(_," ")}function I(e){return"XMP"===e.tagName}function A(e,t){switch(e.nodeType){case 1:var i=e.tagName.toLowerCase();t.push("<",i);for(var s=0;s");for(var r=e.firstChild;r;r=r.nextSibling)A(r,t);!e.firstChild&&/^(?:br|link|img)$/.test(i)||t.push("");break;case 2:t.push(e.name.toLowerCase(),'="',function(e){return e.replace(v,"&").replace(g,"<").replace(f,">").replace(m,""")}(e.value),'"');break;case 3:case 4:t.push(b(e.nodeValue))}}var S=null;function T(e){if(null===S){var t=document.createElement("PRE");t.appendChild(document.createTextNode('\n')),S=!/||<\/?[a-zA-Z][^>]*>|<)/g,D=/^\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n inText.isInText = true;\n\n function inTag(stream, state) {\n var ch = stream.next();\n if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n\n function inAttribute(quote) {\n var closure = function(stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n return \"string\";\n };\n closure.isInAttribute = true;\n return closure;\n }\n\n function inBlock(style, terminator) {\n return function(stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n stream.next();\n }\n return style;\n }\n }\n\n function doctype(depth) {\n return function(stream, state) {\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n return \"meta\";\n };\n }\n\n function lower(tagName) {\n return tagName && tagName.toLowerCase();\n }\n\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName || \"\";\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n this.noIndent = true;\n }\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n while (true) {\n if (!state.context) {\n return;\n }\n parentTagName = state.context.tagName;\n if (!config.contextGrabbers.hasOwnProperty(lower(parentTagName)) ||\n !config.contextGrabbers[lower(parentTagName)].hasOwnProperty(lower(nextTagName))) {\n return;\n }\n popContext(state);\n }\n }\n\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return attrState(type, stream, state);\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName &&\n config.implicitlyClosed.hasOwnProperty(lower(state.context.tagName)))\n popContext(state);\n if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return closeState(type, stream, state);\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n popContext(state);\n return baseState;\n }\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName, tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n if (type == \"selfcloseTag\" ||\n config.autoSelfClosers.hasOwnProperty(lower(tagName))) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n return baseState;\n }\n setStyle = \"error\";\n return attrState;\n }\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!config.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n\n return {\n startState: function(baseIndent) {\n var state = {tokenize: inText,\n state: baseState,\n indented: baseIndent || 0,\n tagName: null, tagStart: null,\n context: null}\n if (baseIndent != null) state.baseIndent = baseIndent\n return state\n },\n\n token: function(stream, state) {\n if (!state.tagName && stream.sol())\n state.indented = stream.indentation();\n\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle)\n style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n return style;\n },\n\n indent: function(state, textAfter, fullLine) {\n var context = state.context;\n // Indent multi-line strings (e.g. css).\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented)\n return state.stringStartCol + 1;\n else\n return state.indented + indentUnit;\n }\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText)\n return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n // Indent the starts of attribute names.\n if (state.tagName) {\n if (config.multilineTagIndentPastTag !== false)\n return state.tagStart + state.tagName.length + 2;\n else\n return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n }\n if (config.alignCDATA && /$/,\n blockCommentStart: \"\",\n\n configuration: config.htmlMode ? \"html\" : \"xml\",\n helperType: config.htmlMode ? \"html\" : \"xml\",\n\n skipAttribute: function(state) {\n if (state.state == attrValueState)\n state.state = attrState\n },\n\n xmlCurrentTag: function(state) {\n return state.tagName ? {name: state.tagName, close: state.type == \"closeTag\"} : null\n },\n\n xmlCurrentContext: function(state) {\n var context = []\n for (var cx = state.context; cx; cx = cx.prev)\n context.push(cx.tagName)\n return context.reverse()\n }\n };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HEADER_TITLE_PROPERTIES_MAP = {\n titleAnchor: 'anchor',\n titleAngle: 'angle',\n titleBaseline: 'baseline',\n titleColor: 'color',\n titleFont: 'font',\n titleFontSize: 'fontSize',\n titleFontWeight: 'fontWeight',\n titleLimit: 'limit'\n};\nexports.HEADER_LABEL_PROPERTIES_MAP = {\n labelAngle: 'angle',\n labelColor: 'color',\n labelFont: 'font',\n labelFontSize: 'fontSize',\n labelLimit: 'limit',\n};\nexports.HEADER_TITLE_PROPERTIES = Object.keys(exports.HEADER_TITLE_PROPERTIES_MAP);\nexports.HEADER_LABEL_PROPERTIES = Object.keys(exports.HEADER_LABEL_PROPERTIES_MAP);\n//# sourceMappingURL=header.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar channel_1 = require(\"../../../channel\");\nvar log = tslib_1.__importStar(require(\"../../../log\"));\nvar scale_1 = require(\"../../../scale\");\nvar selection_1 = require(\"../selection\");\nvar scaleBindings = {\n has: function (selCmpt) {\n return selCmpt.type === 'interval' && selCmpt.resolve === 'global' &&\n selCmpt.bind && selCmpt.bind === 'scales';\n },\n parse: function (model, selDef, selCmpt) {\n var bound = selCmpt.scales = [];\n selCmpt.project.forEach(function (p) {\n var channel = p.channel;\n var scale = model.getScaleComponent(channel);\n var scaleType = scale ? scale.get('type') : undefined;\n if (!scale || !scale_1.hasContinuousDomain(scaleType) || scale_1.isBinScale(scaleType)) {\n log.warn(log.message.SCALE_BINDINGS_CONTINUOUS);\n return;\n }\n scale.set('domainRaw', { signal: selection_1.channelSignalName(selCmpt, channel, 'data') }, true);\n bound.push(channel);\n // Bind both x/y for diag plot of repeated views.\n if (model.repeater && model.repeater.row === model.repeater.column) {\n var scale2 = model.getScaleComponent(channel === channel_1.X ? channel_1.Y : channel_1.X);\n scale2.set('domainRaw', { signal: selection_1.channelSignalName(selCmpt, channel, 'data') }, true);\n }\n });\n },\n topLevelSignals: function (model, selCmpt, signals) {\n // Top-level signals are only needed when coordinating composed views.\n if (!model.parent) {\n return signals;\n }\n var channels = selCmpt.scales.filter(function (channel) {\n return !(signals.filter(function (s) { return s.name === selection_1.channelSignalName(selCmpt, channel, 'data'); }).length);\n });\n return signals.concat(channels.map(function (channel) {\n return { name: selection_1.channelSignalName(selCmpt, channel, 'data') };\n }));\n },\n signals: function (model, selCmpt, signals) {\n // Nested signals need only push to top-level signals when within composed views.\n if (model.parent) {\n selCmpt.scales.forEach(function (channel) {\n var signal = signals.filter(function (s) { return s.name === selection_1.channelSignalName(selCmpt, channel, 'data'); })[0];\n signal.push = 'outer';\n delete signal.value;\n delete signal.update;\n });\n }\n return signals;\n }\n};\nexports.default = scaleBindings;\nfunction domain(model, channel) {\n var scale = vega_util_1.stringValue(model.scaleName(channel));\n return \"domain(\" + scale + \")\";\n}\nexports.domain = domain;\n//# sourceMappingURL=scales.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar bin_1 = require(\"../../bin\");\nvar channel_1 = require(\"../../channel\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar log = tslib_1.__importStar(require(\"../../log\"));\nvar scale_1 = require(\"../../scale\");\nvar type_1 = require(\"../../type\");\nvar util_1 = require(\"../../util\");\n// TODO: we need to refactor this method after we take care of config refactoring\n/**\n * Default rules for whether to show a grid should be shown for a channel.\n * If `grid` is unspecified, the default value is `true` for ordinal scales that are not binned\n */\nfunction grid(scaleType, fieldDef) {\n return !scale_1.hasDiscreteDomain(scaleType) && !fieldDef.bin;\n}\nexports.grid = grid;\nfunction gridScale(model, channel) {\n var gridChannel = channel === 'x' ? 'y' : 'x';\n if (model.getScaleComponent(gridChannel)) {\n return model.scaleName(gridChannel);\n }\n return undefined;\n}\nexports.gridScale = gridScale;\nfunction labelFlush(fieldDef, channel, specifiedAxis) {\n if (specifiedAxis.labelFlush !== undefined) {\n return specifiedAxis.labelFlush;\n }\n if (channel === 'x' && util_1.contains(['quantitative', 'temporal'], fieldDef.type)) {\n return true;\n }\n return undefined;\n}\nexports.labelFlush = labelFlush;\nfunction labelOverlap(fieldDef, specifiedAxis, channel, scaleType) {\n if (specifiedAxis.labelOverlap !== undefined) {\n return specifiedAxis.labelOverlap;\n }\n // do not prevent overlap for nominal data because there is no way to infer what the missing labels are\n if (fieldDef.type !== 'nominal') {\n if (scaleType === 'log') {\n return 'greedy';\n }\n return true;\n }\n return undefined;\n}\nexports.labelOverlap = labelOverlap;\nfunction orient(channel) {\n switch (channel) {\n case channel_1.X:\n return 'bottom';\n case channel_1.Y:\n return 'left';\n }\n /* istanbul ignore next: This should never happen. */\n throw new Error(log.message.INVALID_CHANNEL_FOR_AXIS);\n}\nexports.orient = orient;\nfunction tickCount(channel, fieldDef, scaleType, size) {\n if (!scale_1.hasDiscreteDomain(scaleType) && scaleType !== 'log' && !util_1.contains(['month', 'hours', 'day', 'quarter'], fieldDef.timeUnit)) {\n if (fieldDef.bin) {\n // for binned data, we don't want more ticks than maxbins\n return { signal: \"ceil(\" + size.signal + \"/20)\" };\n }\n return { signal: \"ceil(\" + size.signal + \"/40)\" };\n }\n return undefined;\n}\nexports.tickCount = tickCount;\nfunction title(maxLength, fieldDef, config) {\n // if not defined, automatically determine axis title from field def\n var fieldTitle = fielddef_1.title(fieldDef, config);\n return maxLength ? vega_util_1.truncate(fieldTitle, maxLength) : fieldTitle;\n}\nexports.title = title;\nfunction values(specifiedAxis, model, fieldDef, channel) {\n var vals = specifiedAxis.values;\n if (vals) {\n return fielddef_1.valueArray(fieldDef, vals);\n }\n if (fieldDef.bin && fieldDef.type === type_1.QUANTITATIVE) {\n var domain = model.scaleDomain(channel);\n if (domain && domain !== 'unaggregated' && !scale_1.isSelectionDomain(domain)) { // explicit value\n return undefined;\n }\n var signal = model.getName(bin_1.binToString(fieldDef.bin) + \"_\" + fieldDef.field + \"_bins\");\n return { signal: \"sequence(\" + signal + \".start, \" + signal + \".stop + \" + signal + \".step, \" + signal + \".step)\" };\n }\n return undefined;\n}\nexports.values = values;\n//# sourceMappingURL=properties.js.map","const VIEW = 'view',\n LBRACK = '[',\n RBRACK = ']',\n LBRACE = '{',\n RBRACE = '}',\n COLON = ':',\n COMMA = ',',\n NAME = '@',\n GT = '>',\n ILLEGAL = /[[\\]{}]/,\n DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n};\nlet DEFAULT_SOURCE, MARKS;\n/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\n\nfunction eventSelector (selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n}\n\nfunction isMarkType(type) {\n return MARKS[type];\n}\n\nfunction find(s, i, endChar, pushChar, popChar) {\n const n = s.length;\n let count = 0,\n c;\n\n for (; i < n; ++i) {\n c = s[i];\n if (!count && c === endChar) return i;else if (popChar && popChar.indexOf(c) >= 0) --count;else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n\n return i;\n}\n\nfunction parseMerge(s) {\n const output = [],\n n = s.length;\n let start = 0,\n i = 0;\n\n while (i < n) {\n i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n\n return output;\n}\n\nfunction parseSelector(s) {\n return s[0] === '[' ? parseBetween(s) : parseStream(s);\n}\n\nfunction parseBetween(s) {\n const n = s.length;\n let i = 1,\n b;\n i = find(s, i, RBRACK, LBRACK, RBRACK);\n\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n\n b = parseMerge(s.substring(1, i));\n\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n\n s = s.slice(i + 1).trim();\n\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n\n b = b.map(parseSelector);\n const stream = parseSelector(s.slice(1).trim());\n\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n\n return stream;\n}\n\nfunction parseStream(s) {\n const stream = {\n source: DEFAULT_SOURCE\n },\n source = [];\n let throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0,\n j,\n filter; // extract throttle from end\n\n if (s[n - 1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i + 1, n - 1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n\n i = 0;\n }\n\n if (!n) throw s; // set name flag based on first char\n\n if (s[0] === NAME) markname = ++i; // extract first part of multi-part stream selector\n\n j = find(s, i, COLON);\n\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n } // extract remaining part of stream selector\n\n\n i = find(s, i, LBRACK);\n\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n } // extract filters\n\n\n while (i < n) {\n i = find(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n - 1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n } // marshall event stream specification\n\n\n if (!(n = source.length) || ILLEGAL.test(source[n - 1])) {\n throw 'Invalid event selector: ' + s;\n }\n\n if (n > 1) {\n stream.type = source[1];\n\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1);\n }\n\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n return stream;\n}\n\nfunction parseThrottle(s) {\n const a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(_ => {\n const x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n\nexport { eventSelector as selector };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar split_1 = require(\"../split\");\nvar LegendComponent = /** @class */ (function (_super) {\n tslib_1.__extends(LegendComponent, _super);\n function LegendComponent() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return LegendComponent;\n}(split_1.Split));\nexports.LegendComponent = LegendComponent;\n//# sourceMappingURL=component.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar vega_util_1 = require(\"vega-util\");\nfunction isSortField(sort) {\n return !!sort && (sort['op'] === 'count' || !!sort['field']) && !!sort['op'];\n}\nexports.isSortField = isSortField;\nfunction isSortArray(sort) {\n return !!sort && vega_util_1.isArray(sort);\n}\nexports.isSortArray = isSortArray;\n//# sourceMappingURL=sort.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar channel_1 = require(\"../../channel\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar log = tslib_1.__importStar(require(\"../../log\"));\nvar scale_1 = require(\"../../scale\");\nvar vega_schema_1 = require(\"../../vega.schema\");\nvar mixins = tslib_1.__importStar(require(\"./mixins\"));\nvar ref = tslib_1.__importStar(require(\"./valueref\"));\nexports.bar = {\n vgMark: 'rect',\n encodeEntry: function (model) {\n return tslib_1.__assign({}, mixins.baseEncodeEntry(model, { size: 'ignore', orient: 'ignore' }), x(model), y(model));\n }\n};\nfunction x(model) {\n var config = model.config, encoding = model.encoding, markDef = model.markDef, width = model.width;\n var orient = markDef.orient;\n var sizeDef = encoding.size;\n var xDef = encoding.x;\n var x2Def = encoding.x2;\n var xScaleName = model.scaleName(channel_1.X);\n var xScale = model.getScaleComponent(channel_1.X);\n // x, x2, and width -- we must specify two of these in all conditions\n if (orient === 'horizontal' || x2Def) {\n return tslib_1.__assign({}, mixins.pointPosition('x', model, 'zeroOrMin'), mixins.pointPosition2(model, 'zeroOrMin', 'x2'));\n }\n else { // vertical\n if (fielddef_1.isFieldDef(xDef)) {\n var xScaleType = xScale.get('type');\n if (xDef.bin && !sizeDef && !scale_1.hasDiscreteDomain(xScaleType)) {\n return mixins.binnedPosition(xDef, 'x', model.scaleName('x'), markDef.binSpacing === undefined ? config.bar.binSpacing : markDef.binSpacing, xScale.get('reverse'));\n }\n else {\n if (xScaleType === scale_1.ScaleType.BAND) {\n return mixins.bandPosition(xDef, 'x', model);\n }\n }\n }\n // sized bin, normal point-ordinal axis, quantitative x-axis, or no x\n return mixins.centeredBandPosition('x', model, tslib_1.__assign({}, ref.mid(width)), defaultSizeRef(markDef, xScaleName, xScale, config));\n }\n}\nfunction y(model) {\n var config = model.config, encoding = model.encoding, height = model.height, markDef = model.markDef;\n var orient = markDef.orient;\n var sizeDef = encoding.size;\n var yDef = encoding.y;\n var y2Def = encoding.y2;\n var yScaleName = model.scaleName(channel_1.Y);\n var yScale = model.getScaleComponent(channel_1.Y);\n // y, y2 & height -- we must specify two of these in all conditions\n if (orient === 'vertical' || y2Def) {\n return tslib_1.__assign({}, mixins.pointPosition('y', model, 'zeroOrMin'), mixins.pointPosition2(model, 'zeroOrMin', 'y2'));\n }\n else {\n if (fielddef_1.isFieldDef(yDef)) {\n var yScaleType = yScale.get('type');\n if (yDef.bin && !sizeDef && !scale_1.hasDiscreteDomain(yScaleType)) {\n return mixins.binnedPosition(yDef, 'y', model.scaleName('y'), markDef.binSpacing === undefined ? config.bar.binSpacing : markDef.binSpacing, yScale.get('reverse'));\n }\n else if (yScaleType === scale_1.ScaleType.BAND) {\n return mixins.bandPosition(yDef, 'y', model);\n }\n }\n return mixins.centeredBandPosition('y', model, ref.mid(height), defaultSizeRef(markDef, yScaleName, yScale, config));\n }\n}\nfunction defaultSizeRef(markDef, scaleName, scale, config) {\n if (markDef.size !== undefined) {\n return { value: markDef.size };\n }\n else if (config.bar.discreteBandSize) {\n return { value: config.bar.discreteBandSize };\n }\n else if (scale) {\n var scaleType = scale.get('type');\n if (scaleType === scale_1.ScaleType.POINT) {\n var scaleRange = scale.get('range');\n if (vega_schema_1.isVgRangeStep(scaleRange) && vega_util_1.isNumber(scaleRange.step)) {\n return { value: scaleRange.step - 1 };\n }\n log.warn(log.message.BAR_WITH_POINT_SCALE_AND_RANGESTEP_NULL);\n }\n else if (scaleType === scale_1.ScaleType.BAND) {\n return ref.bandRef(scaleName);\n }\n else { // non-ordinal scale\n return { value: config.bar.continuousBandSize };\n }\n }\n else if (config.scale.rangeStep && config.scale.rangeStep !== null) {\n return { value: config.scale.rangeStep - 1 };\n }\n return { value: 20 };\n}\n//# sourceMappingURL=bar.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_schema_1 = require(\"../../vega.schema\");\nvar mixins = tslib_1.__importStar(require(\"./mixins\"));\nvar ref = tslib_1.__importStar(require(\"./valueref\"));\nexports.tick = {\n vgMark: 'rect',\n encodeEntry: function (model) {\n var _a;\n var config = model.config, markDef = model.markDef, width = model.width, height = model.height;\n var orient = markDef.orient;\n var vgSizeChannel = orient === 'horizontal' ? 'width' : 'height';\n var vgThicknessChannel = orient === 'horizontal' ? 'height' : 'width';\n return tslib_1.__assign({}, mixins.baseEncodeEntry(model, { size: 'ignore', orient: 'ignore' }), mixins.pointPosition('x', model, ref.mid(width), 'xc'), mixins.pointPosition('y', model, ref.mid(height), 'yc'), mixins.nonPosition('size', model, {\n defaultValue: defaultSize(model),\n vgChannel: vgSizeChannel\n }), (_a = {}, _a[vgThicknessChannel] = { value: markDef.thickness || config.tick.thickness }, _a));\n }\n};\nfunction defaultSize(model) {\n var config = model.config, markDef = model.markDef;\n var orient = markDef.orient;\n var scale = model.getScaleComponent(orient === 'horizontal' ? 'x' : 'y');\n if (markDef.size !== undefined) {\n return markDef.size;\n }\n else if (config.tick.bandSize !== undefined) {\n return config.tick.bandSize;\n }\n else {\n var scaleRange = scale ? scale.get('range') : undefined;\n var rangeStep = scaleRange && vega_schema_1.isVgRangeStep(scaleRange) ?\n scaleRange.step :\n config.scale.rangeStep;\n if (typeof rangeStep !== 'number') {\n // FIXME consolidate this log\n throw new Error('Function does not handle non-numeric rangeStep');\n }\n return rangeStep / 1.5;\n }\n}\n//# sourceMappingURL=tick.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar config_1 = require(\"../config\");\nvar vlFieldDef = tslib_1.__importStar(require(\"../fielddef\"));\nvar log = tslib_1.__importStar(require(\"../log\"));\nvar spec_1 = require(\"../spec\");\nvar toplevelprops_1 = require(\"../toplevelprops\");\nvar util_1 = require(\"../util\");\nvar buildmodel_1 = require(\"./buildmodel\");\nvar assemble_1 = require(\"./data/assemble\");\nvar optimize_1 = require(\"./data/optimize\");\n/**\n * Vega-Lite's main function, for compiling Vega-lite spec into Vega spec.\n *\n * At a high-level, we make the following transformations in different phases:\n *\n * Input spec\n * |\n * | (Normalization)\n * v\n * Normalized Spec (Row/Column channels in single-view specs becomes faceted specs, composite marks becomes layered specs.)\n * |\n * | (Build Model)\n * v\n * A model tree of the spec\n * |\n * | (Parse)\n * v\n * A model tree with parsed components (intermediate structure of visualization primitives in a format that can be easily merged)\n * |\n * | (Optimize)\n * v\n * A model tree with parsed components with the data component optimized\n * |\n * | (Assemble)\n * v\n * Vega spec\n */\nfunction compile(inputSpec, opt) {\n if (opt === void 0) { opt = {}; }\n // 0. Augment opt with default opts\n if (opt.logger) {\n // set the singleton logger to the provided logger\n log.set(opt.logger);\n }\n if (opt.fieldTitle) {\n // set the singleton field title formatter\n vlFieldDef.setTitleFormatter(opt.fieldTitle);\n }\n try {\n // 1. Initialize config by deep merging default config with the config provided via option and the input spec.\n var config = config_1.initConfig(util_1.mergeDeep({}, opt.config, inputSpec.config));\n // 2. Normalize: Convert input spec -> normalized spec\n // - Decompose all extended unit specs into composition of unit spec. For example, a box plot get expanded into multiple layers of bars, ticks, and rules. The shorthand row/column channel is also expanded to a facet spec.\n var spec = spec_1.normalize(inputSpec, config);\n // - Normalize autosize to be a autosize properties object.\n var autosize = toplevelprops_1.normalizeAutoSize(inputSpec.autosize, config.autosize, spec_1.isLayerSpec(spec) || spec_1.isUnitSpec(spec));\n // 3. Build Model: normalized spec -> Model (a tree structure)\n // This phases instantiates the models with default config by doing a top-down traversal. This allows us to pass properties that child models derive from their parents via their constructors.\n // See the abstract `Model` class and its children (UnitModel, LayerModel, FacetModel, RepeatModel, ConcatModel) for different types of models.\n var model = buildmodel_1.buildModel(spec, null, '', undefined, undefined, config, autosize.type === 'fit');\n // 4 Parse: Model --> Model with components\n // Note that components = intermediate representations that are equivalent to Vega specs.\n // We need these intermediate representation because we need to merge many visualizaiton \"components\" like projections, scales, axes, and legends.\n // We will later convert these components into actual Vega specs in the assemble phase.\n // In this phase, we do a bottom-up traversal over the whole tree to\n // parse for each type of components once (e.g., data, layout, mark, scale).\n // By doing bottom-up traversal, we start parsing components of unit specs and\n // then merge child components of parent composite specs.\n //\n // Please see inside model.parse() for order of different components parsed.\n model.parse();\n // 5. Optimize the dataflow. This will modify the data component of the model.\n optimize_1.optimizeDataflow(model.component.data);\n // 6. Assemble: convert model components --> Vega Spec.\n return assembleTopLevelModel(model, getTopLevelProperties(inputSpec, config, autosize));\n }\n finally {\n // Reset the singleton logger if a logger is provided\n if (opt.logger) {\n log.reset();\n }\n // Reset the singleton field title formatter if provided\n if (opt.fieldTitle) {\n vlFieldDef.resetTitleFormatter();\n }\n }\n}\nexports.compile = compile;\nfunction getTopLevelProperties(topLevelSpec, config, autosize) {\n return tslib_1.__assign({ autosize: util_1.keys(autosize).length === 1 && autosize.type ? autosize.type : autosize }, toplevelprops_1.extractTopLevelProperties(config), toplevelprops_1.extractTopLevelProperties(topLevelSpec));\n}\n/*\n * Assemble the top-level model.\n *\n * Note: this couldn't be `model.assemble()` since the top-level model\n * needs some special treatment to generate top-level properties.\n */\nfunction assembleTopLevelModel(model, topLevelProperties) {\n // TODO: change type to become VgSpec\n // Config with Vega-Lite only config removed.\n var vgConfig = model.config ? config_1.stripAndRedirectConfig(model.config) : undefined;\n var data = [].concat(model.assembleSelectionData([]), \n // only assemble data in the root\n assemble_1.assembleRootData(model.component.data, topLevelProperties.datasets || {}));\n delete topLevelProperties.datasets;\n var projections = model.assembleProjections();\n var title = model.assembleTitle();\n var style = model.assembleGroupStyle();\n var layoutSignals = model.assembleLayoutSignals();\n // move width and height signals with values to top level\n layoutSignals = layoutSignals.filter(function (signal) {\n if ((signal.name === 'width' || signal.name === 'height') && signal.value !== undefined) {\n topLevelProperties[signal.name] = +signal.value;\n return false;\n }\n return true;\n });\n var output = tslib_1.__assign({ $schema: 'https://vega.github.io/schema/vega/v4.json' }, (model.description ? { description: model.description } : {}), topLevelProperties, (title ? { title: title } : {}), (style ? { style: style } : {}), { data: data }, (projections.length > 0 ? { projections: projections } : {}), model.assembleGroup(layoutSignals.concat(model.assembleSelectionTopLevelSignals([]))), (vgConfig ? { config: vgConfig } : {}));\n return {\n spec: output\n // TODO: add warning / errors here\n };\n}\n//# sourceMappingURL=compile.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar sort_1 = require(\"../../sort\");\nvar util_1 = require(\"../../util\");\nvar facet_1 = require(\"../facet\");\nvar dataflow_1 = require(\"./dataflow\");\n/**\n * A class for the window transform nodes\n */\nvar WindowTransformNode = /** @class */ (function (_super) {\n tslib_1.__extends(WindowTransformNode, _super);\n function WindowTransformNode(parent, transform) {\n var _this = _super.call(this, parent) || this;\n _this.transform = transform;\n return _this;\n }\n WindowTransformNode.makeFromFacet = function (parent, facet) {\n var row = facet.row, column = facet.column;\n if (row && column) {\n var newParent = null;\n // only need to make one for crossed facet\n for (var _i = 0, _a = [row, column]; _i < _a.length; _i++) {\n var fieldDef = _a[_i];\n if (sort_1.isSortField(fieldDef.sort)) {\n var _b = fieldDef.sort, field = _b.field, op = _b.op;\n parent = newParent = new WindowTransformNode(parent, {\n window: [{\n op: op,\n field: field,\n as: facet_1.facetSortFieldName(fieldDef, fieldDef.sort)\n }],\n groupby: [fielddef_1.vgField(fieldDef)],\n frame: [null, null]\n });\n }\n }\n return newParent;\n }\n return null;\n };\n WindowTransformNode.prototype.clone = function () {\n return new WindowTransformNode(this.parent, util_1.duplicate(this.transform));\n };\n WindowTransformNode.prototype.producedFields = function () {\n var _this = this;\n var out = {};\n this.transform.window.forEach(function (windowFieldDef) {\n out[_this.getDefaultName(windowFieldDef)] = true;\n });\n return out;\n };\n WindowTransformNode.prototype.getDefaultName = function (windowFieldDef) {\n return windowFieldDef.as || fielddef_1.vgField(windowFieldDef);\n };\n WindowTransformNode.prototype.assemble = function () {\n var fields = [];\n var ops = [];\n var as = [];\n var params = [];\n for (var _i = 0, _a = this.transform.window; _i < _a.length; _i++) {\n var window_1 = _a[_i];\n ops.push(window_1.op);\n as.push(this.getDefaultName(window_1));\n params.push(window_1.param === undefined ? null : window_1.param);\n fields.push(window_1.field === undefined ? null : window_1.field);\n }\n var frame = this.transform.frame;\n var groupby = this.transform.groupby;\n var sortFields = [];\n var sortOrder = [];\n if (this.transform.sort !== undefined) {\n for (var _b = 0, _c = this.transform.sort; _b < _c.length; _b++) {\n var sortField = _c[_b];\n sortFields.push(sortField.field);\n sortOrder.push(sortField.order || 'ascending');\n }\n }\n var sort = {\n field: sortFields,\n order: sortOrder,\n };\n var ignorePeers = this.transform.ignorePeers;\n var result = {\n type: 'window',\n params: params,\n as: as,\n ops: ops,\n fields: fields,\n sort: sort,\n };\n if (ignorePeers !== undefined) {\n result.ignorePeers = ignorePeers;\n }\n if (groupby !== undefined) {\n result.groupby = groupby;\n }\n if (frame !== undefined) {\n result.frame = frame;\n }\n return result;\n };\n return WindowTransformNode;\n}(dataflow_1.DataFlowNode));\nexports.WindowTransformNode = WindowTransformNode;\n//# sourceMappingURL=window.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar split_1 = require(\"../split\");\nvar ProjectionComponent = /** @class */ (function (_super) {\n tslib_1.__extends(ProjectionComponent, _super);\n function ProjectionComponent(name, specifiedProjection, size, data) {\n var _this = _super.call(this, tslib_1.__assign({}, specifiedProjection), // all explicit properties of projection\n { name: name } // name as initial implicit property\n ) || this;\n _this.specifiedProjection = specifiedProjection;\n _this.size = size;\n _this.data = data;\n _this.merged = false;\n return _this;\n }\n return ProjectionComponent;\n}(split_1.Split));\nexports.ProjectionComponent = ProjectionComponent;\n//# sourceMappingURL=component.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar log = tslib_1.__importStar(require(\"../log\"));\nvar spec_1 = require(\"../spec\");\nvar util_1 = require(\"../util\");\nvar parse_1 = require(\"./axis/parse\");\nvar parse_2 = require(\"./data/parse\");\nvar assemble_1 = require(\"./layoutsize/assemble\");\nvar parse_3 = require(\"./layoutsize/parse\");\nvar assemble_2 = require(\"./legend/assemble\");\nvar model_1 = require(\"./model\");\nvar selection_1 = require(\"./selection/selection\");\nvar unit_1 = require(\"./unit\");\nvar LayerModel = /** @class */ (function (_super) {\n tslib_1.__extends(LayerModel, _super);\n function LayerModel(spec, parent, parentGivenName, parentGivenSize, repeater, config, fit) {\n var _this = _super.call(this, spec, parent, parentGivenName, config, repeater, spec.resolve) || this;\n _this.type = 'layer';\n var layoutSize = tslib_1.__assign({}, parentGivenSize, (spec.width ? { width: spec.width } : {}), (spec.height ? { height: spec.height } : {}));\n _this.initSize(layoutSize);\n _this.children = spec.layer.map(function (layer, i) {\n if (spec_1.isLayerSpec(layer)) {\n return new LayerModel(layer, _this, _this.getName('layer_' + i), layoutSize, repeater, config, fit);\n }\n if (spec_1.isUnitSpec(layer)) {\n return new unit_1.UnitModel(layer, _this, _this.getName('layer_' + i), layoutSize, repeater, config, fit);\n }\n throw new Error(log.message.INVALID_SPEC);\n });\n return _this;\n }\n LayerModel.prototype.parseData = function () {\n this.component.data = parse_2.parseData(this);\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n child.parseData();\n }\n };\n LayerModel.prototype.parseLayoutSize = function () {\n parse_3.parseLayerLayoutSize(this);\n };\n LayerModel.prototype.parseSelection = function () {\n var _this = this;\n // Merge selections up the hierarchy so that they may be referenced\n // across unit specs. Persist their definitions within each child\n // to assemble signals which remain within output Vega unit groups.\n this.component.selection = {};\n var _loop_1 = function (child) {\n child.parseSelection();\n util_1.keys(child.component.selection).forEach(function (key) {\n _this.component.selection[key] = child.component.selection[key];\n });\n };\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n _loop_1(child);\n }\n };\n LayerModel.prototype.parseMarkGroup = function () {\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n child.parseMarkGroup();\n }\n };\n LayerModel.prototype.parseAxisAndHeader = function () {\n parse_1.parseLayerAxis(this);\n };\n LayerModel.prototype.assembleSelectionTopLevelSignals = function (signals) {\n return this.children.reduce(function (sg, child) { return child.assembleSelectionTopLevelSignals(sg); }, signals);\n };\n // TODO: Support same named selections across children.\n LayerModel.prototype.assembleSelectionSignals = function () {\n return this.children.reduce(function (signals, child) {\n return signals.concat(child.assembleSelectionSignals());\n }, []);\n };\n LayerModel.prototype.assembleLayoutSignals = function () {\n return this.children.reduce(function (signals, child) {\n return signals.concat(child.assembleLayoutSignals());\n }, assemble_1.assembleLayoutSignals(this));\n };\n LayerModel.prototype.assembleSelectionData = function (data) {\n return this.children.reduce(function (db, child) { return child.assembleSelectionData(db); }, data);\n };\n LayerModel.prototype.assembleTitle = function () {\n var title = _super.prototype.assembleTitle.call(this);\n if (title) {\n return title;\n }\n // If title does not provide layer, look into children\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n title = child.assembleTitle();\n if (title) {\n return title;\n }\n }\n return undefined;\n };\n LayerModel.prototype.assembleLayout = function () {\n return null;\n };\n LayerModel.prototype.assembleMarks = function () {\n return selection_1.assembleLayerSelectionMarks(this, util_1.flatten(this.children.map(function (child) {\n return child.assembleMarks();\n })));\n };\n LayerModel.prototype.assembleLegends = function () {\n return this.children.reduce(function (legends, child) {\n return legends.concat(child.assembleLegends());\n }, assemble_2.assembleLegends(this));\n };\n return LayerModel;\n}(model_1.Model));\nexports.LayerModel = LayerModel;\n//# sourceMappingURL=layer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"./util\");\nexports.defaultLegendConfig = {};\nvar COMMON_LEGEND_PROPERTY_INDEX = {\n entryPadding: 1,\n format: 1,\n offset: 1,\n orient: 1,\n padding: 1,\n tickCount: 1,\n title: 1,\n type: 1,\n values: 1,\n zindex: 1\n};\nvar VG_LEGEND_PROPERTY_INDEX = tslib_1.__assign({}, COMMON_LEGEND_PROPERTY_INDEX, { \n // channel scales\n opacity: 1, shape: 1, stroke: 1, fill: 1, size: 1, \n // encode\n encode: 1 });\nexports.LEGEND_PROPERTIES = util_1.flagKeys(COMMON_LEGEND_PROPERTY_INDEX);\nexports.VG_LEGEND_PROPERTIES = util_1.flagKeys(VG_LEGEND_PROPERTY_INDEX);\n//# sourceMappingURL=legend.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar vega_util_1 = require(\"vega-util\");\nvar util_1 = require(\"./util\");\nvar AGGREGATE_OP_INDEX = {\n argmax: 1,\n argmin: 1,\n average: 1,\n count: 1,\n distinct: 1,\n max: 1,\n mean: 1,\n median: 1,\n min: 1,\n missing: 1,\n q1: 1,\n q3: 1,\n ci0: 1,\n ci1: 1,\n stderr: 1,\n stdev: 1,\n stdevp: 1,\n sum: 1,\n valid: 1,\n values: 1,\n variance: 1,\n variancep: 1,\n};\nexports.AGGREGATE_OPS = util_1.flagKeys(AGGREGATE_OP_INDEX);\nfunction isAggregateOp(a) {\n return !!AGGREGATE_OP_INDEX[a];\n}\nexports.isAggregateOp = isAggregateOp;\nexports.COUNTING_OPS = ['count', 'valid', 'missing', 'distinct'];\nfunction isCountingAggregateOp(aggregate) {\n return aggregate && util_1.contains(exports.COUNTING_OPS, aggregate);\n}\nexports.isCountingAggregateOp = isCountingAggregateOp;\n/** Additive-based aggregation operations. These can be applied to stack. */\nexports.SUM_OPS = [\n 'count',\n 'sum',\n 'distinct',\n 'valid',\n 'missing'\n];\n/**\n * Aggregation operators that always produce values within the range [domainMin, domainMax].\n */\nexports.SHARED_DOMAIN_OPS = [\n 'mean',\n 'average',\n 'median',\n 'q1',\n 'q3',\n 'min',\n 'max',\n];\nexports.SHARED_DOMAIN_OP_INDEX = vega_util_1.toSet(exports.SHARED_DOMAIN_OPS);\n//# sourceMappingURL=aggregate.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar log = tslib_1.__importStar(require(\"../../log\"));\nvar dataflow_1 = require(\"./dataflow\");\nvar source_1 = require(\"./source\");\nvar LookupNode = /** @class */ (function (_super) {\n tslib_1.__extends(LookupNode, _super);\n function LookupNode(parent, transform, secondary) {\n var _this = _super.call(this, parent) || this;\n _this.transform = transform;\n _this.secondary = secondary;\n return _this;\n }\n LookupNode.make = function (parent, model, transform, counter) {\n var sources = model.component.data.sources;\n var s = new source_1.SourceNode(transform.from.data);\n var fromSource = sources[s.hash()];\n if (!fromSource) {\n sources[s.hash()] = s;\n fromSource = s;\n }\n var fromOutputName = model.getName(\"lookup_\" + counter);\n var fromOutputNode = new dataflow_1.OutputNode(fromSource, fromOutputName, 'lookup', model.component.data.outputNodeRefCounts);\n model.component.data.outputNodes[fromOutputName] = fromOutputNode;\n return new LookupNode(parent, transform, fromOutputNode.getSource());\n };\n LookupNode.prototype.producedFields = function () {\n return vega_util_1.toSet(this.transform.from.fields || ((this.transform.as instanceof Array) ? this.transform.as : [this.transform.as]));\n };\n LookupNode.prototype.assemble = function () {\n var foreign;\n if (this.transform.from.fields) {\n // lookup a few fields and add create a flat output\n foreign = tslib_1.__assign({ values: this.transform.from.fields }, this.transform.as ? { as: ((this.transform.as instanceof Array) ? this.transform.as : [this.transform.as]) } : {});\n }\n else {\n // lookup full record and nest it\n var asName = this.transform.as;\n if (!vega_util_1.isString(asName)) {\n log.warn(log.message.NO_FIELDS_NEEDS_AS);\n asName = '_lookup';\n }\n foreign = {\n as: [asName]\n };\n }\n return tslib_1.__assign({ type: 'lookup', from: this.secondary, key: this.transform.from.key, fields: [this.transform.lookup] }, foreign, (this.transform.default ? { default: this.transform.default } : {}));\n };\n return LookupNode;\n}(dataflow_1.DataFlowNode));\nexports.LookupNode = LookupNode;\n//# sourceMappingURL=lookup.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar channel_1 = require(\"../../channel\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar scale_1 = require(\"../../scale\");\nvar util_1 = require(\"../../util\");\nfunction values(legend, fieldDef) {\n var vals = legend.values;\n if (vals) {\n return fielddef_1.valueArray(fieldDef, vals);\n }\n return undefined;\n}\nexports.values = values;\nfunction type(t, channel, scaleType) {\n if (channel_1.isColorChannel(channel) && ((t === 'quantitative' && !scale_1.isBinScale(scaleType)) ||\n (t === 'temporal' && util_1.contains(['time', 'utc'], scaleType)))) {\n return 'gradient';\n }\n return undefined;\n}\nexports.type = type;\n//# sourceMappingURL=properties.js.map","var at, // The index of the current character\n ch, // The current character\n escapee = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n },\n text,\n\n error = function (m) {\n // Call error when something is wrong.\n throw {\n name: 'SyntaxError',\n message: m,\n at: at,\n text: text\n };\n },\n \n next = function (c) {\n // If a c parameter is provided, verify that it matches the current character.\n if (c && c !== ch) {\n error(\"Expected '\" + c + \"' instead of '\" + ch + \"'\");\n }\n \n // Get the next character. When there are no more characters,\n // return the empty string.\n \n ch = text.charAt(at);\n at += 1;\n return ch;\n },\n \n number = function () {\n // Parse a number value.\n var number,\n string = '';\n \n if (ch === '-') {\n string = '-';\n next('-');\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n if (ch === '.') {\n string += '.';\n while (next() && ch >= '0' && ch <= '9') {\n string += ch;\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch;\n next();\n if (ch === '-' || ch === '+') {\n string += ch;\n next();\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n error(\"Bad number\");\n } else {\n return number;\n }\n },\n \n string = function () {\n // Parse a string value.\n var hex,\n i,\n string = '',\n uffff;\n \n // When parsing for string values, we must look for \" and \\ characters.\n if (ch === '\"') {\n while (next()) {\n if (ch === '\"') {\n next();\n return string;\n } else if (ch === '\\\\') {\n next();\n if (ch === 'u') {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch];\n } else {\n break;\n }\n } else {\n string += ch;\n }\n }\n }\n error(\"Bad string\");\n },\n\n white = function () {\n\n// Skip whitespace.\n\n while (ch && ch <= ' ') {\n next();\n }\n },\n\n word = function () {\n\n// true, false, or null.\n\n switch (ch) {\n case 't':\n next('t');\n next('r');\n next('u');\n next('e');\n return true;\n case 'f':\n next('f');\n next('a');\n next('l');\n next('s');\n next('e');\n return false;\n case 'n':\n next('n');\n next('u');\n next('l');\n next('l');\n return null;\n }\n error(\"Unexpected '\" + ch + \"'\");\n },\n\n value, // Place holder for the value function.\n\n array = function () {\n\n// Parse an array value.\n\n var array = [];\n\n if (ch === '[') {\n next('[');\n white();\n if (ch === ']') {\n next(']');\n return array; // empty array\n }\n while (ch) {\n array.push(value());\n white();\n if (ch === ']') {\n next(']');\n return array;\n }\n next(',');\n white();\n }\n }\n error(\"Bad array\");\n },\n\n object = function () {\n\n// Parse an object value.\n\n var key,\n object = {};\n\n if (ch === '{') {\n next('{');\n white();\n if (ch === '}') {\n next('}');\n return object; // empty object\n }\n while (ch) {\n key = string();\n white();\n next(':');\n if (Object.hasOwnProperty.call(object, key)) {\n error('Duplicate key \"' + key + '\"');\n }\n object[key] = value();\n white();\n if (ch === '}') {\n next('}');\n return object;\n }\n next(',');\n white();\n }\n }\n error(\"Bad object\");\n };\n\nvalue = function () {\n\n// Parse a JSON value. It could be an object, an array, a string, a number,\n// or a word.\n\n white();\n switch (ch) {\n case '{':\n return object();\n case '[':\n return array();\n case '\"':\n return string();\n case '-':\n return number();\n default:\n return ch >= '0' && ch <= '9' ? number() : word();\n }\n};\n\n// Return the json_parse function. It will have access to all of the above\n// functions and variables.\n\nmodule.exports = function (source, reviver) {\n var result;\n \n text = source;\n at = 0;\n ch = ' ';\n result = value();\n white();\n if (ch) {\n error(\"Syntax error\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the result\n // in an empty key. If there is not a reviver function, we simply return the\n // result.\n\n return typeof reviver === 'function' ? (function walk(holder, key) {\n var k, v, value = holder[key];\n if (value && typeof value === 'object') {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = walk(value, k);\n if (v !== undefined) {\n value[k] = v;\n } else {\n delete value[k];\n }\n }\n }\n }\n return reviver.call(holder, key, value);\n }({'': result}, '')) : result;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar encoding_1 = require(\"../../encoding\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar log = tslib_1.__importStar(require(\"../../log\"));\nvar mark_1 = require(\"../../mark\");\nvar type_1 = require(\"../../type\");\nvar util_1 = require(\"../../util\");\nvar common_1 = require(\"../common\");\nfunction normalizeMarkDef(mark, encoding, config) {\n var markDef = mark_1.isMarkDef(mark) ? tslib_1.__assign({}, mark) : { type: mark };\n // set orient, which can be overridden by rules as sometimes the specified orient is invalid.\n var specifiedOrient = markDef.orient || common_1.getMarkConfig('orient', markDef, config);\n markDef.orient = orient(markDef.type, encoding, specifiedOrient);\n if (specifiedOrient !== undefined && specifiedOrient !== markDef.orient) {\n log.warn(log.message.orientOverridden(markDef.orient, specifiedOrient));\n }\n // set opacity and filled if not specified in mark config\n var specifiedOpacity = markDef.opacity !== undefined ? markDef.opacity : common_1.getMarkConfig('opacity', markDef, config);\n if (specifiedOpacity === undefined) {\n markDef.opacity = opacity(markDef.type, encoding);\n }\n var specifiedFilled = markDef.filled;\n if (specifiedFilled === undefined) {\n markDef.filled = filled(markDef, config);\n }\n // set cursor, which should be pointer if href channel is present unless otherwise specified\n var specifiedCursor = markDef.cursor || common_1.getMarkConfig('cursor', markDef, config);\n if (specifiedCursor === undefined) {\n markDef.cursor = cursor(markDef, encoding, config);\n }\n return markDef;\n}\nexports.normalizeMarkDef = normalizeMarkDef;\nfunction cursor(markDef, encoding, config) {\n if (encoding.href || markDef.href || common_1.getMarkConfig('href', markDef, config)) {\n return 'pointer';\n }\n return markDef.cursor;\n}\nfunction opacity(mark, encoding) {\n if (util_1.contains([mark_1.POINT, mark_1.TICK, mark_1.CIRCLE, mark_1.SQUARE], mark)) {\n // point-based marks\n if (!encoding_1.isAggregate(encoding)) {\n return 0.7;\n }\n }\n return undefined;\n}\nfunction filled(markDef, config) {\n var filledConfig = common_1.getMarkConfig('filled', markDef, config);\n var mark = markDef.type;\n return filledConfig !== undefined ? filledConfig : mark !== mark_1.POINT && mark !== mark_1.LINE && mark !== mark_1.RULE;\n}\nfunction orient(mark, encoding, specifiedOrient) {\n switch (mark) {\n case mark_1.POINT:\n case mark_1.CIRCLE:\n case mark_1.SQUARE:\n case mark_1.TEXT:\n case mark_1.RECT:\n // orient is meaningless for these marks.\n return undefined;\n }\n var yIsRange = encoding.y2;\n var xIsRange = encoding.x2;\n switch (mark) {\n case mark_1.BAR:\n if (yIsRange || xIsRange) {\n // Ranged bar does not always have clear orientation, so we allow overriding\n if (specifiedOrient) {\n return specifiedOrient;\n }\n // If y is range and x is non-range, non-bin Q, y is likely a prebinned field\n var xDef = encoding.x;\n if (!xIsRange && fielddef_1.isFieldDef(xDef) && xDef.type === type_1.QUANTITATIVE && !xDef.bin) {\n return 'horizontal';\n }\n // If x is range and y is non-range, non-bin Q, x is likely a prebinned field\n var yDef = encoding.y;\n if (!yIsRange && fielddef_1.isFieldDef(yDef) && yDef.type === type_1.QUANTITATIVE && !yDef.bin) {\n return 'vertical';\n }\n }\n /* tslint:disable */\n case mark_1.RULE: // intentionally fall through\n // return undefined for line segment rule and bar with both axis ranged\n if (xIsRange && yIsRange) {\n return undefined;\n }\n case mark_1.AREA: // intentionally fall through\n // If there are range for both x and y, y (vertical) has higher precedence.\n if (yIsRange) {\n return 'vertical';\n }\n else if (xIsRange) {\n return 'horizontal';\n }\n else if (mark === mark_1.RULE) {\n if (encoding.x && !encoding.y) {\n return 'vertical';\n }\n else if (encoding.y && !encoding.x) {\n return 'horizontal';\n }\n }\n case mark_1.LINE: // intentional fall through\n case mark_1.TICK: // Tick is opposite to bar, line, area and never have ranged mark.\n /* tslint:enable */\n var xIsContinuous = fielddef_1.isFieldDef(encoding.x) && fielddef_1.isContinuous(encoding.x);\n var yIsContinuous = fielddef_1.isFieldDef(encoding.y) && fielddef_1.isContinuous(encoding.y);\n if (xIsContinuous && !yIsContinuous) {\n return mark !== 'tick' ? 'horizontal' : 'vertical';\n }\n else if (!xIsContinuous && yIsContinuous) {\n return mark !== 'tick' ? 'vertical' : 'horizontal';\n }\n else if (xIsContinuous && yIsContinuous) {\n var xDef = encoding.x; // we can cast here since they are surely fieldDef\n var yDef = encoding.y;\n var xIsTemporal = xDef.type === type_1.TEMPORAL;\n var yIsTemporal = yDef.type === type_1.TEMPORAL;\n // temporal without timeUnit is considered continuous, but better serves as dimension\n if (xIsTemporal && !yIsTemporal) {\n return mark !== 'tick' ? 'vertical' : 'horizontal';\n }\n else if (!xIsTemporal && yIsTemporal) {\n return mark !== 'tick' ? 'horizontal' : 'vertical';\n }\n if (!xDef.aggregate && yDef.aggregate) {\n return mark !== 'tick' ? 'vertical' : 'horizontal';\n }\n else if (xDef.aggregate && !yDef.aggregate) {\n return mark !== 'tick' ? 'horizontal' : 'vertical';\n }\n if (specifiedOrient) {\n // When ambiguous, use user specified one.\n return specifiedOrient;\n }\n return 'vertical';\n }\n else {\n // Discrete x Discrete case\n if (specifiedOrient) {\n // When ambiguous, use user specified one.\n return specifiedOrient;\n }\n return undefined;\n }\n }\n return 'vertical';\n}\n//# sourceMappingURL=init.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nexports.ERRORBAR = 'error-bar';\nfunction normalizeErrorBar(spec) {\n // TODO: use selection\n var _m = spec.mark, _sel = spec.selection, _p = spec.projection, encoding = spec.encoding, outerSpec = tslib_1.__rest(spec, [\"mark\", \"selection\", \"projection\", \"encoding\"]);\n var _s = encoding.size, encodingWithoutSize = tslib_1.__rest(encoding, [\"size\"]);\n var _x2 = encoding.x2, _y2 = encoding.y2, encodingWithoutX2Y2 = tslib_1.__rest(encoding, [\"x2\", \"y2\"]);\n var _x = encodingWithoutX2Y2.x, _y = encodingWithoutX2Y2.y, encodingWithoutX_X2_Y_Y2 = tslib_1.__rest(encodingWithoutX2Y2, [\"x\", \"y\"]);\n if (!encoding.x2 && !encoding.y2) {\n throw new Error('Neither x2 or y2 provided');\n }\n return tslib_1.__assign({}, outerSpec, { layer: [\n {\n mark: 'rule',\n encoding: encodingWithoutSize\n }, {\n mark: 'tick',\n encoding: encodingWithoutX2Y2\n }, {\n mark: 'tick',\n encoding: encoding.x2 ? tslib_1.__assign({ x: encoding.x2, y: encoding.y }, encodingWithoutX_X2_Y_Y2) : tslib_1.__assign({ x: encoding.x, y: encoding.y2 }, encodingWithoutX_X2_Y_Y2)\n }\n ] });\n}\nexports.normalizeErrorBar = normalizeErrorBar;\n//# sourceMappingURL=errorbar.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar channel_1 = require(\"../../channel\");\nvar log_1 = require(\"../../log\");\nvar scale_1 = require(\"../../scale\");\nvar util_1 = require(\"../../util\");\nvar selection_1 = require(\"./selection\");\nvar scales_1 = tslib_1.__importDefault(require(\"./transforms/scales\"));\nexports.BRUSH = '_brush';\nexports.SCALE_TRIGGER = '_scale_trigger';\nvar interval = {\n predicate: 'vlInterval',\n scaleDomain: 'vlIntervalDomain',\n signals: function (model, selCmpt) {\n var name = selCmpt.name;\n var hasScales = scales_1.default.has(selCmpt);\n var signals = [];\n var intervals = [];\n var tupleTriggers = [];\n var scaleTriggers = [];\n if (selCmpt.translate && !hasScales) {\n var filterExpr_1 = \"!event.item || event.item.mark.name !== \" + vega_util_1.stringValue(name + exports.BRUSH);\n events(selCmpt, function (_, evt) {\n var filters = evt.between[0].filter || (evt.between[0].filter = []);\n if (filters.indexOf(filterExpr_1) < 0) {\n filters.push(filterExpr_1);\n }\n });\n }\n selCmpt.project.forEach(function (p) {\n var channel = p.channel;\n if (channel !== channel_1.X && channel !== channel_1.Y) {\n log_1.warn('Interval selections only support x and y encoding channels.');\n return;\n }\n var cs = channelSignals(model, selCmpt, channel);\n var dname = selection_1.channelSignalName(selCmpt, channel, 'data');\n var vname = selection_1.channelSignalName(selCmpt, channel, 'visual');\n var scaleStr = vega_util_1.stringValue(model.scaleName(channel));\n var scaleType = model.getScaleComponent(channel).get('type');\n var toNum = scale_1.hasContinuousDomain(scaleType) ? '+' : '';\n signals.push.apply(signals, cs);\n tupleTriggers.push(dname);\n intervals.push(\"{encoding: \" + vega_util_1.stringValue(channel) + \", \" +\n (\"field: \" + vega_util_1.stringValue(p.field) + \", extent: \" + dname + \"}\"));\n scaleTriggers.push({\n scaleName: model.scaleName(channel),\n expr: \"(!isArray(\" + dname + \") || \" +\n (\"(\" + toNum + \"invert(\" + scaleStr + \", \" + vname + \")[0] === \" + toNum + dname + \"[0] && \") +\n (toNum + \"invert(\" + scaleStr + \", \" + vname + \")[1] === \" + toNum + dname + \"[1]))\")\n });\n });\n // Proxy scale reactions to ensure that an infinite loop doesn't occur\n // when an interval selection filter touches the scale.\n if (!hasScales) {\n signals.push({\n name: name + exports.SCALE_TRIGGER,\n update: scaleTriggers.map(function (t) { return t.expr; }).join(' && ') +\n (\" ? \" + (name + exports.SCALE_TRIGGER) + \" : {}\")\n });\n }\n // Only add an interval to the store if it has valid data extents. Data extents\n // are set to null if pixel extents are equal to account for intervals over\n // ordinal/nominal domains which, when inverted, will still produce a valid datum.\n return signals.concat({\n name: name + selection_1.TUPLE,\n on: [{\n events: tupleTriggers.map(function (t) { return ({ signal: t }); }),\n update: tupleTriggers.join(' && ') +\n (\" ? {unit: \" + selection_1.unitName(model) + \", intervals: [\" + intervals.join(', ') + \"]} : null\")\n }]\n });\n },\n modifyExpr: function (model, selCmpt) {\n var tpl = selCmpt.name + selection_1.TUPLE;\n return tpl + ', ' +\n (selCmpt.resolve === 'global' ? 'true' : \"{unit: \" + selection_1.unitName(model) + \"}\");\n },\n marks: function (model, selCmpt, marks) {\n var name = selCmpt.name;\n var _a = selection_1.positionalProjections(selCmpt), xi = _a.xi, yi = _a.yi;\n var store = \"data(\" + vega_util_1.stringValue(selCmpt.name + selection_1.STORE) + \")\";\n // Do not add a brush if we're binding to scales.\n if (scales_1.default.has(selCmpt)) {\n return marks;\n }\n var update = {\n x: xi !== null ? { signal: name + \"_x[0]\" } : { value: 0 },\n y: yi !== null ? { signal: name + \"_y[0]\" } : { value: 0 },\n x2: xi !== null ? { signal: name + \"_x[1]\" } : { field: { group: 'width' } },\n y2: yi !== null ? { signal: name + \"_y[1]\" } : { field: { group: 'height' } }\n };\n // If the selection is resolved to global, only a single interval is in\n // the store. Wrap brush mark's encodings with a production rule to test\n // this based on the `unit` property. Hide the brush mark if it corresponds\n // to a unit different from the one in the store.\n if (selCmpt.resolve === 'global') {\n for (var _i = 0, _b = util_1.keys(update); _i < _b.length; _i++) {\n var key = _b[_i];\n update[key] = [tslib_1.__assign({ test: store + \".length && \" + store + \"[0].unit === \" + selection_1.unitName(model) }, update[key]), { value: 0 }];\n }\n }\n // Two brush marks ensure that fill colors and other aesthetic choices do\n // not interefere with the core marks, but that the brushed region can still\n // be interacted with (e.g., dragging it around).\n var _c = selCmpt.mark, fill = _c.fill, fillOpacity = _c.fillOpacity, stroke = tslib_1.__rest(_c, [\"fill\", \"fillOpacity\"]);\n var vgStroke = util_1.keys(stroke).reduce(function (def, k) {\n def[k] = [{\n test: [\n xi !== null && name + \"_x[0] !== \" + name + \"_x[1]\",\n yi != null && name + \"_y[0] !== \" + name + \"_y[1]\",\n ].filter(function (x) { return x; }).join(' && '),\n value: stroke[k]\n }, { value: null }];\n return def;\n }, {});\n return [{\n name: name + exports.BRUSH + '_bg',\n type: 'rect',\n clip: true,\n encode: {\n enter: {\n fill: { value: fill },\n fillOpacity: { value: fillOpacity }\n },\n update: update\n }\n }].concat(marks, {\n name: name + exports.BRUSH,\n type: 'rect',\n clip: true,\n encode: {\n enter: {\n fill: { value: 'transparent' }\n },\n update: tslib_1.__assign({}, update, vgStroke)\n }\n });\n }\n};\nexports.default = interval;\n/**\n * Returns the visual and data signals for an interval selection.\n */\nfunction channelSignals(model, selCmpt, channel) {\n var vname = selection_1.channelSignalName(selCmpt, channel, 'visual');\n var dname = selection_1.channelSignalName(selCmpt, channel, 'data');\n var hasScales = scales_1.default.has(selCmpt);\n var scaleName = model.scaleName(channel);\n var scaleStr = vega_util_1.stringValue(scaleName);\n var scale = model.getScaleComponent(channel);\n var scaleType = scale ? scale.get('type') : undefined;\n var size = model.getSizeSignalRef(channel === channel_1.X ? 'width' : 'height').signal;\n var coord = channel + \"(unit)\";\n var on = events(selCmpt, function (def, evt) {\n return def.concat({ events: evt.between[0], update: \"[\" + coord + \", \" + coord + \"]\" }, // Brush Start\n { events: evt, update: \"[\" + vname + \"[0], clamp(\" + coord + \", 0, \" + size + \")]\" } // Brush End\n );\n });\n // React to pan/zooms of continuous scales. Non-continuous scales\n // (bin-linear, band, point) cannot be pan/zoomed and any other changes\n // to their domains (e.g., filtering) should clear the brushes.\n on.push({\n events: { signal: selCmpt.name + exports.SCALE_TRIGGER },\n update: scale_1.hasContinuousDomain(scaleType) && !scale_1.isBinScale(scaleType) ?\n \"[scale(\" + scaleStr + \", \" + dname + \"[0]), scale(\" + scaleStr + \", \" + dname + \"[1])]\" : \"[0, 0]\"\n });\n return hasScales ? [{ name: dname, on: [] }] : [{\n name: vname, value: [], on: on\n }, {\n name: dname,\n on: [{ events: { signal: vname }, update: vname + \"[0] === \" + vname + \"[1] ? null : invert(\" + scaleStr + \", \" + vname + \")\" }]\n }];\n}\nfunction events(selCmpt, cb) {\n return selCmpt.events.reduce(function (on, evt) {\n if (!evt.between) {\n log_1.warn(evt + \" is not an ordered event stream for interval selections\");\n return on;\n }\n return cb(on, evt);\n }, []);\n}\n//# sourceMappingURL=interval.js.map","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {identity} from 'vega-util';\n\nexport default function UniqueList(idFunc) {\n var $ = idFunc || identity,\n list = [],\n ids = {};\n\n list.add = function(_) {\n var id = $(_);\n if (!ids[id]) {\n ids[id] = 1;\n list.push(_);\n }\n return list;\n };\n\n list.remove = function(_) {\n var id = $(_), idx;\n if (ids[id]) {\n ids[id] = 0;\n if ((idx = list.indexOf(_)) >= 0) {\n list.splice(idx, 1);\n }\n }\n return list;\n };\n\n return list;\n}\n","var TUPLE_ID_KEY = Symbol('vega_id'),\n TUPLE_ID = 1;\n\n/**\n * Resets the internal tuple id counter to one.\n */\nexport function reset() {\n TUPLE_ID = 1;\n}\n\n/**\n * Checks if an input value is a registered tuple.\n * @param {*} t - The value to check.\n * @return {boolean} True if the input is a tuple, false otherwise.\n */\nexport function isTuple(t) {\n return !!(t && tupleid(t));\n}\n\n/**\n * Returns the id of a tuple.\n * @param {object} t - The input tuple.\n * @return {*} the tuple id.\n */\nexport function tupleid(t) {\n return t[TUPLE_ID_KEY];\n}\n\n/**\n * Sets the id of a tuple.\n * @param {object} t - The input tuple.\n * @param {*} id - The id value to set.\n * @return {object} the input tuple.\n */\nfunction setid(t, id) {\n t[TUPLE_ID_KEY] = id;\n return t;\n}\n\n/**\n * Ingest an object or value as a data tuple.\n * If the input value is an object, an id field will be added to it. For\n * efficiency, the input object is modified directly. A copy is not made.\n * If the input value is a literal, it will be wrapped in a new object\n * instance, with the value accessible as the 'data' property.\n * @param datum - The value to ingest.\n * @return {object} The ingested data tuple.\n */\nexport function ingest(datum) {\n var t = (datum === Object(datum)) ? datum : {data: datum};\n return tupleid(t) ? t : setid(t, TUPLE_ID++);\n}\n\n/**\n * Given a source tuple, return a derived copy.\n * @param {object} t - The source tuple.\n * @return {object} The derived tuple.\n */\nexport function derive(t) {\n return rederive(t, ingest({}));\n}\n\n/**\n * Rederive a derived tuple by copying values from the source tuple.\n * @param {object} t - The source tuple.\n * @param {object} d - The derived tuple.\n * @return {object} The derived tuple.\n */\nexport function rederive(t, d) {\n for (var k in t) d[k] = t[k];\n return d;\n}\n\n/**\n * Replace an existing tuple with a new tuple.\n * @param {object} t - The existing data tuple.\n * @param {object} d - The new tuple that replaces the old.\n * @return {object} The new tuple.\n */\nexport function replace(t, d) {\n return setid(d, tupleid(t));\n}\n","import {ingest, tupleid} from './Tuple';\nimport {array, constant, isFunction} from 'vega-util';\n\nexport function isChangeSet(v) {\n return v && v.constructor === changeset;\n}\n\nexport default function changeset() {\n var add = [], // insert tuples\n rem = [], // remove tuples\n mod = [], // modify tuples\n remp = [], // remove by predicate\n modp = [], // modify by predicate\n reflow = false;\n\n return {\n constructor: changeset,\n insert: function(t) {\n var d = array(t), i = 0, n = d.length;\n for (; i 0) {\n modify(t, f, m.value);\n pulse.modifies(f);\n }\n }\n\n // process predicate-based modifications\n for (i=0, n=modp.length; i 0) {\n modify(t, m.field, m.value);\n }\n });\n pulse.modifies(m.field);\n }\n\n // upon reflow request, populate mod with all non-removed tuples\n // otherwise, populate mod with modified tuples only\n if (reflow) {\n pulse.mod = rem.length || remp.length\n ? tuples.filter(function(t) { return cur[tupleid(t)] > 0; })\n : tuples.slice();\n } else {\n for (id in out) pulse.mod.push(out[id]);\n }\n\n return pulse;\n }\n };\n}\n","import {isArray} from 'vega-util';\n\nvar CACHE = '_:mod:_';\n\n/**\n * Hash that tracks modifications to assigned values.\n * Callers *must* use the set method to update values.\n */\nexport default function Parameters() {\n Object.defineProperty(this, CACHE, {writable: true, value: {}});\n}\n\nvar prototype = Parameters.prototype;\n\n/**\n * Set a parameter value. If the parameter value changes, the parameter\n * will be recorded as modified.\n * @param {string} name - The parameter name.\n * @param {number} index - The index into an array-value parameter. Ignored if\n * the argument is undefined, null or less than zero.\n * @param {*} value - The parameter value to set.\n * @param {boolean} [force=false] - If true, records the parameter as modified\n * even if the value is unchanged.\n * @return {Parameters} - This parameter object.\n */\nprototype.set = function(name, index, value, force) {\n var o = this,\n v = o[name],\n mod = o[CACHE];\n\n if (index != null && index >= 0) {\n if (v[index] !== value || force) {\n v[index] = value;\n mod[index + ':' + name] = -1;\n mod[name] = -1;\n }\n } else if (v !== value || force) {\n o[name] = value;\n mod[name] = isArray(value) ? 1 + value.length : -1;\n }\n\n return o;\n};\n\n/**\n * Tests if one or more parameters has been modified. If invoked with no\n * arguments, returns true if any parameter value has changed. If the first\n * argument is array, returns trues if any parameter name in the array has\n * changed. Otherwise, tests if the given name and optional array index has\n * changed.\n * @param {string} name - The parameter name to test.\n * @param {number} [index=undefined] - The parameter array index to test.\n * @return {boolean} - Returns true if a queried parameter was modified.\n */\nprototype.modified = function(name, index) {\n var mod = this[CACHE], k;\n if (!arguments.length) {\n for (k in mod) { if (mod[k]) return true; }\n return false;\n } else if (isArray(name)) {\n for (k=0; k= 0)\n ? (index + 1 < mod[name] || !!mod[index + ':' + name])\n : !!mod[name];\n};\n\n/**\n * Clears the modification records. After calling this method,\n * all parameters are considered unmodified.\n */\nprototype.clear = function() {\n this[CACHE] = {};\n return this;\n};\n","import Parameters from './Parameters';\nimport UniqueList from './util/UniqueList';\nimport {array, error, id, isArray} from 'vega-util';\n\nvar OP_ID = 0;\nvar PULSE = 'pulse';\nvar NO_PARAMS = new Parameters();\n\n// Boolean Flags\nvar SKIP = 1,\n MODIFIED = 2;\n\n/**\n * An Operator is a processing node in a dataflow graph.\n * Each operator stores a value and an optional value update function.\n * Operators can accept a hash of named parameters. Parameter values can\n * either be direct (JavaScript literals, arrays, objects) or indirect\n * (other operators whose values will be pulled dynamically). Operators\n * included as parameters will have this operator added as a dependency.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {function(object, Pulse)} [update] - An update function. Upon\n * evaluation of this operator, the update function will be invoked and the\n * return value will be used as the new value of this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @see parameters\n */\nexport default function Operator(init, update, params, react) {\n this.id = ++OP_ID;\n this.value = init;\n this.stamp = -1;\n this.rank = -1;\n this.qrank = -1;\n this.flags = 0;\n\n if (update) {\n this._update = update;\n }\n if (params) this.parameters(params, react);\n}\n\nvar prototype = Operator.prototype;\n\n/**\n * Returns a list of target operators dependent on this operator.\n * If this list does not exist, it is created and then returned.\n * @return {UniqueList}\n */\nprototype.targets = function() {\n return this._targets || (this._targets = UniqueList(id));\n};\n\n/**\n * Sets the value of this operator.\n * @param {*} value - the value to set.\n * @return {Number} Returns 1 if the operator value has changed\n * according to strict equality, returns 0 otherwise.\n */\nprototype.set = function(value) {\n if (this.value !== value) {\n this.value = value;\n return 1;\n } else {\n return 0;\n }\n};\n\nfunction flag(bit) {\n return function(state) {\n var f = this.flags;\n if (arguments.length === 0) return !!(f & bit);\n this.flags = state ? (f | bit) : (f & ~bit);\n return this;\n };\n}\n\n/**\n * Indicates that operator evaluation should be skipped on the next pulse.\n * This operator will still propagate incoming pulses, but its update function\n * will not be invoked. The skip flag is reset after every pulse, so calling\n * this method will affect processing of the next pulse only.\n */\nprototype.skip = flag(SKIP);\n\n/**\n * Indicates that this operator's value has been modified on its most recent\n * pulse. Normally modification is checked via strict equality; however, in\n * some cases it is more efficient to update the internal state of an object.\n * In those cases, the modified flag can be used to trigger propagation. Once\n * set, the modification flag persists across pulses until unset. The flag can\n * be used with the last timestamp to test if a modification is recent.\n */\nprototype.modified = flag(MODIFIED);\n\n/**\n * Sets the parameters for this operator. The parameter values are analyzed for\n * operator instances. If found, this operator will be added as a dependency\n * of the parameterizing operator. Operator values are dynamically marshalled\n * from each operator parameter prior to evaluation. If a parameter value is\n * an array, the array will also be searched for Operator instances. However,\n * the search does not recurse into sub-arrays or object properties.\n * @param {object} params - A hash of operator parameters.\n * @param {boolean} [react=true] - A flag indicating if this operator should\n * automatically update (react) when parameter values change. In other words,\n * this flag determines if the operator registers itself as a listener on\n * any upstream operators included in the parameters.\n * @param {boolean} [initonly=false] - A flag indicating if this operator\n * should calculate an update only upon its initiatal evaluation, then\n * deregister dependencies and suppress all future update invocations.\n * @return {Operator[]} - An array of upstream dependencies.\n */\nprototype.parameters = function(params, react, initonly) {\n react = react !== false;\n var self = this,\n argval = (self._argval = self._argval || new Parameters()),\n argops = (self._argops = self._argops || []),\n deps = [],\n name, value, n, i;\n\n function add(name, index, value) {\n if (value instanceof Operator) {\n if (value !== self) {\n if (react) value.targets().add(self);\n deps.push(value);\n }\n argops.push({op:value, name:name, index:index});\n } else {\n argval.set(name, index, value);\n }\n }\n\n for (name in params) {\n value = params[name];\n\n if (name === PULSE) {\n array(value).forEach(function(op) {\n if (!(op instanceof Operator)) {\n error('Pulse parameters must be operator instances.');\n } else if (op !== self) {\n op.targets().add(self);\n deps.push(op);\n }\n });\n self.source = value;\n } else if (isArray(value)) {\n argval.set(name, -1, Array(n = value.length));\n for (i=0; i pause) {\n t = now;\n return 1;\n } else {\n return 0;\n }\n });\n};\n\nprototype.debounce = function(delay) {\n var s = stream();\n\n this.targets().add(stream(null, null,\n debounce(delay, function(e) {\n var df = e.dataflow;\n s.receive(e);\n if (df && df.run) df.run();\n })\n ));\n\n return s;\n};\n\nprototype.between = function(a, b) {\n var active = false;\n a.targets().add(stream(null, null, function() { active = true; }));\n b.targets().add(stream(null, null, function() { active = false; }));\n return this.filter(function() { return active; });\n};\n","import {extend, isFunction, stringValue} from 'vega-util';\n\n// Matches absolute URLs with optional protocol\n// https://... file://... //...\nvar protocol_re = /^([A-Za-z]+:)?\\/\\//;\n\n// Special treatment in node.js for the file: protocol\nvar fileProtocol = 'file://';\n\n/**\n * Creates a new loader instance that provides methods for requesting files\n * from either the network or disk, and for sanitizing request URIs.\n * @param {object} [options] - Optional default loading options to use.\n * @return {object} - A new loader instance.\n */\nexport default function(options) {\n return {\n options: options || {},\n sanitize: sanitize,\n load: load,\n file: file,\n http: http\n };\n}\n\n/**\n * Load an external resource, typically either from the web or from the local\n * filesystem. This function uses {@link sanitize} to first sanitize the uri,\n * then calls either {@link http} (for web requests) or {@link file} (for\n * filesystem loading).\n * @param {string} uri - The resource indicator (e.g., URL or filename).\n * @param {object} [options] - Optional loading options. These options will\n * override any existing default options.\n * @return {Promise} - A promise that resolves to the loaded content.\n */\nfunction load(uri, options) {\n var loader = this;\n return loader.sanitize(uri, options)\n .then(function(opt) {\n var url = opt.href;\n return opt.localFile\n ? loader.file(url)\n : loader.http(url, options);\n });\n}\n\n/**\n * URI sanitizer function.\n * @param {string} uri - The uri (url or filename) to sanity check.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to an object containing\n * sanitized uri data, or rejects it the input uri is deemed invalid.\n * The properties of the resolved object are assumed to be\n * valid attributes for an HTML 'a' tag. The sanitized uri *must* be\n * provided by the 'href' property of the returned object.\n */\nfunction sanitize(uri, options) {\n options = extend({}, this.options, options);\n\n return new Promise(function(accept, reject) {\n var result = {href: null},\n isFile, hasProtocol, loadFile, base;\n\n if (uri == null || typeof uri !== 'string') {\n reject('Sanitize failure, invalid URI: ' + stringValue(uri));\n return;\n }\n\n hasProtocol = protocol_re.test(uri);\n\n // if relative url (no protocol/host), prepend baseURL\n if ((base = options.baseURL) && !hasProtocol) {\n // Ensure that there is a slash between the baseURL (e.g. hostname) and url\n if (!startsWith(uri, '/') && base[base.length-1] !== '/') {\n uri = '/' + uri;\n }\n uri = base + uri;\n }\n\n // should we load from file system?\n loadFile = (isFile = startsWith(uri, fileProtocol))\n || options.mode === 'file'\n || options.mode !== 'http' && !hasProtocol && fs();\n\n if (isFile) {\n // strip file protocol\n uri = uri.slice(fileProtocol.length);\n } else if (startsWith(uri, '//')) {\n if (options.defaultProtocol === 'file') {\n // if is file, strip protocol and set loadFile flag\n uri = uri.slice(2);\n loadFile = true;\n } else {\n // if relative protocol (starts with '//'), prepend default protocol\n uri = (options.defaultProtocol || 'http') + ':' + uri;\n }\n }\n\n // set non-enumerable mode flag to indicate local file load\n Object.defineProperty(result, 'localFile', {value: !!loadFile});\n\n // set uri\n result.href = uri;\n\n // set default result target, if specified\n if (options.target) {\n result.target = options.target + '';\n }\n\n // return\n accept(result);\n });\n}\n\n/**\n * HTTP request loader.\n * @param {string} url - The url to request.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to the file contents.\n */\nfunction http(url, options) {\n return request(url, extend({}, this.options.http, options))\n .then(function(response) {\n if (!response.ok) throw response.status + '' + response.statusText;\n return response.text();\n });\n}\n\n/**\n * File system loader.\n * @param {string} filename - The file system path to load.\n * @return {Promise} - A promise that resolves to the file contents.\n */\nfunction file(filename) {\n return new Promise(function(accept, reject) {\n var f = fs();\n f ? f.readFile(filename, function(error, data) {\n if (error) reject(error);\n else accept(data);\n })\n : reject('No file system access for ' + filename);\n });\n}\n\nfunction request(url, init) {\n var f = typeof fetch === 'function' ? fetch : require('node-fetch');\n return f ? f(url, init) : Promise.reject('No fetch method available.');\n}\n\nfunction fs() {\n var fs = typeof require === 'function' && require('fs');\n return fs && isFunction(fs.readFile) ? fs : null;\n}\n\nfunction startsWith(string, query) {\n return string == null ? false : string.lastIndexOf(query, 0) === 0;\n}\n","import {identity, toBoolean, toDate, toNumber, toString} from 'vega-util';\n\nexport var typeParsers = {\n boolean: toBoolean,\n integer: toNumber,\n number: toNumber,\n date: toDate,\n string: toString,\n unknown: identity\n};\n\nvar typeTests = [\n isBoolean,\n isInteger,\n isNumber,\n isDate\n];\n\nvar typeList = [\n 'boolean',\n 'integer',\n 'number',\n 'date'\n];\n\nexport function inferType(values, field) {\n if (!values || !values.length) return 'unknown';\n\n var value, i, j, t = 0,\n n = values.length,\n m = typeTests.length,\n a = typeTests.map(function(_, i) { return i + 1; });\n\n for (i=0, n=values.length; i 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import {dsvFormat} from 'd3-dsv';\nimport {extend, stringValue} from 'vega-util';\n\nexport function delimitedFormat(delimiter) {\n return function(data, format) {\n var delim = {delimiter: delimiter};\n return dsv(data, format ? extend(format, delim) : delim);\n };\n}\n\nexport default function dsv(data, format) {\n if (format.header) {\n data = format.header\n .map(stringValue)\n .join(format.delimiter) + '\\n' + data;\n }\n return dsvFormat(format.delimiter).parse(data+'');\n}\n","import {field, identity, isFunction, isObject} from 'vega-util';\n\nfunction isBuffer(_) {\n return (typeof Buffer === 'function' && isFunction(Buffer.isBuffer))\n ? Buffer.isBuffer(_) : false;\n}\n\nexport default function(data, format) {\n var prop = (format && format.property) ? field(format.property) : identity;\n return isObject(data) && !isBuffer(data)\n ? parseJSON(prop(data))\n : prop(JSON.parse(data));\n}\n\nfunction parseJSON(data, format) {\n return (format && format.copy)\n ? JSON.parse(JSON.stringify(data))\n : data;\n}\n","export default function(x) {\n return x;\n}\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n if (typeof o === \"string\") o = topology.objects[o];\n return o.type === \"GeometryCollection\"\n ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type, coordinates;\n switch (type) {\n case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n case \"Point\": coordinates = point(o.coordinates); break;\n case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n case \"LineString\": coordinates = line(o.arcs); break;\n case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n case \"Polygon\": coordinates = polygon(o.arcs); break;\n case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n default: return null;\n }\n return {type: type, coordinates: coordinates};\n }\n\n return geometry(o);\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2, n = input.length, output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n}\n","export default function(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","export default function(topology, arcs) {\n var stitchedArcs = {},\n fragmentByStart = {},\n fragmentByEnd = {},\n fragments = [],\n emptyIndex = -1;\n\n // Stitch empty arcs first, since they may be subsumed by other arcs.\n arcs.forEach(function(i, j) {\n var arc = topology.arcs[i < 0 ? ~i : i], t;\n if (arc.length < 3 && !arc[1][0] && !arc[1][1]) {\n t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t;\n }\n });\n\n arcs.forEach(function(i) {\n var e = ends(i),\n start = e[0],\n end = e[1],\n f, g;\n\n if (f = fragmentByEnd[start]) {\n delete fragmentByEnd[f.end];\n f.push(i);\n f.end = end;\n if (g = fragmentByStart[end]) {\n delete fragmentByStart[g.start];\n var fg = g === f ? f : f.concat(g);\n fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else if (f = fragmentByStart[end]) {\n delete fragmentByStart[f.start];\n f.unshift(i);\n f.start = start;\n if (g = fragmentByEnd[start]) {\n delete fragmentByEnd[g.end];\n var gf = g === f ? f : g.concat(f);\n fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else {\n f = [i];\n fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f;\n }\n });\n\n function ends(i) {\n var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1;\n if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; });\n else p1 = arc[arc.length - 1];\n return i < 0 ? [p1, p0] : [p0, p1];\n }\n\n function flush(fragmentByEnd, fragmentByStart) {\n for (var k in fragmentByEnd) {\n var f = fragmentByEnd[k];\n delete fragmentByStart[f.start];\n delete f.start;\n delete f.end;\n f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; });\n fragments.push(f);\n }\n }\n\n flush(fragmentByEnd, fragmentByStart);\n flush(fragmentByStart, fragmentByEnd);\n arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); });\n\n return fragments;\n}\n","import {object} from \"./feature.js\";\nimport stitch from \"./stitch.js\";\n\nexport default function(topology) {\n return object(topology, meshArcs.apply(this, arguments));\n}\n\nexport function meshArcs(topology, object, filter) {\n var arcs, i, n;\n if (arguments.length > 1) arcs = extractArcs(topology, object, filter);\n else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i;\n return {type: \"MultiLineString\", arcs: stitch(topology, arcs)};\n}\n\nfunction extractArcs(topology, object, filter) {\n var arcs = [],\n geomsByArc = [],\n geom;\n\n function extract0(i) {\n var j = i < 0 ? ~i : i;\n (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom});\n }\n\n function extract1(arcs) {\n arcs.forEach(extract0);\n }\n\n function extract2(arcs) {\n arcs.forEach(extract1);\n }\n\n function extract3(arcs) {\n arcs.forEach(extract2);\n }\n\n function geometry(o) {\n switch (geom = o, o.type) {\n case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n case \"LineString\": extract1(o.arcs); break;\n case \"MultiLineString\": case \"Polygon\": extract2(o.arcs); break;\n case \"MultiPolygon\": extract3(o.arcs); break;\n }\n }\n\n geometry(object);\n\n geomsByArc.forEach(filter == null\n ? function(geoms) { arcs.push(geoms[0].i); }\n : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); });\n\n return arcs;\n}\n","import {default as dsv, delimitedFormat} from './dsv';\nimport json from './json';\nimport topojson from './topojson';\n\nexport var format = {\n dsv: dsv,\n csv: delimitedFormat(','),\n tsv: delimitedFormat('\\t'),\n json: json,\n topojson: topojson\n};\n\nexport function formats(name, reader) {\n if (arguments.length > 1) {\n format[name] = reader;\n return this;\n } else {\n return format.hasOwnProperty(name) ? format[name] : null;\n }\n}\n","import json from './json';\nimport {feature, mesh} from 'topojson-client';\nimport {error} from 'vega-util';\n\nexport default function(data, format) {\n var method, object, property;\n data = json(data, format);\n\n method = (format && (property = format.feature)) ? feature\n : (format && (property = format.mesh)) ? mesh\n : error('Missing TopoJSON feature or mesh parameter.');\n\n object = (object = data.objects[property])\n ? method(data, object)\n : error('Invalid TopoJSON object: ' + property);\n\n return object && object.features || [object];\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {inferTypes, typeParsers} from './type';\nimport {formats} from './formats/index';\nimport {error} from 'vega-util';\nimport {timeParse, utcParse} from 'd3-time-format';\n\nexport default function(data, schema, dateParse) {\n schema = schema || {};\n\n var reader = formats(schema.type || 'json');\n if (!reader) error('Unknown data format type: ' + schema.type);\n\n data = reader(data, schema);\n if (schema.parse) parse(data, schema.parse, dateParse);\n\n if (data.hasOwnProperty('columns')) delete data.columns;\n return data;\n}\n\nfunction parse(data, types, dateParse) {\n if (!data.length) return; // early exit for empty data\n\n dateParse = dateParse || timeParse;\n\n var fields = data.columns || Object.keys(data[0]),\n parsers, datum, field, i, j, n, m;\n\n if (types === 'auto') types = inferTypes(data, fields);\n\n fields = Object.keys(types);\n parsers = fields.map(function(field) {\n var type = types[field],\n parts, pattern;\n\n if (type && (type.indexOf('date:') === 0 || type.indexOf('utc:') === 0)) {\n parts = type.split(/:(.+)?/, 2); // split on first :\n pattern = parts[1];\n\n if ((pattern[0] === '\\'' && pattern[pattern.length-1] === '\\'') ||\n (pattern[0] === '\"' && pattern[pattern.length-1] === '\"')) {\n pattern = pattern.slice(1, -1);\n }\n\n return parts[0] === 'utc' ? utcParse(pattern) : dateParse(pattern);\n }\n\n if (!typeParsers[type]) {\n throw Error('Illegal format pattern: ' + field + ':' + type);\n }\n\n return typeParsers[type];\n });\n\n for (i=0, n=data.length, m=fields.length; i} _ - The field(s) to mark as modified.\n * @return {Pulse} - This pulse instance.\n */\nprototype.modifies = function(_) {\n var fields = array(_),\n hash = this.fields || (this.fields = {});\n fields.forEach(function(f) { hash[f] = true; });\n return this;\n};\n\n/**\n * Checks if one or more data fields have been modified during this pulse\n * propagation timestamp.\n * @param {string|Array} _ - The field(s) to check for modified.\n * @return {boolean} - Returns true if any of the provided fields has been\n * marked as modified, false otherwise.\n */\nprototype.modified = function(_) {\n var fields = this.fields;\n return !(this.mod.length && fields) ? false\n : !arguments.length ? !!fields\n : isArray(_) ? _.some(function(f) { return fields[f]; })\n : fields[_];\n};\n\n/**\n * Adds a filter function to one more tuple sets. Filters are applied to\n * backing tuple arrays, to determine the actual set of tuples considered\n * added, removed or modified. They can be used to delay materialization of\n * a tuple set in order to avoid expensive array copies. In addition, the\n * filter functions can serve as value transformers: unlike standard predicate\n * function (which return boolean values), Pulse filters should return the\n * actual tuple value to process. If a tuple set is already filtered, the\n * new filter function will be appended into a conjuntive ('and') query.\n * @param {number} flags - Flags indicating the tuple set(s) to filter.\n * @param {function(*):object} filter - Filter function that will be applied\n * to the tuple set array, and should return a data tuple if the value\n * should be included in the tuple set, and falsy (or null) otherwise.\n * @return {Pulse} - Returns this pulse instance.\n */\nprototype.filter = function(flags, filter) {\n var p = this;\n if (flags & ADD) p.addF = addFilter(p.addF, filter);\n if (flags & REM) p.remF = addFilter(p.remF, filter);\n if (flags & MOD) p.modF = addFilter(p.modF, filter);\n if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter);\n return p;\n};\n\nfunction addFilter(a, b) {\n return a ? function(t,i) { return a(t,i) && b(t,i); } : b;\n}\n\n/**\n * Materialize one or more tuple sets in this pulse. If the tuple set(s) have\n * a registered filter function, it will be applied and the tuple set(s) will\n * be replaced with materialized tuple arrays.\n * @param {number} flags - Flags indicating the tuple set(s) to materialize.\n * @return {Pulse} - Returns this pulse instance.\n */\nprototype.materialize = function(flags) {\n flags = flags || ALL;\n var p = this;\n if ((flags & ADD) && p.addF) {\n p.add = materialize(p.add, p.addF);\n p.addF = null;\n }\n if ((flags & REM) && p.remF) {\n p.rem = materialize(p.rem, p.remF);\n p.remF = null;\n }\n if ((flags & MOD) && p.modF) {\n p.mod = materialize(p.mod, p.modF);\n p.modF = null;\n }\n if ((flags & SOURCE) && p.srcF) {\n p.source = p.source.filter(p.srcF);\n p.srcF = null;\n }\n return p;\n};\n\nfunction materialize(data, filter) {\n var out = [];\n visitArray(data, filter, function(_) { out.push(_); });\n return out;\n}\n\nfunction filter(pulse, flags) {\n var map = {};\n pulse.visit(flags, function(t) { map[tupleid(t)] = 1; });\n return function(t) { return map[tupleid(t)] ? null : t; };\n}\n\n/**\n * Visit one or more tuple sets in this pulse.\n * @param {number} flags - Flags indicating the tuple set(s) to visit.\n * Legal values are ADD, REM, MOD and SOURCE (if a backing data source\n * has been set).\n * @param {function(object):*} - Visitor function invoked per-tuple.\n * @return {Pulse} - Returns this pulse instance.\n */\nprototype.visit = function(flags, visitor) {\n var p = this, v = visitor, src, sum;\n\n if (flags & SOURCE) {\n visitArray(p.source, p.srcF, v);\n return p;\n }\n\n if (flags & ADD) visitArray(p.add, p.addF, v);\n if (flags & REM) visitArray(p.rem, p.remF, v);\n if (flags & MOD) visitArray(p.mod, p.modF, v);\n\n if ((flags & REFLOW) && (src = p.source)) {\n sum = p.add.length + p.mod.length;\n if (sum === src.length) {\n // do nothing\n } else if (sum) {\n visitArray(src, filter(p, ADD_MOD), v);\n } else {\n // if no add/rem/mod tuples, visit source\n visitArray(src, p.srcF, v);\n }\n }\n\n return p;\n};\n","import Pulse from './Pulse';\nimport {error, inherits, isArray} from 'vega-util';\n\n/**\n * Represents a set of multiple pulses. Used as input for operators\n * that accept multiple pulses at a time. Contained pulses are\n * accessible via the public \"pulses\" array property. This pulse doe\n * not carry added, removed or modified tuples directly. However,\n * the visit method can be used to traverse all such tuples contained\n * in sub-pulses with a timestamp matching this parent multi-pulse.\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The timestamp.\n * @param {Array} pulses - The sub-pulses for this multi-pulse.\n */\nexport default function MultiPulse(dataflow, stamp, pulses, encode) {\n var p = this,\n c = 0,\n pulse, hash, i, n, f;\n\n this.dataflow = dataflow;\n this.stamp = stamp;\n this.fields = null;\n this.encode = encode || null;\n this.pulses = pulses;\n\n for (i=0, n=pulses.length; i= Info) {\n dt = Date.now();\n df.debug('-- START PROPAGATION (' + df._clock + ') -----');\n }\n\n // initialize queue, reset touched operators\n df._touched.forEach(function(op) { df._enqueue(op, true); });\n df._touched = UniqueList(id);\n\n try {\n while (df._heap.size() > 0) {\n op = df._heap.pop();\n\n // re-queue if rank changes\n if (op.rank !== op.qrank) { df._enqueue(op, true); continue; }\n\n // otherwise, evaluate the operator\n next = op.run(df._getPulse(op, encode));\n\n if (level >= Debug) {\n df.debug(op.id, next === StopPropagation ? 'STOP' : next, op);\n }\n\n // propagate the pulse\n if (next !== StopPropagation) {\n df._pulse = next;\n if (op._targets) op._targets.forEach(function(op) { df._enqueue(op); });\n }\n\n // increment visit counter\n ++count;\n }\n } catch (err) {\n error = err;\n }\n\n // reset pulse map\n df._pulses = {};\n df._pulse = null;\n\n if (level >= Info) {\n dt = Date.now() - dt;\n df.info('> Pulse ' + df._clock + ': ' + count + ' operators; ' + dt + 'ms');\n }\n\n if (error) {\n df._postrun = [];\n df.error(error);\n }\n\n if (df._onrun) {\n try { df._onrun(df, count, error); } catch (err) { df.error(err); }\n }\n\n // invoke callbacks queued via runAfter\n if (df._postrun.length) {\n var postrun = df._postrun;\n df._postrun = [];\n postrun\n .sort(function(a, b) { return b.priority - a.priority; })\n .forEach(function(_) { invokeCallback(df, _.callback); });\n }\n\n return this;\n}\n\nfunction invokeCallback(df, callback) {\n try { callback(df); } catch (err) { df.error(err); }\n}\n\n/**\n * Runs the dataflow and returns a Promise that resolves when the\n * propagation cycle completes. The standard run method may exit early\n * if there are pending data loading operations. In contrast, this\n * method returns a Promise to allow callers to receive notification\n * when dataflow evaluation completes.\n * @return {Promise} - A promise that resolves to this dataflow.\n */\nexport function runAsync() {\n // return this._pending || Promise.resolve(this.run());\n return this._pending\n || (this.run() && this._pending)\n || Promise.resolve(this);\n}\n\n/**\n * Schedules a callback function to be invoked after the current pulse\n * propagation completes. If no propagation is currently occurring,\n * the function is invoked immediately.\n * @param {function(Dataflow)} callback - The callback function to run.\n * The callback will be invoked with this Dataflow instance as its\n * sole argument.\n * @param {boolean} enqueue - A boolean flag indicating that the\n * callback should be queued up to run after the next propagation\n * cycle, suppressing immediate invocation when propagation is not\n * currently occurring.\n */\nexport function runAfter(callback, enqueue, priority) {\n if (this._pulse || enqueue) {\n // pulse propagation is currently running, queue to run after\n this._postrun.push({\n priority: priority || 0,\n callback: callback\n });\n } else {\n // pulse propagation already complete, invoke immediately\n invokeCallback(this, callback);\n }\n}\n\n/**\n * Enqueue an operator into the priority queue for evaluation. The operator\n * will be enqueued if it has no registered pulse for the current cycle, or if\n * the force argument is true. Upon enqueue, this method also sets the\n * operator's qrank to the current rank value.\n * @param {Operator} op - The operator to enqueue.\n * @param {boolean} [force] - A flag indicating if the operator should be\n * forceably added to the queue, even if it has already been previously\n * enqueued during the current pulse propagation. This is useful when the\n * dataflow graph is dynamically modified and the operator rank changes.\n */\nexport function enqueue(op, force) {\n var p = !this._pulses[op.id];\n if (p) this._pulses[op.id] = this._pulse;\n if (p || force) {\n op.qrank = op.rank;\n this._heap.push(op);\n }\n}\n\n/**\n * Provide a correct pulse for evaluating an operator. If the operator has an\n * explicit source operator, we will try to pull the pulse(s) from it.\n * If there is an array of source operators, we build a multi-pulse.\n * Otherwise, we return a current pulse with correct source data.\n * If the pulse is the pulse map has an explicit target set, we use that.\n * Else if the pulse on the upstream source operator is current, we use that.\n * Else we use the pulse from the pulse map, but copy the source tuple array.\n * @param {Operator} op - The operator for which to get an input pulse.\n * @param {string} [encode] - An (optional) encoding set name with which to\n * annotate the returned pulse. See {@link run} for more information.\n */\nexport function getPulse(op, encode) {\n var s = op.source,\n stamp = this._clock,\n p;\n\n if (s && isArray(s)) {\n p = s.map(function(_) { return _.pulse; });\n return new MultiPulse(this, stamp, p, encode);\n }\n\n p = this._pulses[op.id];\n if (s) {\n s = s.pulse;\n if (!s || s === StopPropagation) {\n p.source = [];\n } else if (s.stamp === stamp && p.target !== op) {\n p = s;\n } else {\n p.source = s.source;\n }\n }\n\n return p;\n}\n","import Pulse from '../Pulse';\n\nvar NO_OPT = {skip: false, force: false};\n\n/**\n * Touches an operator, scheduling it to be evaluated. If invoked outside of\n * a pulse propagation, the operator will be evaluated the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the operator\n * will be queued for evaluation if and only if the operator has not yet been\n * evaluated on the current propagation timestamp.\n * @param {Operator} op - The operator to touch.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nexport function touch(op, options) {\n var opt = options || NO_OPT;\n if (this._pulse) {\n // if in midst of propagation, add to priority queue\n this._enqueue(op);\n } else {\n // otherwise, queue for next propagation\n this._touched.add(op);\n }\n if (opt.skip) op.skip(true);\n return this;\n}\n\n/**\n * Updates the value of the given operator.\n * @param {Operator} op - The operator to update.\n * @param {*} value - The value to set.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nexport function update(op, value, options) {\n var opt = options || NO_OPT;\n if (op.set(value) || opt.force) {\n this.touch(op, opt);\n }\n return this;\n}\n\n/**\n * Pulses an operator with a changeset of tuples. If invoked outside of\n * a pulse propagation, the pulse will be applied the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the pulse\n * will be added to the set of active pulses and will be applied if and\n * only if the target operator has not yet been evaluated on the current\n * propagation timestamp.\n * @param {Operator} op - The operator to pulse.\n * @param {ChangeSet} value - The tuple changeset to apply.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nexport function pulse(op, changeset, options) {\n this.touch(op, options || NO_OPT);\n\n var p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)),\n t = op.pulse && op.pulse.source || [];\n p.target = op;\n this._pulses[op.id] = changeset.pulse(p, t);\n\n return this;\n}\n","export default function Heap(comparator) {\n this.cmp = comparator;\n this.nodes = [];\n}\n\nvar prototype = Heap.prototype;\n\nprototype.size = function() {\n return this.nodes.length;\n};\n\nprototype.clear = function() {\n this.nodes = [];\n return this;\n};\n\nprototype.peek = function() {\n return this.nodes[0];\n};\n\nprototype.push = function(x) {\n var array = this.nodes;\n array.push(x);\n return siftdown(array, 0, array.length-1, this.cmp);\n};\n\nprototype.pop = function() {\n var array = this.nodes,\n last = array.pop(),\n item;\n\n if (array.length) {\n item = array[0];\n array[0] = last;\n siftup(array, 0, this.cmp);\n } else {\n item = last;\n }\n return item;\n};\n\nprototype.replace = function(item) {\n var array = this.nodes,\n retval = array[0];\n array[0] = item;\n siftup(array, 0, this.cmp);\n return retval;\n};\n\nprototype.pushpop = function(item) {\n var array = this.nodes, ref = array[0];\n if (array.length && this.cmp(ref, item) < 0) {\n array[0] = item;\n item = ref;\n siftup(array, 0, this.cmp);\n }\n return item;\n};\n\nfunction siftdown(array, start, idx, cmp) {\n var item, parent, pidx;\n\n item = array[idx];\n while (idx > start) {\n pidx = (idx - 1) >> 1;\n parent = array[pidx];\n if (cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n break;\n }\n return (array[idx] = item);\n}\n\nfunction siftup(array, idx, cmp) {\n var start = idx,\n end = array.length,\n item = array[idx],\n cidx = 2 * idx + 1, ridx;\n\n while (cidx < end) {\n ridx = cidx + 1;\n if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n array[idx] = array[cidx];\n idx = cidx;\n cidx = 2 * idx + 1;\n }\n array[idx] = item;\n return siftdown(array, start, idx, cmp);\n}\n","import add from './add';\nimport connect from './connect';\nimport events from './events';\nimport {ingest, request} from './load';\nimport on from './on';\nimport {rank, rerank} from './rank';\nimport {run, runAsync, runAfter, enqueue, getPulse} from './run';\nimport {pulse, touch, update} from './update';\nimport changeset from '../ChangeSet';\nimport Heap from '../util/Heap';\nimport UniqueList from '../util/UniqueList';\nimport {loader} from 'vega-loader';\nimport {id, logger, Error} from 'vega-util';\n\n/**\n * A dataflow graph for reactive processing of data streams.\n * @constructor\n */\nexport default function Dataflow() {\n this._log = logger();\n this.logLevel(Error);\n\n this._clock = 0;\n this._rank = 0;\n try {\n this._loader = loader();\n } catch (e) {\n // do nothing if loader module is unavailable\n }\n\n this._touched = UniqueList(id);\n this._pulses = {};\n this._pulse = null;\n\n this._heap = new Heap(function(a, b) { return a.qrank - b.qrank; });\n this._postrun = [];\n}\n\nvar prototype = Dataflow.prototype;\n\n/**\n * The current timestamp of this dataflow. This value reflects the\n * timestamp of the previous dataflow run. The dataflow is initialized\n * with a stamp value of 0. The initial run of the dataflow will have\n * a timestap of 1, and so on. This value will match the\n * {@link Pulse.stamp} property.\n * @return {number} - The current timestamp value.\n */\nprototype.stamp = function() {\n return this._clock;\n};\n\n/**\n * Gets or sets the loader instance to use for data file loading. A\n * loader object must provide a \"load\" method for loading files and a\n * \"sanitize\" method for checking URL/filename validity. Both methods\n * should accept a URI and options hash as arguments, and return a Promise\n * that resolves to the loaded file contents (load) or a hash containing\n * sanitized URI data with the sanitized url assigned to the \"href\" property\n * (sanitize).\n * @param {object} _ - The loader instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current loader instance. Otherwise returns this Dataflow instance.\n */\nprototype.loader = function(_) {\n if (arguments.length) {\n this._loader = _;\n return this;\n } else {\n return this._loader;\n }\n};\n\n/**\n * Empty entry threshold for garbage cleaning. Map data structures will\n * perform cleaning once the number of empty entries exceeds this value.\n */\nprototype.cleanThreshold = 1e4;\n\n// OPERATOR REGISTRATION\nprototype.add = add;\nprototype.connect = connect;\nprototype.rank = rank;\nprototype.rerank = rerank;\n\n// OPERATOR UPDATES\nprototype.pulse = pulse;\nprototype.touch = touch;\nprototype.update = update;\nprototype.changeset = changeset;\n\n// DATA LOADING\nprototype.ingest = ingest;\nprototype.request = request;\n\n// EVENT HANDLING\nprototype.events = events;\nprototype.on = on;\n\n// PULSE PROPAGATION\nprototype.run = run;\nprototype.runAsync = runAsync;\nprototype.runAfter = runAfter;\nprototype._enqueue = enqueue;\nprototype._getPulse = getPulse;\n\n// LOGGING AND ERROR HANDLING\n\nfunction logMethod(method) {\n return function() {\n return this._log[method].apply(this, arguments);\n };\n}\n\n/**\n * Logs an error message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit error messages.\n */\nprototype.error = logMethod('error');\n\n/**\n * Logs a warning message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit warning messages.\n */\nprototype.warn = logMethod('warn');\n\n/**\n * Logs a information message. By default, logged messages are written to\n * console output. The message will only be logged if the current log level is\n * high enough to permit information messages.\n */\nprototype.info = logMethod('info');\n\n/**\n * Logs a debug message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit debug messages.\n */\nprototype.debug = logMethod('debug');\n\n/**\n * Get or set the current log level. If an argument is provided, it\n * will be used as the new log level.\n * @param {number} [level] - Should be one of None, Warn, Info\n * @return {number} - The current log level.\n */\nprototype.logLevel = logMethod('level');\n","import Operator from './Operator';\nimport {inherits} from 'vega-util';\n\n/**\n * Abstract class for operators that process data tuples.\n * Subclasses must provide a {@link transform} method for operator processing.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {Operator} [source] - The operator from which to receive pulses.\n */\nexport default function Transform(init, params) {\n Operator.call(this, init, null, params);\n}\n\nvar prototype = inherits(Transform, Operator);\n\n/**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\nprototype.run = function(pulse) {\n if (pulse.stamp <= this.stamp) return pulse.StopPropagation;\n\n var rv;\n if (this.skip()) {\n this.skip(false);\n } else {\n rv = this.evaluate(pulse);\n }\n rv = rv || pulse;\n\n if (rv !== pulse.StopPropagation) this.pulse = rv;\n this.stamp = pulse.stamp;\n\n return rv;\n};\n\n/**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Marshalls parameter values and then invokes {@link transform}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n value (including undefined) will let the input pulse pass through.\n */\nprototype.evaluate = function(pulse) {\n var params = this.marshall(pulse.stamp),\n out = this.transform(params, pulse);\n params.clear();\n return out;\n};\n\n/**\n * Process incoming pulses.\n * Subclasses should override this method to implement transforms.\n * @param {Parameters} _ - The operator parameter values.\n * @param {Pulse} pulse - The current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n * value (including undefined) will let the input pulse pass through.\n */\nprototype.transform = function() {};\n","import Operator from '../Operator';\nimport {isFunction} from 'vega-util';\n\n/**\n * Add an operator to the dataflow graph. This function accepts a\n * variety of input argument types. The basic signature supports an\n * initial value, update function and parameters. If the first parameter\n * is an Operator instance, it will be added directly. If it is a\n * constructor for an Operator subclass, a new instance will be instantiated.\n * Otherwise, if the first parameter is a function instance, it will be used\n * as the update function and a null initial value is assumed.\n * @param {*} init - One of: the operator to add, the initial value of\n * the operator, an operator class to instantiate, or an update function.\n * @param {function} [update] - The operator update function.\n * @param {object} [params] - The operator parameters.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @return {Operator} - The added operator.\n */\nexport default function(init, update, params, react) {\n var shift = 1,\n op;\n\n if (init instanceof Operator) {\n op = init;\n } else if (init && init.prototype instanceof Operator) {\n op = new init();\n } else if (isFunction(init)) {\n op = new Operator(null, init);\n } else {\n shift = 0;\n op = new Operator(init, update);\n }\n\n this.rank(op);\n if (shift) {\n react = params;\n params = update;\n }\n if (params) this.connect(op, op.parameters(params, react));\n this.touch(op);\n\n return op;\n}\n","/**\n * Connect a target operator as a dependent of source operators.\n * If necessary, this method will rerank the target operator and its\n * dependents to ensure propagation proceeds in a topologically sorted order.\n * @param {Operator} target - The target operator.\n * @param {Array} - The source operators that should propagate\n * to the target operator.\n */\nexport default function(target, sources) {\n var targetRank = target.rank, i, n;\n\n for (i=0, n=sources.length; i= 0;) {\n queue.push(cur = list[i]);\n if (cur === op) error('Cycle detected in dataflow graph.');\n }\n }\n }\n}\n","import {read} from 'vega-loader';\nimport {truthy} from 'vega-util';\n\n/**\n * Ingests new data into the dataflow. First parses the data using the\n * vega-loader read method, then pulses a changeset to the target operator.\n * @param {Operator} target - The Operator to target with ingested data,\n * typically a Collect transform instance.\n * @param {*} data - The input data, prior to parsing. For JSON this may\n * be a string or an object. For CSV, TSV, etc should be a string.\n * @param {object} format - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @returns {Dataflow}\n */\nexport function ingest(target, data, format) {\n return this.pulse(target, this.changeset().insert(read(data, format)));\n}\n\nfunction loadPending(df) {\n var accept, reject,\n pending = new Promise(function(a, r) {\n accept = function() { a(df); };\n reject = r;\n });\n\n pending.requests = 0;\n\n pending.done = function() {\n if (--pending.requests === 0) {\n df.runAfter(function() {\n df._pending = null;\n try {\n df.run();\n if (df._pending) {\n df._pending.then(accept);\n } else {\n accept();\n }\n } catch (err) {\n reject(err);\n }\n });\n }\n };\n\n return (df._pending = pending);\n}\n\n/**\n * Request data from an external source, parse it, and pulse a changeset\n * to the specified target operator.\n * @param {Operator} target - The Operator to target with the loaded data,\n * typically a Collect transform instance.\n * @param {string} url - The URL from which to load the data. This string\n * is passed to the vega-loader load method.\n * @param {object} [format] - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @return {Promise} A Promise that resolves upon completion of the request.\n * Resolves to a status code: 0 success, -1 load fail, -2 parse fail.\n */\nexport function request(target, url, format) {\n var df = this,\n status = 0,\n pending = df._pending || loadPending(df);\n\n pending.requests += 1;\n\n return df.loader()\n .load(url, {context:'dataflow'})\n .then(\n function(data) {\n return read(data, format);\n },\n function(error) {\n status = -1;\n df.error('Loading failed', url, error);\n })\n .catch(\n function(error) {\n status = -2;\n df.error('Data ingestion failed', url, error);\n })\n .then(function(data) {\n df.pulse(target, df.changeset().remove(truthy).insert(data || []));\n pending.done();\n return status;\n });\n}\n","import {stream} from '../EventStream';\nimport {array} from 'vega-util';\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor. The input must\n * support the addEventListener method.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @param {function(object): *} [apply] - Event application function.\n * If provided, this function will be invoked and the result will be\n * used as the downstream event value.\n * @return {EventStream}\n */\nexport default function(source, type, filter, apply) {\n var df = this,\n s = stream(filter, apply),\n send = function(e) {\n e.dataflow = df;\n try {\n s.receive(e);\n } catch (error) {\n df.error(error);\n } finally {\n df.run();\n }\n },\n sources;\n\n if (typeof source === 'string' && typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n } else {\n sources = array(source);\n }\n\n for (var i=0, n=sources.length; i 1 ? this.dev / (this.valid-1) : undefined',\n req: ['mean'], idx: 1\n }),\n 'variancep': measure({\n name: 'variancep',\n set: 'this.valid > 1 ? this.dev / this.valid : undefined',\n req: ['variance'], idx: 2\n }),\n 'stdev': measure({\n name: 'stdev',\n set: 'this.valid > 1 ? Math.sqrt(this.dev / (this.valid-1)) : undefined',\n req: ['variance'], idx: 2\n }),\n 'stdevp': measure({\n name: 'stdevp',\n set: 'this.valid > 1 ? Math.sqrt(this.dev / this.valid) : undefined',\n req: ['variance'], idx: 2\n }),\n 'stderr': measure({\n name: 'stderr',\n set: 'this.valid > 1 ? Math.sqrt(this.dev / (this.valid * (this.valid-1))) : undefined',\n req: ['variance'], idx: 2\n }),\n 'distinct': measure({\n name: 'distinct',\n set: 'cell.data.distinct(this.get)',\n req: ['values'], idx: 3\n }),\n 'ci0': measure({\n name: 'ci0',\n set: 'cell.data.ci0(this.get)',\n req: ['values'], idx: 3\n }),\n 'ci1': measure({\n name: 'ci1',\n set: 'cell.data.ci1(this.get)',\n req: ['values'], idx: 3\n }),\n 'median': measure({\n name: 'median',\n set: 'cell.data.q2(this.get)',\n req: ['values'], idx: 3\n }),\n 'q1': measure({\n name: 'q1',\n set: 'cell.data.q1(this.get)',\n req: ['values'], idx: 3\n }),\n 'q3': measure({\n name: 'q3',\n set: 'cell.data.q3(this.get)',\n req: ['values'], idx: 3\n }),\n 'argmin': measure({\n name: 'argmin',\n init: 'this.argmin = undefined;',\n add: 'if (v < this.min) this.argmin = t;',\n rem: 'if (v <= this.min) this.argmin = undefined;',\n set: 'this.argmin || cell.data.argmin(this.get)',\n req: ['min'], str: ['values'], idx: 3\n }),\n 'argmax': measure({\n name: 'argmax',\n init: 'this.argmax = undefined;',\n add: 'if (v > this.max) this.argmax = t;',\n rem: 'if (v >= this.max) this.argmax = undefined;',\n set: 'this.argmax || cell.data.argmax(this.get)',\n req: ['max'], str: ['values'], idx: 3\n }),\n 'min': measure({\n name: 'min',\n init: 'this.min = undefined;',\n add: 'if (v < this.min || this.min === undefined) this.min = v;',\n rem: 'if (v <= this.min) this.min = NaN;',\n set: 'this.min = (isNaN(this.min) ? cell.data.min(this.get) : this.min)',\n str: ['values'], idx: 4\n }),\n 'max': measure({\n name: 'max',\n init: 'this.max = undefined;',\n add: 'if (v > this.max || this.max === undefined) this.max = v;',\n rem: 'if (v >= this.max) this.max = NaN;',\n set: 'this.max = (isNaN(this.max) ? cell.data.max(this.get) : this.max)',\n str: ['values'], idx: 4\n })\n};\n\nexport var ValidAggregateOps = Object.keys(AggregateOps);\n\nexport function createMeasure(op, name) {\n return AggregateOps[op](name);\n}\n\nfunction measure(base) {\n return function(out) {\n var m = extend({init:'', add:'', rem:'', idx:0}, base);\n m.out = out || base.name;\n return m;\n };\n}\n\nfunction compareIndex(a, b) {\n return a.idx - b.idx;\n}\n\nfunction resolve(agg, stream) {\n function collect(m, a) {\n function helper(r) { if (!m[r]) collect(m, m[r] = AggregateOps[r]()); }\n if (a.req) a.req.forEach(helper);\n if (stream && a.str) a.str.forEach(helper);\n return m;\n }\n var map = agg.reduce(\n collect,\n agg.reduce(function(m, a) {\n m[a.name] = a;\n return m;\n }, {})\n );\n var values = [], key;\n for (key in map) values.push(map[key]);\n return values.sort(compareIndex);\n}\n\nexport function compileMeasures(agg, field) {\n var get = field || identity,\n all = resolve(agg, true), // assume streaming removes may occur\n init = 'var cell = this.cell; this.valid = 0; this.missing = 0;',\n ctr = 'this.cell = cell; this.init();',\n add = 'if(v==null){++this.missing; return;} if(v!==v) return; ++this.valid;',\n rem = 'if(v==null){--this.missing; return;} if(v!==v) return; --this.valid;',\n set = 'var cell = this.cell;';\n\n all.forEach(function(a) {\n init += a.init;\n add += a.add;\n rem += a.rem;\n });\n agg.slice().sort(compareIndex).forEach(function(a) {\n set += 't[\\'' + a.out + '\\']=' + a.set + ';';\n });\n set += 'return t;';\n\n ctr = Function('cell', ctr);\n ctr.prototype.init = Function(init);\n ctr.prototype.add = Function('v', 't', add);\n ctr.prototype.rem = Function('v', 't', rem);\n ctr.prototype.set = Function('t', set);\n ctr.prototype.get = get;\n ctr.fields = agg.map(function(_) { return _.out; });\n return ctr;\n}\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n if (compare === ascending) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nexport function ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = array.length - 1, compare) {\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return minIndex(values);\n if (p >= 1) return maxIndex(values);\n var n,\n i = Math.floor((n - 1) * p),\n order = (i, j) => ascendingDefined(values[i], values[j]),\n index = quickselect(Uint32Array.from(values, (_, i) => i), i, 0, n - 1, order);\n return greatest(index.subarray(0, i + 1), i => values[i]);\n}\n","import quantile, {quantileIndex} from \"./quantile.js\";\n\nexport default function median(values, valueof) {\n return quantile(values, 0.5, valueof);\n}\n\nexport function medianIndex(values, valueof) {\n return quantileIndex(values, 0.5, valueof);\n}\n","import { ascending, quantileSorted, deviation, quantile, median } from 'd3-array';\n\nfunction* numbers (values, valueof) {\n if (valueof == null) {\n for (let value of values) {\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n\n for (let value of values) {\n value = valueof(value, ++index, values);\n\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n\nfunction quantiles (array, p, f) {\n const values = Float64Array.from(numbers(array, f)); // don't depend on return value from typed array sort call\n // protects against undefined sort results in Safari (vega/vega-lite#4964)\n\n values.sort(ascending);\n return p.map(_ => quantileSorted(values, _));\n}\n\nfunction quartiles (array, f) {\n return quantiles(array, [0.25, 0.50, 0.75], f);\n}\n\n// Theory, Practice, and Visualization. Wiley.\n\nfunction estimateBandwidth (array, f) {\n const n = array.length,\n d = deviation(array, f),\n q = quartiles(array, f),\n h = (q[2] - q[0]) / 1.34,\n v = Math.min(d, h) || d || Math.abs(q[0]) || 1;\n return 1.06 * v * Math.pow(n, -0.2);\n}\n\nfunction bin (_) {\n // determine range\n const maxb = _.maxbins || 20,\n base = _.base || 10,\n logb = Math.log(base),\n div = _.divide || [5, 2];\n let min = _.extent[0],\n max = _.extent[1],\n step,\n level,\n minstep,\n v,\n i,\n n;\n const span = _.span || max - min || Math.abs(min) || 1;\n\n if (_.step) {\n // if step size is explicitly given, use that\n step = _.step;\n } else if (_.steps) {\n // if provided, limit choice to acceptable step sizes\n v = span / maxb;\n\n for (i = 0, n = _.steps.length; i < n && _.steps[i] < v; ++i);\n\n step = _.steps[Math.max(0, i - 1)];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = _.minstep || 0;\n step = Math.max(minstep, Math.pow(base, Math.round(Math.log(span) / logb) - level)); // increase step size if too many bins\n\n while (Math.ceil(span / step) > maxb) {\n step *= base;\n } // decrease step size if allowed\n\n\n for (i = 0, n = div.length; i < n; ++i) {\n v = step / div[i];\n if (v >= minstep && span / v <= maxb) step = v;\n }\n } // update precision, min and max\n\n\n v = Math.log(step);\n const precision = v >= 0 ? 0 : ~~(-v / logb) + 1,\n eps = Math.pow(base, -precision - 1);\n\n if (_.nice || _.nice === undefined) {\n v = Math.floor(min / step + eps) * step;\n min = min < v ? v - step : v;\n max = Math.ceil(max / step) * step;\n }\n\n return {\n start: min,\n stop: max === min ? min + step : max,\n step: step\n };\n}\n\nvar random = Math.random;\nfunction setRandom(r) {\n random = r;\n}\n\nfunction bootstrapCI (array, samples, alpha, f) {\n if (!array.length) return [undefined, undefined];\n const values = Float64Array.from(numbers(array, f)),\n n = values.length,\n m = samples;\n let a, i, j, mu;\n\n for (j = 0, mu = Array(m); j < m; ++j) {\n for (a = 0, i = 0; i < n; ++i) {\n a += values[~~(random() * n)];\n }\n\n mu[j] = a / n;\n }\n\n mu.sort(ascending);\n return [quantile(mu, alpha / 2), quantile(mu, 1 - alpha / 2)];\n}\n\n// Dot density binning for dot plot construction.\n// Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n// https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\nfunction dotbin (array, step, smooth, f) {\n f = f || (_ => _);\n\n const n = array.length,\n v = new Float64Array(n);\n let i = 0,\n j = 1,\n a = f(array[0]),\n b = a,\n w = a + step,\n x;\n\n for (; j < n; ++j) {\n x = f(array[j]);\n\n if (x >= w) {\n b = (a + b) / 2;\n\n for (; i < j; ++i) v[i] = b;\n\n w = x + step;\n a = x;\n }\n\n b = x;\n }\n\n b = (a + b) / 2;\n\n for (; i < j; ++i) v[i] = b;\n\n return smooth ? smoothing(v, step + step / 4) : v;\n} // perform smoothing to reduce variance\n// swap points between \"adjacent\" stacks\n// Wilkinson defines adjacent as within step/4 units\n\nfunction smoothing(v, thresh) {\n const n = v.length;\n let a = 0,\n b = 1,\n c,\n d; // get left stack\n\n while (v[a] === v[b]) ++b;\n\n while (b < n) {\n // get right stack\n c = b + 1;\n\n while (v[b] === v[c]) ++c; // are stacks adjacent?\n // if so, compare sizes and swap as needed\n\n\n if (v[b] - v[b - 1] < thresh) {\n d = b + (a + c - b - b >> 1);\n\n while (d < b) v[d++] = v[b];\n\n while (d > b) v[d--] = v[a];\n } // update left stack indices\n\n\n a = b;\n b = c;\n }\n\n return v;\n}\n\nfunction lcg (seed) {\n // Random numbers using a Linear Congruential Generator with seed value\n // Uses glibc values from https://en.wikipedia.org/wiki/Linear_congruential_generator\n return function () {\n seed = (1103515245 * seed + 12345) % 2147483647;\n return seed / 2147483647;\n };\n}\n\nfunction integer (min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n\n let a, b, d;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n d = b - a;\n return dist;\n } else {\n return a;\n }\n },\n\n max(_) {\n if (arguments.length) {\n b = _ || 0;\n d = b - a;\n return dist;\n } else {\n return b;\n }\n },\n\n sample() {\n return a + Math.floor(d * random());\n },\n\n pdf(x) {\n return x === Math.floor(x) && x >= a && x < b ? 1 / d : 0;\n },\n\n cdf(x) {\n const v = Math.floor(x);\n return v < a ? 0 : v >= b ? 1 : (v - a + 1) / d;\n },\n\n icdf(p) {\n return p >= 0 && p <= 1 ? a - 1 + Math.floor(p * d) : NaN;\n }\n\n };\n return dist.min(min).max(max);\n}\n\nconst SQRT2PI = Math.sqrt(2 * Math.PI);\nconst SQRT2 = Math.SQRT2;\n\nlet nextSample = NaN;\nfunction sampleNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n let x = 0,\n y = 0,\n rds,\n c;\n\n if (nextSample === nextSample) {\n x = nextSample;\n nextSample = NaN;\n } else {\n do {\n x = random() * 2 - 1;\n y = random() * 2 - 1;\n rds = x * x + y * y;\n } while (rds === 0 || rds > 1);\n\n c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform\n\n x *= c;\n nextSample = y * c;\n }\n\n return mean + x * stdev;\n}\nfunction densityNormal(value, mean, stdev) {\n stdev = stdev == null ? 1 : stdev;\n const z = (value - (mean || 0)) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI);\n} // Approximation from West (2009)\n// Better Approximations to Cumulative Normal Functions\n\nfunction cumulativeNormal(value, mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (value - mean) / stdev,\n Z = Math.abs(z);\n let cd;\n\n if (Z > 37) {\n cd = 0;\n } else {\n const exp = Math.exp(-Z * Z / 2);\n let sum;\n\n if (Z < 7.07106781186547) {\n sum = 3.52624965998911e-02 * Z + 0.700383064443688;\n sum = sum * Z + 6.37396220353165;\n sum = sum * Z + 33.912866078383;\n sum = sum * Z + 112.079291497871;\n sum = sum * Z + 221.213596169931;\n sum = sum * Z + 220.206867912376;\n cd = exp * sum;\n sum = 8.83883476483184e-02 * Z + 1.75566716318264;\n sum = sum * Z + 16.064177579207;\n sum = sum * Z + 86.7807322029461;\n sum = sum * Z + 296.564248779674;\n sum = sum * Z + 637.333633378831;\n sum = sum * Z + 793.826512519948;\n sum = sum * Z + 440.413735824752;\n cd = cd / sum;\n } else {\n sum = Z + 0.65;\n sum = Z + 4 / sum;\n sum = Z + 3 / sum;\n sum = Z + 2 / sum;\n sum = Z + 1 / sum;\n cd = exp / sum / 2.506628274631;\n }\n }\n\n return z > 0 ? 1 - cd : cd;\n} // Approximation of Probit function using inverse error function.\n\nfunction quantileNormal(p, mean, stdev) {\n if (p < 0 || p > 1) return NaN;\n return (mean || 0) + (stdev == null ? 1 : stdev) * SQRT2 * erfinv(2 * p - 1);\n} // Approximate inverse error function. Implementation from \"Approximating\n// the erfinv function\" by Mike Giles, GPU Computing Gems, volume 2, 2010.\n// Ported from Apache Commons Math, http://www.apache.org/licenses/LICENSE-2.0\n\nfunction erfinv(x) {\n // beware that the logarithm argument must be\n // commputed as (1.0 - x) * (1.0 + x),\n // it must NOT be simplified as 1.0 - x * x as this\n // would induce rounding errors near the boundaries +/-1\n let w = -Math.log((1 - x) * (1 + x)),\n p;\n\n if (w < 6.25) {\n w -= 3.125;\n p = -3.6444120640178196996e-21;\n p = -1.685059138182016589e-19 + p * w;\n p = 1.2858480715256400167e-18 + p * w;\n p = 1.115787767802518096e-17 + p * w;\n p = -1.333171662854620906e-16 + p * w;\n p = 2.0972767875968561637e-17 + p * w;\n p = 6.6376381343583238325e-15 + p * w;\n p = -4.0545662729752068639e-14 + p * w;\n p = -8.1519341976054721522e-14 + p * w;\n p = 2.6335093153082322977e-12 + p * w;\n p = -1.2975133253453532498e-11 + p * w;\n p = -5.4154120542946279317e-11 + p * w;\n p = 1.051212273321532285e-09 + p * w;\n p = -4.1126339803469836976e-09 + p * w;\n p = -2.9070369957882005086e-08 + p * w;\n p = 4.2347877827932403518e-07 + p * w;\n p = -1.3654692000834678645e-06 + p * w;\n p = -1.3882523362786468719e-05 + p * w;\n p = 0.0001867342080340571352 + p * w;\n p = -0.00074070253416626697512 + p * w;\n p = -0.0060336708714301490533 + p * w;\n p = 0.24015818242558961693 + p * w;\n p = 1.6536545626831027356 + p * w;\n } else if (w < 16.0) {\n w = Math.sqrt(w) - 3.25;\n p = 2.2137376921775787049e-09;\n p = 9.0756561938885390979e-08 + p * w;\n p = -2.7517406297064545428e-07 + p * w;\n p = 1.8239629214389227755e-08 + p * w;\n p = 1.5027403968909827627e-06 + p * w;\n p = -4.013867526981545969e-06 + p * w;\n p = 2.9234449089955446044e-06 + p * w;\n p = 1.2475304481671778723e-05 + p * w;\n p = -4.7318229009055733981e-05 + p * w;\n p = 6.8284851459573175448e-05 + p * w;\n p = 2.4031110387097893999e-05 + p * w;\n p = -0.0003550375203628474796 + p * w;\n p = 0.00095328937973738049703 + p * w;\n p = -0.0016882755560235047313 + p * w;\n p = 0.0024914420961078508066 + p * w;\n p = -0.0037512085075692412107 + p * w;\n p = 0.005370914553590063617 + p * w;\n p = 1.0052589676941592334 + p * w;\n p = 3.0838856104922207635 + p * w;\n } else if (Number.isFinite(w)) {\n w = Math.sqrt(w) - 5.0;\n p = -2.7109920616438573243e-11;\n p = -2.5556418169965252055e-10 + p * w;\n p = 1.5076572693500548083e-09 + p * w;\n p = -3.7894654401267369937e-09 + p * w;\n p = 7.6157012080783393804e-09 + p * w;\n p = -1.4960026627149240478e-08 + p * w;\n p = 2.9147953450901080826e-08 + p * w;\n p = -6.7711997758452339498e-08 + p * w;\n p = 2.2900482228026654717e-07 + p * w;\n p = -9.9298272942317002539e-07 + p * w;\n p = 4.5260625972231537039e-06 + p * w;\n p = -1.9681778105531670567e-05 + p * w;\n p = 7.5995277030017761139e-05 + p * w;\n p = -0.00021503011930044477347 + p * w;\n p = -0.00013871931833623122026 + p * w;\n p = 1.0103004648645343977 + p * w;\n p = 4.8499064014085844221 + p * w;\n } else {\n p = Infinity;\n }\n\n return p * x;\n}\n\nfunction gaussian (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n\n sample: () => sampleNormal(mu, sigma),\n pdf: value => densityNormal(value, mu, sigma),\n cdf: value => cumulativeNormal(value, mu, sigma),\n icdf: p => quantileNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction kde (support, bandwidth) {\n const kernel = gaussian();\n let n = 0;\n const dist = {\n data(_) {\n if (arguments.length) {\n support = _;\n n = _ ? _.length : 0;\n return dist.bandwidth(bandwidth);\n } else {\n return support;\n }\n },\n\n bandwidth(_) {\n if (!arguments.length) return bandwidth;\n bandwidth = _;\n if (!bandwidth && support) bandwidth = estimateBandwidth(support);\n return dist;\n },\n\n sample() {\n return support[~~(random() * n)] + bandwidth * kernel.sample();\n },\n\n pdf(x) {\n let y = 0,\n i = 0;\n\n for (; i < n; ++i) {\n y += kernel.pdf((x - support[i]) / bandwidth);\n }\n\n return y / bandwidth / n;\n },\n\n cdf(x) {\n let y = 0,\n i = 0;\n\n for (; i < n; ++i) {\n y += kernel.cdf((x - support[i]) / bandwidth);\n }\n\n return y / n;\n },\n\n icdf() {\n throw Error('KDE icdf not supported.');\n }\n\n };\n return dist.data(support);\n}\n\nfunction sampleLogNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n return Math.exp(mean + sampleNormal() * stdev);\n}\nfunction densityLogNormal(value, mean, stdev) {\n if (value <= 0) return 0;\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (Math.log(value) - mean) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI * value);\n}\nfunction cumulativeLogNormal(value, mean, stdev) {\n return cumulativeNormal(Math.log(value), mean, stdev);\n}\nfunction quantileLogNormal(p, mean, stdev) {\n return Math.exp(quantileNormal(p, mean, stdev));\n}\nfunction lognormal (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n\n sample: () => sampleLogNormal(mu, sigma),\n pdf: value => densityLogNormal(value, mu, sigma),\n cdf: value => cumulativeLogNormal(value, mu, sigma),\n icdf: p => quantileLogNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction mixture (dists, weights) {\n let m = 0,\n w;\n\n function normalize(x) {\n const w = [];\n let sum = 0,\n i;\n\n for (i = 0; i < m; ++i) {\n sum += w[i] = x[i] == null ? 1 : +x[i];\n }\n\n for (i = 0; i < m; ++i) {\n w[i] /= sum;\n }\n\n return w;\n }\n\n const dist = {\n weights(_) {\n if (arguments.length) {\n w = normalize(weights = _ || []);\n return dist;\n }\n\n return weights;\n },\n\n distributions(_) {\n if (arguments.length) {\n if (_) {\n m = _.length;\n dists = _;\n } else {\n m = 0;\n dists = [];\n }\n\n return dist.weights(weights);\n }\n\n return dists;\n },\n\n sample() {\n const r = random();\n let d = dists[m - 1],\n v = w[0],\n i = 0; // first select distribution\n\n for (; i < m - 1; v += w[++i]) {\n if (r < v) {\n d = dists[i];\n break;\n }\n } // then sample from it\n\n\n return d.sample();\n },\n\n pdf(x) {\n let p = 0,\n i = 0;\n\n for (; i < m; ++i) {\n p += w[i] * dists[i].pdf(x);\n }\n\n return p;\n },\n\n cdf(x) {\n let p = 0,\n i = 0;\n\n for (; i < m; ++i) {\n p += w[i] * dists[i].cdf(x);\n }\n\n return p;\n },\n\n icdf() {\n throw Error('Mixture icdf not supported.');\n }\n\n };\n return dist.distributions(dists).weights(weights);\n}\n\nfunction sampleUniform(min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return min + (max - min) * random();\n}\nfunction densityUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return value >= min && value <= max ? 1 / (max - min) : 0;\n}\nfunction cumulativeUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return value < min ? 0 : value > max ? 1 : (value - min) / (max - min);\n}\nfunction quantileUniform(p, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return p >= 0 && p <= 1 ? min + p * (max - min) : NaN;\n}\nfunction uniform (min, max) {\n let a, b;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n return dist;\n } else {\n return a;\n }\n },\n\n max(_) {\n if (arguments.length) {\n b = _ == null ? 1 : _;\n return dist;\n } else {\n return b;\n }\n },\n\n sample: () => sampleUniform(a, b),\n pdf: value => densityUniform(value, a, b),\n cdf: value => cumulativeUniform(value, a, b),\n icdf: p => quantileUniform(p, a, b)\n };\n\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return dist.min(min).max(max);\n}\n\n// Ordinary Least Squares\nfunction ols (uX, uY, uXY, uX2) {\n const delta = uX2 - uX * uX,\n slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,\n intercept = uY - slope * uX;\n return [intercept, slope];\n}\n\nfunction points(data, x, y, sort) {\n data = data.filter(d => {\n let u = x(d),\n v = y(d);\n return u != null && (u = +u) >= u && v != null && (v = +v) >= v;\n });\n\n if (sort) {\n data.sort((a, b) => x(a) - x(b));\n }\n\n const n = data.length,\n X = new Float64Array(n),\n Y = new Float64Array(n); // extract values, calculate means\n\n let i = 0,\n ux = 0,\n uy = 0,\n xv,\n yv,\n d;\n\n for (d of data) {\n X[i] = xv = +x(d);\n Y[i] = yv = +y(d);\n ++i;\n ux += (xv - ux) / i;\n uy += (yv - uy) / i;\n } // mean center the data\n\n\n for (i = 0; i < n; ++i) {\n X[i] -= ux;\n Y[i] -= uy;\n }\n\n return [X, Y, ux, uy];\n}\nfunction visitPoints(data, x, y, callback) {\n let i = -1,\n u,\n v;\n\n for (const d of data) {\n u = x(d);\n v = y(d);\n\n if (u != null && (u = +u) >= u && v != null && (v = +v) >= v) {\n callback(u, v, ++i);\n }\n }\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction rSquared (data, x, y, uY, predict) {\n let SSE = 0,\n SST = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const sse = dy - predict(dx),\n sst = dy - uY;\n SSE += sse * sse;\n SST += sst * sst;\n });\n return 1 - SSE / SST;\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction linear (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * x;\n\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction log (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n dx = Math.log(dx);\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * Math.log(x);\n\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\nfunction exp (data, x, y) {\n // eslint-disable-next-line no-unused-vars\n const [xv, yv, ux, uy] = points(data, x, y);\n let YL = 0,\n XY = 0,\n XYL = 0,\n X2Y = 0,\n n = 0,\n dx,\n ly,\n xy;\n visitPoints(data, x, y, (_, dy) => {\n dx = xv[n++];\n ly = Math.log(dy);\n xy = dx * dy;\n YL += (dy * ly - YL) / n;\n XY += (xy - XY) / n;\n XYL += (xy * ly - XYL) / n;\n X2Y += (dx * xy - X2Y) / n;\n });\n\n const [c0, c1] = ols(XY / uy, YL / uy, XYL / uy, X2Y / uy),\n predict = x => Math.exp(c0 + c1 * (x - ux));\n\n return {\n coef: [Math.exp(c0 - c1 * ux), c1],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction pow (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n YS = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const lx = Math.log(dx),\n ly = Math.log(dy);\n ++n;\n X += (lx - X) / n;\n Y += (ly - Y) / n;\n XY += (lx * ly - XY) / n;\n X2 += (lx * lx - X2) / n;\n YS += (dy - YS) / n;\n });\n\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] * Math.pow(x, coef[1]);\n\n coef[0] = Math.exp(coef[0]);\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, YS, predict)\n };\n}\n\nfunction quad (data, x, y) {\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length;\n let X2 = 0,\n X3 = 0,\n X4 = 0,\n XY = 0,\n X2Y = 0,\n i,\n dx,\n dy,\n x2;\n\n for (i = 0; i < n;) {\n dx = xv[i];\n dy = yv[i++];\n x2 = dx * dx;\n X2 += (x2 - X2) / i;\n X3 += (x2 * dx - X3) / i;\n X4 += (x2 * x2 - X4) / i;\n XY += (dx * dy - XY) / i;\n X2Y += (x2 * dy - X2Y) / i;\n }\n\n const X2X2 = X4 - X2 * X2,\n d = X2 * X2X2 - X3 * X3,\n a = (X2Y * X2 - XY * X3) / d,\n b = (XY * X2X2 - X2Y * X3) / d,\n c = -a * X2,\n predict = x => {\n x = x - ux;\n return a * x * x + b * x + c + uy;\n }; // transform coefficients back from mean-centered space\n\n\n return {\n coef: [c - b * ux + a * ux * ux + uy, b - 2 * a * ux, a],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n// ... which was adapted from regression-js by Tom Alexander\n// Source: https://github.com/Tom-Alexander/regression-js/blob/master/src/regression.js#L246\n// License: https://github.com/Tom-Alexander/regression-js/blob/master/LICENSE\n\nfunction poly (data, x, y, order) {\n // use more efficient methods for lower orders\n if (order === 1) return linear(data, x, y);\n if (order === 2) return quad(data, x, y);\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length,\n lhs = [],\n rhs = [],\n k = order + 1;\n let i, j, l, v, c;\n\n for (i = 0; i < k; ++i) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i) * yv[l];\n }\n\n lhs.push(v);\n c = new Float64Array(k);\n\n for (j = 0; j < k; ++j) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i + j);\n }\n\n c[j] = v;\n }\n\n rhs.push(c);\n }\n\n rhs.push(lhs);\n\n const coef = gaussianElimination(rhs),\n predict = x => {\n x -= ux;\n let y = uy + coef[0] + coef[1] * x + coef[2] * x * x;\n\n for (i = 3; i < k; ++i) y += coef[i] * Math.pow(x, i);\n\n return y;\n };\n\n return {\n coef: uncenter(k, coef, -ux, uy),\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\nfunction uncenter(k, a, x, y) {\n const z = Array(k);\n let i, j, v, c; // initialize to zero\n\n for (i = 0; i < k; ++i) z[i] = 0; // polynomial expansion\n\n\n for (i = k - 1; i >= 0; --i) {\n v = a[i];\n c = 1;\n z[i] += v;\n\n for (j = 1; j <= i; ++j) {\n c *= (i + 1 - j) / j; // binomial coefficent\n\n z[i - j] += v * Math.pow(x, j) * c;\n }\n } // bias term\n\n\n z[0] += y;\n return z;\n} // Given an array for a two-dimensional matrix and the polynomial order,\n// solve A * x = b using Gaussian elimination.\n\n\nfunction gaussianElimination(matrix) {\n const n = matrix.length - 1,\n coef = [];\n let i, j, k, r, t;\n\n for (i = 0; i < n; ++i) {\n r = i; // max row\n\n for (j = i + 1; j < n; ++j) {\n if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][r])) {\n r = j;\n }\n }\n\n for (k = i; k < n + 1; ++k) {\n t = matrix[k][i];\n matrix[k][i] = matrix[k][r];\n matrix[k][r] = t;\n }\n\n for (j = i + 1; j < n; ++j) {\n for (k = n; k >= i; k--) {\n matrix[k][j] -= matrix[k][i] * matrix[i][j] / matrix[i][i];\n }\n }\n }\n\n for (j = n - 1; j >= 0; --j) {\n t = 0;\n\n for (k = j + 1; k < n; ++k) {\n t += matrix[k][j] * coef[k];\n }\n\n coef[j] = (matrix[n][j] - t) / matrix[j][j];\n }\n\n return coef;\n}\n\nconst maxiters = 2,\n epsilon = 1e-12; // Adapted from science.js by Jason Davies\n// Source: https://github.com/jasondavies/science.js/blob/master/src/stats/loess.js\n// License: https://github.com/jasondavies/science.js/blob/master/LICENSE\n\nfunction loess (data, x, y, bandwidth) {\n const [xv, yv, ux, uy] = points(data, x, y, true),\n n = xv.length,\n bw = Math.max(2, ~~(bandwidth * n)),\n // # nearest neighbors\n yhat = new Float64Array(n),\n residuals = new Float64Array(n),\n robustWeights = new Float64Array(n).fill(1);\n\n for (let iter = -1; ++iter <= maxiters;) {\n const interval = [0, bw - 1];\n\n for (let i = 0; i < n; ++i) {\n const dx = xv[i],\n i0 = interval[0],\n i1 = interval[1],\n edge = dx - xv[i0] > xv[i1] - dx ? i0 : i1;\n let W = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0;\n const denom = 1 / Math.abs(xv[edge] - dx || 1); // avoid singularity!\n\n for (let k = i0; k <= i1; ++k) {\n const xk = xv[k],\n yk = yv[k],\n w = tricube(Math.abs(dx - xk) * denom) * robustWeights[k],\n xkw = xk * w;\n W += w;\n X += xkw;\n Y += yk * w;\n XY += yk * xkw;\n X2 += xk * xkw;\n } // linear regression fit\n\n\n const [a, b] = ols(X / W, Y / W, XY / W, X2 / W);\n yhat[i] = a + b * dx;\n residuals[i] = Math.abs(yv[i] - yhat[i]);\n updateInterval(xv, i + 1, interval);\n }\n\n if (iter === maxiters) {\n break;\n }\n\n const medianResidual = median(residuals);\n if (Math.abs(medianResidual) < epsilon) break;\n\n for (let i = 0, arg, w; i < n; ++i) {\n arg = residuals[i] / (6 * medianResidual); // default to epsilon (rather than zero) for large deviations\n // keeping weights tiny but non-zero prevents singularites\n\n robustWeights[i] = arg >= 1 ? epsilon : (w = 1 - arg * arg) * w;\n }\n }\n\n return output(xv, yhat, ux, uy);\n} // weighting kernel for local regression\n\nfunction tricube(x) {\n return (x = 1 - x * x * x) * x * x;\n} // advance sliding window interval of nearest neighbors\n\n\nfunction updateInterval(xv, i, interval) {\n const val = xv[i];\n let left = interval[0],\n right = interval[1] + 1;\n if (right >= xv.length) return; // step right if distance to new right edge is <= distance to old left edge\n // step when distance is equal to ensure movement over duplicate x values\n\n while (i > left && xv[right] - val <= val - xv[left]) {\n interval[0] = ++left;\n interval[1] = right;\n ++right;\n }\n} // generate smoothed output points\n// average points with repeated x values\n\n\nfunction output(xv, yhat, ux, uy) {\n const n = xv.length,\n out = [];\n let i = 0,\n cnt = 0,\n prev = [],\n v;\n\n for (; i < n; ++i) {\n v = xv[i] + ux;\n\n if (prev[0] === v) {\n // average output values via online update\n prev[1] += (yhat[i] - prev[1]) / ++cnt;\n } else {\n // add new output point\n cnt = 0;\n prev[1] += uy;\n prev = [v, yhat[i]];\n out.push(prev);\n }\n }\n\n prev[1] += uy;\n return out;\n}\n\n// subdivide up to accuracy of 0.5 degrees\nconst MIN_RADIANS = 0.5 * Math.PI / 180; // Adaptively sample an interpolated function over a domain extent\n\nfunction sampleCurve (f, extent, minSteps, maxSteps) {\n minSteps = minSteps || 25;\n maxSteps = Math.max(minSteps, maxSteps || 200);\n\n const point = x => [x, f(x)],\n minX = extent[0],\n maxX = extent[1],\n span = maxX - minX,\n stop = span / maxSteps,\n prev = [point(minX)],\n next = [];\n\n if (minSteps === maxSteps) {\n // no adaptation, sample uniform grid directly and return\n for (let i = 1; i < maxSteps; ++i) {\n prev.push(point(minX + i / minSteps * span));\n }\n\n prev.push(point(maxX));\n return prev;\n } else {\n // sample minimum points on uniform grid\n // then move on to perform adaptive refinement\n next.push(point(maxX));\n\n for (let i = minSteps; --i > 0;) {\n next.push(point(minX + i / minSteps * span));\n }\n }\n\n let p0 = prev[0];\n let p1 = next[next.length - 1];\n const sx = 1 / span;\n const sy = scaleY(p0[1], next);\n\n while (p1) {\n // midpoint for potential curve subdivision\n const pm = point((p0[0] + p1[0]) / 2);\n const dx = pm[0] - p0[0] >= stop;\n\n if (dx && angleDelta(p0, pm, p1, sx, sy) > MIN_RADIANS) {\n // maximum resolution has not yet been met, and\n // subdivision midpoint is sufficiently different from endpoint\n // save subdivision, push midpoint onto the visitation stack\n next.push(pm);\n } else {\n // subdivision midpoint sufficiently similar to endpoint\n // skip subdivision, store endpoint, move to next point on the stack\n p0 = p1;\n prev.push(p1);\n next.pop();\n }\n\n p1 = next[next.length - 1];\n }\n\n return prev;\n}\n\nfunction scaleY(init, points) {\n let ymin = init;\n let ymax = init;\n const n = points.length;\n\n for (let i = 0; i < n; ++i) {\n const y = points[i][1];\n if (y < ymin) ymin = y;\n if (y > ymax) ymax = y;\n }\n\n return 1 / (ymax - ymin);\n}\n\nfunction angleDelta(p, q, r, sx, sy) {\n const a0 = Math.atan2(sy * (r[1] - p[1]), sx * (r[0] - p[0])),\n a1 = Math.atan2(sy * (q[1] - p[1]), sx * (q[0] - p[0]));\n return Math.abs(a0 - a1);\n}\n\nexport { estimateBandwidth as bandwidthNRD, bin, bootstrapCI, cumulativeLogNormal, cumulativeNormal, cumulativeUniform, densityLogNormal, densityNormal, densityUniform, dotbin, quantileLogNormal, quantileNormal, quantileUniform, quantiles, quartiles, random, integer as randomInteger, kde as randomKDE, lcg as randomLCG, lognormal as randomLogNormal, mixture as randomMixture, gaussian as randomNormal, uniform as randomUniform, exp as regressionExp, linear as regressionLinear, loess as regressionLoess, log as regressionLog, poly as regressionPoly, pow as regressionPow, quad as regressionQuad, sampleCurve, sampleLogNormal, sampleNormal, sampleUniform, setRandom };\n","import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n","export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n","import {tupleid} from 'vega-dataflow';\nimport {bootstrapCI, quartiles} from 'vega-statistics';\nimport {extentIndex, field} from 'vega-util';\n\nexport default function TupleStore(key) {\n this._key = key ? field(key) : tupleid;\n this.reset();\n}\n\nvar prototype = TupleStore.prototype;\n\nprototype.reset = function() {\n this._add = [];\n this._rem = [];\n this._ext = null;\n this._get = null;\n this._q = null;\n};\n\nprototype.add = function(v) {\n this._add.push(v);\n};\n\nprototype.rem = function(v) {\n this._rem.push(v);\n};\n\nprototype.values = function() {\n this._get = null;\n if (this._rem.length === 0) return this._add;\n\n var a = this._add,\n r = this._rem,\n k = this._key,\n n = a.length,\n m = r.length,\n x = Array(n - m),\n map = {}, i, j, v;\n\n // use unique key field to clear removed values\n for (i=0; i= 0) {\n s = get(v[n]) + '';\n if (!map.hasOwnProperty(s)) {\n map[s] = 1;\n ++count;\n }\n }\n\n return count;\n};\n\nprototype.extent = function(get) {\n if (this._get !== get || !this._ext) {\n var v = this.values(),\n i = extentIndex(v, get);\n this._ext = [v[i[0]], v[i[1]]];\n this._get = get;\n }\n return this._ext;\n};\n\nprototype.argmin = function(get) {\n return this.extent(get)[0] || {};\n};\n\nprototype.argmax = function(get) {\n return this.extent(get)[1] || {};\n};\n\nprototype.min = function(get) {\n var m = this.extent(get)[0];\n return m != null ? get(m) : undefined;\n};\n\nprototype.max = function(get) {\n var m = this.extent(get)[1];\n return m != null ? get(m) : undefined;\n};\n\nprototype.quartile = function(get) {\n if (this._get !== get || !this._q) {\n this._q = quartiles(this.values(), get);\n this._get = get;\n }\n return this._q;\n};\n\nprototype.q1 = function(get) {\n return this.quartile(get)[0];\n};\n\nprototype.q2 = function(get) {\n return this.quartile(get)[1];\n};\n\nprototype.q3 = function(get) {\n return this.quartile(get)[2];\n};\n\nprototype.ci = function(get) {\n if (this._get !== get || !this._ci) {\n this._ci = bootstrapCI(this.values(), 1000, 0.05, get);\n this._get = get;\n }\n return this._ci;\n};\n\nprototype.ci0 = function(get) {\n return this.ci(get)[0];\n};\n\nprototype.ci1 = function(get) {\n return this.ci(get)[1];\n};\n","import {groupkey} from './util/AggregateKeys';\nimport {createMeasure, compileMeasures, measureName, ValidAggregateOps} from './util/AggregateOps';\nimport TupleStore from './util/TupleStore';\nimport {ingest, replace, Transform} from 'vega-dataflow';\nimport {accessorFields, accessorName, array, error, inherits} from 'vega-util';\n\n/**\n * Group-by aggregation operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.fields] - An array of accessors to aggregate.\n * @param {Array} [params.ops] - An array of strings indicating aggregation operations.\n * @param {Array} [params.as] - An array of output field names for aggregated values.\n * @param {boolean} [params.cross=false] - A flag indicating that the full\n * cross-product of groupby values should be generated, including empty cells.\n * If true, the drop parameter is ignored and empty cells are retained.\n * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed.\n */\nexport default function Aggregate(params) {\n Transform.call(this, null, params);\n\n this._adds = []; // array of added output tuples\n this._mods = []; // array of modified output tuples\n this._alen = 0; // number of active added tuples\n this._mlen = 0; // number of active modified tuples\n this._drop = true; // should empty aggregation cells be removed\n this._cross = false; // produce full cross-product of group-by values\n\n this._dims = []; // group-by dimension accessors\n this._dnames = []; // group-by dimension names\n\n this._measures = []; // collection of aggregation monoids\n this._countOnly = false; // flag indicating only count aggregation\n this._counts = null; // collection of count fields\n this._prev = null; // previous aggregation cells\n\n this._inputs = null; // array of dependent input tuple field names\n this._outputs = null; // array of output tuple field names\n}\n\nAggregate.Definition = {\n \"type\": \"Aggregate\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"ops\", \"type\": \"enum\", \"array\": true, \"values\": ValidAggregateOps },\n { \"name\": \"fields\", \"type\": \"field\", \"null\": true, \"array\": true },\n { \"name\": \"as\", \"type\": \"string\", \"null\": true, \"array\": true },\n { \"name\": \"drop\", \"type\": \"boolean\", \"default\": true },\n { \"name\": \"cross\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"key\", \"type\": \"field\" }\n ]\n};\n\nvar prototype = inherits(Aggregate, Transform);\n\nprototype.transform = function(_, pulse) {\n var aggr = this,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n mod;\n\n this.stamp = out.stamp;\n\n if (this.value && ((mod = _.modified()) || pulse.modified(this._inputs))) {\n this._prev = this.value;\n this.value = mod ? this.init(_) : {};\n pulse.visit(pulse.SOURCE, function(t) { aggr.add(t); });\n } else {\n this.value = this.value || this.init(_);\n pulse.visit(pulse.REM, function(t) { aggr.rem(t); });\n pulse.visit(pulse.ADD, function(t) { aggr.add(t); });\n }\n\n // Indicate output fields and return aggregate tuples.\n out.modifies(this._outputs);\n\n // Should empty cells be dropped?\n aggr._drop = _.drop !== false;\n\n // If domain cross-product requested, generate empty cells as needed\n // and ensure that empty cells are not dropped\n if (_.cross && aggr._dims.length > 1) {\n aggr._drop = false;\n this.cross();\n }\n\n return aggr.changes(out);\n};\n\nprototype.cross = function() {\n var aggr = this,\n curr = aggr.value,\n dims = aggr._dnames,\n vals = dims.map(function() { return {}; }),\n n = dims.length;\n\n // collect all group-by domain values\n function collect(cells) {\n var key, i, t, v;\n for (key in cells) {\n t = cells[key].tuple;\n for (i=0; i} params.fields - The fields to compare.\n * @param {Array} [params.orders] - The sort orders.\n * Each entry should be one of \"ascending\" (default) or \"descending\".\n */\nexport default function Compare(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(Compare, Operator);\n\nfunction update(_) {\n return (this.value && !_.modified())\n ? this.value\n : compare(_.fields, _.orders);\n}\n","import {ingest, Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Count regexp-defined pattern occurrences in a text field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the text field.\n * @param {string} [params.pattern] - RegExp string defining the text pattern.\n * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case.\n * @param {string} [params.stopwords] - RegExp string of words to ignore.\n */\nexport default function CountPattern(params) {\n Transform.call(this, null, params);\n}\n\nCountPattern.Definition = {\n \"type\": \"CountPattern\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"case\", \"type\": \"enum\", \"values\": [\"upper\", \"lower\", \"mixed\"], \"default\": \"mixed\" },\n { \"name\": \"pattern\", \"type\": \"string\", \"default\": \"[\\\\w\\\"]+\" },\n { \"name\": \"stopwords\", \"type\": \"string\", \"default\": \"\" },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"text\", \"count\"] }\n ]\n};\n\nfunction tokenize(text, tcase, match) {\n switch (tcase) {\n case 'upper': text = text.toUpperCase(); break;\n case 'lower': text = text.toLowerCase(); break;\n }\n return text.match(match);\n}\n\nvar prototype = inherits(CountPattern, Transform);\n\nprototype.transform = function(_, pulse) {\n function process(update) {\n return function(tuple) {\n var tokens = tokenize(get(tuple), _.case, match) || [], t;\n for (var i=0, n=tokens.length; i} [params.as] - The names of the output fields.\n */\nexport default function Cross(params) {\n Transform.call(this, null, params);\n}\n\nCross.Definition = {\n \"type\": \"Cross\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"filter\", \"type\": \"expr\" },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"a\", \"b\"] }\n ]\n};\n\nvar prototype = inherits(Cross, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE),\n data = this.value,\n as = _.as || ['a', 'b'],\n a = as[0], b = as[1],\n reset = !data\n || pulse.changed(pulse.ADD_REM)\n || _.modified('as')\n || _.modified('filter');\n\n if (reset) {\n if (data) out.rem = data;\n data = pulse.materialize(pulse.SOURCE).source;\n out.add = this.value = cross(data, a, b, _.filter || truthy);\n } else {\n out.mod = data;\n }\n\n out.source = this.value;\n return out.modifies(as);\n};\n\nfunction cross(input, a, b, filter) {\n var data = [],\n t = {},\n n = input.length,\n i = 0,\n j, left;\n\n for (; i} - A method for requesting\n * source data. Used for distributions (such as KDE) that\n * require sample data points. This method will only be\n * invoked if the 'from' parameter for a target data source\n * is not provided. Typically this method returns backing\n * source data for a Pulse object.\n * @return {object} - The output distribution object.\n */\nexport default function parse(def, data) {\n var func = def[FUNCTION];\n if (!Distributions.hasOwnProperty(func)) {\n error('Unknown distribution function: ' + func);\n }\n\n var d = Distributions[func]();\n\n for (var name in def) {\n // if data field, extract values\n if (name === FIELD) {\n d.data((def.from || data()).map(def[name]));\n }\n\n // if distribution mixture, recurse to parse each definition\n else if (name === DISTRIBUTIONS) {\n d[name](def[name].map(function(_) { return parse(_, data); }));\n }\n\n // otherwise, simply set the parameter\n else if (typeof d[name] === FUNCTION) {\n d[name](def[name]);\n }\n }\n\n return d;\n}\n","export default function(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import parseDist from './util/Distributions';\nimport {ingest, Transform} from 'vega-dataflow';\nimport {error, inherits} from 'vega-util';\nimport {extent, range} from 'd3-array';\n\n/**\n * Grid sample points for a probability density. Given a distribution and\n * a sampling extent, will generate points suitable for plotting either\n * PDF (probability density function) or CDF (cumulative distribution\n * function) curves.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.distribution - The probability distribution. This\n * is an object parameter dependent on the distribution type.\n * @param {string} [params.method='pdf'] - The distribution method to sample.\n * One of 'pdf' or 'cdf'.\n * @param {Array} [params.extent] - The [min, max] extent over which\n * to sample the distribution. This argument is required in most cases, but\n * can be omitted if the distribution (e.g., 'kde') supports a 'data' method\n * that returns numerical sample points from which the extent can be deduced.\n * @param {number} [params.steps=100] - The number of sampling steps.\n */\nexport default function Density(params) {\n Transform.call(this, null, params);\n}\n\nvar distributions = [\n {\n \"key\": {\"function\": \"normal\"},\n \"params\": [\n { \"name\": \"mean\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"stdev\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"function\": \"uniform\"},\n \"params\": [\n { \"name\": \"min\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"max\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"function\": \"kde\"},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"from\", \"type\": \"data\" },\n { \"name\": \"bandwidth\", \"type\": \"number\", \"default\": 0 }\n ]\n }\n];\n\nvar mixture = {\n \"key\": {\"function\": \"mixture\"},\n \"params\": [\n { \"name\": \"distributions\", \"type\": \"param\", \"array\": true,\n \"params\": distributions },\n { \"name\": \"weights\", \"type\": \"number\", \"array\": true }\n ]\n};\n\nDensity.Definition = {\n \"type\": \"Density\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"extent\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"steps\", \"type\": \"number\", \"default\": 100 },\n { \"name\": \"method\", \"type\": \"string\", \"default\": \"pdf\",\n \"values\": [\"pdf\", \"cdf\"] },\n { \"name\": \"distribution\", \"type\": \"param\",\n \"params\": distributions.concat(mixture) },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true,\n \"default\": [\"value\", \"density\"] }\n ]\n};\n\nvar prototype = inherits(Density, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n var dist = parseDist(_.distribution, source(pulse)),\n method = _.method || 'pdf';\n\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n if (!_.extent && !dist.data) {\n error('Missing density extent parameter.');\n }\n method = dist[method];\n\n var as = _.as || ['value', 'density'],\n domain = _.extent || extent(dist.data()),\n step = (domain[1] - domain[0]) / (_.steps || 100),\n values = range(domain[0], domain[1] + step/2, step)\n .map(function(v) {\n var tuple = {};\n tuple[as[0]] = v;\n tuple[as[1]] = method(v);\n return ingest(tuple);\n });\n\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n};\n\nfunction source(pulse) {\n return function() { return pulse.materialize(pulse.SOURCE).source; };\n}\n","import {Operator} from 'vega-dataflow';\nimport {accessor, accessorFields, accessorName, inherits} from 'vega-util';\n\n/**\n * Wraps an expression function with access to external parameters.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function} params.expr - The expression function. The\n * function should accept both a datum and a parameter object.\n * This operator's value will be a new function that wraps the\n * expression function with access to this operator's parameters.\n */\nexport default function Expression(params) {\n Operator.call(this, null, update, params);\n this.modified(true);\n}\n\ninherits(Expression, Operator);\n\nfunction update(_) {\n var expr = _.expr;\n return this.value && !_.modified('expr')\n ? this.value\n : accessor(\n function(datum) { return expr(datum, _); },\n accessorFields(expr),\n accessorName(expr)\n );\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Computes extents (min/max) for a data field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field over which to compute extends.\n */\nexport default function Extent(params) {\n Transform.call(this, [undefined, undefined], params);\n}\n\nExtent.Definition = {\n \"type\": \"Extent\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true }\n ]\n};\n\nvar prototype = inherits(Extent, Transform);\n\nprototype.transform = function(_, pulse) {\n var extent = this.value,\n field = _.field,\n min = extent[0],\n max = extent[1],\n mod;\n\n mod = pulse.changed()\n || pulse.modified(field.fields)\n || _.modified('field');\n\n if (mod || min == null) {\n min = +Infinity;\n max = -Infinity;\n }\n\n pulse.visit(mod ? pulse.SOURCE : pulse.ADD, function(t) {\n var v = field(t);\n if (v != null) {\n // coerce to number\n v = +v;\n // NaNs will fail all comparisons!\n if (v < min) min = v;\n if (v > max) max = v;\n }\n });\n\n if (!isFinite(min) || !isFinite(max)) {\n min = max = undefined;\n }\n this.value = [min, max];\n};\n","import {Operator} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Provides a bridge between a parent transform and a target subflow that\n * consumes only a subset of the tuples that pass through the parent.\n * @constructor\n * @param {Pulse} pulse - A pulse to use as the value of this operator.\n * @param {Transform} parent - The parent transform (typically a Facet instance).\n * @param {Transform} target - A transform that receives the subflow of tuples.\n */\nexport default function Subflow(pulse, parent) {\n Operator.call(this, pulse);\n this.parent = parent;\n}\n\nvar prototype = inherits(Subflow, Operator);\n\nprototype.connect = function(target) {\n this.targets().add(target);\n return (target.source = this);\n};\n\n/**\n * Add an 'add' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being added.\n */\nprototype.add = function(t) {\n this.value.add.push(t);\n};\n\n/**\n * Add a 'rem' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being removed.\n */\nprototype.rem = function(t) {\n this.value.rem.push(t);\n};\n\n/**\n * Add a 'mod' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being modified.\n */\nprototype.mod = function(t) {\n this.value.mod.push(t);\n};\n\n/**\n * Re-initialize this operator's pulse value.\n * @param {Pulse} pulse - The pulse to copy from.\n * @see Pulse.init\n */\nprototype.init = function(pulse) {\n this.value.init(pulse, pulse.NO_SOURCE);\n};\n\n/**\n * Evaluate this operator. This method overrides the\n * default behavior to simply return the contained pulse value.\n * @return {Pulse}\n */\nprototype.evaluate = function() {\n // assert: this.value.stamp === pulse.stamp\n return this.value;\n};\n","import Subflow from './Subflow';\nimport {Transform, tupleid} from 'vega-dataflow';\nimport {fastmap, inherits} from 'vega-util';\n\n/**\n * Facets a dataflow into a set of subflows based on a key.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): *} params.key - The key field to facet by.\n */\nexport default function Facet(params) {\n Transform.call(this, {}, params);\n this._keys = fastmap(); // cache previously calculated key values\n\n // keep track of active subflows, use as targets array for listeners\n // this allows us to limit propagation to only updated subflows\n var a = this._targets = [];\n a.active = 0;\n a.forEach = function(f) {\n for (var i=0, n=a.active; i df.cleanThreshold) df.runAfter(cache.clean);\n return pulse;\n};\n","import {Operator} from 'vega-dataflow';\nimport {array, field, inherits, isArray} from 'vega-util';\n\n/**\n * Generates one or more field accessor functions.\n * If the 'name' parameter is an array, an array of field accessors\n * will be created and the 'as' parameter will be ignored.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.name - The field name(s) to access.\n * @param {string} params.as - The accessor function name.\n */\nexport default function Field(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(Field, Operator);\n\nfunction update(_) {\n return (this.value && !_.modified()) ? this.value\n : isArray(_.name) ? array(_.name).map(function(f) { return field(f); })\n : field(_.name, _.as);\n}\n","import {Transform, tupleid} from 'vega-dataflow';\nimport {fastmap, inherits} from 'vega-util';\n\n/**\n * Filters data tuples according to a predicate function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The predicate expression function\n * that determines a tuple's filter status. Truthy values pass the filter.\n */\nexport default function Filter(params) {\n Transform.call(this, fastmap(), params);\n}\n\nFilter.Definition = {\n \"type\": \"Filter\",\n \"metadata\": {\"changes\": true},\n \"params\": [\n { \"name\": \"expr\", \"type\": \"expr\", \"required\": true }\n ]\n};\n\nvar prototype = inherits(Filter, Transform);\n\nprototype.transform = function(_, pulse) {\n var df = pulse.dataflow,\n cache = this.value, // cache ids of filtered tuples\n output = pulse.fork(),\n add = output.add,\n rem = output.rem,\n mod = output.mod,\n test = _.expr,\n isMod = true;\n\n pulse.visit(pulse.REM, function(t) {\n var id = tupleid(t);\n if (!cache.has(id)) rem.push(t);\n else cache.delete(id);\n });\n\n pulse.visit(pulse.ADD, function(t) {\n if (test(t, _)) add.push(t);\n else cache.set(tupleid(t), 1);\n });\n\n function revisit(t) {\n var id = tupleid(t),\n b = test(t, _),\n s = cache.get(id);\n if (b && s) {\n cache.delete(id);\n add.push(t);\n } else if (!b && !s) {\n cache.set(id, 1);\n rem.push(t);\n } else if (isMod && b && !s) {\n mod.push(t);\n }\n }\n\n pulse.visit(pulse.MOD, revisit);\n\n if (_.modified()) {\n isMod = false;\n pulse.visit(pulse.REFLOW, revisit);\n }\n\n if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean);\n return output;\n};\n","import {accessorName} from 'vega-util';\n\n// use either provided alias or accessor field name\nexport function fieldNames(fields, as) {\n if (!fields) return null;\n return fields.map(function(f, i) {\n return as[i] || accessorName(f);\n });\n}\n","import {fieldNames} from './util/util';\nimport {derive, Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Flattens array-typed field values into new data objects.\n * If multiple fields are specified, they are treated as parallel arrays,\n * with output values included for each matching index (or null if missing).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of field\n * accessors for the tuple fields that should be flattened.\n * @param {Array} [params.as] - Output field names for flattened\n * array fields. Any unspecified fields will use the field name provided\n * by the fields accessors.\n */\nexport default function Flatten(params) {\n Transform.call(this, [], params);\n}\n\nFlatten.Definition = {\n \"type\": \"Flatten\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true }\n ]\n};\n\nvar prototype = inherits(Flatten, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(fields, _.as || []),\n m = as.length;\n\n // remove any previous results\n out.rem = this.value;\n\n // generate flattened tuples\n pulse.visit(pulse.SOURCE, function(t) {\n var arrays = fields.map(function(f) { return f(t); }),\n maxlen = arrays.reduce(function(l, a) { return Math.max(l, a.length); }, 0),\n i = 0, j, d, v;\n\n for (; i} [params.as] - Output field names for folded key\n * and value fields, defaults to ['key', 'value'].\n */\nexport default function Fold(params) {\n Transform.call(this, [], params);\n}\n\nFold.Definition = {\n \"type\": \"Fold\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"key\", \"value\"] }\n ]\n};\n\nvar prototype = inherits(Fold, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n fnames = fields.map(accessorName),\n as = _.as || ['key', 'value'],\n k = as[0],\n v = as[1],\n n = fields.length;\n\n out.rem = this.value;\n\n pulse.visit(pulse.SOURCE, function(t) {\n for (var i=0, d; i 0) {\n // need more tuples, generate and add\n for (add=[]; --num >= 0;) {\n add.push(t = ingest(gen(_)));\n data.push(t);\n }\n out.add = out.add.length\n ? out.materialize(out.ADD).add.concat(add)\n : add;\n } else {\n // need fewer tuples, remove\n rem = data.slice(0, -num);\n out.rem = out.rem.length\n ? out.materialize(out.REM).rem.concat(rem)\n : rem;\n data = data.slice(-num);\n }\n\n out.source = this.value = data;\n return out;\n};\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = array.length - 1, compare = ascending) {\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","import max from \"./max.js\";\nimport min from \"./min.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import {ingest, Transform} from 'vega-dataflow';\nimport {accessorName, error, inherits} from 'vega-util';\nimport {mean, min, max, median} from 'd3-array';\n\nvar Methods = {\n value: 'value',\n median: median,\n mean: mean,\n min: min,\n max: max\n};\n\nvar Empty = [];\n\n/**\n * Impute missing values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to impute.\n * @param {Array} [params.groupby] - An array of\n * accessors to determine series within which to perform imputation.\n * @param {function(object): *} params.key - An accessor for a key value.\n * Each key value should be unique within a group. New tuples will be\n * imputed for any key values that are not found within a group.\n * @param {Array<*>} [params.keyvals] - Optional array of required key\n * values. New tuples will be imputed for any key values that are not\n * found within a group. In addition, these values will be automatically\n * augmented with the key values observed in the input data.\n * @param {string} [method='value'] - The imputation method to use. One of\n * 'value', 'mean', 'median', 'max', 'min'.\n * @param {*} [value=0] - The constant value to use for imputation\n * when using method 'value'.\n */\nexport default function Impute(params) {\n Transform.call(this, [], params);\n}\n\nImpute.Definition = {\n \"type\": \"Impute\",\n \"metadata\": {\"changes\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"key\", \"type\": \"field\", \"required\": true },\n { \"name\": \"keyvals\", \"array\": true },\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"method\", \"type\": \"enum\", \"default\": \"value\",\n \"values\": [\"value\", \"mean\", \"median\", \"max\", \"min\"] },\n { \"name\": \"value\", \"default\": 0 }\n ]\n};\n\nvar prototype = inherits(Impute, Transform);\n\nfunction getValue(_) {\n var m = _.method || Methods.value, v;\n\n if (Methods[m] == null) {\n error('Unrecognized imputation method: ' + m);\n } else if (m === Methods.value) {\n v = _.value !== undefined ? _.value : 0;\n return function() { return v; };\n } else {\n return Methods[m];\n }\n}\n\nfunction getField(_) {\n var f = _.field;\n return function(t) { return t ? f(t) : NaN; };\n}\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n impute = getValue(_),\n field = getField(_),\n fName = accessorName(_.field),\n kName = accessorName(_.key),\n gNames = (_.groupby || []).map(accessorName),\n groups = partition(pulse.source, _.groupby, _.key, _.keyvals),\n curr = [],\n prev = this.value,\n m = groups.domain.length,\n group, value, gVals, kVal, g, i, j, l, n, t;\n\n for (g=0, l=groups.length; g= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n","import Aggregate from './Aggregate';\nimport {ValidAggregateOps} from './util/AggregateOps';\nimport {extend, inherits} from 'vega-util';\n\n/**\n * Extend input tuples with aggregate values.\n * Calcuates aggregate values and joins them with the input stream.\n * @constructor\n */\nexport default function JoinAggregate(params) {\n Aggregate.call(this, params);\n}\n\nJoinAggregate.Definition = {\n \"type\": \"JoinAggregate\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"fields\", \"type\": \"field\", \"null\": true, \"array\": true },\n { \"name\": \"ops\", \"type\": \"enum\", \"array\": true, \"values\": ValidAggregateOps },\n { \"name\": \"as\", \"type\": \"string\", \"null\": true, \"array\": true },\n { \"name\": \"key\", \"type\": \"field\" }\n ]\n};\n\nvar prototype = inherits(JoinAggregate, Aggregate);\n\nprototype.transform = function(_, pulse) {\n var aggr = this,\n mod = _.modified(),\n cells;\n\n // process all input tuples to calculate aggregates\n if (aggr.value && (mod || pulse.modified(aggr._inputs))) {\n cells = aggr.value = mod ? aggr.init(_) : {};\n pulse.visit(pulse.SOURCE, function(t) { aggr.add(t); });\n } else {\n cells = aggr.value = aggr.value || this.init(_);\n pulse.visit(pulse.REM, function(t) { aggr.rem(t); });\n pulse.visit(pulse.ADD, function(t) { aggr.add(t); });\n }\n\n // update aggregation cells\n aggr.changes();\n\n // write aggregate values to input tuples\n pulse.visit(pulse.SOURCE, function(t) {\n extend(t, cells[aggr.cellkey(t)].tuple);\n });\n\n return pulse.reflow(mod).modifies(this._outputs);\n};\n\nprototype.changes = function() {\n var adds = this._adds,\n mods = this._mods,\n i, n;\n\n for (i=0, n=this._alen; i} params.fields - The field name(s) for the key function.\n * @param {boolean} params.flat - A boolean flag indicating if the field names\n * should be treated as flat property names, side-stepping nested field\n * lookups normally indicated by dot or bracket notation.\n */\nexport default function Key(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(Key, Operator);\n\nfunction update(_) {\n return (this.value && !_.modified()) ? this.value : key(_.fields, _.flat);\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Load and parse data from an external source. Marshalls parameter\n * values and then invokes the Dataflow request method.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.url - The URL to load from.\n * @param {object} params.format - The data format options.\n */\nexport default function Load(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Load, Transform);\n\nprototype.transform = function(_, pulse) {\n pulse.dataflow.request(this.target, _.url, _.format);\n};\n","import {Transform} from 'vega-dataflow';\nimport {accessorName, error, inherits} from 'vega-util';\n\n/**\n * Extend tuples by joining them with values from a lookup table.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Map} params.index - The lookup table map.\n * @param {Array} params.as - Output field names for each lookup value.\n * @param {*} [params.default] - A default value to use if lookup fails.\n */\nexport default function Lookup(params) {\n Transform.call(this, {}, params);\n}\n\nLookup.Definition = {\n \"type\": \"Lookup\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"index\", \"type\": \"index\", \"params\": [\n {\"name\": \"from\", \"type\": \"data\", \"required\": true },\n {\"name\": \"key\", \"type\": \"field\", \"required\": true }\n ] },\n { \"name\": \"values\", \"type\": \"field\", \"array\": true },\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true },\n { \"name\": \"default\", \"default\": null }\n ]\n};\n\nvar prototype = inherits(Lookup, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse,\n as = _.as,\n keys = _.fields,\n index = _.index,\n values = _.values,\n defaultValue = _.default==null ? null : _.default,\n reset = _.modified(),\n flag = reset ? pulse.SOURCE : pulse.ADD,\n n = keys.length,\n set, m, mods;\n\n if (values) {\n m = values.length;\n\n if (n > 1 && !as) {\n error('Multi-field lookup requires explicit \"as\" parameter.');\n }\n if (as && as.length !== n * m) {\n error('The \"as\" parameter has too few output field names.');\n }\n as = as || values.map(accessorName);\n\n set = function(t) {\n for (var i=0, k=0, j, v; i>} params.extents - The input extents.\n */\nexport default function MultiExtent(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(MultiExtent, Operator);\n\nfunction update(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n\n var min = +Infinity,\n max = -Infinity,\n ext = _.extents,\n i, n, e;\n\n for (i=0, n=ext.length; i max) max = e[1];\n }\n return [min, max];\n}\n","import {Operator} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Merge a collection of value arrays.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.values - The input value arrrays.\n */\nexport default function MultiValues(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(MultiValues, Operator);\n\nfunction update(_) {\n return (this.value && !_.modified())\n ? this.value\n : _.values.reduce(function(data, _) { return data.concat(_); }, []);\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Operator whose value is simply its parameter hash. This operator is\n * useful for enabling reactive updates to values of nested objects.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nexport default function Params(params) {\n Transform.call(this, null, params);\n}\n\ninherits(Params, Transform);\n\nParams.prototype.transform = function(_, pulse) {\n this.modified(_.modified());\n this.value = _;\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples\n};\n","import Aggregate from './Aggregate';\nimport {ValidAggregateOps} from './util/AggregateOps';\nimport {accessor, accessorFields, inherits} from 'vega-util';\n\n/**\n * Aggregate and pivot selected field values to become new fields.\n * This operator is useful to construction cross-tabulations.\n * @constructor\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby. These fields act just like groupby fields of an Aggregate transform.\n * @param {function(object): *} params.field - The field to pivot on. The unique\n * values of this field become new field names in the output stream.\n * @param {function(object): *} params.value - The field to populate pivoted fields.\n * The aggregate values of this field become the values of the new pivoted fields.\n * @param {string} [params.op] - The aggregation operation for the value field,\n * applied per cell in the output stream. The default is \"sum\".\n * @param {number} [params.limit] - An optional parameter indicating the maximum\n * number of pivoted fields to generate. The pivoted field names are sorted in\n * ascending order prior to enforcing the limit.\n */\nexport default function Pivot(params) {\n Aggregate.call(this, params);\n}\n\nPivot.Definition = {\n \"type\": \"Pivot\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"value\", \"type\": \"field\", \"required\": true },\n { \"name\": \"op\", \"type\": \"enum\", \"values\": ValidAggregateOps, \"default\": \"sum\" },\n { \"name\": \"limit\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"key\", \"type\": \"field\" }\n ]\n};\n\nvar prototype = inherits(Pivot, Aggregate);\n\nprototype._transform = prototype.transform;\n\nprototype.transform = function(_, pulse) {\n return this._transform(aggregateParams(_, pulse), pulse);\n};\n\n// Shoehorn a pivot transform into an aggregate transform!\n// First collect all unique pivot field values.\n// Then generate aggregate fields for each output pivot field.\nfunction aggregateParams(_, pulse) {\n var key = _.field,\n value = _.value,\n op = (_.op === 'count' ? '__count__' : _.op) || 'sum',\n fields = accessorFields(key).concat(accessorFields(value)),\n keys = pivotKeys(key, _.limit || 0, pulse);\n\n return {\n key: _.key,\n groupby: _.groupby,\n ops: keys.map(function() { return op; }),\n fields: keys.map(function(k) { return get(k, key, value, fields); }),\n as: keys.map(function(k) { return k + ''; }),\n modified: _.modified.bind(_)\n };\n}\n\n// Generate aggregate field accessor.\n// Output NaN for non-existent values; aggregator will ignore!\nfunction get(k, key, value, fields) {\n return accessor(\n function(d) { return key(d) === k ? value(d) : NaN; },\n fields,\n k + ''\n );\n}\n\n// Collect (and optionally limit) all unique pivot values.\nfunction pivotKeys(key, limit, pulse) {\n var map = {},\n list = [];\n\n pulse.visit(pulse.SOURCE, function(t) {\n var k = key(t);\n if (!map[k]) {\n map[k] = 1;\n list.push(k);\n }\n });\n\n // TODO? Move this comparator to vega-util?\n list.sort(function(u, v) {\n return (uv||v==null) && u!=null ? 1\n : ((v=v instanceof Date?+v:v),(u=u instanceof Date?+u:u))!==u && v===v ? -1\n : v!==v && u===u ? 1 : 0;\n });\n\n return limit ? list.slice(0, limit) : list;\n}\n","import Facet from './Facet';\nimport {ingest, tupleid} from 'vega-dataflow';\nimport {accessorFields, error, inherits} from 'vega-util';\n\n/**\n * Partitions pre-faceted data into tuple subflows.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): Array} params.field - The field\n * accessor for an array of subflow tuple objects.\n */\nexport default function PreFacet(params) {\n Facet.call(this, params);\n}\n\nvar prototype = inherits(PreFacet, Facet);\n\nprototype.transform = function(_, pulse) {\n var self = this,\n flow = _.subflow,\n field = _.field;\n\n if (_.modified('field') || field && pulse.modified(accessorFields(field))) {\n error('PreFacet does not support field modification.');\n }\n\n this._targets.active = 0; // reset list of active subflows\n\n pulse.visit(pulse.MOD, function(t) {\n var sf = self.subflow(tupleid(t), flow, pulse, t);\n field ? field(t).forEach(function(_) { sf.mod(_); }) : sf.mod(t);\n });\n\n pulse.visit(pulse.ADD, function(t) {\n var sf = self.subflow(tupleid(t), flow, pulse, t);\n field ? field(t).forEach(function(_) { sf.add(ingest(_)); }) : sf.add(t);\n });\n\n pulse.visit(pulse.REM, function(t) {\n var sf = self.subflow(tupleid(t), flow, pulse, t);\n field ? field(t).forEach(function(_) { sf.rem(_); }) : sf.rem(t);\n });\n\n return pulse;\n};\n","import {fieldNames} from './util/util';\nimport {ingest, rederive, Transform, tupleid} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Performs a relational projection, copying selected fields from source\n * tuples to a new set of derived tuples.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.as] - Output field names for each projected\n * field. Any unspecified fields will use the field name provided by\n * the field accessor.\n */\nexport default function Project(params) {\n Transform.call(this, null, params);\n}\n\nProject.Definition = {\n \"type\": \"Project\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true },\n { \"name\": \"as\", \"type\": \"string\", \"null\": true, \"array\": true },\n ]\n};\n\nvar prototype = inherits(Project, Transform);\n\nprototype.transform = function(_, pulse) {\n var fields = _.fields,\n as = fieldNames(_.fields, _.as || []),\n derive = fields\n ? function(s, t) { return project(s, t, fields, as); }\n : rederive,\n out, lut;\n\n if (this.value) {\n lut = this.value;\n } else {\n pulse = pulse.addAll();\n lut = this.value = {};\n }\n\n out = pulse.fork(pulse.NO_SOURCE);\n\n pulse.visit(pulse.REM, function(t) {\n var id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n\n pulse.visit(pulse.ADD, function(t) {\n var dt = derive(t, ingest({}));\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n\n pulse.visit(pulse.MOD, function(t) {\n out.mod.push(derive(t, lut[tupleid(t)]));\n });\n\n return out;\n};\n\nfunction project(s, t, fields, as) {\n for (var i=0, n=fields.length; i= cap) {\n p = res[idx];\n if (map[tupleid(p)]) out.rem.push(p); // eviction\n res[idx] = t;\n }\n }\n ++cnt;\n }\n\n if (pulse.rem.length) {\n // find all tuples that should be removed, add to output\n pulse.visit(pulse.REM, function(t) {\n var id = tupleid(t);\n if (map[id]) {\n map[id] = -1;\n out.rem.push(t);\n }\n --cnt;\n });\n\n // filter removed tuples out of the sample reservoir\n res = res.filter(function(t) { return map[tupleid(t)] !== -1; });\n }\n\n if ((pulse.rem.length || mod) && res.length < num && pulse.source) {\n // replenish sample if backing data source is available\n cap = cnt = res.length;\n pulse.visit(pulse.SOURCE, function(t) {\n // update, but skip previously sampled tuples\n if (!map[tupleid(t)]) update(t);\n });\n cap = -1;\n }\n\n if (mod && res.length > num) {\n for (var i=0, n=res.length-num; i df.cleanThreshold) df.runAfter(index.clean);\n return pulse.fork();\n};\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Extracts an array of values. Assumes the source data has already been\n * reduced as needed (e.g., by an upstream Aggregate transform).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The domain field to extract.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting the values. The comparator will be\n * applied to backing tuples prior to value extraction.\n */\nexport default function Values(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Values, Transform);\n\nprototype.transform = function(_, pulse) {\n var run = !this.value\n || _.modified('field')\n || _.modified('sort')\n || pulse.changed()\n || (_.sort && pulse.modified(_.sort.fields));\n\n if (run) {\n this.value = (_.sort\n ? pulse.source.slice().sort(_.sort)\n : pulse.source).map(_.field);\n }\n};\n","import {error, zero} from 'vega-util';\n\nexport function WindowOp(op, field, param, as) {\n var fn = WindowOps[op](field, param);\n return {\n init: fn.init || zero,\n update: function(w, t) { t[as] = fn.next(w); }\n };\n}\n\nexport var WindowOps = {\n row_number: function() {\n return {\n next: function(w) { return w.index + 1; }\n };\n },\n rank: function() {\n var rank;\n return {\n init: function() { rank = 1; },\n next: function(w) {\n var i = w.index,\n data = w.data;\n return (i && w.compare(data[i - 1], data[i])) ? (rank = i + 1) : rank;\n }\n };\n },\n dense_rank: function() {\n var drank;\n return {\n init: function() { drank = 1; },\n next: function(w) {\n var i = w.index,\n d = w.data;\n return (i && w.compare(d[i - 1], d[i])) ? ++drank : drank;\n }\n };\n },\n percent_rank: function() {\n var rank = WindowOps.rank(),\n next = rank.next;\n return {\n init: rank.init,\n next: function(w) {\n return (next(w) - 1) / (w.data.length - 1);\n }\n };\n },\n cume_dist: function() {\n var cume;\n return {\n init: function() { cume = 0; },\n next: function(w) {\n var i = w.index,\n d = w.data,\n c = w.compare;\n if (cume < i) {\n while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i;\n cume = i;\n }\n return (1 + cume) / d.length;\n }\n };\n },\n ntile: function(field, num) {\n num = +num;\n if (!(num > 0)) error('ntile num must be greater than zero.');\n var cume = WindowOps.cume_dist(),\n next = cume.next;\n return {\n init: cume.init,\n next: function(w) { return Math.ceil(num * next(w)); }\n };\n },\n\n lag: function(field, offset) {\n offset = +offset || 1;\n return {\n next: function(w) {\n var i = w.index - offset;\n return i >= 0 ? field(w.data[i]) : null;\n }\n };\n },\n lead: function(field, offset) {\n offset = +offset || 1;\n return {\n next: function(w) {\n var i = w.index + offset,\n d = w.data;\n return i < d.length ? field(d[i]) : null;\n }\n };\n },\n\n first_value: function(field) {\n return {\n next: function(w) { return field(w.data[w.i0]); }\n };\n },\n last_value: function(field) {\n return {\n next: function(w) { return field(w.data[w.i1 - 1]); }\n }\n },\n nth_value: function(field, nth) {\n nth = +nth;\n if (!(nth > 0)) error('nth_value nth must be greater than zero.');\n return {\n next: function(w) {\n var i = w.i0 + (nth - 1);\n return i < w.i1 ? field(w.data[i]) : null;\n }\n }\n }\n};\n\nexport var ValidWindowOps = Object.keys(WindowOps);\n","import {createMeasure, compileMeasures, measureName} from './AggregateOps';\nimport TupleStore from './TupleStore';\nimport {WindowOp, WindowOps} from './WindowOps';\nimport {accessorFields, accessorName, array, error} from 'vega-util';\n\nexport default function WindowState(_) {\n var self = this,\n ops = array(_.ops),\n fields = array(_.fields),\n params = array(_.params),\n as = array(_.as),\n outputs = self.outputs = [],\n windows = self.windows = [],\n inputs = {},\n map = {},\n countOnly = true,\n counts = [],\n measures = [];\n\n function visitInputs(f) {\n array(accessorFields(f)).forEach(function(_) { inputs[_] = 1; });\n }\n visitInputs(_.sort);\n\n ops.forEach(function(op, i) {\n var field = fields[i],\n mname = accessorName(field),\n name = measureName(op, mname, as[i]);\n\n visitInputs(field);\n outputs.push(name);\n\n // Window operation\n if (WindowOps.hasOwnProperty(op)) {\n windows.push(WindowOp(op, fields[i], params[i], name));\n }\n\n // Aggregate operation\n else {\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n if (op === 'count') {\n counts.push(name);\n return;\n }\n\n countOnly = false;\n var m = map[mname];\n if (!m) {\n m = (map[mname] = []);\n m.field = field;\n measures.push(m);\n }\n m.push(createMeasure(op, name));\n }\n });\n\n if (counts.length || measures.length) {\n self.cell = cell(measures, counts, countOnly);\n }\n\n self.inputs = Object.keys(inputs);\n}\n\nvar prototype = WindowState.prototype;\n\nprototype.init = function() {\n this.windows.forEach(function(_) { _.init(); });\n if (this.cell) this.cell.init();\n};\n\nprototype.update = function(w, t) {\n var self = this,\n cell = self.cell,\n wind = self.windows,\n data = w.data,\n m = wind && wind.length,\n j;\n\n if (cell) {\n for (j=w.p0; j f(d) - x;\n compare = ascendingComparator(f);\n }\n\n function left(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n }\n\n function right(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n\n function center(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction ascendingComparator(f) {\n return (d, x) => ascending(f(d), x);\n}\n","import {groupkey} from './util/AggregateKeys';\nimport {ValidAggregateOps} from './util/AggregateOps';\nimport SortedList from './util/SortedList';\nimport {ValidWindowOps} from './util/WindowOps';\nimport WindowState from './util/WindowState';\nimport {Transform, tupleid} from 'vega-dataflow';\nimport {constant, inherits} from 'vega-util';\nimport {bisector} from 'd3-array';\n\n/**\n * Perform window calculations and write results to the input stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator function for sorting tuples within a window.\n * @param {Array} [params.groupby] - An array of accessors by which to partition tuples into separate windows.\n * @param {Array} params.ops - An array of strings indicating window operations to perform.\n * @param {Array} [params.fields] - An array of accessors\n * for data fields to use as inputs to window operations.\n * @param {Array<*>} [params.params] - An array of parameter values for window operations.\n * @param {Array} [params.as] - An array of output field names for window operations.\n * @param {Array} [params.frame] - Window frame definition as two-element array.\n * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row\n * number alone, ignoring peers with identical sort values. If false (default),\n * the window boundaries will be adjusted to include peer values.\n */\nexport default function Window(params) {\n Transform.call(this, {}, params);\n this._mlen = 0;\n this._mods = [];\n}\n\nWindow.Definition = {\n \"type\": \"Window\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"sort\", \"type\": \"compare\" },\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"ops\", \"type\": \"enum\", \"array\": true, \"values\": ValidWindowOps.concat(ValidAggregateOps) },\n { \"name\": \"params\", \"type\": \"number\", \"null\": true, \"array\": true },\n { \"name\": \"fields\", \"type\": \"field\", \"null\": true, \"array\": true },\n { \"name\": \"as\", \"type\": \"string\", \"null\": true, \"array\": true },\n { \"name\": \"frame\", \"type\": \"number\", \"null\": true, \"array\": true, \"length\": 2, \"default\": [null, 0] },\n { \"name\": \"ignorePeers\", \"type\": \"boolean\", \"default\": false }\n ]\n};\n\nvar prototype = inherits(Window, Transform);\n\nprototype.transform = function(_, pulse) {\n var self = this,\n state = self.state,\n mod = _.modified(),\n i, n;\n\n this.stamp = pulse.stamp;\n\n // initialize window state\n if (!state || mod) {\n state = self.state = new WindowState(_);\n }\n\n // retrieve group for a tuple\n var key = groupkey(_.groupby);\n function group(t) { return self.group(key(t)); }\n\n // partition input tuples\n if (mod || pulse.modified(state.inputs)) {\n self.value = {};\n pulse.visit(pulse.SOURCE, function(t) { group(t).add(t); });\n } else {\n pulse.visit(pulse.REM, function(t) { group(t).remove(t); });\n pulse.visit(pulse.ADD, function(t) { group(t).add(t); });\n }\n\n // perform window calculations for each modified partition\n for (i=0, n=self._mlen; i 0 && !c(d[r0], d[r0-1])) w.i0 = bisect.left(d, d[r0]);\n if (r1 < n && !c(d[r1], d[r1+1])) w.i1 = bisect.right(d, d[r1]);\n}\n","export var Top = 'top';\nexport var Left = 'left';\nexport var Right = 'right';\nexport var Bottom = 'bottom';\n\nexport var TopLeft = 'top-left';\nexport var TopRight = 'top-right';\nexport var BottomLeft = 'bottom-left';\nexport var BottomRight = 'bottom-right';\n\nexport var Start = 'start';\nexport var Middle = 'middle';\nexport var End = 'end';\n\nexport var Group = 'group';\n\nexport var AxisRole = 'axis';\nexport var TitleRole = 'title';\nexport var FrameRole = 'frame';\nexport var ScopeRole = 'scope';\nexport var LegendRole = 'legend';\n\nexport var RowHeader = 'row-header';\nexport var RowFooter = 'row-footer';\nexport var RowTitle = 'row-title';\nexport var ColHeader = 'column-header';\nexport var ColFooter = 'column-footer';\nexport var ColTitle = 'column-title';\n\nexport var Padding = 'padding';\n\nexport var Symbols = 'symbol';\n\nexport var Fit = 'fit';\nexport var FitX = 'fit-x';\nexport var FitY = 'fit-y';\nexport var Pad = 'pad';\nexport var None = 'none';\n\nexport var All = 'all';\nexport var Each = 'each';\nexport var Flush = 'flush';\n\nexport var Column = 'column';\nexport var Row = 'row';\n\n\n","export default function Bounds(b) {\n this.clear();\n if (b) this.union(b);\n}\n\nvar prototype = Bounds.prototype;\n\nprototype.clone = function() {\n return new Bounds(this);\n};\n\nprototype.clear = function() {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n};\n\nprototype.empty = function() {\n return (\n this.x1 === +Number.MAX_VALUE &&\n this.y1 === +Number.MAX_VALUE &&\n this.x2 === -Number.MAX_VALUE &&\n this.y2 === -Number.MAX_VALUE\n );\n};\n\nprototype.set = function(x1, y1, x2, y2) {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n};\n\nprototype.add = function(x, y) {\n if (x < this.x1) this.x1 = x;\n if (y < this.y1) this.y1 = y;\n if (x > this.x2) this.x2 = x;\n if (y > this.y2) this.y2 = y;\n return this;\n};\n\nprototype.expand = function(d) {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n return this;\n};\n\nprototype.round = function() {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n};\n\nprototype.translate = function(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n};\n\nprototype.rotate = function(angle, x, y) {\n var cos = Math.cos(angle),\n sin = Math.sin(angle),\n cx = x - x*cos + y*sin,\n cy = y - x*sin - y*cos,\n x1 = this.x1, x2 = this.x2,\n y1 = this.y1, y2 = this.y2;\n\n return this.clear()\n .add(cos*x1 - sin*y1 + cx, sin*x1 + cos*y1 + cy)\n .add(cos*x1 - sin*y2 + cx, sin*x1 + cos*y2 + cy)\n .add(cos*x2 - sin*y1 + cx, sin*x2 + cos*y1 + cy)\n .add(cos*x2 - sin*y2 + cx, sin*x2 + cos*y2 + cy);\n};\n\nprototype.union = function(b) {\n if (b.x1 < this.x1) this.x1 = b.x1;\n if (b.y1 < this.y1) this.y1 = b.y1;\n if (b.x2 > this.x2) this.x2 = b.x2;\n if (b.y2 > this.y2) this.y2 = b.y2;\n return this;\n};\n\nprototype.intersect = function(b) {\n if (b.x1 > this.x1) this.x1 = b.x1;\n if (b.y1 > this.y1) this.y1 = b.y1;\n if (b.x2 < this.x2) this.x2 = b.x2;\n if (b.y2 < this.y2) this.y2 = b.y2;\n return this;\n};\n\nprototype.encloses = function(b) {\n return b && (\n this.x1 <= b.x1 &&\n this.x2 >= b.x2 &&\n this.y1 <= b.y1 &&\n this.y2 >= b.y2\n );\n};\n\nprototype.alignsWith = function(b) {\n return b && (\n this.x1 == b.x1 ||\n this.x2 == b.x2 ||\n this.y1 == b.y1 ||\n this.y2 == b.y2\n );\n};\n\nprototype.intersects = function(b) {\n return b && !(\n this.x2 < b.x1 ||\n this.x1 > b.x2 ||\n this.y2 < b.y1 ||\n this.y1 > b.y2\n );\n};\n\nprototype.contains = function(x, y) {\n return !(\n x < this.x1 ||\n x > this.x2 ||\n y < this.y1 ||\n y > this.y2\n );\n};\n\nprototype.width = function() {\n return this.x2 - this.x1;\n};\n\nprototype.height = function() {\n return this.y2 - this.y1;\n};\n","var gradient_id = 0;\n\nexport default function(p0, p1) {\n var stops = [], gradient;\n return gradient = {\n id: 'gradient_' + (gradient_id++),\n x1: p0 ? p0[0] : 0,\n y1: p0 ? p0[1] : 0,\n x2: p1 ? p1[0] : 1,\n y2: p1 ? p1[1] : 0,\n stops: stops,\n stop: function(offset, color) {\n stops.push({offset: offset, color: color});\n return gradient;\n }\n };\n}\n","import Bounds from './Bounds';\n\nexport default function Item(mark) {\n this.mark = mark;\n this.bounds = (this.bounds || new Bounds());\n}\n","import Item from './Item';\nimport {inherits} from 'vega-util';\n\nexport default function GroupItem(mark) {\n Item.call(this, mark);\n this.items = (this.items || []);\n}\n\ninherits(GroupItem, Item);\n","export function domCanvas(w, h) {\n if (typeof document !== 'undefined' && document.createElement) {\n const c = document.createElement('canvas');\n if (c && c.getContext) {\n c.width = w;\n c.height = h;\n return c;\n }\n }\n return null;\n}\n\nexport const domImage = () =>\n typeof Image !== 'undefined' ? Image : null;\n","import {image} from 'vega-canvas';\nimport {loader} from 'vega-loader';\n\nexport default function ResourceLoader(customLoader) {\n this._pending = 0;\n this._loader = customLoader || loader();\n}\n\nvar prototype = ResourceLoader.prototype;\n\nprototype.pending = function() {\n return this._pending;\n};\n\nfunction increment(loader) {\n loader._pending += 1;\n}\n\nfunction decrement(loader) {\n loader._pending -= 1;\n}\n\nprototype.sanitizeURL = function(uri) {\n var loader = this;\n increment(loader);\n\n return loader._loader.sanitize(uri, {context:'href'})\n .then(function(opt) {\n decrement(loader);\n return opt;\n })\n .catch(function() {\n decrement(loader);\n return null;\n });\n};\n\nprototype.loadImage = function(uri) {\n var loader = this,\n Image = image();\n increment(loader);\n\n return loader._loader\n .sanitize(uri, {context: 'image'})\n .then(function(opt) {\n var url = opt.href;\n if (!url || !Image) throw {url: url};\n\n var img = new Image();\n\n img.onload = function() {\n decrement(loader);\n img.loaded = true;\n };\n\n img.onerror = function() {\n decrement(loader);\n img.loaded = false;\n }\n\n img.src = url;\n return img;\n })\n .catch(function(e) {\n decrement(loader);\n return {loaded: false, width: 0, height: 0, src: e && e.url || ''};\n });\n};\n\nprototype.ready = function() {\n var loader = this;\n return new Promise(function(accept) {\n function poll(value) {\n if (!loader.pending()) accept(value);\n else setTimeout(function() { poll(true); }, 10);\n }\n poll(false);\n });\n};\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","export default function() {}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","import {\n curveBasis,\n curveBasisClosed,\n curveBasisOpen,\n curveBundle,\n curveCardinal,\n curveCardinalClosed,\n curveCardinalOpen,\n curveCatmullRom,\n curveCatmullRomClosed,\n curveCatmullRomOpen,\n curveLinear,\n curveLinearClosed,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore\n} from 'd3-shape';\n\nvar lookup = {\n 'basis': {\n curve: curveBasis\n },\n 'basis-closed': {\n curve: curveBasisClosed\n },\n 'basis-open': {\n curve: curveBasisOpen\n },\n 'bundle': {\n curve: curveBundle,\n tension: 'beta',\n value: 0.85\n },\n 'cardinal': {\n curve: curveCardinal,\n tension: 'tension',\n value: 0\n },\n 'cardinal-open': {\n curve: curveCardinalOpen,\n tension: 'tension',\n value: 0\n },\n 'cardinal-closed': {\n curve: curveCardinalClosed,\n tension: 'tension',\n value: 0\n },\n 'catmull-rom': {\n curve: curveCatmullRom,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-closed': {\n curve: curveCatmullRomClosed,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-open': {\n curve: curveCatmullRomOpen,\n tension: 'alpha',\n value: 0.5\n },\n 'linear': {\n curve: curveLinear\n },\n 'linear-closed': {\n curve: curveLinearClosed\n },\n 'monotone': {\n horizontal: curveMonotoneY,\n vertical: curveMonotoneX\n },\n 'natural': {\n curve: curveNatural\n },\n 'step': {\n curve: curveStep\n },\n 'step-after': {\n curve: curveStepAfter\n },\n 'step-before': {\n curve: curveStepBefore\n }\n};\n\nexport default function curves(type, orientation, tension) {\n var entry = lookup.hasOwnProperty(type) && lookup[type],\n curve = null;\n\n if (entry) {\n curve = entry.curve || entry[orientation || 'vertical'];\n if (entry.tension && tension != null) {\n curve = curve[entry.tension](tension);\n }\n }\n\n return curve;\n}\n","// Path parsing and rendering code adapted from fabric.js -- Thanks!\nvar cmdlen = { m:2, l:2, h:1, v:1, c:6, s:4, q:4, t:2, a:7 },\n regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\\d)([-+])/g, /\\s|,|###/];\n\nexport default function(pathstr) {\n var result = [],\n path,\n curr,\n chunks,\n parsed, param,\n cmd, len, i, j, n, m;\n\n // First, break path into command sequence\n path = pathstr\n .slice()\n .replace(regexp[0], '###$1')\n .split(regexp[1])\n .slice(1);\n\n // Next, parse each command in turn\n for (i=0, n=path.length; i len) {\n for (j=1, m=parsed.length; j 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n\n var a00 = cos_th / rx;\n var a01 = sin_th / rx;\n var a10 = (-sin_th) / ry;\n var a11 = (cos_th) / ry;\n var x0 = a00 * ox + a01 * oy;\n var y0 = a10 * ox + a11 * oy;\n var x1 = a00 * x + a01 * y;\n var y1 = a10 * x + a11 * y;\n\n var d = (x1-x0) * (x1-x0) + (y1-y0) * (y1-y0);\n var sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) sfactor_sq = 0;\n var sfactor = Math.sqrt(sfactor_sq);\n if (sweep == large) sfactor = -sfactor;\n var xc = 0.5 * (x0 + x1) - sfactor * (y1-y0);\n var yc = 0.5 * (y0 + y1) + sfactor * (x1-x0);\n\n var th0 = Math.atan2(y0-yc, x0-xc);\n var th1 = Math.atan2(y1-yc, x1-xc);\n\n var th_arc = th1-th0;\n if (th_arc < 0 && sweep === 1) {\n th_arc += 2 * Math.PI;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= 2 * Math.PI;\n }\n\n var segs = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));\n var result = [];\n for (var i=0; i epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","import {path} from 'd3-path';\n\nfunction rectangleX(d) {\n return d.x;\n}\n\nfunction rectangleY(d) {\n return d.y;\n}\n\nfunction rectangleWidth(d) {\n return d.width;\n}\n\nfunction rectangleHeight(d) {\n return d.height;\n}\n\nfunction constant(_) {\n return function() { return _; };\n}\n\nexport default function() {\n var x = rectangleX,\n y = rectangleY,\n width = rectangleWidth,\n height = rectangleHeight,\n cornerRadius = constant(0),\n context = null;\n\n function rectangle(_, x0, y0) {\n var buffer,\n x1 = x0 != null ? x0 : +x.call(this, _),\n y1 = y0 != null ? y0 : +y.call(this, _),\n w = +width.call(this, _),\n h = +height.call(this, _),\n cr = +cornerRadius.call(this, _);\n\n if (!context) context = buffer = path();\n\n if (cr <= 0) {\n context.rect(x1, y1, w, h);\n } else {\n var x2 = x1 + w,\n y2 = y1 + h;\n context.moveTo(x1 + cr, y1);\n context.lineTo(x2 - cr, y1);\n context.quadraticCurveTo(x2, y1, x2, y1 + cr);\n context.lineTo(x2, y2 - cr);\n context.quadraticCurveTo(x2, y2, x2 - cr, y2);\n context.lineTo(x1 + cr, y2);\n context.quadraticCurveTo(x1, y2, x1, y2 - cr);\n context.lineTo(x1, y1 + cr);\n context.quadraticCurveTo(x1, y1, x1 + cr, y1);\n context.closePath();\n }\n\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n\n rectangle.x = function(_) {\n if (arguments.length) {\n x = typeof _ === 'function' ? _ : constant(+_);\n return rectangle;\n } else {\n return x;\n }\n };\n\n rectangle.y = function(_) {\n if (arguments.length) {\n y = typeof _ === 'function' ? _ : constant(+_);\n return rectangle;\n } else {\n return y;\n }\n };\n\n rectangle.width = function(_) {\n if (arguments.length) {\n width = typeof _ === 'function' ? _ : constant(+_);\n return rectangle;\n } else {\n return width;\n }\n };\n\n rectangle.height = function(_) {\n if (arguments.length) {\n height = typeof _ === 'function' ? _ : constant(+_);\n return rectangle;\n } else {\n return height;\n }\n };\n\n rectangle.cornerRadius = function(_) {\n if (arguments.length) {\n cornerRadius = typeof _ === 'function' ? _ : constant(+_);\n return rectangle;\n } else {\n return cornerRadius;\n }\n };\n\n rectangle.context = function(_) {\n if (arguments.length) {\n context = _ == null ? null : _;\n return rectangle;\n } else {\n return context;\n }\n };\n\n return rectangle;\n}\n","import {path} from 'd3-path';\n\nvar pi = Math.PI;\n\nexport default function() {\n var x,\n y,\n size,\n defined,\n context = null,\n ready, x1, y1, r1;\n\n function point(x2, y2, w2) {\n var r2 = w2 / 2;\n\n if (ready) {\n var ux = y1 - y2,\n uy = x2 - x1;\n\n if (ux || uy) {\n // get normal vector\n var ud = Math.sqrt(ux * ux + uy * uy),\n rx = (ux /= ud) * r1,\n ry = (uy /= ud) * r1,\n t = Math.atan2(uy, ux);\n\n // draw segment\n context.moveTo(x1 - rx, y1 - ry);\n context.lineTo(x2 - ux * r2, y2 - uy * r2);\n context.arc(x2, y2, r2, t - pi, t);\n context.lineTo(x1 + rx, y1 + ry);\n context.arc(x1, y1, r1, t, t + pi);\n } else {\n context.arc(x2, y2, r2, 0, 2*pi);\n }\n context.closePath();\n } else {\n ready = 1;\n }\n x1 = x2;\n y1 = y2;\n r1 = r2;\n }\n\n function trail(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) context = buffer = path();\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) ready = 0;\n }\n if (defined0) point(+x(d, i, data), +y(d, i, data), +size(d, i, data));\n }\n\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n\n trail.x = function(_) {\n if (arguments.length) {\n x = _;\n return trail;\n } else {\n return x;\n }\n };\n\n trail.y = function(_) {\n if (arguments.length) {\n y = _;\n return trail;\n } else {\n return y;\n }\n };\n\n trail.size = function(_) {\n if (arguments.length) {\n size = _;\n return trail;\n } else {\n return size;\n }\n };\n\n trail.defined = function(_) {\n if (arguments.length) {\n defined = _;\n return trail;\n } else {\n return defined;\n }\n };\n\n trail.context = function(_) {\n if (arguments.length) {\n if (_ == null) {\n context = null;\n } else {\n context = _;\n }\n return trail;\n } else {\n return context;\n }\n };\n\n return trail;\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import {pi, tau} from \"../math.js\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math.js\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","import curves from './curves';\nimport symbols from './symbols';\n\nimport {default as vg_rect} from './rectangle';\nimport {default as vg_trail} from './trail';\n\nimport {\n arc as d3_arc,\n symbol as d3_symbol,\n area as d3_area,\n line as d3_line\n} from 'd3-shape';\n\nfunction x(item) { return item.x || 0; }\nfunction y(item) { return item.y || 0; }\nfunction w(item) { return item.width || 0; }\nfunction ts(item) { return item.size || 1; }\nfunction h(item) { return item.height || 0; }\nfunction xw(item) { return (item.x || 0) + (item.width || 0); }\nfunction yh(item) { return (item.y || 0) + (item.height || 0); }\nfunction sa(item) { return item.startAngle || 0; }\nfunction ea(item) { return item.endAngle || 0; }\nfunction pa(item) { return item.padAngle || 0; }\nfunction ir(item) { return item.innerRadius || 0; }\nfunction or(item) { return item.outerRadius || 0; }\nfunction cr(item) { return item.cornerRadius || 0; }\nfunction def(item) { return !(item.defined === false); }\nfunction size(item) { return item.size == null ? 64 : item.size; }\nfunction type(item) { return symbols(item.shape || 'circle'); }\n\nvar arcShape = d3_arc().startAngle(sa).endAngle(ea).padAngle(pa)\n .innerRadius(ir).outerRadius(or).cornerRadius(cr),\n areavShape = d3_area().x(x).y1(y).y0(yh).defined(def),\n areahShape = d3_area().y(y).x1(x).x0(xw).defined(def),\n lineShape = d3_line().x(x).y(y).defined(def),\n rectShape = vg_rect().x(x).y(y).width(w).height(h).cornerRadius(cr),\n symbolShape = d3_symbol().type(type).size(size),\n trailShape = vg_trail().x(x).y(y).defined(def).size(ts);\n\nexport function arc(context, item) {\n return arcShape.context(context)(item);\n}\n\nexport function area(context, items) {\n var item = items[0],\n interp = item.interpolate || 'linear';\n return (item.orient === 'horizontal' ? areahShape : areavShape)\n .curve(curves(interp, item.orient, item.tension))\n .context(context)(items);\n}\n\nexport function line(context, items) {\n var item = items[0],\n interp = item.interpolate || 'linear';\n return lineShape.curve(curves(interp, item.orient, item.tension))\n .context(context)(items);\n}\n\nexport function rectangle(context, item, x, y) {\n return rectShape.context(context)(item, x, y);\n}\n\nexport function shape(context, item) {\n return (item.mark.shape || item.shape)\n .context(context)(item);\n}\n\nexport function symbol(context, item) {\n return symbolShape.context(context)(item);\n}\n\nexport function trail(context, items) {\n return trailShape.context(context)(items);\n}\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport star from \"./symbol/star.js\";\nimport square from \"./symbol/square.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport wye from \"./symbol/wye.js\";\nimport constant from \"./constant.js\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export default function(bounds, item) {\n if (item.stroke && item.opacity !== 0 && item.strokeOpacity !== 0) {\n bounds.expand(item.strokeWidth != null ? +item.strokeWidth : 1);\n }\n return bounds;\n}\n","var bounds,\n tau = Math.PI * 2,\n halfPi = tau / 4,\n circleThreshold = tau - 1e-8;\n\nexport default function context(_) {\n bounds = _;\n return context;\n}\n\nfunction noop() {}\n\nfunction add(x, y) { bounds.add(x, y); }\n\ncontext.beginPath = noop;\n\ncontext.closePath = noop;\n\ncontext.moveTo = add;\n\ncontext.lineTo = add;\n\ncontext.rect = function(x, y, w, h) {\n add(x, y);\n add(x + w, y + h);\n};\n\ncontext.quadraticCurveTo = function(x1, y1, x2, y2) {\n add(x1, y1);\n add(x2, y2);\n};\n\ncontext.bezierCurveTo = function(x1, y1, x2, y2, x3, y3) {\n add(x1, y1);\n add(x2, y2);\n add(x3, y3);\n};\n\ncontext.arc = function(cx, cy, r, sa, ea, ccw) {\n if (Math.abs(ea - sa) > circleThreshold) {\n add(cx - r, cy - r);\n add(cx + r, cy + r);\n return;\n }\n\n var xmin = Infinity, xmax = -Infinity,\n ymin = Infinity, ymax = -Infinity,\n s, i, x, y;\n\n function update(a) {\n x = r * Math.cos(a);\n y = r * Math.sin(a);\n if (x < xmin) xmin = x;\n if (x > xmax) xmax = x;\n if (y < ymin) ymin = y;\n if (y > ymax) ymax = y;\n }\n\n // Sample end points and interior points aligned with 90 degrees\n update(sa);\n update(ea);\n\n if (ea !== sa) {\n sa = sa % tau; if (sa < 0) sa += tau;\n ea = ea % tau; if (ea < 0) ea += tau;\n\n if (ea < sa) {\n ccw = !ccw; // flip direction\n s = sa; sa = ea; ea = s; // swap end-points\n }\n\n if (ccw) {\n ea -= tau;\n s = sa - (sa % halfPi);\n for (i=0; i<4 && s>ea; ++i, s-=halfPi) update(s);\n } else {\n s = sa - (sa % halfPi) + halfPi;\n for (i=0; i<4 && s 0) {\n context.globalAlpha = opacity;\n context.fillStyle = color(context, item, item.fill);\n return true;\n } else {\n return false;\n }\n}\n","import color from './color';\n\nvar Empty = [];\n\nexport default function(context, item, opacity) {\n var lw = (lw = item.strokeWidth) != null ? lw : 1;\n\n if (lw <= 0) return false;\n\n opacity *= (item.strokeOpacity==null ? 1 : item.strokeOpacity);\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.strokeStyle = color(context, item, item.stroke);\n\n context.lineWidth = lw;\n context.lineCap = item.strokeCap || 'butt';\n context.lineJoin = item.strokeJoin || 'miter';\n context.miterLimit = item.strokeMiterLimit || 10;\n\n if (context.setLineDash) {\n context.setLineDash(item.strokeDash || Empty);\n context.lineDashOffset = item.strokeDashOffset || 0;\n }\n return true;\n } else {\n return false;\n }\n}\n","function compare(a, b) {\n return a.zindex - b.zindex || a.index - b.index;\n}\n\nexport function zorder(scene) {\n if (!scene.zdirty) return scene.zitems;\n\n var items = scene.items,\n output = [], item, i, n;\n\n for (i=0, n=items.length; i= 0;) {\n if (hit = visitor(items[i])) return hit;\n }\n\n if (items === zitems) {\n for (items=scene.items, i=items.length; --i >= 0;) {\n if (!items[i].zindex) {\n if (hit = visitor(items[i])) return hit;\n }\n }\n }\n\n return null;\n}\n","import fill from './fill';\nimport stroke from './stroke';\nimport {visit} from '../visit';\n\nexport function drawAll(path) {\n return function(context, scene, bounds) {\n visit(scene, function(item) {\n if (!bounds || bounds.intersects(item.bounds)) {\n drawPath(path, context, item, item);\n }\n });\n };\n}\n\nexport function drawOne(path) {\n return function(context, scene, bounds) {\n if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n drawPath(path, context, scene.items[0], scene.items);\n }\n };\n}\n\nfunction drawPath(path, context, item, items) {\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0) return;\n\n if (path(context, items)) return;\n\n if (item.fill && fill(context, item, opacity)) {\n context.fill();\n }\n\n if (item.stroke && stroke(context, item, opacity)) {\n context.stroke();\n }\n}\n","import {pickVisit} from '../visit';\n\nvar trueFunc = function() { return true; };\n\nexport function pick(test) {\n if (!test) test = trueFunc;\n\n return function(context, scene, x, y, gx, gy) {\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n\n return pickVisit(scene, function(item) {\n var b = item.bounds;\n // first hit test against bounding box\n if ((b && !b.contains(gx, gy)) || !b) return;\n // if in bounding box, perform more careful test\n if (test(context, item, x, y, gx, gy)) return item;\n });\n };\n}\n\nexport function hitPath(path, filled) {\n return function(context, o, x, y) {\n var item = Array.isArray(o) ? o[0] : o,\n fill = (filled == null) ? item.fill : filled,\n stroke = item.stroke && context.isPointInStroke, lw, lc;\n\n if (stroke) {\n lw = item.strokeWidth;\n lc = item.strokeCap;\n context.lineWidth = lw != null ? lw : 1;\n context.lineCap = lc != null ? lc : 'butt';\n }\n\n return path(context, o) ? false :\n (fill && context.isPointInPath(x, y)) ||\n (stroke && context.isPointInStroke(x, y));\n };\n}\n\nexport function pickPath(path) {\n return pick(hitPath(path));\n}\n","export default function(x, y) {\n return 'translate(' + x + ',' + y + ')';\n}","import translate from './translate';\n\nexport default function(item) {\n return translate(item.x || 0, item.y || 0);\n}","import boundStroke from '../bound/boundStroke';\nimport context from '../bound/boundContext';\nimport {drawAll} from '../util/canvas/draw';\nimport {pickPath} from '../util/canvas/pick';\nimport translateItem from '../util/svg/translateItem';\n\nexport default function(type, shape) {\n\n function attr(emit, item) {\n emit('transform', translateItem(item));\n emit('d', shape(null, item));\n }\n\n function bound(bounds, item) {\n shape(context(bounds), item);\n return boundStroke(bounds, item)\n .translate(item.x || 0, item.y || 0);\n }\n\n function draw(context, item) {\n var x = item.x || 0,\n y = item.y || 0;\n context.translate(x, y);\n context.beginPath();\n shape(context, item);\n context.translate(-x, -y);\n }\n\n return {\n type: type,\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw)\n };\n\n}\n","import {arc} from '../path/shapes';\nimport markItemPath from './markItemPath';\n\nexport default markItemPath('arc', arc);\n","import boundStroke from '../bound/boundStroke';\nimport context from '../bound/boundContext';\nimport {drawOne} from '../util/canvas/draw';\nimport {hitPath} from '../util/canvas/pick';\n\nexport default function(type, shape, tip) {\n\n function attr(emit, item) {\n var items = item.mark.items;\n if (items.length) emit('d', shape(null, items));\n }\n\n function bound(bounds, mark) {\n var items = mark.items;\n if (items.length === 0) {\n return bounds;\n } else {\n shape(context(bounds), items);\n return boundStroke(bounds, items[0]);\n }\n }\n\n function draw(context, items) {\n context.beginPath();\n shape(context, items);\n }\n\n var hit = hitPath(draw);\n\n function pick(context, scene, x, y, gx, gy) {\n var items = scene.items,\n b = scene.bounds;\n\n if (!items || !items.length || b && !b.contains(gx, gy)) {\n return null;\n }\n\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return hit(context, items, x, y) ? items[0] : null;\n }\n\n return {\n type: type,\n tag: 'path',\n nested: true,\n attr: attr,\n bound: bound,\n draw: drawOne(draw),\n pick: pick,\n tip: tip\n };\n\n}\n\n\n","import {area} from '../path/shapes';\nimport {pickArea} from '../util/pickPath';\nimport markMultiItemPath from './markMultiItemPath';\n\nexport default markMultiItemPath('area', area, pickArea);\n","export function pickArea(a, p) {\n var v = a[0].orient === 'horizontal' ? p[1] : p[0],\n z = a[0].orient === 'horizontal' ? 'y' : 'x',\n i = a.length,\n min = +Infinity, hit, d;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n d = Math.abs(a[i][z] - v);\n if (d < min) {\n min = d;\n hit = a[i];\n }\n }\n\n return hit;\n}\n\nexport function pickLine(a, p) {\n var t = Math.pow(a[0].strokeWidth || 1, 2),\n i = a.length, dx, dy, dd;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n if (dd < t) return a[i];\n }\n\n return null;\n}\n\nexport function pickTrail(a, p) {\n var i = a.length, dx, dy, dd;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n dx = a[i].size || 1;\n if (dd < dx*dx) return a[i];\n }\n\n return null;\n}\n","import {isFunction} from 'vega-util';\n\nvar clip_id = 1;\n\nexport function resetSVGClipId() {\n clip_id = 1;\n}\n\nexport default function(renderer, item, size) {\n var clip = item.clip,\n defs = renderer._defs,\n id = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n c = defs.clipping[id] || (defs.clipping[id] = {id: id});\n\n if (isFunction(clip)) {\n c.path = clip(null);\n } else {\n c.width = size.width || 0;\n c.height = size.height || 0;\n }\n\n return 'url(#' + id + ')';\n}\n","import {rectangle} from '../path/shapes';\nimport boundStroke from '../bound/boundStroke';\nimport {visit, pickVisit} from '../util/visit';\nimport stroke from '../util/canvas/stroke';\nimport fill from '../util/canvas/fill';\nimport {hitPath} from '../util/canvas/pick';\nimport clip from '../util/svg/clip';\nimport translateItem from '../util/svg/translateItem';\n\nvar StrokeOffset = 0.5;\n\nfunction attr(emit, item) {\n emit('transform', translateItem(item));\n}\n\nfunction background(emit, item) {\n var offset = item.stroke ? StrokeOffset : 0;\n emit('class', 'background');\n emit('d', rectangle(null, item, offset, offset));\n}\n\nfunction foreground(emit, item, renderer) {\n var url = item.clip ? clip(renderer, item, item) : null;\n emit('clip-path', url);\n}\n\nfunction bound(bounds, group) {\n if (!group.clip && group.items) {\n var items = group.items;\n for (var j=0, m=items.length; j 0) {\n backgroundPath(context, group);\n if (group.fill && fill(context, group, opacity)) {\n context.fill();\n }\n if (group.stroke && stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n }\n\n // set clip and bounds\n if (group.clip) {\n context.beginPath();\n context.rect(0, 0, w, h);\n context.clip();\n }\n if (bounds) bounds.translate(-gx, -gy);\n\n // draw group contents\n visit(group, function(item) {\n renderer.draw(context, item, bounds);\n });\n\n // restore graphics context\n if (bounds) bounds.translate(gx, gy);\n context.restore();\n });\n}\n\nfunction pick(context, scene, x, y, gx, gy) {\n if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n return null;\n }\n\n var handler = this,\n cx = x * context.pixelRatio,\n cy = y * context.pixelRatio;\n\n return pickVisit(scene, function(group) {\n var hit, dx, dy, b;\n\n // first hit test against bounding box\n // if a group is clipped, that should be handled by the bounds check.\n b = group.bounds;\n if (b && !b.contains(gx, gy)) return;\n\n // passed bounds check, so test sub-groups\n dx = (group.x || 0);\n dy = (group.y || 0);\n\n context.save();\n context.translate(dx, dy);\n\n dx = gx - dx;\n dy = gy - dy;\n\n // hit test against contained marks\n hit = pickVisit(group, function(mark) {\n return pickMark(mark, dx, dy)\n ? handler.pick(mark, x, y, dx, dy)\n : null;\n });\n\n // hit test against group background\n if (!hit && scene.interactive !== false\n && (group.fill || group.stroke)\n && hitBackground(context, group, cx, cy)) {\n hit = group;\n }\n\n context.restore();\n return hit || null;\n });\n}\n\nfunction pickMark(mark, x, y) {\n return (mark.interactive !== false || mark.marktype === 'group')\n && mark.bounds && mark.bounds.contains(x, y);\n}\n\nexport default {\n type: 'group',\n tag: 'g',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick,\n background: background,\n foreground: foreground\n};\n","import {visit} from '../util/visit';\nimport {pick} from '../util/canvas/pick';\nimport translate from '../util/svg/translate';\n\nfunction getImage(item, renderer) {\n var image = item.image;\n if (!image || image.url !== item.url) {\n image = {loaded: false, width: 0, height: 0};\n renderer.loadImage(item.url).then(function(image) {\n item.image = image;\n item.image.url = item.url;\n });\n }\n return image;\n}\n\nfunction imageXOffset(align, w) {\n return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\n\nfunction imageYOffset(baseline, h) {\n return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\n\nfunction attr(emit, item, renderer) {\n var image = getImage(item, renderer),\n x = item.x || 0,\n y = item.y || 0,\n w = (item.width != null ? item.width : image.width) || 0,\n h = (item.height != null ? item.height : image.height) || 0,\n a = item.aspect === false ? 'none' : 'xMidYMid';\n\n x -= imageXOffset(item.align, w);\n y -= imageYOffset(item.baseline, h);\n\n emit('href', image.src || '', 'http://www.w3.org/1999/xlink', 'xlink:href');\n emit('transform', translate(x, y));\n emit('width', w);\n emit('height', h);\n emit('preserveAspectRatio', a);\n}\n\nfunction bound(bounds, item) {\n var image = item.image,\n x = item.x || 0,\n y = item.y || 0,\n w = (item.width != null ? item.width : (image && image.width)) || 0,\n h = (item.height != null ? item.height : (image && image.height)) || 0;\n\n x -= imageXOffset(item.align, w);\n y -= imageYOffset(item.baseline, h);\n\n return bounds.set(x, y, x + w, y + h);\n}\n\nfunction draw(context, scene, bounds) {\n var renderer = this;\n\n visit(scene, function(item) {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n var image = getImage(item, renderer),\n x = item.x || 0,\n y = item.y || 0,\n w = (item.width != null ? item.width : image.width) || 0,\n h = (item.height != null ? item.height : image.height) || 0,\n opacity, ar0, ar1, t;\n\n x -= imageXOffset(item.align, w);\n y -= imageYOffset(item.baseline, h);\n\n if (item.aspect !== false) {\n ar0 = image.width / image.height;\n ar1 = item.width / item.height;\n if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n if (ar1 < ar0) {\n t = w / ar0;\n y += (h - t) / 2;\n h = t;\n } else {\n t = h * ar0;\n x += (w - t) / 2;\n w = t;\n }\n }\n }\n\n if (image.loaded) {\n context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n context.drawImage(image, x, y, w, h);\n }\n });\n}\n\nexport default {\n type: 'image',\n tag: 'image',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick(),\n get: getImage,\n xOffset: imageXOffset,\n yOffset: imageYOffset\n};\n","import {line} from '../path/shapes';\nimport {pickLine} from '../util/pickPath';\nimport markMultiItemPath from './markMultiItemPath';\n\nexport default markMultiItemPath('line', line, pickLine);\n","import boundStroke from '../bound/boundStroke';\nimport context from '../bound/boundContext';\nimport pathParse from '../path/parse';\nimport pathRender from '../path/render';\nimport {drawAll} from '../util/canvas/draw';\nimport {pickPath} from '../util/canvas/pick';\nimport translateItem from '../util/svg/translateItem';\n\nfunction attr(emit, item) {\n emit('transform', translateItem(item));\n emit('d', item.path);\n}\n\nfunction path(context, item) {\n var path = item.path;\n if (path == null) return true;\n\n var cache = item.pathCache;\n if (!cache || cache.path !== path) {\n (item.pathCache = cache = pathParse(path)).path = path;\n }\n pathRender(context, cache, item.x, item.y);\n}\n\nfunction bound(bounds, item) {\n return path(context(bounds), item)\n ? bounds.set(0, 0, 0, 0)\n : boundStroke(bounds, item);\n}\n\nexport default {\n type: 'path',\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(path),\n pick: pickPath(path)\n};\n","import boundStroke from '../bound/boundStroke';\nimport {rectangle} from '../path/shapes';\nimport {drawAll} from '../util/canvas/draw';\nimport {pickPath} from '../util/canvas/pick';\n\nfunction attr(emit, item) {\n emit('d', rectangle(null, item));\n}\n\nfunction bound(bounds, item) {\n var x, y;\n return boundStroke(bounds.set(\n x = item.x || 0,\n y = item.y || 0,\n (x + item.width) || 0,\n (y + item.height) || 0\n ), item);\n}\n\nfunction draw(context, item) {\n context.beginPath();\n rectangle(context, item);\n}\n\nexport default {\n type: 'rect',\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw)\n};\n","import boundStroke from '../bound/boundStroke';\nimport {visit} from '../util/visit';\nimport {pick} from '../util/canvas/pick';\nimport stroke from '../util/canvas/stroke';\nimport translateItem from '../util/svg/translateItem';\n\nfunction attr(emit, item) {\n emit('transform', translateItem(item));\n emit('x2', item.x2 != null ? item.x2 - (item.x||0) : 0);\n emit('y2', item.y2 != null ? item.y2 - (item.y||0) : 0);\n}\n\nfunction bound(bounds, item) {\n var x1, y1;\n return boundStroke(bounds.set(\n x1 = item.x || 0,\n y1 = item.y || 0,\n item.x2 != null ? item.x2 : x1,\n item.y2 != null ? item.y2 : y1\n ), item);\n}\n\nfunction path(context, item, opacity) {\n var x1, y1, x2, y2;\n\n if (item.stroke && stroke(context, item, opacity)) {\n x1 = item.x || 0;\n y1 = item.y || 0;\n x2 = item.x2 != null ? item.x2 : x1;\n y2 = item.y2 != null ? item.y2 : y1;\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n return true;\n }\n return false;\n}\n\nfunction draw(context, scene, bounds) {\n visit(scene, function(item) {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity && path(context, item, opacity)) {\n context.stroke();\n }\n });\n}\n\nfunction hit(context, item, x, y) {\n if (!context.isPointInStroke) return false;\n return path(context, item, 1) && context.isPointInStroke(x, y);\n}\n\nexport default {\n type: 'rule',\n tag: 'line',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick(hit)\n};\n","import {shape} from '../path/shapes';\nimport markItemPath from './markItemPath';\n\nexport default markItemPath('shape', shape);\n","import {symbol} from '../path/shapes';\nimport markItemPath from './markItemPath';\n\nexport default markItemPath('symbol', symbol);\n","import {canvas} from 'vega-canvas';\n\nvar context,\n currFontHeight;\n\nexport var textMetrics = {\n height: fontSize,\n measureWidth: measureWidth,\n estimateWidth: estimateWidth,\n width: estimateWidth,\n canvas: useCanvas\n};\n\nuseCanvas(true);\n\n// make dumb, simple estimate if no canvas is available\nfunction estimateWidth(item) {\n currFontHeight = fontSize(item);\n return estimate(textValue(item));\n}\n\nfunction estimate(text) {\n return ~~(0.8 * text.length * currFontHeight);\n}\n\n// measure text width if canvas is available\nfunction measureWidth(item) {\n context.font = font(item);\n return measure(textValue(item));\n}\n\nfunction measure(text) {\n return context.measureText(text).width;\n}\n\nexport function fontSize(item) {\n return item.fontSize != null ? item.fontSize : 11;\n}\n\nfunction useCanvas(use) {\n context = use && (context = canvas(1,1)) ? context.getContext('2d') : null;\n textMetrics.width = context ? measureWidth : estimateWidth;\n}\n\nexport function textValue(item) {\n var s = item.text;\n if (s == null) {\n return '';\n } else {\n return item.limit > 0 ? truncate(item) : s + '';\n }\n}\n\nexport function truncate(item) {\n var limit = +item.limit,\n text = item.text + '',\n width;\n\n if (context) {\n context.font = font(item);\n width = measure;\n } else {\n currFontHeight = fontSize(item);\n width = estimate;\n }\n\n if (width(text) < limit) return text;\n\n var ellipsis = item.ellipsis || '\\u2026',\n rtl = item.dir === 'rtl',\n lo = 0,\n hi = text.length, mid;\n\n limit -= width(ellipsis);\n\n if (rtl) {\n while (lo < hi) {\n mid = (lo + hi >>> 1);\n if (width(text.slice(mid)) > limit) lo = mid + 1;\n else hi = mid;\n }\n return ellipsis + text.slice(lo);\n } else {\n while (lo < hi) {\n mid = 1 + (lo + hi >>> 1);\n if (width(text.slice(0, mid)) < limit) lo = mid;\n else hi = mid - 1;\n }\n return text.slice(0, lo) + ellipsis;\n }\n}\n\nexport function fontFamily(item, quote) {\n var font = item.font;\n return (quote && font\n ? String(font).replace(/\"/g, '\\'')\n : font) || 'sans-serif';\n}\n\nexport function font(item, quote) {\n return '' +\n (item.fontStyle ? item.fontStyle + ' ' : '') +\n (item.fontVariant ? item.fontVariant + ' ' : '') +\n (item.fontWeight ? item.fontWeight + ' ' : '') +\n fontSize(item) + 'px ' +\n fontFamily(item, quote);\n}\n\nexport function offset(item) {\n // perform our own font baseline calculation\n // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n var baseline = item.baseline,\n h = fontSize(item);\n return Math.round(\n baseline === 'top' ? 0.79*h :\n baseline === 'middle' ? 0.30*h :\n baseline === 'bottom' ? -0.21*h : 0\n );\n}\n","import Bounds from '../Bounds';\nimport {font, offset, textMetrics, textValue} from '../util/text';\nimport {visit} from '../util/visit';\nimport fill from '../util/canvas/fill';\nimport {pick} from '../util/canvas/pick';\nimport stroke from '../util/canvas/stroke';\nimport translate from '../util/svg/translate';\n\nvar textAlign = {\n 'left': 'start',\n 'center': 'middle',\n 'right': 'end'\n};\n\nvar tempBounds = new Bounds();\n\nfunction attr(emit, item) {\n var dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item),\n x = item.x || 0,\n y = item.y || 0,\n a = item.angle || 0,\n r = item.radius || 0, t;\n\n if (r) {\n t = (item.theta || 0) - Math.PI/2;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n\n emit('text-anchor', textAlign[item.align] || 'start');\n\n if (a) {\n t = translate(x, y) + ' rotate('+a+')';\n if (dx || dy) t += ' ' + translate(dx, dy);\n } else {\n t = translate(x + dx, y + dy);\n }\n emit('transform', t);\n}\n\nfunction bound(bounds, item, noRotate) {\n var h = textMetrics.height(item),\n a = item.align,\n r = item.radius || 0,\n x = item.x || 0,\n y = item.y || 0,\n dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item) - Math.round(0.8*h), // use 4/5 offset\n w, t;\n\n if (r) {\n t = (item.theta || 0) - Math.PI/2;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n\n // horizontal alignment\n w = textMetrics.width(item);\n if (a === 'center') {\n dx -= (w / 2);\n } else if (a === 'right') {\n dx -= w;\n } else {\n // left by default, do nothing\n }\n\n bounds.set(dx+=x, dy+=y, dx+w, dy+h);\n if (item.angle && !noRotate) {\n bounds.rotate(item.angle*Math.PI/180, x, y);\n }\n return bounds.expand(noRotate || !w ? 0 : 1);\n}\n\nfunction draw(context, scene, bounds) {\n visit(scene, function(item) {\n var opacity, x, y, r, t, str;\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n if (!(str = textValue(item))) return; // get text string\n\n opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0) return;\n\n context.font = font(item);\n context.textAlign = item.align || 'left';\n\n x = item.x || 0;\n y = item.y || 0;\n if ((r = item.radius)) {\n t = (item.theta || 0) - Math.PI/2;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n\n if (item.angle) {\n context.save();\n context.translate(x, y);\n context.rotate(item.angle * Math.PI/180);\n x = y = 0; // reset x, y\n }\n x += (item.dx || 0);\n y += (item.dy || 0) + offset(item);\n\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n if (item.angle) context.restore();\n });\n}\n\nfunction hit(context, item, x, y, gx, gy) {\n if (item.fontSize <= 0) return false;\n if (!item.angle) return true; // bounds sufficient if no rotation\n\n // project point into space of unrotated bounds\n var b = bound(tempBounds, item, true),\n a = -item.angle * Math.PI / 180,\n cos = Math.cos(a),\n sin = Math.sin(a),\n ix = item.x,\n iy = item.y,\n px = cos*gx - sin*gy + (ix - ix*cos + iy*sin),\n py = sin*gx + cos*gy + (iy - ix*sin - iy*cos);\n\n return b.contains(px, py);\n}\n\nexport default {\n type: 'text',\n tag: 'text',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick(hit)\n};\n","import {trail} from '../path/shapes';\nimport {pickTrail} from '../util/pickPath';\nimport markMultiItemPath from './markMultiItemPath';\n\nexport default markMultiItemPath('trail', trail, pickTrail);\n","import arc from './arc';\nimport area from './area';\nimport group from './group';\nimport image from './image';\nimport line from './line';\nimport path from './path';\nimport rect from './rect';\nimport rule from './rule';\nimport shape from './shape';\nimport symbol from './symbol';\nimport text from './text';\nimport trail from './trail';\n\nexport default {\n arc: arc,\n area: area,\n group: group,\n image: image,\n line: line,\n path: path,\n rect: rect,\n rule: rule,\n shape: shape,\n symbol: symbol,\n text: text,\n trail: trail\n};\n","import Bounds from '../Bounds';\nimport marks from '../marks/index';\n\nexport default function(item, func, opt) {\n var type = marks[item.mark.marktype],\n bound = func || type.bound;\n if (type.nested) item = item.mark;\n\n return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n}\n","import Bounds from '../Bounds';\nimport boundItem from './boundItem';\nimport marks from '../marks/index';\n\nvar DUMMY = {mark: null};\n\nexport default function(mark, bounds, opt) {\n var type = marks[mark.marktype],\n bound = type.bound,\n items = mark.items,\n hasItems = items && items.length,\n i, n, item, b;\n\n if (type.nested) {\n if (hasItems) {\n item = items[0];\n } else {\n // no items, fake it\n DUMMY.mark = mark;\n item = DUMMY;\n }\n b = boundItem(item, bound, opt);\n bounds = bounds && bounds.union(b) || b;\n return bounds;\n }\n\n bounds = bounds\n || mark.bounds && mark.bounds.clear()\n || new Bounds();\n\n if (hasItems) {\n for (i=0, n=items.length; i index) el.removeChild(nodes[--curr]);\n return el;\n}\n\n// generate css class name for mark\nexport function cssClass(mark) {\n return 'mark-' + mark.marktype\n + (mark.role ? ' role-' + mark.role : '')\n + (mark.name ? ' ' + mark.name : '');\n}\n","export default function(event, el) {\n var rect = el.getBoundingClientRect();\n return [\n event.clientX - rect.left - (el.clientLeft || 0),\n event.clientY - rect.top - (el.clientTop || 0)\n ];\n}\n","import {domCreate} from './util/dom';\nimport resolveItem from './util/resolveItem';\nimport {loader} from 'vega-loader';\n\n/**\n * Create a new Handler instance.\n * @param {object} [customLoader] - Optional loader instance for\n * href URL sanitization. If not specified, a standard loader\n * instance will be generated.\n * @param {function} [customTooltip] - Optional tooltip handler\n * function for custom tooltip display.\n * @constructor\n */\nexport default function Handler(customLoader, customTooltip) {\n this._active = null;\n this._handlers = {};\n this._loader = customLoader || loader();\n this._tooltip = customTooltip || defaultTooltip;\n}\n\n// The default tooltip display handler.\n// Sets the HTML title attribute on the visualization container.\nfunction defaultTooltip(handler, event, item, value) {\n handler.element().setAttribute('title', value || '');\n}\n\nvar prototype = Handler.prototype;\n\n/**\n * Initialize a new Handler instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {object} [obj] - Optional context object that should serve as\n * the \"this\" context for event callbacks.\n * @return {Handler} - This handler instance.\n */\nprototype.initialize = function(el, origin, obj) {\n this._el = el;\n this._obj = obj || null;\n return this.origin(origin);\n};\n\n/**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\nprototype.element = function() {\n return this._el;\n};\n\n/**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\nprototype.canvas = function() {\n return this._el && this._el.firstChild;\n};\n\n/**\n * Get / set the origin coordinates of the visualization.\n */\nprototype.origin = function(origin) {\n if (arguments.length) {\n this._origin = origin || [0, 0];\n return this;\n } else {\n return this._origin.slice();\n }\n};\n\n/**\n * Get / set the scenegraph root.\n */\nprototype.scene = function(scene) {\n if (!arguments.length) return this._scene;\n this._scene = scene;\n return this;\n};\n\n/**\n * Add an event handler. Subclasses should override this method.\n */\nprototype.on = function(/*type, handler*/) {};\n\n/**\n * Remove an event handler. Subclasses should override this method.\n */\nprototype.off = function(/*type, handler*/) {};\n\n/**\n * Utility method for finding the array index of an event handler.\n * @param {Array} h - An array of registered event handlers.\n * @param {string} type - The event type.\n * @param {function} handler - The event handler instance to find.\n * @return {number} - The handler's array index or -1 if not registered.\n */\nprototype._handlerIndex = function(h, type, handler) {\n for (var i = h ? h.length : 0; --i>=0;) {\n if (h[i].type === type && (!handler || h[i].handler === handler)) {\n return i;\n }\n }\n return -1;\n};\n\n/**\n * Returns an array with registered event handlers.\n * @param {string} [type] - The event type to query. Any annotations\n * are ignored; for example, for the argument \"click.foo\", \".foo\" will\n * be ignored and the method returns all \"click\" handlers. If type is\n * null or unspecified, this method returns handlers for all types.\n * @return {Array} - A new array containing all registered event handlers.\n */\nprototype.handlers = function(type) {\n var h = this._handlers, a = [], k;\n if (type) {\n a.push.apply(a, h[this.eventName(type)]);\n } else {\n for (k in h) { a.push.apply(a, h[k]); }\n }\n return a;\n};\n\n/**\n * Parses an event name string to return the specific event type.\n * For example, given \"click.foo\" returns \"click\"\n * @param {string} name - The input event type string.\n * @return {string} - A string with the event type only.\n */\nprototype.eventName = function(name) {\n var i = name.indexOf('.');\n return i < 0 ? name : name.slice(0,i);\n};\n\n/**\n * Handle hyperlink navigation in response to an item.href value.\n * @param {Event} event - The event triggering hyperlink navigation.\n * @param {Item} item - The scenegraph item.\n * @param {string} href - The URL to navigate to.\n */\nprototype.handleHref = function(event, item, href) {\n this._loader\n .sanitize(href, {context:'href'})\n .then(function(opt) {\n var e = new MouseEvent(event.type, event),\n a = domCreate(null, 'a');\n for (var name in opt) a.setAttribute(name, opt[name]);\n a.dispatchEvent(e);\n })\n .catch(function() { /* do nothing */ });\n};\n\n/**\n * Handle tooltip display in response to an item.tooltip value.\n * @param {Event} event - The event triggering tooltip display.\n * @param {Item} item - The scenegraph item.\n * @param {boolean} show - A boolean flag indicating whether\n * to show or hide a tooltip for the given item.\n */\nprototype.handleTooltip = function(event, item, show) {\n if (item && item.tooltip != null) {\n item = resolveItem(item, event, this.canvas(), this._origin);\n var value = (show && item && item.tooltip) || null;\n this._tooltip.call(this._obj, this, event, item, value);\n }\n};\n\n/**\n * Returns the size of a scenegraph item and its position relative\n * to the viewport.\n * @param {Item} item - The scenegraph item.\n * @return {object} - A bounding box object (compatible with the\n * DOMRect type) consisting of x, y, width, heigh, top, left,\n * right, and bottom properties.\n */\nprototype.getItemBoundingClientRect = function(item) {\n if (!(el = this.canvas())) return;\n\n var el, rect = el.getBoundingClientRect(),\n origin = this._origin,\n itemBounds = item.bounds,\n x = itemBounds.x1 + origin[0] + rect.left,\n y = itemBounds.y1 + origin[1] + rect.top,\n w = itemBounds.width(),\n h = itemBounds.height();\n\n // translate coordinate for each parent group\n while (item.mark && (item = item.mark.group)) {\n x += item.x || 0;\n y += item.y || 0;\n }\n\n // return DOMRect-compatible bounding box\n return {\n x: x,\n y: y,\n width: w,\n height: h,\n left: x,\n top: y,\n right: x + w,\n bottom: y + h\n };\n};\n","import ResourceLoader from './ResourceLoader';\n\n/**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n * image and href URL sanitization. If not specified, a\n * standard loader instance will be generated.\n * @constructor\n */\nexport default function Renderer(loader) {\n this._el = null;\n this._bgcolor = null;\n this._loader = new ResourceLoader(loader);\n}\n\nvar prototype = Renderer.prototype;\n\n/**\n * Initialize a new Renderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance.\n */\nprototype.initialize = function(el, width, height, origin, scaleFactor) {\n this._el = el;\n return this.resize(width, height, origin, scaleFactor);\n};\n\n/**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\nprototype.element = function() {\n return this._el;\n};\n\n/**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\nprototype.canvas = function() {\n return this._el && this._el.firstChild;\n};\n\n/**\n * Get / set the background color.\n */\nprototype.background = function(bgcolor) {\n if (arguments.length === 0) return this._bgcolor;\n this._bgcolor = bgcolor;\n return this;\n};\n\n/**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance;\n */\nprototype.resize = function(width, height, origin, scaleFactor) {\n this._width = width;\n this._height = height;\n this._origin = origin || [0, 0];\n this._scale = scaleFactor || 1;\n return this;\n};\n\n/**\n * Report a dirty item whose bounds should be redrawn.\n * This base class method does nothing. Subclasses that perform\n * incremental should implement this method.\n * @param {Item} item - The dirty item whose bounds should be redrawn.\n */\nprototype.dirty = function(/*item*/) {\n};\n\n/**\n * Render an input scenegraph, potentially with a set of dirty items.\n * This method will perform an immediate rendering with available resources.\n * The renderer may also need to perform image loading to perform a complete\n * render. This process can lead to asynchronous re-rendering of the scene\n * after this method returns. To receive notification when rendering is\n * complete, use the renderAsync method instead.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Renderer} - This renderer instance.\n */\nprototype.render = function(scene) {\n var r = this;\n\n // bind arguments into a render call, and cache it\n // this function may be subsequently called for async redraw\n r._call = function() { r._render(scene); };\n\n // invoke the renderer\n r._call();\n\n // clear the cached call for garbage collection\n // async redraws will stash their own copy\n r._call = null;\n\n return r;\n};\n\n/**\n * Internal rendering method. Renderer subclasses should override this\n * method to actually perform rendering.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\nprototype._render = function(/*scene*/) {\n // subclasses to override\n};\n\n/**\n * Asynchronous rendering method. Similar to render, but returns a Promise\n * that resolves when all rendering is completed. Sometimes a renderer must\n * perform image loading to get a complete rendering. The returned\n * Promise will not resolve until this process completes.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Promise} - A Promise that resolves when rendering is complete.\n */\nprototype.renderAsync = function(scene) {\n var r = this.render(scene);\n return this._ready\n ? this._ready.then(function() { return r; })\n : Promise.resolve(r);\n};\n\n/**\n * Internal method for asynchronous resource loading.\n * Proxies method calls to the ImageLoader, and tracks loading\n * progress to invoke a re-render once complete.\n * @param {string} method - The method name to invoke on the ImageLoader.\n * @param {string} uri - The URI for the requested resource.\n * @return {Promise} - A Promise that resolves to the requested resource.\n */\nprototype._load = function(method, uri) {\n var r = this,\n p = r._loader[method](uri);\n\n if (!r._ready) {\n // re-render the scene when loading completes\n var call = r._call;\n r._ready = r._loader.ready()\n .then(function(redraw) {\n if (redraw) call();\n r._ready = null;\n });\n }\n\n return p;\n};\n\n/**\n * Sanitize a URL to include as a hyperlink in the rendered scene.\n * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string to sanitize.\n * @return {Promise} - A Promise that resolves to the sanitized URL.\n */\nprototype.sanitizeURL = function(uri) {\n return this._load('sanitizeURL', uri);\n};\n\n/**\n * Requests an image to include in the rendered scene.\n * This method proxies a call to ImageLoader.loadImage, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string of the image.\n * @return {Promise} - A Promise that resolves to the loaded Image.\n */\nprototype.loadImage = function(uri) {\n return this._load('loadImage', uri);\n};\n","import marks from '../marks/index';\nimport point from './point';\n\nexport default function(item, event, el, origin) {\n var mark = item && item.mark,\n mdef, p;\n\n if (mark && (mdef = marks[mark.marktype]).tip) {\n p = point(event, el);\n p[0] -= origin[0];\n p[1] -= origin[1];\n while (item = item.mark.group) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n }\n item = mdef.tip(mark.items, p);\n }\n\n return item;\n}\n","export var Events = [\n 'keydown',\n 'keypress',\n 'keyup',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'mousedown',\n 'mouseup',\n 'mousemove',\n 'mouseout',\n 'mouseover',\n 'click',\n 'dblclick',\n 'wheel',\n 'mousewheel',\n 'touchstart',\n 'touchmove',\n 'touchend'\n];\n\nexport var TooltipShowEvent = 'mousemove';\n\nexport var TooltipHideEvent = 'mouseout';\n\nexport var HrefEvent = 'click';\n","import Handler from './Handler';\nimport Marks from './marks/index';\nimport {Events, HrefEvent, TooltipShowEvent, TooltipHideEvent} from './util/events';\nimport point from './util/point';\nimport {domFind} from './util/dom';\nimport {inherits} from 'vega-util';\n\nexport default function CanvasHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n this._down = null;\n this._touch = null;\n this._first = true;\n}\n\nvar prototype = inherits(CanvasHandler, Handler);\n\nprototype.initialize = function(el, origin, obj) {\n // add event listeners\n var canvas = this._canvas = el && domFind(el, 'canvas');\n if (canvas) {\n var that = this;\n this.events.forEach(function(type) {\n canvas.addEventListener(type, function(evt) {\n if (prototype[type]) {\n prototype[type].call(that, evt);\n } else {\n that.fire(type, evt);\n }\n });\n });\n }\n\n return Handler.prototype.initialize.call(this, el, origin, obj);\n};\n\n// return the backing canvas instance\nprototype.canvas = function() {\n return this._canvas;\n};\n\n// retrieve the current canvas context\nprototype.context = function() {\n return this._canvas.getContext('2d');\n};\n\n// supported events\nprototype.events = Events;\n\n// to keep old versions of firefox happy\nprototype.DOMMouseScroll = function(evt) {\n this.fire('mousewheel', evt);\n};\n\nfunction move(moveEvent, overEvent, outEvent) {\n return function(evt) {\n var a = this._active,\n p = this.pickEvent(evt);\n\n if (p === a) {\n // active item and picked item are the same\n this.fire(moveEvent, evt); // fire move\n } else {\n // active item and picked item are different\n if (!a || !a.exit) {\n // fire out for prior active item\n // suppress if active item was removed from scene\n this.fire(outEvent, evt);\n }\n this._active = p; // set new active item\n this.fire(overEvent, evt); // fire over for new active item\n this.fire(moveEvent, evt); // fire move for new active item\n }\n };\n}\n\nfunction inactive(type) {\n return function(evt) {\n this.fire(type, evt);\n this._active = null;\n };\n}\n\nprototype.mousemove = move('mousemove', 'mouseover', 'mouseout');\nprototype.dragover = move('dragover', 'dragenter', 'dragleave');\n\nprototype.mouseout = inactive('mouseout');\nprototype.dragleave = inactive('dragleave');\n\nprototype.mousedown = function(evt) {\n this._down = this._active;\n this.fire('mousedown', evt);\n};\n\nprototype.click = function(evt) {\n if (this._down === this._active) {\n this.fire('click', evt);\n this._down = null;\n }\n};\n\nprototype.touchstart = function(evt) {\n this._touch = this.pickEvent(evt.changedTouches[0]);\n\n if (this._first) {\n this._active = this._touch;\n this._first = false;\n }\n\n this.fire('touchstart', evt, true);\n};\n\nprototype.touchmove = function(evt) {\n this.fire('touchmove', evt, true);\n};\n\nprototype.touchend = function(evt) {\n this.fire('touchend', evt, true);\n this._touch = null;\n};\n\n// fire an event\nprototype.fire = function(type, evt, touch) {\n var a = touch ? this._touch : this._active,\n h = this._handlers[type], i, len;\n\n // set event type relative to scenegraph items\n evt.vegaType = type;\n\n // handle hyperlinks and tooltips first\n if (type === HrefEvent && a && a.href) {\n this.handleHref(evt, a, a.href);\n } else if (type === TooltipShowEvent || type === TooltipHideEvent) {\n this.handleTooltip(evt, a, type !== TooltipHideEvent);\n }\n\n // invoke all registered handlers\n if (h) {\n for (i=0, len=h.length; i= 0) {\n h.splice(i, 1);\n }\n\n return this;\n};\n\nprototype.pickEvent = function(evt) {\n var p = point(evt, this._canvas),\n o = this._origin;\n return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n};\n\n// find the scenegraph item at the current mouse position\n// x, y -- the absolute x, y mouse coordinates on the canvas element\n// gx, gy -- the relative coordinates within the current group\nprototype.pick = function(scene, x, y, gx, gy) {\n var g = this.context(),\n mark = Marks[scene.marktype];\n return mark.pick.call(this, g, scene, x, y, gx, gy);\n};\n","function devicePixelRatio() {\n return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\n\nvar pixelRatio = devicePixelRatio();\n\nexport default function(canvas, width, height, origin, scaleFactor) {\n var inDOM = typeof HTMLElement !== 'undefined'\n && canvas instanceof HTMLElement\n && canvas.parentNode != null;\n\n var context = canvas.getContext('2d'),\n ratio = inDOM ? pixelRatio : scaleFactor;\n\n canvas.width = width * ratio;\n canvas.height = height * ratio;\n\n if (inDOM && ratio !== 1) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n\n context.pixelRatio = ratio;\n context.setTransform(\n ratio, 0, 0, ratio,\n ratio * origin[0],\n ratio * origin[1]\n );\n\n return canvas;\n}\n","import Renderer from './Renderer';\nimport Bounds from './Bounds';\nimport marks from './marks/index';\n\nimport {domClear} from './util/dom';\nimport clip from './util/canvas/clip';\nimport resize from './util/canvas/resize';\nimport {canvas} from 'vega-canvas';\nimport {inherits} from 'vega-util';\n\nexport default function CanvasRenderer(loader) {\n Renderer.call(this, loader);\n this._redraw = false;\n this._dirty = new Bounds();\n}\n\nvar prototype = inherits(CanvasRenderer, Renderer),\n base = Renderer.prototype,\n tempBounds = new Bounds();\n\nprototype.initialize = function(el, width, height, origin, scaleFactor) {\n this._canvas = canvas(1, 1); // instantiate a small canvas\n if (el) {\n domClear(el, 0).appendChild(this._canvas);\n this._canvas.setAttribute('class', 'marks');\n }\n // this method will invoke resize to size the canvas appropriately\n return base.initialize.call(this, el, width, height, origin, scaleFactor);\n};\n\nprototype.resize = function(width, height, origin, scaleFactor) {\n base.resize.call(this, width, height, origin, scaleFactor);\n resize(this._canvas, this._width, this._height, this._origin, this._scale);\n this._redraw = true;\n return this;\n};\n\nprototype.canvas = function() {\n return this._canvas;\n};\n\nprototype.context = function() {\n return this._canvas ? this._canvas.getContext('2d') : null;\n};\n\nprototype.dirty = function(item) {\n var b = translate(item.bounds, item.mark.group);\n this._dirty.union(b);\n};\n\nfunction clipToBounds(g, b, origin) {\n // expand bounds by 1 pixel, then round to pixel boundaries\n b.expand(1).round();\n\n // to avoid artifacts translate if origin has fractional pixels\n b.translate(-(origin[0] % 1), -(origin[1] % 1));\n\n // set clipping path\n g.beginPath();\n g.rect(b.x1, b.y1, b.width(), b.height());\n g.clip();\n\n return b;\n}\n\nfunction translate(bounds, group) {\n if (group == null) return bounds;\n var b = tempBounds.clear().union(bounds);\n for (; group != null; group = group.mark.group) {\n b.translate(group.x || 0, group.y || 0);\n }\n return b;\n}\n\nprototype._render = function(scene) {\n var g = this.context(),\n o = this._origin,\n w = this._width,\n h = this._height,\n b = this._dirty;\n\n // setup\n g.save();\n if (this._redraw || b.empty()) {\n this._redraw = false;\n b = null;\n } else {\n b = clipToBounds(g, b, o);\n }\n\n this.clear(-o[0], -o[1], w, h);\n\n // render\n this.draw(g, scene, b);\n\n // takedown\n g.restore();\n\n this._dirty.clear();\n return this;\n};\n\nprototype.draw = function(ctx, scene, bounds) {\n var mark = marks[scene.marktype];\n if (scene.clip) clip(ctx, scene);\n mark.draw.call(this, ctx, scene, bounds);\n if (scene.clip) ctx.restore();\n};\n\nprototype.clear = function(x, y, w, h) {\n var g = this.context();\n g.clearRect(x, y, w, h);\n if (this._bgcolor != null) {\n g.fillStyle = this._bgcolor;\n g.fillRect(x, y, w, h);\n }\n};\n","import Handler from './Handler';\nimport {domFind} from './util/dom';\nimport {HrefEvent, TooltipShowEvent, TooltipHideEvent} from './util/events';\nimport {inherits} from 'vega-util';\n\nexport default function SVGHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n var h = this;\n h._hrefHandler = listener(h, function(evt, item) {\n if (item && item.href) h.handleHref(evt, item, item.href);\n });\n h._tooltipHandler = listener(h, function(evt, item) {\n h.handleTooltip(evt, item, evt.type !== TooltipHideEvent);\n });\n}\n\nvar prototype = inherits(SVGHandler, Handler);\n\nprototype.initialize = function(el, origin, obj) {\n var svg = this._svg;\n if (svg) {\n svg.removeEventListener(HrefEvent, this._hrefHandler);\n svg.removeEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.removeEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n this._svg = svg = el && domFind(el, 'svg');\n if (svg) {\n svg.addEventListener(HrefEvent, this._hrefHandler);\n svg.addEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.addEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n return Handler.prototype.initialize.call(this, el, origin, obj);\n};\n\nprototype.canvas = function() {\n return this._svg;\n};\n\n// wrap an event listener for the SVG DOM\nfunction listener(context, handler) {\n return function(evt) {\n var target = evt.target,\n item = target.__data__;\n evt.vegaType = evt.type;\n item = Array.isArray(item) ? item[0] : item;\n handler.call(context._obj, evt, item);\n };\n}\n\n// add an event handler\nprototype.on = function(type, handler) {\n var name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n\n if (i < 0) {\n var x = {\n type: type,\n handler: handler,\n listener: listener(this, handler)\n };\n\n (h[name] || (h[name] = [])).push(x);\n if (this._svg) {\n this._svg.addEventListener(name, x.listener);\n }\n }\n\n return this;\n};\n\n// remove an event handler\nprototype.off = function(type, handler) {\n var name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n\n if (i >= 0) {\n if (this._svg) {\n this._svg.removeEventListener(name, h[i].listener);\n }\n h.splice(i, 1);\n }\n\n return this;\n};\n","import {isFunction} from 'vega-util';\n\nexport default function(context, scene) {\n var clip = scene.clip;\n\n context.save();\n context.beginPath();\n\n if (isFunction(clip)) {\n clip(context);\n } else {\n var group = scene.group;\n context.rect(0, 0, group.width || 0, group.height || 0);\n }\n\n context.clip();\n}\n","// generate string for an opening xml tag\n// tag: the name of the xml tag\n// attr: hash of attribute name-value pairs to include\n// raw: additional raw string to include in tag markup\nexport function openTag(tag, attr, raw) {\n var s = '<' + tag, key, val;\n if (attr) {\n for (key in attr) {\n val = attr[key];\n if (val != null) {\n s += ' ' + key + '=\"' + val + '\"';\n }\n }\n }\n if (raw) s += ' ' + raw;\n return s + '>';\n}\n\n// generate string for closing xml tag\n// tag: the name of the xml tag\nexport function closeTag(tag) {\n return '';\n}\n","export default {\n 'version': '1.1',\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink'\n};","export var styles = {\n 'fill': 'fill',\n 'fillOpacity': 'fill-opacity',\n 'stroke': 'stroke',\n 'strokeOpacity': 'stroke-opacity',\n 'strokeWidth': 'stroke-width',\n 'strokeCap': 'stroke-linecap',\n 'strokeJoin': 'stroke-linejoin',\n 'strokeDash': 'stroke-dasharray',\n 'strokeDashOffset': 'stroke-dashoffset',\n 'strokeMiterLimit': 'stroke-miterlimit',\n 'opacity': 'opacity'\n};\n\nexport var styleProperties = Object.keys(styles);\n","import Renderer from './Renderer';\nimport marks from './marks/index';\nimport {domChild, domClear, domCreate, cssClass} from './util/dom';\nimport {openTag, closeTag} from './util/tags';\nimport {fontFamily, fontSize, textValue} from './util/text';\nimport {visit} from './util/visit';\nimport clip from './util/svg/clip';\nimport metadata from './util/svg/metadata';\nimport {styles, styleProperties} from './util/svg/styles';\nimport {inherits} from 'vega-util';\n\nvar ns = metadata.xmlns;\n\nexport default function SVGRenderer(loader) {\n Renderer.call(this, loader);\n this._dirtyID = 1;\n this._dirty = [];\n this._svg = null;\n this._root = null;\n this._defs = null;\n}\n\nvar prototype = inherits(SVGRenderer, Renderer);\nvar base = Renderer.prototype;\n\nprototype.initialize = function(el, width, height, padding) {\n if (el) {\n this._svg = domChild(el, 0, 'svg', ns);\n this._svg.setAttribute('class', 'marks');\n domClear(el, 1);\n // set the svg root group\n this._root = domChild(this._svg, 0, 'g', ns);\n domClear(this._svg, 1);\n }\n\n // create the svg definitions cache\n this._defs = {\n gradient: {},\n clipping: {}\n };\n\n // set background color if defined\n this.background(this._bgcolor);\n\n return base.initialize.call(this, el, width, height, padding);\n};\n\nprototype.background = function(bgcolor) {\n if (arguments.length && this._svg) {\n this._svg.style.setProperty('background-color', bgcolor);\n }\n return base.background.apply(this, arguments);\n};\n\nprototype.resize = function(width, height, origin, scaleFactor) {\n base.resize.call(this, width, height, origin, scaleFactor);\n\n if (this._svg) {\n this._svg.setAttribute('width', this._width * this._scale);\n this._svg.setAttribute('height', this._height * this._scale);\n this._svg.setAttribute('viewBox', '0 0 ' + this._width + ' ' + this._height);\n this._root.setAttribute('transform', 'translate(' + this._origin + ')');\n }\n\n this._dirty = [];\n\n return this;\n};\n\nprototype.canvas = function() {\n return this._svg;\n};\n\nprototype.svg = function() {\n if (!this._svg) return null;\n\n var attr = {\n class: 'marks',\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: '0 0 ' + this._width + ' ' + this._height\n };\n for (var key in metadata) {\n attr[key] = metadata[key];\n }\n\n var bg = !this._bgcolor ? ''\n : (openTag('rect', {\n width: this._width,\n height: this._height,\n style: 'fill: ' + this._bgcolor + ';'\n }) + closeTag('rect'));\n\n return openTag('svg', attr) + bg + this._svg.innerHTML + closeTag('svg');\n};\n\n\n// -- Render entry point --\n\nprototype._render = function(scene) {\n // perform spot updates and re-render markup\n if (this._dirtyCheck()) {\n if (this._dirtyAll) this._resetDefs();\n this.draw(this._root, scene);\n domClear(this._root, 1);\n }\n\n this.updateDefs();\n\n this._dirty = [];\n ++this._dirtyID;\n\n return this;\n};\n\n// -- Manage SVG definitions ('defs') block --\n\nprototype.updateDefs = function() {\n var svg = this._svg,\n defs = this._defs,\n el = defs.el,\n index = 0, id;\n\n for (id in defs.gradient) {\n if (!el) defs.el = (el = domChild(svg, 0, 'defs', ns));\n updateGradient(el, defs.gradient[id], index++);\n }\n\n for (id in defs.clipping) {\n if (!el) defs.el = (el = domChild(svg, 0, 'defs', ns));\n updateClipping(el, defs.clipping[id], index++);\n }\n\n // clean-up\n if (el) {\n if (index === 0) {\n svg.removeChild(el);\n defs.el = null;\n } else {\n domClear(el, index);\n }\n }\n};\n\nfunction updateGradient(el, grad, index) {\n var i, n, stop;\n\n el = domChild(el, index, 'linearGradient', ns);\n el.setAttribute('id', grad.id);\n el.setAttribute('x1', grad.x1);\n el.setAttribute('x2', grad.x2);\n el.setAttribute('y1', grad.y1);\n el.setAttribute('y2', grad.y2);\n\n for (i=0, n=grad.stops.length; i 1;\n}\n\n\n// -- Set attributes & styles on SVG elements ---\n\nvar element = null, // temp var for current SVG element\n values = null; // temp var for current values hash\n\n// Extra configuration for certain mark types\nvar mark_extras = {\n group: function(mdef, el, item) {\n values = el.__values__; // use parent's values hash\n\n element = el.childNodes[1];\n mdef.foreground(emit, item, this);\n\n element = el.childNodes[0];\n mdef.background(emit, item, this);\n\n var value = item.mark.interactive === false ? 'none' : null;\n if (value !== values.events) {\n element.style.setProperty('pointer-events', value);\n values.events = value;\n }\n },\n text: function(mdef, el, item) {\n var value;\n\n value = textValue(item);\n if (value !== values.text) {\n el.textContent = value;\n values.text = value;\n }\n\n setStyle(el, 'font-family', fontFamily(item));\n setStyle(el, 'font-size', fontSize(item) + 'px');\n setStyle(el, 'font-style', item.fontStyle);\n setStyle(el, 'font-variant', item.fontVariant);\n setStyle(el, 'font-weight', item.fontWeight);\n }\n};\n\nfunction setStyle(el, name, value) {\n if (value !== values[name]) {\n if (value == null) {\n el.style.removeProperty(name);\n } else {\n el.style.setProperty(name, value + '');\n }\n values[name] = value;\n }\n}\n\nprototype._update = function(mdef, el, item) {\n // set dom element and values cache\n // provides access to emit method\n element = el;\n values = el.__values__;\n\n // apply svg attributes\n mdef.attr(emit, item, this);\n\n // some marks need special treatment\n var extra = mark_extras[mdef.type];\n if (extra) extra.call(this, mdef, el, item);\n\n // apply svg css styles\n // note: element may be modified by 'extra' method\n this.style(element, item);\n};\n\nfunction emit(name, value, ns) {\n // early exit if value is unchanged\n if (value === values[name]) return;\n\n if (value != null) {\n // if value is provided, update DOM attribute\n if (ns) {\n element.setAttributeNS(ns, name, value);\n } else {\n element.setAttribute(name, value);\n }\n } else {\n // else remove DOM attribute\n if (ns) {\n element.removeAttributeNS(ns, name);\n } else {\n element.removeAttribute(name);\n }\n }\n\n // note current value for future comparison\n values[name] = value;\n}\n\nprototype.style = function(el, o) {\n if (o == null) return;\n var i, n, prop, name, value;\n\n for (i=0, n=styleProperties.length; i 0) ? openTag('defs') + defs + closeTag('defs') : '';\n};\n\nvar object;\n\nfunction emit(name, value, ns, prefixed) {\n object[prefixed || name] = value;\n}\n\nprototype.attributes = function(attr, item) {\n object = {};\n attr(emit, item, this);\n return object;\n};\n\nprototype.href = function(item) {\n var that = this,\n href = item.href,\n attr;\n\n if (href) {\n if (attr = that._hrefs && that._hrefs[href]) {\n return attr;\n } else {\n that.sanitizeURL(href).then(function(attr) {\n // rewrite to use xlink namespace\n // note that this will be deprecated in SVG 2.0\n attr['xlink:href'] = attr.href;\n attr.href = null;\n (that._hrefs || (that._hrefs = {}))[href] = attr;\n });\n }\n }\n return null;\n};\n\nprototype.mark = function(scene) {\n var renderer = this,\n mdef = marks[scene.marktype],\n tag = mdef.tag,\n defs = this._defs,\n str = '',\n style;\n\n if (tag !== 'g' && scene.interactive === false) {\n style = 'style=\"pointer-events: none;\"';\n }\n\n // render opening group tag\n str += openTag('g', {\n 'class': cssClass(scene),\n 'clip-path': scene.clip ? clip(renderer, scene, scene.group) : null\n }, style);\n\n // render contained elements\n function process(item) {\n var href = renderer.href(item);\n if (href) str += openTag('a', href);\n\n style = (tag !== 'g') ? applyStyles(item, scene, tag, defs) : null;\n str += openTag(tag, renderer.attributes(mdef.attr, item), style);\n\n if (tag === 'text') {\n str += escape_text(textValue(item));\n } else if (tag === 'g') {\n str += openTag('path', renderer.attributes(mdef.background, item),\n applyStyles(item, scene, 'bgrect', defs)) + closeTag('path');\n\n str += openTag('g', renderer.attributes(mdef.foreground, item))\n + renderer.markGroup(item)\n + closeTag('g');\n }\n\n str += closeTag(tag);\n if (href) str += closeTag('a');\n }\n\n if (mdef.nested) {\n if (scene.items && scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n\n // render closing group tag\n return str + closeTag('g');\n};\n\nprototype.markGroup = function(scene) {\n var renderer = this,\n str = '';\n\n visit(scene, function(item) {\n str += renderer.mark(item);\n });\n\n return str;\n};\n\nfunction applyStyles(o, mark, tag, defs) {\n if (o == null) return '';\n var i, n, prop, name, value, s = '';\n\n if (tag === 'bgrect' && mark.interactive === false) {\n s += 'pointer-events: none; ';\n }\n\n if (tag === 'text') {\n s += 'font-family: ' + fontFamily(o) + '; ';\n s += 'font-size: ' + fontSize(o) + 'px; ';\n if (o.fontStyle) s += 'font-style: ' + o.fontStyle + '; ';\n if (o.fontVariant) s += 'font-variant: ' + o.fontVariant + '; ';\n if (o.fontWeight) s += 'font-weight: ' + o.fontWeight + '; ';\n }\n\n for (i=0, n=styleProperties.length; i/g, '>');\n}\n","import CanvasHandler from './CanvasHandler';\nimport CanvasRenderer from './CanvasRenderer';\nimport SVGHandler from './SVGHandler';\nimport SVGRenderer from './SVGRenderer';\nimport SVGStringRenderer from './SVGStringRenderer';\n\nvar Canvas = 'canvas';\nvar PNG = 'png';\nvar SVG = 'svg';\nvar None = 'none';\n\nexport var RenderType = {\n Canvas: Canvas,\n PNG: PNG,\n SVG: SVG,\n None: None\n};\n\nvar modules = {};\n\nmodules[Canvas] = modules[PNG] = {\n renderer: CanvasRenderer,\n headless: CanvasRenderer,\n handler: CanvasHandler\n};\n\nmodules[SVG] = {\n renderer: SVGRenderer,\n headless: SVGStringRenderer,\n handler: SVGHandler\n};\n\nmodules[None] = {};\n\nexport function renderModule(name, _) {\n name = String(name || '').toLowerCase();\n if (arguments.length > 1) {\n modules[name] = _;\n return this;\n } else {\n return modules[name];\n }\n}\n","import Bounds from '../Bounds';\nimport boundContext from './boundContext';\nimport {isFunction} from 'vega-util';\n\nvar clipBounds = new Bounds();\n\nexport default function(mark) {\n var clip = mark.clip;\n\n if (isFunction(clip)) {\n clip(boundContext(clipBounds.clear()));\n } else if (clip) {\n clipBounds.set(0, 0, mark.group.width, mark.group.height);\n } else return;\n\n mark.bounds.intersect(clipBounds);\n}\n","import pathParse from '../path/parse';\nimport {isNumber, isObject} from 'vega-util';\n\nvar TOLERANCE = 1e-9;\n\nexport function sceneEqual(a, b, key) {\n return (a === b) ? true\n : (key === 'path') ? pathEqual(a, b)\n : (a instanceof Date && b instanceof Date) ? +a === +b\n : (isNumber(a) && isNumber(b)) ? Math.abs(a - b) <= TOLERANCE\n : (!a || !b || !isObject(a) && !isObject(b)) ? a == b\n : (a == null || b == null) ? false\n : objectEqual(a, b);\n}\n\nexport function pathEqual(a, b) {\n return sceneEqual(pathParse(a), pathParse(b));\n}\n\nfunction objectEqual(a, b) {\n var ka = Object.keys(a),\n kb = Object.keys(b),\n key, i;\n\n if (ka.length !== kb.length) return false;\n\n ka.sort();\n kb.sort();\n\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) return false;\n }\n\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!sceneEqual(a[key], b[key], key)) return false;\n }\n\n return typeof a === typeof b;\n}\n","import {Group, LegendRole} from './constants';\nimport {Transform} from 'vega-dataflow';\nimport {boundClip, Marks} from 'vega-scenegraph';\nimport {inherits} from 'vega-util';\n\n/**\n * Calculate bounding boxes for scenegraph items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - The scenegraph mark instance to bound.\n */\nexport default function Bound(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Bound, Transform);\n\nprototype.transform = function(_, pulse) {\n var view = pulse.dataflow,\n mark = _.mark,\n type = mark.marktype,\n entry = Marks[type],\n bound = entry.bound,\n markBounds = mark.bounds, rebound;\n\n if (entry.nested) {\n // multi-item marks have a single bounds instance\n if (mark.items.length) view.dirty(mark.items[0]);\n markBounds = boundItem(mark, bound);\n mark.items.forEach(function(item) {\n item.bounds.clear().union(markBounds);\n });\n }\n\n else if (type === Group || _.modified()) {\n // operator parameters modified -> re-bound all items\n // updates group bounds in response to modified group content\n pulse.visit(pulse.MOD, function(item) { view.dirty(item); });\n markBounds.clear();\n mark.items.forEach(function(item) {\n markBounds.union(boundItem(item, bound));\n });\n\n // force reflow for legends to propagate any layout changes\n // suppress other types to prevent overall layout jumpiness\n if (mark.role === LegendRole) pulse.reflow();\n }\n\n else {\n // incrementally update bounds, re-bound mark as needed\n rebound = pulse.changed(pulse.REM);\n\n pulse.visit(pulse.ADD, function(item) {\n markBounds.union(boundItem(item, bound));\n });\n\n pulse.visit(pulse.MOD, function(item) {\n rebound = rebound || markBounds.alignsWith(item.bounds);\n view.dirty(item);\n markBounds.union(boundItem(item, bound));\n });\n\n if (rebound) {\n markBounds.clear();\n mark.items.forEach(function(item) { markBounds.union(item.bounds); });\n }\n }\n\n // ensure mark bounds do not exceed any clipping region\n boundClip(mark);\n\n return pulse.modifies('bounds');\n};\n\nfunction boundItem(item, bound, opt) {\n return bound(item.bounds.clear(), item, opt);\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\nvar COUNTER_NAME = ':vega_identifier:';\n\n/**\n * Adds a unique identifier to all added tuples.\n * This transform creates a new signal that serves as an id counter.\n * As a result, the id counter is shared across all instances of this\n * transform, generating unique ids across multiple data streams. In\n * addition, this signal value can be included in a snapshot of the\n * dataflow state, enabling correct resumption of id allocation.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.as - The field name for the generated identifier.\n */\nexport default function Identifier(params) {\n Transform.call(this, 0, params);\n}\n\nIdentifier.Definition = {\n \"type\": \"Identifier\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"as\", \"type\": \"string\", \"required\": true }\n ]\n};\n\nvar prototype = inherits(Identifier, Transform);\n\nprototype.transform = function(_, pulse) {\n var counter = getCounter(pulse.dataflow),\n id = counter.value,\n as = _.as;\n\n pulse.visit(pulse.ADD, function(t) {\n if (!t[as]) t[as] = ++id;\n });\n\n counter.set(this.value = id);\n return pulse;\n};\n\nfunction getCounter(view) {\n var counter = view._signals[COUNTER_NAME];\n if (!counter) {\n view._signals[COUNTER_NAME] = (counter = view.add(0));\n }\n return counter;\n}\n","import {Group} from './constants';\nimport {Transform} from 'vega-dataflow';\nimport {Item, GroupItem} from 'vega-scenegraph';\nimport {inherits} from 'vega-util';\n\n/**\n * Bind scenegraph items to a scenegraph mark instance.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.markdef - The mark definition for creating the mark.\n * This is an object of legal scenegraph mark properties which *must* include\n * the 'marktype' property.\n */\nexport default function Mark(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Mark, Transform);\n\nprototype.transform = function(_, pulse) {\n var mark = this.value;\n\n // acquire mark on first invocation, bind context and group\n if (!mark) {\n mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup(_), _.index);\n mark.group.context = _.context;\n if (!_.context.group) _.context.group = mark.group;\n mark.source = this;\n mark.clip = _.clip;\n mark.interactive = _.interactive;\n this.value = mark;\n }\n\n // initialize entering items\n var Init = mark.marktype === Group ? GroupItem : Item;\n pulse.visit(pulse.ADD, function(item) { Init.call(item, mark); });\n\n // update clipping and/or interactive status\n if (_.modified('clip') || _.modified('interactive')) {\n mark.clip = _.clip;\n mark.interactive = !!_.interactive;\n mark.zdirty = true; // force scenegraph re-eval\n pulse.reflow();\n }\n\n // bind items array to scenegraph mark\n mark.items = pulse.source;\n return pulse;\n};\n\nfunction lookup(_) {\n var g = _.groups, p = _.parent;\n return g && g.size === 1 ? g.get(Object.keys(g.object)[0])\n : g && p ? g.lookup(p)\n : null;\n}\n","import {Top, Bottom} from './constants';\nimport {Transform} from 'vega-dataflow';\nimport {Bounds} from 'vega-scenegraph';\nimport {inherits, peek} from 'vega-util';\n\n/**\n * Analyze items for overlap, changing opacity to hide items with\n * overlapping bounding boxes. This transform will preserve at least\n * two items (e.g., first and last) even if overlap persists.\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting items.\n * @param {object} [params.method] - The overlap removal method to apply.\n * One of 'parity' (default, hide every other item until there is no\n * more overlap) or 'greedy' (sequentially scan and hide and items that\n * overlap with the last visible item).\n * @param {object} [params.boundScale] - A scale whose range should be used\n * to bound the items. Items exceeding the bounds of the scale range\n * will be treated as overlapping. If null or undefined, no bounds check\n * will be applied.\n * @param {object} [params.boundOrient] - The orientation of the scale\n * (top, bottom, left, or right) used to bound items. This parameter is\n * ignored if boundScale is null or undefined.\n * @param {object} [params.boundTolerance] - The tolerance in pixels for\n * bound inclusion testing (default 1). This specifies by how many pixels\n * an item's bounds may exceed the scale range bounds and not be culled.\n * @constructor\n */\nexport default function Overlap(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Overlap, Transform);\n\nvar methods = {\n parity: function(items) {\n return items.filter(function(item, i) {\n return i % 2 ? (item.opacity = 0) : 1;\n });\n },\n greedy: function(items) {\n var a;\n return items.filter(function(b, i) {\n if (!i || !intersect(a.bounds, b.bounds)) {\n a = b;\n return 1;\n } else {\n return b.opacity = 0;\n }\n });\n }\n};\n\n// compute bounding box intersection\n// allow 1 pixel of overlap tolerance\nfunction intersect(a, b) {\n return !(\n a.x2 - 1 < b.x1 ||\n a.x1 + 1 > b.x2 ||\n a.y2 - 1 < b.y1 ||\n a.y1 + 1 > b.y2\n );\n}\n\nfunction hasOverlap(items) {\n for (var i=1, n=items.length, a=items[0].bounds, b; i 1 && b.height() > 1;\n}\n\nfunction boundTest(scale, orient, tolerance) {\n var range = scale.range(),\n b = new Bounds();\n\n if (orient === Top || orient === Bottom) {\n b.set(range[0], -Infinity, range[1], +Infinity);\n } else {\n b.set(-Infinity, range[0], +Infinity, range[1]);\n }\n b.expand(tolerance || 1);\n\n return function(item) {\n return b.encloses(item.bounds);\n };\n}\n\n// reset all items to be fully opaque\nfunction reset(source) {\n source.forEach(function(item) { item.opacity = 1; });\n return source;\n}\n\n// add all tuples to mod, fork pulse if parameters were modified\n// fork prevents cross-stream tuple pollution (e.g., pulse from scale)\nfunction reflow(pulse, _) {\n return pulse.reflow(_.modified()).modifies('opacity');\n}\n\nprototype.transform = function(_, pulse) {\n var reduce = methods[_.method] || methods.parity,\n source = pulse.materialize(pulse.SOURCE).source,\n items, test;\n\n if (!source) return;\n\n if (!_.method) {\n // early exit if method is falsy\n if (_.modified('method')) {\n reset(source);\n pulse = reflow(pulse, _);\n }\n return pulse;\n }\n\n if (_.sort) {\n source = source.slice().sort(_.sort);\n }\n\n if (_.method === 'greedy') {\n source = source.filter(hasBounds);\n }\n\n items = reset(source);\n pulse = reflow(pulse, _);\n\n if (items.length >= 3 && hasOverlap(items)) {\n do {\n items = reduce(items);\n } while (items.length >= 3 && hasOverlap(items));\n\n if (items.length < 3 && !peek(source).opacity) {\n if (items.length > 1) peek(items).opacity = 0;\n peek(source).opacity = 1;\n }\n }\n\n if (_.boundScale && _.boundTolerance >= 0) {\n test = boundTest(_.boundScale, _.boundOrient, +_.boundTolerance);\n source.forEach(function(item) {\n if (!test(item)) item.opacity = 0;\n })\n }\n\n return pulse;\n};\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Queue modified scenegraph items for rendering.\n * @constructor\n */\nexport default function Render(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Render, Transform);\n\nprototype.transform = function(_, pulse) {\n var view = pulse.dataflow;\n\n pulse.visit(pulse.ALL, function(item) { view.dirty(item); });\n\n // set z-index dirty flag as needed\n if (pulse.fields && pulse.fields['zindex']) {\n var item = pulse.source && pulse.source[0];\n if (item) item.mark.zdirty = true;\n }\n};\n","import {\n All, Each, Flush, Column, Row,\n Group, AxisRole, LegendRole,\n RowHeader, RowFooter, RowTitle,\n ColHeader, ColFooter, ColTitle\n} from './constants';\nimport {isObject} from 'vega-util';\nimport {Bounds} from 'vega-scenegraph';\n\nfunction extractGroups(group) {\n var groups = group.items,\n n = groups.length,\n i = 0, mark, items;\n\n var views = {\n marks: [],\n rowheaders: [],\n rowfooters: [],\n colheaders: [],\n colfooters: [],\n rowtitle: null,\n coltitle: null\n };\n\n // layout axes, gather legends, collect bounds\n for (; i 1 && alignCol) {\n for (i=0; i 0) {\n g.x += (px = x / 2);\n g.bounds.translate(px, 0);\n }\n }\n }\n\n // perform vertical centering\n if (get(opt.center, Row) && ncols !== 1 && alignRow) {\n for (i=0; i 0) {\n g.y += (py = y / 2);\n g.bounds.translate(0, py);\n }\n }\n }\n\n // update mark bounds, mark dirty\n for (i=0; i limit) {\n view.warn('Grid headers exceed limit: ' + limit);\n headers = headers.slice(0, limit);\n }\n\n // apply offset\n init += offset;\n\n // clear mark bounds for all headers\n for (j=0, m=headers.length; j= 0 && (g = groups[k]) == null; k-=back);\n\n // assign coordinates and update bounds\n if (isX) {\n x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width());\n y = init;\n } else {\n x = init;\n y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height());\n }\n b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0)));\n h.x = x;\n h.y = y;\n view.dirty(h);\n\n // update current edge of layout bounds\n edge = agg(edge, b[bf]);\n }\n\n return edge;\n}\n\nfunction layoutTitle(view, g, offset, isX, bounds, band) {\n if (!g) return;\n view.dirty(g);\n\n // compute title coordinates\n var x = offset, y = offset;\n isX\n ? (x = Math.round(bounds.x1 + band * bounds.width()))\n : (y = Math.round(bounds.y1 + band * bounds.height()));\n\n // assign coordinates and update bounds\n g.bounds.translate(x - (g.x || 0), y - (g.y || 0));\n g.mark.bounds.clear().union(g.bounds);\n g.x = x;\n g.y = y;\n\n // queue title for redraw\n view.dirty(g);\n}\n","import {\n Group, AxisRole, LegendRole, TitleRole, FrameRole, ScopeRole,\n RowHeader, RowFooter, RowTitle, ColHeader, ColFooter, ColTitle,\n Top, Bottom, Left, Right, Start, End,\n TopLeft, TopRight, BottomLeft, BottomRight,\n Fit, FitX, FitY, Pad, None, Padding, Symbols\n} from './constants';\nimport {gridLayout} from './gridLayout';\nimport {Transform} from 'vega-dataflow';\nimport {Bounds, boundStroke} from 'vega-scenegraph';\nimport {inherits} from 'vega-util';\n\nvar AxisOffset = 0.5,\n tempBounds = new Bounds();\n\n/**\n * Layout view elements such as axes and legends.\n * Also performs size adjustments.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - Scenegraph mark of groups to layout.\n */\nexport default function ViewLayout(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(ViewLayout, Transform);\n\nprototype.transform = function(_, pulse) {\n // TODO incremental update, output?\n var view = pulse.dataflow;\n _.mark.items.forEach(function(group) {\n if (_.layout) gridLayout(view, group, _.layout);\n layoutGroup(view, group, _);\n });\n if (_.modified()) pulse.reflow();\n return pulse;\n};\n\nfunction layoutGroup(view, group, _) {\n var items = group.items,\n width = Math.max(0, group.width || 0),\n height = Math.max(0, group.height || 0),\n viewBounds = new Bounds().set(0, 0, width, height),\n xBounds = viewBounds.clone(),\n yBounds = viewBounds.clone(),\n legends = [], title,\n mark, flow, b, i, n;\n\n // layout axes, gather legends, collect bounds\n for (i=0, n=items.length; i -1) bounds.union(item.items[i].bounds);\n if ((i=indices[1]) > -1) bounds.union(item.items[i].bounds);\n\n // position axis group and title\n switch (orient) {\n case Top:\n x = position || 0;\n y = -offset;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1));\n if (title) s = axisTitleLayout(title, s, titlePadding, 0, -1, bounds);\n bounds.add(0, -s).add(range, 0);\n break;\n case Left:\n x = -offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1));\n if (title) s = axisTitleLayout(title, s, titlePadding, 1, -1, bounds);\n bounds.add(-s, 0).add(0, range);\n break;\n case Right:\n x = width + offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.x2));\n if (title) s = axisTitleLayout(title, s, titlePadding, 1, 1, bounds);\n bounds.add(0, 0).add(s, range);\n break;\n case Bottom:\n x = position || 0;\n y = height + offset;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.y2));\n if (title) s = axisTitleLayout(title, s, titlePadding, 0, 1, bounds);\n bounds.add(0, 0).add(range, s);\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n // update bounds\n boundStroke(bounds.translate(x, y), item);\n\n if (set(item, 'x', x + AxisOffset) | set(item, 'y', y + AxisOffset)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n\n return item.mark.bounds.clear().union(bounds);\n}\n\nfunction axisTitleLayout(title, offset, pad, isYAxis, sign, bounds) {\n var b = title.bounds, dx = 0, dy = 0;\n\n if (title.auto) {\n offset += pad;\n\n isYAxis\n ? dx = (title.x || 0) - (title.x = sign * offset)\n : dy = (title.y || 0) - (title.y = sign * offset);\n\n b.translate(-dx, -dy);\n title.mark.bounds.set(b.x1, b.y1, b.x2, b.y2);\n\n if (isYAxis) {\n bounds.add(0, b.y1).add(0, b.y2);\n offset += b.width();\n } else {\n bounds.add(b.x1, 0).add(b.x2, 0);\n offset += b.height();\n }\n } else {\n bounds.union(b);\n }\n\n return offset;\n}\n\nfunction titleLayout(view, title, width, height, viewBounds) {\n var item = title.items[0],\n orient = item.orient,\n frame = item.frame,\n anchor = item.anchor,\n offset = item.offset,\n bounds = item.bounds,\n vertical = (orient === Left || orient === Right),\n start = 0,\n end = vertical ? height : width,\n x = 0, y = 0, pos;\n\n if (frame !== Group) {\n orient === Left ? (start = viewBounds.y2, end = viewBounds.y1)\n : orient === Right ? (start = viewBounds.y1, end = viewBounds.y2)\n : (start = viewBounds.x1, end = viewBounds.x2);\n } else if (orient === Left) {\n start = height, end = 0;\n }\n\n pos = (anchor === Start) ? start\n : (anchor === End) ? end\n : (start + end) / 2;\n\n tempBounds.clear().union(bounds);\n\n // position title text\n switch (orient) {\n case Top:\n x = pos;\n y = viewBounds.y1 - offset;\n break;\n case Left:\n x = viewBounds.x1 - offset;\n y = pos;\n break;\n case Right:\n x = viewBounds.x2 + offset;\n y = pos;\n break;\n case Bottom:\n x = pos;\n y = viewBounds.y2 + offset;\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n bounds.translate(x - item.x, y - item.y);\n if (set(item, 'x', x) | set(item, 'y', y)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n\n // update bounds\n return title.bounds.clear().union(bounds);\n}\n\nfunction legendPreprocess(view, legends) {\n return legends.reduce(function(w, legend) {\n var item = legend.items[0];\n\n // adjust entry to accommodate padding and title\n legendGroupLayout(view, item, item.items[0].items[0]);\n\n if (item.datum.orient === Left) {\n var b = tempBounds.clear();\n item.items.forEach(function(_) { b.union(_.bounds); });\n w = Math.max(w, Math.ceil(b.width() + 2 * item.padding - 1));\n }\n\n return w;\n }, 0);\n}\n\nfunction legendGroupLayout(view, item, entry) {\n var x = item.padding - entry.x,\n y = item.padding - entry.y;\n\n if (item.datum.title) {\n var title = item.items[1].items[0];\n y += item.titlePadding + title.fontSize;\n }\n\n if (x || y) {\n entry.x += x;\n entry.y += y;\n entry.bounds.translate(x, y);\n entry.mark.bounds.translate(x, y);\n view.dirty(entry);\n }\n}\n\nfunction legendLayout(view, legend, flow, xBounds, yBounds, width, height) {\n var item = legend.items[0],\n datum = item.datum,\n orient = datum.orient,\n offset = item.offset,\n bounds = item.bounds,\n x = 0,\n y = 0,\n w, h, axisBounds;\n\n if (orient === Top || orient === Bottom) {\n axisBounds = yBounds,\n x = flow[orient];\n } else if (orient === Left || orient === Right) {\n axisBounds = xBounds;\n y = flow[orient];\n }\n\n tempBounds.clear().union(bounds);\n bounds.clear();\n\n // aggregate bounds to determine size\n // shave off 1 pixel because it looks better...\n item.items.forEach(function(_) { bounds.union(_.bounds); });\n w = 2 * item.padding - 1;\n h = 2 * item.padding - 1;\n if (!bounds.empty()) {\n w = Math.ceil(bounds.width() + w);\n h = Math.ceil(bounds.height() + h);\n }\n\n if (datum.type === Symbols) {\n legendEntryLayout(item.items[0].items[0].items[0].items);\n }\n\n switch (orient) {\n case Left:\n x -= flow.leftWidth + offset - Math.floor(axisBounds.x1);\n flow.left += h + flow.margin;\n break;\n case Right:\n x += offset + Math.ceil(axisBounds.x2);\n flow.right += h + flow.margin;\n break;\n case Top:\n y -= h + offset - Math.floor(axisBounds.y1);\n flow.top += w + flow.margin;\n break;\n case Bottom:\n y += offset + Math.ceil(axisBounds.y2);\n flow.bottom += w + flow.margin;\n break;\n case TopLeft:\n x += offset;\n y += offset;\n break;\n case TopRight:\n x += width - w - offset;\n y += offset;\n break;\n case BottomLeft:\n x += offset;\n y += height - h - offset;\n break;\n case BottomRight:\n x += width - w - offset;\n y += height - h - offset;\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n // update bounds\n boundStroke(bounds.set(x, y, x + w, y + h), item);\n\n // update legend layout\n if (set(item, 'x', x) | set(item, 'width', w) |\n set(item, 'y', y) | set(item, 'height', h)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n\n return item.mark.bounds.clear().union(bounds);\n}\n\nfunction legendEntryLayout(entries) {\n // get max widths for each column\n var widths = entries.reduce(function(w, g) {\n w[g.column] = Math.max(g.bounds.x2 - g.x, w[g.column] || 0);\n return w;\n }, {});\n\n // set dimensions of legend entry groups\n entries.forEach(function(g) {\n g.width = widths[g.column];\n g.height = g.bounds.y2 - g.y;\n });\n}\n\nfunction viewSizeLayout(view, group, viewBounds, _) {\n var auto = _.autosize || {},\n type = auto.type,\n viewWidth = view._width,\n viewHeight = view._height,\n padding = view.padding();\n\n if (view._autosize < 1 || !type) return;\n\n var width = Math.max(0, group.width || 0),\n left = Math.max(0, Math.ceil(-viewBounds.x1)),\n right = Math.max(0, Math.ceil(viewBounds.x2 - width)),\n height = Math.max(0, group.height || 0),\n top = Math.max(0, Math.ceil(-viewBounds.y1)),\n bottom = Math.max(0, Math.ceil(viewBounds.y2 - height));\n\n if (auto.contains === Padding) {\n viewWidth -= padding.left + padding.right;\n viewHeight -= padding.top + padding.bottom;\n }\n\n if (type === None) {\n left = 0;\n top = 0;\n width = viewWidth;\n height = viewHeight;\n }\n\n else if (type === Fit) {\n width = Math.max(0, viewWidth - left - right);\n height = Math.max(0, viewHeight - top - bottom);\n }\n\n else if (type === FitX) {\n width = Math.max(0, viewWidth - left - right);\n viewHeight = height + top + bottom;\n }\n\n else if (type === FitY) {\n viewWidth = width + left + right;\n height = Math.max(0, viewHeight - top - bottom);\n }\n\n else if (type === Pad) {\n viewWidth = width + left + right;\n viewHeight = height + top + bottom;\n }\n\n view._resizeView(\n viewWidth, viewHeight,\n width, height,\n [left, top],\n auto.resize\n );\n}\n","export var Log = 'log';\nexport var Pow = 'pow';\nexport var Utc = 'utc';\nexport var Sqrt = 'sqrt';\nexport var Band = 'band';\nexport var Time = 'time';\nexport var Point = 'point';\nexport var Linear = 'linear';\nexport var Ordinal = 'ordinal';\nexport var Quantile = 'quantile';\nexport var Quantize = 'quantize';\nexport var Threshold = 'threshold';\nexport var BinLinear = 'bin-linear';\nexport var BinOrdinal = 'bin-ordinal';\nexport var Sequential = 'sequential';\n","export default function(count, paddingInner, paddingOuter) {\n var space = count - paddingInner + paddingOuter * 2;\n return count ? (space > 0 ? space : 1) : 0;\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.interpolator(domain); break;\n default: this.interpolator(interpolator).domain(domain); break;\n }\n return this;\n}\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\nimport {initRange} from \"./init\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal() {\n var index = map(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(domain) {\n var a = domain[0], b = domain[domain.length - 1], t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), clamp === identity || (clamp = clamper(domain)), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? clamper(domain) : identity, scale) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous(transform, untransform) {\n return transformer()(transform, untransform);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": formatDecimal,\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"],\n minus: \"-\"\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(identity, identity);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport nice from \"./nice\";\nimport {copy, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport function loggish(transform) {\n var scale = transform(transformLog, transformExp),\n domain = scale.domain,\n base = 10,\n logs,\n pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, log()).base(scale.base());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {linearish} from \"./linear\";\nimport {copy, identity, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(identity, identity),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return initRange.apply(calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import bandSpace from './bandSpace';\nimport {range as sequence, bisectRight} from 'd3-array';\nimport {scaleOrdinal as ordinal} from 'd3-scale';\n\nexport function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse],\n space = bandSpace(n, paddingInner, paddingOuter);\n\n step = (stop - start) / (space || 1);\n if (round) {\n step = Math.floor(step);\n }\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) {\n start = Math.round(start);\n bandwidth = Math.round(bandwidth);\n }\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n if (arguments.length) {\n domain(_);\n return rescale();\n } else {\n return domain();\n }\n };\n\n scale.range = function(_) {\n if (arguments.length) {\n range = [+_[0], +_[1]];\n return rescale();\n } else {\n return range.slice();\n }\n };\n\n scale.rangeRound = function(_) {\n range = [+_[0], +_[1]];\n round = true;\n return rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n if (arguments.length) {\n round = !!_;\n return rescale();\n } else {\n return round;\n }\n };\n\n scale.padding = function(_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n paddingInner = paddingOuter;\n return rescale();\n } else {\n return paddingInner;\n }\n };\n\n scale.paddingInner = function(_) {\n if (arguments.length) {\n paddingInner = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingInner;\n }\n };\n\n scale.paddingOuter = function(_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingOuter;\n }\n };\n\n scale.align = function(_) {\n if (arguments.length) {\n align = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return align;\n }\n };\n\n scale.invertRange = function(_) {\n // bail if range has null or undefined values\n if (_[0] == null || _[1] == null) return;\n\n var lo = +_[0],\n hi = +_[1],\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t;\n\n // bail if either range endpoint is invalid\n if (lo !== lo || hi !== hi) return;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n if (hi < values[0] || lo > range[1-reverse]) return;\n\n // binary search to index into scale range\n a = Math.max(0, bisectRight(values, lo) - 1);\n b = lo===hi ? a : bisectRight(values, hi) - 1;\n\n // increment index a if lo is within padding gap\n if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) {\n // map + swap\n t = a;\n a = n - b;\n b = n - t;\n }\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function(_) {\n var value = scale.invertRange([_, _]);\n return value ? value[0] : value;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n","import {bisect} from 'd3-array';\nimport {scaleLinear} from 'd3-scale';\nimport {peek} from 'vega-util';\n\nvar map = Array.prototype.map,\n slice = Array.prototype.slice;\n\nfunction numbers(_) {\n return map.call(_, function(x) { return +x; });\n}\n\nexport function binLinear() {\n var linear = scaleLinear(),\n domain = [];\n\n function scale(x) {\n return linear(x);\n }\n\n function setDomain(_) {\n domain = numbers(_);\n linear.domain([domain[0], peek(domain)]);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (setDomain(_), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (linear.range(_), scale) : linear.range();\n };\n\n scale.rangeRound = function(_) {\n return arguments.length ? (linear.rangeRound(_), scale) : linear.rangeRound();\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (linear.interpolate(_), scale) : linear.interpolate();\n };\n\n scale.invert = function(_) {\n return linear.invert(_);\n };\n\n scale.ticks = function(count) {\n var n = domain.length,\n stride = ~~(n / (count || n));\n\n return stride < 2\n ? scale.domain()\n : domain.filter(function(x, i) { return !(i % stride); });\n };\n\n scale.tickFormat = function() {\n return linear.tickFormat.apply(linear, arguments);\n };\n\n scale.copy = function() {\n return binLinear().domain(scale.domain()).range(scale.range());\n };\n\n return scale;\n}\n\nexport function binOrdinal() {\n var domain = [],\n range = [];\n\n function scale(x) {\n return x == null || x !== x\n ? undefined\n : range[(bisect(domain, x) - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (arguments.length) {\n domain = numbers(_);\n return scale;\n } else {\n return domain.slice();\n }\n };\n\n scale.range = function(_) {\n if (arguments.length) {\n range = slice.call(_);\n return scale;\n } else {\n return range.slice();\n }\n };\n\n // Addresses #1395, refine if/when d3-scale tickFormat is exposed\n scale.tickFormat = function() {\n var linear = scaleLinear().domain([domain[0], peek(domain)]);\n return linear.tickFormat.apply(linear, arguments);\n };\n\n scale.copy = function() {\n return binOrdinal().domain(scale.domain()).range(scale.range());\n };\n\n return scale;\n}\n","import invertRange from './invertRange';\nimport invertRangeExtent from './invertRangeExtent';\nimport {\n band as scaleBand,\n point as scalePoint\n} from './scaleBand';\nimport {\n binLinear as scaleBinLinear,\n binOrdinal as scaleBinOrdinal\n} from './scaleBin';\nimport scaleSequential from './scaleSequential';\n\nimport * as $ from 'd3-scale';\n\n/**\n * Augment scales with their type and needed inverse methods.\n */\nfunction create(type, constructor) {\n return function scale() {\n var s = constructor();\n\n if (!s.invertRange) {\n s.invertRange = s.invert ? invertRange(s)\n : s.invertExtent ? invertRangeExtent(s)\n : undefined;\n }\n\n s.type = type;\n return s;\n };\n}\n\nexport default function scale(type, scale) {\n if (arguments.length > 1) {\n scales[type] = create(type, scale);\n return this;\n } else {\n return scales.hasOwnProperty(type) ? scales[type] : undefined;\n }\n}\n\nvar scales = {\n // base scale types\n identity: $.scaleIdentity,\n linear: $.scaleLinear,\n log: $.scaleLog,\n ordinal: $.scaleOrdinal,\n pow: $.scalePow,\n sqrt: $.scaleSqrt,\n quantile: $.scaleQuantile,\n quantize: $.scaleQuantize,\n threshold: $.scaleThreshold,\n time: $.scaleTime,\n utc: $.scaleUtc,\n\n // extended scale types\n band: scaleBand,\n point: scalePoint,\n sequential: scaleSequential,\n 'bin-linear': scaleBinLinear,\n 'bin-ordinal': scaleBinOrdinal\n};\n\nfor (var key in scales) {\n scale(key, scales[key]);\n}\n","export default function(scale) {\n return function(_) {\n var lo = _[0],\n hi = _[1],\n t;\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n return [\n scale.invert(lo),\n scale.invert(hi)\n ];\n }\n}\n","export default function(scale) {\n return function(_) {\n var range = scale.range(),\n lo = _[0],\n hi = _[1],\n min = -1, max, t, i, n;\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n for (i=0, n=range.length; i= lo && range[i] <= hi) {\n if (min < 0) min = i;\n max = i;\n }\n }\n\n if (min < 0) return undefined;\n\n lo = scale.invertExtent(range[min]);\n hi = scale.invertExtent(range[max]);\n\n return [\n lo[0] === undefined ? lo[1] : lo[0],\n hi[1] === undefined ? hi[0] : hi[1]\n ];\n }\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? map.call(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {initRange} from \"./init\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\nimport {initRange} from \"./init\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {initRange} from \"./init\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {calendar} from \"./time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond} from \"d3-time\";\nimport {initRange} from \"./init\";\n\nexport default function() {\n return initRange.apply(calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {peek} from 'vega-util';\nimport {scaleLinear} from 'd3-scale';\n\nexport default function sequential(interpolator) {\n var linear = scaleLinear(),\n x0 = 0,\n dx = 1,\n clamp = false;\n\n function update() {\n var domain = linear.domain();\n x0 = domain[0];\n dx = peek(domain) - x0;\n }\n\n function scale(x) {\n var t = (x - x0) / dx;\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.clamp = function(_) {\n if (arguments.length) {\n clamp = !!_;\n return scale;\n } else {\n return clamp;\n }\n };\n\n scale.domain = function(_) {\n return arguments.length ? (linear.domain(_), update(), scale) : linear.domain();\n };\n\n scale.interpolator = function(_) {\n if (arguments.length) {\n interpolator = _;\n return scale;\n } else {\n return interpolator;\n }\n };\n\n scale.copy = function() {\n return sequential().domain(linear.domain()).clamp(clamp).interpolator(interpolator);\n };\n\n scale.ticks = function(count) {\n return linear.ticks(count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return linear.tickFormat(count, specifier);\n };\n\n scale.nice = function(count) {\n return linear.nice(count), update(), scale;\n };\n\n return scale;\n}\n","export default function(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n","import {hue} from \"./color.js\";\n\nexport default function(a, b) {\n var i = hue(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return hcl2lab(this).rgb();\n }\n}));\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n a = color(start.a, end.a),\n b = color(start.b, end.b),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","import {constant, peek} from 'vega-util';\nimport * as $ from 'd3-interpolate';\n\nexport function interpolateRange(interpolator, range) {\n var start = range[0],\n span = peek(range) - start;\n return function(i) { return interpolator(start + i * span); };\n}\n\nexport function scaleFraction(scale, min, max) {\n var delta = max - min;\n return !delta || !isFinite(delta) ? constant(0)\n : scale.type === 'linear' || scale.type === 'sequential'\n ? function(_) { return (_ - min) / delta; }\n : scale.copy().domain([min, max]).range([0, 1]).interpolate(lerp);\n}\n\nfunction lerp(a, b) {\n var span = b - a;\n return function(i) { return a + i * span; }\n}\n\nexport function interpolate(type, gamma) {\n var interp = $[method(type)];\n return (gamma != null && interp && interp.gamma)\n ? interp.gamma(gamma)\n : interp;\n}\n\nfunction method(type) {\n return 'interpolate' + type.toLowerCase()\n .split('-')\n .map(function(s) { return s[0].toUpperCase() + s.slice(1); })\n .join('');\n}\n","function colors(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n\nexport var category20 = colors(\n '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5'\n);\n\nexport var category20b = colors(\n '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6'\n);\n\nexport var category20c = colors(\n '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9'\n);\n\nexport var tableau10 = colors(\n '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac'\n);\n\nexport var tableau20 = colors(\n '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5'\n);\n\nexport var blueOrange = new Array(3).concat(\n \"67a9cff7f7f7f1a340\",\n \"0571b092c5defdb863e66101\",\n \"0571b092c5def7f7f7fdb863e66101\",\n \"2166ac67a9cfd1e5f0fee0b6f1a340b35806\",\n \"2166ac67a9cfd1e5f0f7f7f7fee0b6f1a340b35806\",\n \"2166ac4393c392c5ded1e5f0fee0b6fdb863e08214b35806\",\n \"2166ac4393c392c5ded1e5f0f7f7f7fee0b6fdb863e08214b35806\",\n \"0530612166ac4393c392c5ded1e5f0fee0b6fdb863e08214b358067f3b08\",\n \"0530612166ac4393c392c5ded1e5f0f7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n + \")\";\n}\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n + \")\";\n}\n","import {\n category20, category20b, category20c,\n tableau10, tableau20,\n blueOrange\n} from './palettes';\nimport * as _ from 'd3-scale-chromatic';\nimport {interpolateRgbBasis} from 'd3-interpolate';\nimport {peek} from 'vega-util';\n\nvar discretized = {\n blueorange: blueOrange\n};\n\nvar schemes = {\n // d3 categorical palettes\n category10: _.schemeCategory10,\n accent: _.schemeAccent,\n dark2: _.schemeDark2,\n paired: _.schemePaired,\n pastel1: _.schemePastel1,\n pastel2: _.schemePastel2,\n set1: _.schemeSet1,\n set2: _.schemeSet2,\n set3: _.schemeSet3,\n\n // additional categorical palettes\n category20: category20,\n category20b: category20b,\n category20c: category20c,\n tableau10: tableau10,\n tableau20: tableau20,\n\n // sequential multi-hue interpolators\n viridis: _.interpolateViridis,\n magma: _.interpolateMagma,\n inferno: _.interpolateInferno,\n plasma: _.interpolatePlasma,\n\n // cyclic interpolators\n rainbow: _.interpolateRainbow,\n sinebow: _.interpolateSinebow,\n\n // extended interpolators\n blueorange: interpolateRgbBasis(peek(blueOrange))\n};\n\nfunction add(name, suffix) {\n schemes[name] = _['interpolate' + suffix];\n discretized[name] = _['scheme' + suffix];\n}\n\n// sequential single-hue\nadd('blues', 'Blues');\nadd('greens', 'Greens');\nadd('greys', 'Greys');\nadd('purples', 'Purples');\nadd('reds', 'Reds');\nadd('oranges', 'Oranges');\n\n// diverging\nadd('brownbluegreen', 'BrBG');\nadd('purplegreen', 'PRGn');\nadd('pinkyellowgreen', 'PiYG');\nadd('purpleorange', 'PuOr');\nadd('redblue', 'RdBu');\nadd('redgrey', 'RdGy');\nadd('redyellowblue', 'RdYlBu');\nadd('redyellowgreen', 'RdYlGn');\nadd('spectral', 'Spectral');\n\n// sequential multi-hue\nadd('bluegreen', 'BuGn');\nadd('bluepurple', 'BuPu');\nadd('greenblue', 'GnBu');\nadd('orangered', 'OrRd');\nadd('purplebluegreen', 'PuBuGn');\nadd('purpleblue', 'PuBu');\nadd('purplered', 'PuRd');\nadd('redpurple', 'RdPu');\nadd('yellowgreenblue', 'YlGnBu');\nadd('yellowgreen', 'YlGn');\nadd('yelloworangebrown', 'YlOrBr');\nadd('yelloworangered', 'YlOrRd');\n\nexport function scheme(name, scheme) {\n if (arguments.length > 1) {\n schemes[name] = scheme;\n return this;\n }\n\n var part = name.split('-');\n name = part[0];\n part = +part[1] + 1;\n\n return part && discretized.hasOwnProperty(name) ? discretized[name][part-1]\n : !part && schemes.hasOwnProperty(name) ? schemes[name]\n : undefined;\n}\n\nexport function schemeDiscretized(name, schemeArray, interpolator) {\n if (arguments.length > 1) {\n discretized[name] = schemeArray;\n schemes[name] = interpolator || interpolateRgbBasis(peek(schemeArray));\n return this;\n }\n\n return discretized.hasOwnProperty(name)\n ? discretized[name]\n : undefined;\n}\n","import {\n timeMillisecond, utcMillisecond,\n timeSecond, utcSecond,\n timeMinute, utcMinute,\n timeHour, utcHour,\n timeDay, utcDay,\n timeWeek, utcWeek,\n timeMonth, utcMonth,\n timeYear, utcYear\n} from 'd3-time';\n\nvar time = {\n millisecond: timeMillisecond,\n second: timeSecond,\n minute: timeMinute,\n hour: timeHour,\n day: timeDay,\n week: timeWeek,\n month: timeMonth,\n year: timeYear\n};\n\nvar utc = {\n millisecond: utcMillisecond,\n second: utcSecond,\n minute: utcMinute,\n hour: utcHour,\n day: utcDay,\n week: utcWeek,\n month: utcMonth,\n year: utcYear\n}\n\nexport function timeInterval(name) {\n return time.hasOwnProperty(name) && time[name];\n}\n\nexport function utcInterval(name) {\n return utc.hasOwnProperty(name) && utc[name];\n}\n","import {Log} from './scale-types';\nimport {timeInterval, utcInterval} from 'vega-scale';\nimport {error, isObject, isString, peek} from 'vega-util';\nimport {\n format as numberFormat,\n formatSpecifier\n} from 'd3-format';\n\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @return {*} - The tick count or interval function.\n */\nexport function tickCount(scale, count) {\n var step;\n\n if (isObject(count)) {\n step = count.step;\n count = count.interval;\n }\n\n if (isString(count)) {\n count = scale.type === 'time' ? timeInterval(count)\n : scale.type === 'utc' ? utcInterval(count)\n : error('Only time and utc scales accept interval strings.');\n if (step) count = count.every(step);\n }\n\n return count;\n}\n\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\nexport function validTicks(scale, ticks, count) {\n var range = scale.range(),\n lo = range[0],\n hi = peek(range);\n if (lo > hi) {\n range = hi;\n hi = lo;\n lo = range;\n }\n\n ticks = ticks.filter(function(v) {\n v = scale(v);\n return !(v < lo || v > hi)\n });\n\n if (count > 0 && ticks.length > 1) {\n var endpoints = [ticks[0], peek(ticks)];\n while (ticks.length > count && ticks.length >= 3) {\n ticks = ticks.filter(function(_, i) { return !(i % 2); });\n }\n if (ticks.length < 3) {\n ticks = endpoints;\n }\n }\n\n return ticks;\n}\n\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\nexport function tickValues(scale, count) {\n return scale.ticks ? scale.ticks(count) : scale.domain();\n}\n\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3 4.0\n * specifier string (see https://github.com/d3/d3-format#formatSpecifier).\n * @return {function(*):string} - The generated label formatter.\n */\nexport function tickFormat(scale, count, specifier) {\n var format = scale.tickFormat ? scale.tickFormat(count, specifier)\n : specifier ? numberFormat(specifier)\n : String;\n\n return (scale.type === Log)\n ? filter(format, variablePrecision(specifier))\n : format;\n}\n\nfunction filter(sourceFormat, targetFormat) {\n return function(_) {\n return sourceFormat(_) ? targetFormat(_) : '';\n };\n}\n\nfunction variablePrecision(specifier) {\n var s = formatSpecifier(specifier || ',');\n\n if (s.precision == null) {\n s.precision = 12;\n switch (s.type) {\n case '%': s.precision -= 2; break;\n case 'e': s.precision -= 1; break;\n }\n return trimZeroes(\n numberFormat(s), // number format\n numberFormat('.1f')(1)[1] // decimal point character\n );\n } else {\n return numberFormat(s);\n }\n}\n\nfunction trimZeroes(format, decimalChar) {\n return function(x) {\n var str = format(x),\n dec = str.indexOf(decimalChar),\n idx, end;\n\n if (dec < 0) return str;\n\n idx = rightmostDigit(str, dec);\n end = idx < str.length ? str.slice(idx) : '';\n while (--idx > dec) if (str[idx] !== '0') { ++idx; break; }\n\n return str.slice(0, idx) + end;\n };\n}\n\nfunction rightmostDigit(str, dec) {\n var i = str.lastIndexOf('e'), c;\n if (i > 0) return i;\n for (i=str.length; --i > dec;) {\n c = str.charCodeAt(i);\n if (c >= 48 && c <= 57) return i + 1; // is digit\n }\n}\n","import {tickCount, tickFormat, tickValues, validTicks} from './ticks';\nimport {Transform, ingest} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Generates axis ticks for visualizing a spatial scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate ticks for.\n * @param {*} [params.count=10] - The approximate number of ticks, or\n * desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {function(*):string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid d3 4.0 format specifier.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nexport default function AxisTicks(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(AxisTicks, Transform);\n\nprototype.transform = function(_, pulse) {\n if (this.value && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n ticks = this.value,\n scale = _.scale,\n count = _.count == null ? (_.values ? _.values.length : 10) : tickCount(scale, _.count),\n format = _.format || tickFormat(scale, count, _.formatSpecifier),\n values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count);\n\n if (ticks) out.rem = ticks;\n\n ticks = values.map(function(value, i) {\n return ingest({\n index: i / (values.length - 1),\n value: value,\n label: format(value)\n });\n });\n\n if (_.extra && ticks.length) {\n // add an extra tick pegged to the initial domain value\n // this is used to generate axes with 'binned' domains\n ticks.push(ingest({\n index: -1,\n extra: {value: ticks[0].value},\n label: ''\n }));\n }\n\n out.source = ticks;\n out.add = ticks;\n this.value = ticks;\n\n return out;\n};\n","import {Transform, ingest, tupleid} from 'vega-dataflow';\nimport {error, fastmap, inherits, isArray} from 'vega-util';\n\n/**\n * Joins a set of data elements against a set of visual items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): object} [params.item] - An item generator function.\n * @param {function(object): *} [params.key] - The key field associating data and visual items.\n */\nexport default function DataJoin(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(DataJoin, Transform);\n\nfunction defaultItemCreate() {\n return ingest({});\n}\n\nfunction isExit(t) {\n return t.exit;\n}\n\nprototype.transform = function(_, pulse) {\n var df = pulse.dataflow,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n item = _.item || defaultItemCreate,\n key = _.key || tupleid,\n map = this.value;\n\n // prevent transient (e.g., hover) requests from\n // cascading across marks derived from marks\n if (isArray(out.encode)) {\n out.encode = null;\n }\n\n if (map && (_.modified('key') || pulse.modified(key))) {\n error('DataJoin does not support modified key function or fields.');\n }\n\n if (!map) {\n pulse = pulse.addAll();\n this.value = map = fastmap().test(isExit);\n map.lookup = function(t) { return map.get(key(t)); };\n }\n\n pulse.visit(pulse.ADD, function(t) {\n var k = key(t),\n x = map.get(k);\n\n if (x) {\n if (x.exit) {\n map.empty--;\n out.add.push(x);\n } else {\n out.mod.push(x);\n }\n } else {\n map.set(k, (x = item(t)));\n out.add.push(x);\n }\n\n x.datum = t;\n x.exit = false;\n });\n\n pulse.visit(pulse.MOD, function(t) {\n var k = key(t),\n x = map.get(k);\n\n if (x) {\n x.datum = t;\n out.mod.push(x);\n }\n });\n\n pulse.visit(pulse.REM, function(t) {\n var k = key(t),\n x = map.get(k);\n\n if (t === x.datum && !x.exit) {\n out.rem.push(x);\n x.exit = true;\n ++map.empty;\n }\n });\n\n if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum');\n\n if (_.clean && map.empty > df.cleanThreshold) df.runAfter(map.clean);\n\n return out;\n};\n","import {Transform} from 'vega-dataflow';\nimport {falsy, inherits, isArray} from 'vega-util';\n\n/**\n * Invokes encoding functions for visual items.\n * @constructor\n * @param {object} params - The parameters to the encoding functions. This\n * parameter object will be passed through to all invoked encoding functions.\n * @param {object} param.encoders - The encoding functions\n * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set\n * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set\n * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set\n */\nexport default function Encode(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Encode, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ADD_REM),\n encoders = _.encoders,\n encode = pulse.encode;\n\n // if an array, the encode directive includes additional sets\n // that must be defined in order for the primary set to be invoked\n // e.g., only run the update set if the hover set is defined\n if (isArray(encode)) {\n if (out.changed() || encode.every(function(e) { return encoders[e]; })) {\n encode = encode[0];\n out.encode = null; // consume targeted encode directive\n } else {\n return pulse.StopPropagation;\n }\n }\n\n // marshall encoder functions\n var reenter = encode === 'enter',\n update = encoders.update || falsy,\n enter = encoders.enter || falsy,\n exit = encoders.exit || falsy,\n set = (encode && !reenter ? encoders[encode] : update) || falsy;\n\n if (pulse.changed(pulse.ADD)) {\n pulse.visit(pulse.ADD, function(t) {\n enter(t, _);\n update(t, _);\n if (set !== falsy && set !== update) set(t, _);\n });\n out.modifies(enter.output);\n out.modifies(update.output);\n if (set !== falsy && set !== update) out.modifies(set.output);\n }\n\n if (pulse.changed(pulse.REM) && exit !== falsy) {\n pulse.visit(pulse.REM, function(t) { exit(t, _); });\n out.modifies(exit.output);\n }\n\n if (reenter || set !== falsy) {\n var flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0);\n if (reenter) {\n pulse.visit(flag, function(t) {\n var mod = enter(t, _);\n if (set(t, _) || mod) out.mod.push(t);\n });\n if (out.mod.length) out.modifies(enter.output);\n } else {\n pulse.visit(flag, function(t) {\n if (set(t, _)) out.mod.push(t);\n });\n }\n if (out.mod.length) out.modifies(set.output);\n }\n\n return out.changed() ? out : pulse.StopPropagation;\n};\n","export var Symbols = 'symbol';\nexport var Discrete = 'discrete';\nexport var Gradient = 'gradient';\n","import {Symbols, Discrete} from './legend-types';\nimport {Quantile, Quantize, Threshold, BinLinear, BinOrdinal} from './scale-types';\nimport {tickValues} from './ticks';\nimport {peek} from 'vega-util';\n\nvar symbols = {};\nsymbols[Quantile] = quantileSymbols;\nsymbols[Quantize] = quantizeSymbols;\nsymbols[Threshold] = thresholdSymbols;\nsymbols[BinLinear] = symbols[BinOrdinal] = binSymbols;\n\nexport function labelValues(scale, count) {\n var values = symbols[scale.type];\n return values ? values(scale) : tickValues(scale, count);\n}\n\nfunction quantizeSymbols(scale) {\n var domain = scale.domain(),\n x0 = domain[0],\n x1 = peek(domain),\n n = scale.range().length,\n values = new Array(n),\n i = 0;\n\n values[0] = -Infinity;\n while (++i < n) values[i] = (i * x1 - (i - n) * x0) / n;\n values.max = +Infinity;\n\n return values;\n}\n\nfunction quantileSymbols(scale) {\n var values = [-Infinity].concat(scale.quantiles());\n values.max = +Infinity;\n\n return values;\n}\n\nfunction thresholdSymbols(scale) {\n var values = [-Infinity].concat(scale.domain());\n values.max = +Infinity;\n\n return values;\n}\n\nfunction binSymbols(scale) {\n var values = scale.domain();\n values.max = values.pop();\n\n return values;\n}\n\nexport function labelFormat(scale, format, type) {\n return type === Symbols && symbols[scale.type] ? formatRange(format)\n : type === Discrete ? formatDiscrete(format)\n : formatPoint(format);\n}\n\nfunction formatRange(format) {\n return function(value, index, array) {\n var limit = array[index + 1] || array.max || +Infinity,\n lo = formatValue(value, format),\n hi = formatValue(limit, format);\n return lo && hi ? lo + '\\u2013' + hi : hi ? '< ' + hi : '\\u2265 ' + lo;\n };\n}\n\nfunction formatDiscrete(format) {\n return function(value, index) {\n return index ? format(value) : null;\n }\n}\n\nfunction formatPoint(format) {\n return function(value) {\n return format(value);\n };\n}\n\nfunction formatValue(value, format) {\n return isFinite(value) ? format(value) : null;\n}\n\nexport function labelFraction(scale) {\n var domain = scale.domain(),\n count = domain.length - 1,\n lo = +domain[0],\n hi = +peek(domain),\n span = hi - lo;\n\n if (scale.type === Threshold) {\n var adjust = count ? span / count : 0.1;\n lo -= adjust;\n hi += adjust;\n span = hi - lo;\n }\n\n return function(value) {\n return (value - lo) / span;\n };\n}\n","import {labelFormat, labelFraction, labelValues} from './labels';\nimport {Symbols, Gradient} from './legend-types';\nimport {tickCount, tickFormat} from './ticks';\nimport {Transform, ingest} from 'vega-dataflow';\nimport {scaleFraction} from 'vega-scale';\nimport {constant, inherits, isFunction, peek} from 'vega-util';\n\n/**\n * Generates legend entries for visualizing a scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate items for.\n * @param {*} [params.count=5] - The approximate number of items, or\n * desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid D3 format specifier string.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nexport default function LegendEntries(params) {\n Transform.call(this, [], params);\n}\n\nvar prototype = inherits(LegendEntries, Transform);\n\nprototype.transform = function(_, pulse) {\n if (this.value != null && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n items = this.value,\n type = _.type || Symbols,\n scale = _.scale,\n count = _.count == null ? 5 : tickCount(scale, _.count),\n format = _.format || tickFormat(scale, count, _.formatSpecifier),\n values = _.values || labelValues(scale, count, type),\n domain, fraction, size, offset;\n\n format = labelFormat(scale, format, type);\n if (items) out.rem = items;\n\n if (type === Symbols) {\n if (isFunction(size = _.size)) {\n // if first value maps to size zero, remove from list (vega#717)\n if (!_.values && scale(values[0]) === 0) {\n values = values.slice(1);\n }\n // compute size offset for legend entries\n offset = values.reduce(function(max, value) {\n return Math.max(max, size(value, _));\n }, 0);\n } else {\n size = constant(offset = size || 8);\n }\n\n items = values.map(function(value, index) {\n return ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n offset: offset,\n size: size(value, _)\n });\n });\n }\n\n else if (type === Gradient) {\n domain = scale.domain(),\n fraction = scaleFraction(scale, domain[0], peek(domain));\n\n // if automatic label generation produces 2 or fewer values,\n // use the domain end points instead (fixes vega/vega#1364)\n if (values.length < 3 && !_.values && domain[0] !== peek(domain)) {\n values = [domain[0], peek(domain)];\n }\n\n items = values.map(function(value, index) {\n return ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: fraction(value)\n });\n });\n }\n\n else {\n size = values.length - 1;\n fraction = labelFraction(scale);\n\n items = values.map(function(value, index) {\n return ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: index ? fraction(value) : 0,\n perc2: index === size ? 1 : fraction(values[index+1])\n });\n });\n }\n\n out.source = items;\n out.add = items;\n this.value = items;\n\n return out;\n};\n","import {Transform} from 'vega-dataflow';\nimport {error, fastmap, inherits} from 'vega-util';\n\nvar Paths = fastmap({\n 'line': line,\n 'line-radial': lineR,\n 'arc': arc,\n 'arc-radial': arcR,\n 'curve': curve,\n 'curve-radial': curveR,\n 'orthogonal-horizontal': orthoX,\n 'orthogonal-vertical': orthoY,\n 'orthogonal-radial': orthoR,\n 'diagonal-horizontal': diagonalX,\n 'diagonal-vertical': diagonalY,\n 'diagonal-radial': diagonalR\n});\n\nfunction sourceX(t) { return t.source.x; }\nfunction sourceY(t) { return t.source.y; }\nfunction targetX(t) { return t.target.x; }\nfunction targetY(t) { return t.target.y; }\n\n /**\n * Layout paths linking source and target elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nexport default function LinkPath(params) {\n Transform.call(this, {}, params);\n}\n\nLinkPath.Definition = {\n \"type\": \"LinkPath\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"sourceX\", \"type\": \"field\", \"default\": \"source.x\" },\n { \"name\": \"sourceY\", \"type\": \"field\", \"default\": \"source.y\" },\n { \"name\": \"targetX\", \"type\": \"field\", \"default\": \"target.x\" },\n { \"name\": \"targetY\", \"type\": \"field\", \"default\": \"target.y\" },\n { \"name\": \"orient\", \"type\": \"enum\", \"default\": \"vertical\",\n \"values\": [\"horizontal\", \"vertical\", \"radial\"] },\n { \"name\": \"shape\", \"type\": \"enum\", \"default\": \"line\",\n \"values\": [\"line\", \"arc\", \"curve\", \"diagonal\", \"orthogonal\"] },\n { \"name\": \"require\", \"type\": \"signal\" },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"path\" }\n ]\n};\n\nvar prototype = inherits(LinkPath, Transform);\n\nprototype.transform = function(_, pulse) {\n var sx = _.sourceX || sourceX,\n sy = _.sourceY || sourceY,\n tx = _.targetX || targetX,\n ty = _.targetY || targetY,\n as = _.as || 'path',\n orient = _.orient || 'vertical',\n shape = _.shape || 'line',\n path = Paths.get(shape + '-' + orient) || Paths.get(shape);\n\n if (!path) {\n error('LinkPath unsupported type: ' + _.shape\n + (_.orient ? '-' + _.orient : ''));\n }\n\n pulse.visit(pulse.SOURCE, function(t) {\n t[as] = path(sx(t), sy(t), tx(t), ty(t));\n });\n\n return pulse.reflow(_.modified()).modifies(as);\n};\n\n// -- Link Path Generation Methods -----\n\nfunction line(sx, sy, tx, ty) {\n return 'M' + sx + ',' + sy +\n 'L' + tx + ',' + ty;\n}\n\nfunction lineR(sa, sr, ta, tr) {\n return line(\n sr * Math.cos(sa), sr * Math.sin(sa),\n tr * Math.cos(ta), tr * Math.sin(ta)\n );\n}\n\nfunction arc(sx, sy, tx, ty) {\n var dx = tx - sx,\n dy = ty - sy,\n rr = Math.sqrt(dx * dx + dy * dy) / 2,\n ra = 180 * Math.atan2(dy, dx) / Math.PI;\n return 'M' + sx + ',' + sy +\n 'A' + rr + ',' + rr +\n ' ' + ra + ' 0 1' +\n ' ' + tx + ',' + ty;\n}\n\nfunction arcR(sa, sr, ta, tr) {\n return arc(\n sr * Math.cos(sa), sr * Math.sin(sa),\n tr * Math.cos(ta), tr * Math.sin(ta)\n );\n}\n\nfunction curve(sx, sy, tx, ty) {\n var dx = tx - sx,\n dy = ty - sy,\n ix = 0.2 * (dx + dy),\n iy = 0.2 * (dy - dx);\n return 'M' + sx + ',' + sy +\n 'C' + (sx+ix) + ',' + (sy+iy) +\n ' ' + (tx+iy) + ',' + (ty-ix) +\n ' ' + tx + ',' + ty;\n}\n\nfunction curveR(sa, sr, ta, tr) {\n return curve(\n sr * Math.cos(sa), sr * Math.sin(sa),\n tr * Math.cos(ta), tr * Math.sin(ta)\n );\n}\n\nfunction orthoX(sx, sy, tx, ty) {\n return 'M' + sx + ',' + sy +\n 'V' + ty + 'H' + tx;\n}\n\nfunction orthoY(sx, sy, tx, ty) {\n return 'M' + sx + ',' + sy +\n 'H' + tx + 'V' + ty;\n}\n\nfunction orthoR(sa, sr, ta, tr) {\n var sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa;\n return 'M' + (sr*sc) + ',' + (sr*ss) +\n 'A' + sr + ',' + sr + ' 0 0,' + (sf?1:0) +\n ' ' + (sr*tc) + ',' + (sr*ts) +\n 'L' + (tr*tc) + ',' + (tr*ts);\n}\n\nfunction diagonalX(sx, sy, tx, ty) {\n var m = (sx + tx) / 2;\n return 'M' + sx + ',' + sy +\n 'C' + m + ',' + sy +\n ' ' + m + ',' + ty +\n ' ' + tx + ',' + ty;\n}\n\nfunction diagonalY(sx, sy, tx, ty) {\n var m = (sy + ty) / 2;\n return 'M' + sx + ',' + sy +\n 'C' + sx + ',' + m +\n ' ' + tx + ',' + m +\n ' ' + tx + ',' + ty;\n}\n\nfunction diagonalR(sa, sr, ta, tr) {\n var sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n mr = (sr + tr) / 2;\n return 'M' + (sr*sc) + ',' + (sr*ss) +\n 'C' + (mr*sc) + ',' + (mr*ss) +\n ' ' + (mr*tc) + ',' + (mr*ts) +\n ' ' + (tr*tc) + ',' + (tr*ts);\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits, one} from 'vega-util';\nimport {range, sum} from 'd3-array';\n\n/**\n * Pie and donut chart layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size pie segments.\n * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout.\n * @param {number} [params.endAngle=2π] - The end angle (in radians) of the layout.\n * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value.\n */\nexport default function Pie(params) {\n Transform.call(this, null, params);\n}\n\nPie.Definition = {\n \"type\": \"Pie\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"startAngle\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"endAngle\", \"type\": \"number\", \"default\": 6.283185307179586 },\n { \"name\": \"sort\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"startAngle\", \"endAngle\"] }\n ]\n};\n\nvar prototype = inherits(Pie, Transform);\n\nprototype.transform = function(_, pulse) {\n var as = _.as || ['startAngle', 'endAngle'],\n startAngle = as[0],\n endAngle = as[1],\n field = _.field || one,\n start = _.startAngle || 0,\n stop = _.endAngle != null ? _.endAngle : 2 * Math.PI,\n data = pulse.source,\n values = data.map(field),\n n = values.length,\n a = start,\n k = (stop - start) / sum(values),\n index = range(n),\n i, t, v;\n\n if (_.sort) {\n index.sort(function(a, b) {\n return values[a] - values[b];\n });\n }\n\n for (i=0; i -1) return raw;\n\n var domain = _.domain,\n type = scale.type,\n zero = _.zero || (_.zero === undefined && INCLUDE_ZERO[type]),\n n, mid;\n\n if (!domain) return 0;\n\n // adjust continuous domain for minimum pixel padding\n if (INCLUDE_PAD[type] && _.padding && domain[0] !== peek(domain)) {\n domain = padDomain(type, domain, _.range, _.padding, _.exponent);\n }\n\n // adjust domain based on zero, min, max settings\n if (zero || _.domainMin != null || _.domainMax != null || _.domainMid != null) {\n n = ((domain = domain.slice()).length - 1) || 1;\n if (zero) {\n if (domain[0] > 0) domain[0] = 0;\n if (domain[n] < 0) domain[n] = 0;\n }\n if (_.domainMin != null) domain[0] = _.domainMin;\n if (_.domainMax != null) domain[n] = _.domainMax;\n\n if (_.domainMid != null) {\n mid = _.domainMid;\n if (mid < domain[0] || mid > domain[n]) {\n df.warn('Scale domainMid exceeds domain min or max.', mid);\n }\n domain.splice(n, 0, mid);\n }\n }\n\n // set the scale domain\n scale.domain(domainCheck(type, domain, df));\n\n // if ordinal scale domain is defined, prevent implicit\n // domain construction as side-effect of scale lookup\n if (type === Ordinal) {\n scale.unknown(_.domainImplicit ? scaleImplicit : undefined);\n }\n\n // perform 'nice' adjustment as requested\n if (_.nice && scale.nice) {\n scale.nice((_.nice !== true && tickCount(scale, _.nice)) || null);\n }\n\n // return the cardinality of the domain\n return domain.length;\n}\n\nfunction rawDomain(scale, raw, df) {\n if (raw) {\n scale.domain(domainCheck(scale.type, raw, df));\n return raw.length;\n } else {\n return -1;\n }\n}\n\nfunction padDomain(type, domain, range, pad, exponent) {\n var span = Math.abs(peek(range) - range[0]),\n frac = span / (span - 2 * pad),\n d = type === Log ? zoomLog(domain, null, frac)\n : type === Sqrt ? zoomPow(domain, null, frac, 0.5)\n : type === Pow ? zoomPow(domain, null, frac, exponent)\n : zoomLinear(domain, null, frac);\n\n domain = domain.slice();\n domain[0] = d[0];\n domain[domain.length-1] = d[1];\n return domain;\n}\n\nfunction domainCheck(type, domain, df) {\n if (type === Log) {\n // sum signs of domain values\n // if all pos or all neg, abs(sum) === domain.length\n var s = Math.abs(domain.reduce(function(s, v) {\n return s + (v < 0 ? -1 : v > 0 ? 1 : 0);\n }, 0));\n\n if (s !== domain.length) {\n df.warn('Log scale domain includes zero: ' + stringValue(domain));\n }\n }\n return domain;\n}\n\nfunction configureRange(scale, _, count) {\n var round = _.round || false,\n range = _.range;\n\n // if range step specified, calculate full range extent\n if (_.rangeStep != null) {\n range = configureRangeStep(scale.type, _, count);\n }\n\n // else if a range scheme is defined, use that\n else if (_.scheme) {\n range = configureScheme(scale.type, _, count);\n if (isFunction(range)) return scale.interpolator(range);\n }\n\n // given a range array for a sequential scale, convert to interpolator\n else if (range && scale.type === Sequential) {\n return scale.interpolator(interpolateRgbBasis(flip(range, _.reverse)));\n }\n\n // configure rounding / interpolation\n if (range && _.interpolate && scale.interpolate) {\n scale.interpolate(getInterpolate(_.interpolate, _.interpolateGamma));\n } else if (isFunction(scale.round)) {\n scale.round(round);\n } else if (isFunction(scale.rangeRound)) {\n scale.interpolate(round ? interpolateRound : interpolate);\n }\n\n if (range) scale.range(flip(range, _.reverse));\n}\n\nfunction configureRangeStep(type, _, count) {\n if (type !== Band && type !== Point) {\n error('Only band and point scales support rangeStep.');\n }\n\n // calculate full range based on requested step size and padding\n var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0,\n inner = type === Point ? 1\n : ((_.paddingInner != null ? _.paddingInner : _.padding) || 0);\n return [0, _.rangeStep * bandSpace(count, inner, outer)];\n}\n\nfunction configureScheme(type, _, count) {\n var name = _.scheme.toLowerCase(),\n scheme = getScheme(name),\n extent = _.schemeExtent,\n discrete;\n\n if (!scheme) {\n error('Unrecognized scheme name: ' + _.scheme);\n }\n\n // determine size for potential discrete range\n count = (type === Threshold) ? count + 1\n : (type === BinOrdinal) ? count - 1\n : (type === Quantile || type === Quantize) ? (+_.schemeCount || DEFAULT_COUNT)\n : count;\n\n // adjust and/or quantize scheme as appropriate\n return type === Sequential ? adjustScheme(scheme, extent, _.reverse)\n : !extent && (discrete = getScheme(name + '-' + count)) ? discrete\n : isFunction(scheme) ? quantize(adjustScheme(scheme, extent), count)\n : type === Ordinal ? scheme : scheme.slice(0, count);\n}\n\nfunction adjustScheme(scheme, extent, reverse) {\n return (isFunction(scheme) && (extent || reverse))\n ? interpolateRange(scheme, flip(extent || [0, 1], reverse))\n : scheme;\n}\n\nfunction flip(array, reverse) {\n return reverse ? array.slice().reverse() : array;\n}\n\nfunction quantize(interpolator, count) {\n var samples = new Array(count),\n n = count + 1;\n for (var i = 0; i < count;) samples[i] = interpolator(++i / n);\n return samples;\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Sorts scenegraph items in the pulse source array.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting tuples.\n */\nexport default function SortItems(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(SortItems, Transform);\n\nprototype.transform = function(_, pulse) {\n var mod = _.modified('sort')\n || pulse.changed(pulse.ADD)\n || pulse.modified(_.sort.fields)\n || pulse.modified('datum');\n\n if (mod) pulse.source.sort(_.sort);\n\n this.modified(mod);\n return pulse;\n};\n","import {Transform} from 'vega-dataflow';\nimport {inherits, one} from 'vega-util';\n\nvar Zero = 'zero',\n Center = 'center',\n Normalize = 'normalize',\n DefOutput = ['y0', 'y1'];\n\n/**\n * Stack layout for visualization elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to stack.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {function(object,object): number} [params.sort] - A comparator for stack sorting.\n * @param {string} [offset='zero'] - One of 'zero', 'center', 'normalize'.\n */\nexport default function Stack(params) {\n Transform.call(this, null, params);\n}\n\nStack.Definition = {\n \"type\": \"Stack\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"sort\", \"type\": \"compare\" },\n { \"name\": \"offset\", \"type\": \"enum\", \"default\": Zero, \"values\": [Zero, Center, Normalize] },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": DefOutput }\n ]\n};\n\nvar prototype = inherits(Stack, Transform);\n\nprototype.transform = function(_, pulse) {\n var as = _.as || DefOutput,\n y0 = as[0],\n y1 = as[1],\n field = _.field || one,\n stack = _.offset === Center ? stackCenter\n : _.offset === Normalize ? stackNormalize\n : stackZero,\n groups, i, n, max;\n\n // partition, sum, and sort the stack groups\n groups = partition(pulse.source, _.groupby, _.sort, field);\n\n // compute stack layouts per group\n for (i=0, n=groups.length, max=groups.max; i max) max = s;\n if (sort) g.sort(sort);\n }\n groups.max = max;\n\n return groups;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\n","export default function(a, b) {\n return a - b;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(ring, hole) {\n var i = -1, n = hole.length, c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\n\nfunction ringContains(ring, point) {\n var x = point[0], y = point[1], contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n }\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n","export default function() {}\n","import {extent, thresholdSturges, tickStep, range} from \"d3-array\";\nimport {slice} from \"./array\";\nimport ascending from \"./ascending\";\nimport area from \"./area\";\nimport constant from \"./constant\";\nimport contains from \"./contains\";\nimport noop from \"./noop\";\n\nvar cases = [\n [],\n [[[1.0, 1.5], [0.5, 1.0]]],\n [[[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [0.5, 1.0]]],\n [[[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 0.5], [1.0, 1.5]]],\n [[[1.0, 0.5], [0.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 0.5]]],\n [[[1.0, 1.5], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.5, 1.0]]],\n [[[1.0, 1.5], [1.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 1.5]]],\n []\n];\n\nexport default function() {\n var dx = 1,\n dy = 1,\n threshold = thresholdSturges,\n smooth = smoothLinear;\n\n function contours(values) {\n var tz = threshold(values);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var domain = extent(values), start = domain[0], stop = domain[1];\n tz = tickStep(start, stop, tz);\n tz = range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);\n } else {\n tz = tz.slice().sort(ascending);\n }\n\n return tz.map(function(value) {\n return contour(values, value);\n });\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n\n isorings(values, value, function(ring) {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);\n else holes.push(ring);\n });\n\n holes.forEach(function(hole) {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n\n return {\n type: \"MultiPolygon\",\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array,\n fragmentByEnd = new Array,\n x, y, t0, t1, t2, t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f, g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(function(point) {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 > 0) || !(_1 > 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, contours;\n };\n\n contours.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), contours) : threshold;\n };\n\n contours.smooth = function(_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n\n return contours;\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n min,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n return [min, max];\n}\n","export default function(ring) {\n var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n}\n","// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurX(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var j = 0; j < m; ++j) {\n for (var i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source.data[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source.data[i - w + j * n];\n }\n target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurY(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var i = 0; i < n; ++i) {\n for (var j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source.data[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source.data[i + (j - w) * n];\n }\n target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n","import {max, range, tickStep} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {blurX, blurY} from \"./blur\";\nimport constant from \"./constant\";\nimport contours from \"./contours\";\n\nfunction defaultX(d) {\n return d[0];\n}\n\nfunction defaultY(d) {\n return d[1];\n}\n\nfunction defaultWeight() {\n return 1;\n}\n\nexport default function() {\n var x = defaultX,\n y = defaultY,\n weight = defaultWeight,\n dx = 960,\n dy = 500,\n r = 20, // blur radius\n k = 2, // log2(grid cell size)\n o = r * 3, // grid offset, to pad for blur\n n = (dx + o * 2) >> k, // grid width\n m = (dy + o * 2) >> k, // grid height\n threshold = constant(20);\n\n function density(data) {\n var values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n\n data.forEach(function(d, i, data) {\n var xi = (+x(d, i, data) + o) >> k,\n yi = (+y(d, i, data) + o) >> k,\n wi = +weight(d, i, data);\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += wi;\n }\n });\n\n // TODO Optimize.\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n var tz = threshold(values0);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var stop = max(values0);\n tz = tickStep(0, stop, tz);\n tz = range(0, Math.floor(stop / tz) * tz, tz);\n tz.shift();\n }\n\n return contours()\n .thresholds(tz)\n .size([n, m])\n (values0)\n .map(transform);\n }\n\n function transform(geometry) {\n geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n }\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n coordinates.forEach(transformPoint);\n }\n\n // TODO Optimize.\n function transformPoint(coordinates) {\n coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n }\n\n function resize() {\n o = r * 3;\n n = (dx + o * 2) >> k;\n m = (dy + o * 2) >> k;\n return density;\n }\n\n density.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), density) : x;\n };\n\n density.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), density) : y;\n };\n\n density.weight = function(_) {\n return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant(+_), density) : weight;\n };\n\n density.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 >= 0) && !(_0 >= 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, resize();\n };\n\n density.cellSize = function(_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n return k = Math.floor(Math.log(_) / Math.LN2), resize();\n };\n\n density.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\n };\n\n density.bandwidth = function(_) {\n if (!arguments.length) return Math.sqrt(r * (r + 1));\n if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n };\n\n return density;\n}\n","import {ingest, Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\nimport {extent} from 'd3-array';\nimport {contours, contourDensity} from 'd3-contour';\n\nvar CONTOUR_PARAMS = ['size', 'smooth'];\nvar DENSITY_PARAMS = ['x', 'y', 'weight', 'size', 'cellSize', 'bandwidth'];\n\n/**\n * Generate contours based on kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The dimensions [width, height] over which to compute contours.\n * If the values parameter is provided, this must be the dimensions of the input data.\n * If density estimation is performed, this is the output view dimensions in pixels.\n * @param {Array} [params.values] - An array of numeric values representing an\n * width x height grid of values over which to compute contours. If unspecified, this\n * transform will instead attempt to compute contours for the kernel density estimate\n * using values drawn from data tuples in the input pulse.\n * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation.\n * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation.\n * @param {function(object): number} [params.weight] - The data point weight accessor for density estimation.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * @param {number} [params.bandwidth] - Kernel density estimation bandwidth.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * this parameter is set, the count and nice parameters will be ignored.\n * @param {number} [params.count] - The desired number of contours.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified count.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n */\nexport default function Contour(params) {\n Transform.call(this, null, params);\n}\n\nContour.Definition = {\n \"type\": \"Contour\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2, \"required\": true },\n { \"name\": \"values\", \"type\": \"number\", \"array\": true },\n { \"name\": \"x\", \"type\": \"field\" },\n { \"name\": \"y\", \"type\": \"field\" },\n { \"name\": \"weight\", \"type\": \"field\" },\n { \"name\": \"cellSize\", \"type\": \"number\" },\n { \"name\": \"bandwidth\", \"type\": \"number\" },\n { \"name\": \"count\", \"type\": \"number\" },\n { \"name\": \"smooth\", \"type\": \"boolean\" },\n { \"name\": \"nice\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"thresholds\", \"type\": \"number\", \"array\": true }\n ]\n};\n\nvar prototype = inherits(Contour, Transform);\n\nprototype.transform = function(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified())\n return pulse.StopPropagation;\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n count = _.count || 10,\n contour, params, values;\n\n if (_.values) {\n contour = contours();\n params = CONTOUR_PARAMS;\n values = _.values;\n } else {\n contour = contourDensity();\n params = DENSITY_PARAMS;\n values = pulse.materialize(pulse.SOURCE).source;\n }\n\n // set threshold parameter\n contour.thresholds(_.thresholds || (_.nice ? count : quantize(count)));\n\n // set all other parameters\n params.forEach(function(param) {\n if (_[param] != null) contour[param](_[param]);\n });\n\n if (this.value) out.rem = this.value;\n values = values && values.length ? contour(values).map(ingest) : [];\n this.value = out.source = out.add = values;\n\n return out;\n};\n\nfunction quantize(k) {\n return function(values) {\n var ex = extent(values), x0 = ex[0], dx = ex[1] - x0,\n t = [], i = 1;\n for (; i<=k; ++i) t.push(x0 + dx * i / (k + 1));\n return t;\n };\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n\n return max;\n}\n","export var Feature = 'Feature';\nexport var FeatureCollection = 'FeatureCollection';\nexport var MultiPoint = 'MultiPoint';\n","import {Feature, FeatureCollection, MultiPoint} from './constants';\nimport {Transform} from 'vega-dataflow';\nimport {accessorFields, inherits} from 'vega-util';\n\n/**\n * Consolidate an array of [longitude, latitude] points or GeoJSON features\n * into a combined GeoJSON object. This transform is particularly useful for\n * combining geo data for a Projection's fit argument. The resulting GeoJSON\n * data is available as this transform's value. Input pulses are unchanged.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.fields] - A two-element array\n * of field accessors for the longitude and latitude values.\n * @param {function(object): *} params.geojson - A field accessor for\n * retrieving GeoJSON feature data.\n */\nexport default function GeoJSON(params) {\n Transform.call(this, null, params);\n}\n\nGeoJSON.Definition = {\n \"type\": \"GeoJSON\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"length\": 2 },\n { \"name\": \"geojson\", \"type\": \"field\" },\n ]\n};\n\nvar prototype = inherits(GeoJSON, Transform);\n\nprototype.transform = function(_, pulse) {\n var features = this._features,\n points = this._points,\n fields = _.fields,\n lon = fields && fields[0],\n lat = fields && fields[1],\n geojson = _.geojson,\n flag = pulse.ADD,\n mod;\n\n mod = _.modified()\n || pulse.changed(pulse.REM)\n || pulse.modified(accessorFields(geojson))\n || (lon && (pulse.modified(accessorFields(lon))))\n || (lat && (pulse.modified(accessorFields(lat))));\n\n if (!this.value || mod) {\n flag = pulse.SOURCE;\n this._features = (features = []);\n this._points = (points = []);\n }\n\n if (geojson) {\n pulse.visit(flag, function(t) {\n features.push(geojson(t));\n });\n }\n\n if (lon && lat) {\n pulse.visit(flag, function(t) {\n var x = lon(t),\n y = lat(t);\n if (x != null && y != null && (x = +x) === x && (y = +y) === y) {\n points.push([x, y]);\n }\n });\n features = features.concat({\n type: Feature,\n geometry: {\n type: MultiPoint,\n coordinates: points\n }\n });\n }\n\n this.value = {\n type: FeatureCollection,\n features: features\n };\n};\n","export default x => x;\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nexport function fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n areaRingSum = new Adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum = new Adder();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum = new Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum = new Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n var sum = new Adder();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","function* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nexport default function merge(arrays) {\n return Array.from(flatten(arrays));\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n l = atan2(x, abs(fy)) * sign(fy);\n if (fy * n < 0)\n l -= pi * sign(x) * sign(fy);\n return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y,\n l = atan2(x, abs(gy)) * sign(gy);\n if (gy * n < 0)\n l -= pi * sign(x) * sign(gy);\n return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","export default function noop() {}\n","import noop from \"../noop.js\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import adder from \"./adder.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nvar sum = adder();\n\nfunction longitude(point) {\n if (abs(point[0]) <= pi)\n return point[0];\n else\n return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n sum.reset();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","export default function(x) {\n return x;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","export var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var ceil = Math.ceil;\nexport var cos = Math.cos;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var pow = Math.pow;\nexport var round = Math.round;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sin = Math.sin;\nexport var tan = Math.tan;\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var sqrt1_2 = Math.SQRT1_2;\nexport var sqrt2 = sqrt(2);\nexport var sqrtPi = sqrt(pi);\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport function sinci(x) {\n return x ? x / Math.sin(x) : 1;\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function sqrt(x) {\n return x > 0 ? Math.sqrt(x) : 0;\n}\n\nexport function tanh(x) {\n x = exp(2 * x);\n return (x - 1) / (x + 1);\n}\n\nexport function sinh(x) {\n return (exp(x) - exp(-x)) / 2;\n}\n\nexport function cosh(x) {\n return (exp(x) + exp(-x)) / 2;\n}\n\nexport function arsinh(x) {\n return log(x + sqrt(x * x + 1));\n}\n\nexport function arcosh(x) {\n return log(x + sqrt(x * x - 1));\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, halfPi, pi, sin, sqrt2} from \"./math.js\";\n\nexport function mollweideBromleyTheta(cp, phi) {\n var cpsinPhi = cp * sin(phi), i = 30, delta;\n do phi -= delta = (phi + sin(phi) - cpsinPhi) / (1 + cos(phi));\n while (abs(delta) > epsilon && --i > 0);\n return phi / 2;\n}\n\nexport function mollweideBromleyRaw(cx, cy, cp) {\n\n function forward(lambda, phi) {\n return [cx * lambda * cos(phi = mollweideBromleyTheta(cp, phi)), cy * sin(phi)];\n }\n\n forward.invert = function(x, y) {\n return y = asin(y / cy), [x / (cx * cos(y)), asin((2 * y + sin(2 * y)) / cp)];\n };\n\n return forward;\n}\n\nexport var mollweideRaw = mollweideBromleyRaw(sqrt2 / halfPi, sqrt2, pi);\n\nexport default function() {\n return projection(mollweideRaw)\n .scale(169.529);\n}\n","import { geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEquidistant, geoConicConformal, geoConicEqualArea, geoConicEquidistant, geoEqualEarth, geoEquirectangular, geoGnomonic, geoIdentity, geoMercator, geoNaturalEarth1, geoOrthographic, geoStereographic, geoTransverseMercator } from 'd3-geo';\nimport { geoMollweide } from 'd3-geo-projection';\n\nconst defaultPath = geoPath();\nconst projectionProperties = [// standard properties in d3-geo\n'clipAngle', 'clipExtent', 'scale', 'translate', 'center', 'rotate', 'parallels', 'precision', 'reflectX', 'reflectY', // extended properties in d3-geo-projections\n'coefficient', 'distance', 'fraction', 'lobes', 'parallel', 'radius', 'ratio', 'spacing', 'tilt'];\n/**\n * Augment projections with their type and a copy method.\n */\n\nfunction create(type, constructor) {\n return function projection() {\n const p = constructor();\n p.type = type;\n p.path = geoPath().projection(p);\n\n p.copy = p.copy || function () {\n const c = projection();\n projectionProperties.forEach(prop => {\n if (p[prop]) c[prop](p[prop]());\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n\n return p;\n };\n}\n\nfunction projection(type, proj) {\n if (!type || typeof type !== 'string') {\n throw new Error('Projection type must be a name string.');\n }\n\n type = type.toLowerCase();\n\n if (arguments.length > 1) {\n projections[type] = create(type, proj);\n return this;\n } else {\n return projections[type] || null;\n }\n}\nfunction getProjectionPath(proj) {\n return proj && proj.path || defaultPath;\n}\nconst projections = {\n // base d3-geo projection types\n albers: geoAlbers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: geoConicEqualArea,\n conicequidistant: geoConicEquidistant,\n equalEarth: geoEqualEarth,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n mollweide: geoMollweide,\n naturalEarth1: geoNaturalEarth1,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\n\nfor (const key in projections) {\n projection(key, projections[key]);\n}\n\nexport { getProjectionPath, projection, projectionProperties };\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import clipRectangle from \"../clip/rectangle.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n alpha = 0, ca, sa, // angle\n x0 = null, y0, x1, y1, // clip extent\n kx = 1, ky = 1,\n transform = transformer({\n point: function(x, y) {\n var p = projection([x, y])\n this.stream.point(p[0], p[1]);\n }\n }),\n postclip = identity,\n cache,\n cacheStream;\n\n function reset() {\n kx = k * sx;\n ky = k * sy;\n cache = cacheStream = null;\n return projection;\n }\n\n function projection (p) {\n var x = p[0] * kx, y = p[1] * ky;\n if (alpha) {\n var t = y * ca - x * sa;\n x = x * ca + y * sa;\n y = t;\n } \n return [x + tx, y + ty];\n }\n projection.invert = function(p) {\n var x = p[0] - tx, y = p[1] - ty;\n if (alpha) {\n var t = y * ca + x * sa;\n x = x * ca - y * sa;\n y = t;\n }\n return [x / kx, y / ky];\n };\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n };\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n projection.scale = function(_) {\n return arguments.length ? (k = +_, reset()) : k;\n };\n projection.translate = function(_) {\n return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n }\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n };\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n };\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n };\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n return projection;\n}\n","import {Transform} from 'vega-dataflow';\nimport {getProjectionPath} from 'vega-projection';\nimport {inherits, identity} from 'vega-util';\n\n/**\n * Map GeoJSON data to an SVG path string.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='path'] - The output field in which to store\n * the generated path data (default 'path').\n */\nexport default function GeoPath(params) {\n Transform.call(this, null, params);\n}\n\nGeoPath.Definition = {\n \"type\": \"GeoPath\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"projection\", \"type\": \"projection\" },\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"pointRadius\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"path\" }\n ]\n};\n\nvar prototype = inherits(GeoPath, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n path = this.value,\n field = _.field || identity,\n as = _.as || 'path',\n flag = out.SOURCE;\n\n function set(t) { t[as] = path(field(t)); }\n\n if (!path || _.modified()) {\n // parameters updated, reset and reflow\n this.value = path = getProjectionPath(_.projection);\n out.materialize().reflow();\n } else {\n flag = field === identity || pulse.modified(field.fields)\n ? out.ADD_MOD\n : out.ADD;\n }\n\n var prev = initPath(path, _.pointRadius);\n out.visit(flag, set);\n path.pointRadius(prev);\n\n return out.modifies(as);\n};\n\nfunction initPath(path, pointRadius) {\n var prev = path.pointRadius();\n path.context(null);\n if (pointRadius != null) {\n path.pointRadius(pointRadius);\n }\n return prev;\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Geo-code a longitude/latitude point to an x/y coordinate.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {Array} params.fields - A two-element array of\n * field accessors for the longitude and latitude values.\n * @param {Array} [params.as] - A two-element array of field names\n * under which to store the result. Defaults to ['x','y'].\n */\nexport default function GeoPoint(params) {\n Transform.call(this, null, params);\n}\n\nGeoPoint.Definition = {\n \"type\": \"GeoPoint\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"projection\", \"type\": \"projection\", \"required\": true },\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true, \"length\": 2 },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"x\", \"y\"] }\n ]\n};\n\nvar prototype = inherits(GeoPoint, Transform);\n\nprototype.transform = function(_, pulse) {\n var proj = _.projection,\n lon = _.fields[0],\n lat = _.fields[1],\n as = _.as || ['x', 'y'],\n x = as[0],\n y = as[1],\n mod;\n\n function set(t) {\n var xy = proj([lon(t), lat(t)]);\n if (xy) {\n t[x] = xy[0];\n t[y] = xy[1];\n } else {\n t[x] = undefined;\n t[y] = undefined;\n }\n }\n\n if (_.modified()) {\n // parameters updated, reflow\n pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set);\n } else {\n mod = pulse.modified(lon.fields) || pulse.modified(lat.fields);\n pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set);\n }\n\n return pulse.modifies(as);\n};\n","import {Transform} from 'vega-dataflow';\nimport {getProjectionPath} from 'vega-projection';\nimport {inherits, field} from 'vega-util';\n\n/**\n * Annotate items with a geopath shape generator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='shape'] - The output field in which to store\n * the generated path data (default 'shape').\n */\nexport default function GeoShape(params) {\n Transform.call(this, null, params);\n}\n\nGeoShape.Definition = {\n \"type\": \"GeoShape\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"projection\", \"type\": \"projection\" },\n { \"name\": \"field\", \"type\": \"field\", \"default\": \"datum\" },\n { \"name\": \"pointRadius\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"shape\" }\n ]\n};\n\nvar prototype = inherits(GeoShape, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n shape = this.value,\n datum = _.field || field('datum'),\n as = _.as || 'shape',\n flag = out.ADD_MOD;\n\n if (!shape || _.modified()) {\n // parameters updated, reset and reflow\n this.value = shape = shapeGenerator(\n getProjectionPath(_.projection),\n datum,\n _.pointRadius\n );\n out.materialize().reflow();\n flag = out.SOURCE;\n }\n\n out.visit(flag, function(t) { t[as] = shape; });\n\n return out.modifies(as);\n};\n\nfunction shapeGenerator(path, field, pointRadius) {\n var shape = pointRadius == null\n ? function(_) { return path(field(_)); }\n : function(_) {\n var prev = path.pointRadius(),\n value = path.pointRadius(pointRadius)(field(_));\n path.pointRadius(prev);\n return value;\n };\n shape.context = function(_) {\n path.context(_);\n return shape;\n };\n\n return shape;\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n","import {Transform, ingest, replace} from 'vega-dataflow';\nimport {inherits, isFunction} from 'vega-util';\nimport {geoGraticule} from 'd3-geo';\n\n/**\n * GeoJSON feature generator for creating graticules.\n * @constructor\n */\nexport default function Graticule(params) {\n Transform.call(this, [], params);\n this.generator = geoGraticule();\n}\n\nGraticule.Definition = {\n \"type\": \"Graticule\",\n \"metadata\": {\"changes\": true},\n \"params\": [\n { \"name\": \"extent\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"extentMajor\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"extentMinor\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"step\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"stepMajor\", \"type\": \"number\", \"array\": true, \"length\": 2, \"default\": [90, 360] },\n { \"name\": \"stepMinor\", \"type\": \"number\", \"array\": true, \"length\": 2, \"default\": [10, 10] },\n { \"name\": \"precision\", \"type\": \"number\", \"default\": 2.5 }\n ]\n};\n\nvar prototype = inherits(Graticule, Transform);\n\nprototype.transform = function(_, pulse) {\n var src = this.value,\n gen = this.generator, t;\n\n if (!src.length || _.modified()) {\n for (var prop in _) {\n if (isFunction(gen[prop])) {\n gen[prop](_[prop]);\n }\n }\n }\n\n t = gen();\n if (src.length) {\n pulse.mod.push(replace(src[0], t));\n } else {\n pulse.add.push(ingest(t));\n }\n src[0] = t;\n\n return pulse;\n};\n","import {FeatureCollection} from './constants';\nimport {Transform} from 'vega-dataflow';\nimport {projection, projectionProperties} from 'vega-projection';\nimport {array, error, inherits, isArray, isFunction} from 'vega-util';\n\n/**\n * Maintains a cartographic projection.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nexport default function Projection(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\nvar prototype = inherits(Projection, Transform);\n\nprototype.transform = function(_, pulse) {\n var proj = this.value;\n\n if (!proj || _.modified('type')) {\n this.value = (proj = create(_.type));\n projectionProperties.forEach(function(prop) {\n if (_[prop] != null) set(proj, prop, _[prop]);\n });\n } else {\n projectionProperties.forEach(function(prop) {\n if (_.modified(prop)) set(proj, prop, _[prop]);\n });\n }\n\n if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius);\n if (_.fit) fit(proj, _);\n\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n};\n\nfunction fit(proj, _) {\n var data = collectGeoJSON(_.fit);\n _.extent ? proj.fitExtent(_.extent, data)\n : _.size ? proj.fitSize(_.size, data) : 0;\n}\n\nfunction create(type) {\n var constructor = projection((type || 'mercator').toLowerCase());\n if (!constructor) error('Unrecognized projection type: ' + type);\n return constructor();\n}\n\nfunction set(proj, key, value) {\n if (isFunction(proj[key])) proj[key](value);\n}\n\nexport function collectGeoJSON(features) {\n features = array(features);\n return features.length === 1\n ? features[0]\n : {\n type: FeatureCollection,\n features: features.reduce(function(list, f) {\n (f && f.type === FeatureCollection) ? list.push.apply(list, f.features)\n : isArray(f) ? list.push.apply(list, f)\n : list.push(f);\n return list;\n }, [])\n };\n}","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function() {\n return (Math.random() - 0.5) * 1e-6;\n}\n","export default function(d) {\n var x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","import constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {quadtree} from \"d3-quadtree\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","import constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {map} from \"d3-collection\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"missing: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle();\n y = target.y + target.vy - source.y - source.vy || jiggle();\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = map(nodes, id),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {map} from \"d3-collection\";\nimport {timer} from \"d3-timer\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\");\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.each(function (force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import {Transform} from 'vega-dataflow';\nimport {accessorFields, array, error, inherits, isFunction} from 'vega-util';\nimport {\n forceSimulation, forceCenter, forceCollide,\n forceManyBody, forceLink, forceX, forceY\n} from 'd3-force';\n\nvar ForceMap = {\n center: forceCenter,\n collide: forceCollide,\n nbody: forceManyBody,\n link: forceLink,\n x: forceX,\n y: forceY\n};\n\nvar Forces = 'forces',\n ForceParams = [\n 'alpha', 'alphaMin', 'alphaTarget',\n 'velocityDecay', 'forces'\n ],\n ForceConfig = ['static', 'iterations'],\n ForceOutput = ['x', 'y', 'vx', 'vy'];\n\n/**\n * Force simulation layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.forces - The forces to apply.\n */\nexport default function Force(params) {\n Transform.call(this, null, params);\n}\n\nForce.Definition = {\n \"type\": \"Force\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"static\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"restart\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"iterations\", \"type\": \"number\", \"default\": 300 },\n { \"name\": \"alpha\", \"type\": \"number\", \"default\": 1 },\n { \"name\": \"alphaMin\", \"type\": \"number\", \"default\": 0.001 },\n { \"name\": \"alphaTarget\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"velocityDecay\", \"type\": \"number\", \"default\": 0.4 },\n { \"name\": \"forces\", \"type\": \"param\", \"array\": true,\n \"params\": [\n {\n \"key\": {\"force\": \"center\"},\n \"params\": [\n { \"name\": \"x\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"y\", \"type\": \"number\", \"default\": 0 }\n ]\n },\n {\n \"key\": {\"force\": \"collide\"},\n \"params\": [\n { \"name\": \"radius\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"strength\", \"type\": \"number\", \"default\": 0.7 },\n { \"name\": \"iterations\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"force\": \"nbody\"},\n \"params\": [\n { \"name\": \"strength\", \"type\": \"number\", \"default\": -30 },\n { \"name\": \"theta\", \"type\": \"number\", \"default\": 0.9 },\n { \"name\": \"distanceMin\", \"type\": \"number\", \"default\": 1 },\n { \"name\": \"distanceMax\", \"type\": \"number\" }\n ]\n },\n {\n \"key\": {\"force\": \"link\"},\n \"params\": [\n { \"name\": \"links\", \"type\": \"data\" },\n { \"name\": \"id\", \"type\": \"field\" },\n { \"name\": \"distance\", \"type\": \"number\", \"default\": 30, \"expr\": true },\n { \"name\": \"strength\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"iterations\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"force\": \"x\"},\n \"params\": [\n { \"name\": \"strength\", \"type\": \"number\", \"default\": 0.1 },\n { \"name\": \"x\", \"type\": \"field\" }\n ]\n },\n {\n \"key\": {\"force\": \"y\"},\n \"params\": [\n { \"name\": \"strength\", \"type\": \"number\", \"default\": 0.1 },\n { \"name\": \"y\", \"type\": \"field\" }\n ]\n }\n ] },\n {\n \"name\": \"as\", \"type\": \"string\", \"array\": true, \"modify\": false,\n \"default\": ForceOutput\n }\n ]\n};\n\nvar prototype = inherits(Force, Transform);\n\nprototype.transform = function(_, pulse) {\n var sim = this.value,\n change = pulse.changed(pulse.ADD_REM),\n params = _.modified(ForceParams),\n iters = _.iterations || 300;\n\n // configure simulation\n if (!sim) {\n this.value = sim = simulation(pulse.source, _);\n sim.on('tick', rerun(pulse.dataflow, this));\n if (!_.static) {\n change = true;\n sim.tick(); // ensure we run on init\n }\n pulse.modifies('index');\n } else {\n if (change) {\n pulse.modifies('index');\n sim.nodes(pulse.source);\n }\n if (params || pulse.changed(pulse.MOD)) {\n setup(sim, _, 0, pulse);\n }\n }\n\n // run simulation\n if (params || change || _.modified(ForceConfig)\n || (pulse.changed() && _.restart))\n {\n sim.alpha(Math.max(sim.alpha(), _.alpha || 1))\n .alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters));\n\n if (_.static) {\n for (sim.stop(); --iters >= 0;) sim.tick();\n } else {\n if (sim.stopped()) sim.restart();\n if (!change) return pulse.StopPropagation; // defer to sim ticks\n }\n }\n\n return this.finish(_, pulse);\n};\n\nprototype.finish = function(_, pulse) {\n var dataflow = pulse.dataflow;\n\n // inspect dependencies, touch link source data\n for (var args=this._argops, j=0, m=args.length, arg; j= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","// Build lookup table mapping tuple keys to tree node instances\nexport default function(tree, key, filter) {\n var map = {};\n tree.each(function(node) {\n var t = node.data;\n if (filter(t)) map[key(t)] = node;\n });\n tree.lookup = map;\n return tree;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\n\nexport default function hierarchy(data, children) {\n var root = new Node(data),\n valued = +data.value && (root.value = data.value),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n if (children == null) children = defaultChildren;\n\n while (node = nodes.pop()) {\n if (valued) node.value = +node.data.value;\n if ((childs = children(node.data)) && (n = childs.length)) {\n node.children = new Array(n);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n return d.children;\n}\n\nfunction copyData(node) {\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy\n};\n","import lookup from './lookup';\nimport {ingest, isTuple, Transform, tupleid} from 'vega-dataflow';\nimport {array, error, inherits} from 'vega-util';\nimport {nest} from 'd3-collection';\nimport {hierarchy} from 'd3-hierarchy';\n\n /**\n * Nest tuples into a tree structure, grouped by key values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.keys - The key fields to nest by, in order.\n * @param {boolean} [params.generate=false] - A boolean flag indicating if\n * non-leaf nodes generated by this transform should be included in the\n * output. The default (false) includes only the input data (leaf nodes)\n * in the data stream.\n */\nexport default function Nest(params) {\n Transform.call(this, null, params);\n}\n\nNest.Definition = {\n \"type\": \"Nest\",\n \"metadata\": {\"treesource\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"keys\", \"type\": \"field\", \"array\": true },\n { \"name\": \"generate\", \"type\": \"boolean\" }\n ]\n};\n\nvar prototype = inherits(Nest, Transform);\n\nfunction children(n) {\n return n.values;\n}\n\nprototype.transform = function(_, pulse) {\n if (!pulse.source) {\n error('Nest transform requires an upstream data source.');\n }\n\n var gen = _.generate,\n mod = _.modified(),\n out = pulse.clone(),\n tree = this.value;\n\n if (!tree || mod || pulse.changed()) {\n // collect nodes to remove\n if (tree) {\n tree.each(function(node) {\n if (node.children && isTuple(node.data)) {\n out.rem.push(node.data);\n }\n });\n }\n\n // generate new tree structure\n this.value = tree = hierarchy({\n values: array(_.keys)\n .reduce(function(n, k) { n.key(k); return n; }, nest())\n .entries(out.source)\n }, children);\n\n // collect nodes to add\n if (gen) {\n tree.each(function(node) {\n if (node.children) {\n node = ingest(node.data);\n out.add.push(node);\n out.source.push(node);\n }\n });\n }\n\n // build lookup table\n lookup(tree, tupleid, tupleid);\n }\n\n out.source.root = tree;\n return out;\n};\n","import {Transform} from 'vega-dataflow';\nimport {error, inherits, one} from 'vega-util';\n\n/**\n * Abstract class for tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nexport default function HierarchyLayout(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(HierarchyLayout, Transform);\n\nprototype.transform = function(_, pulse) {\n if (!pulse.source || !pulse.source.root) {\n error(this.constructor.name\n + ' transform requires a backing tree data source.');\n }\n\n var layout = this.layout(_.method),\n fields = this.fields,\n root = pulse.source.root,\n as = _.as || fields;\n\n if (_.field) root.sum(_.field);\n if (_.sort) root.sort(_.sort);\n\n setParams(layout, this.params, _);\n if (layout.separation) {\n layout.separation(_.separation !== false ? defaultSeparation : one);\n }\n\n try {\n this.value = layout(root);\n } catch (err) {\n error(err);\n }\n root.each(function(node) { setFields(node, fields, as); });\n\n return pulse.reflow(_.modified()).modifies(as).modifies('leaf');\n};\n\nfunction setParams(layout, params, _) {\n for (var p, i=0, n=params.length; i= 0; --i) {\n nodes.push(children[i]);\n }\n }\n return this;\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n var nodes = [];\n this.each(function(node) {\n nodes.push(node);\n });\n return nodes;\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export var slice = Array.prototype.slice;\n\nexport function shuffle(array) {\n var m = array.length,\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","import {shuffle, slice} from \"../array.js\";\n\nexport default function(circles) {\n var i = 0, n = (circles = shuffle(slice.call(circles))).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import enclose from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packEnclose(circles) {\n if (!(n = circles.length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packEnclose(circles);\n return circles;\n}\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","import {packEnclose} from \"./siblings.js\";\nimport {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildren(padding, 0.5))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildren(constantZero, 1))\n .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildren(padding, k) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packEnclose(children);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","import HierarchyLayout from './HierarchyLayout';\nimport {inherits} from 'vega-util';\nimport {pack} from 'd3-hierarchy';\n\nvar Output = ['x', 'y', 'r', 'depth', 'children'];\n\n/**\n * Packed circle tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nexport default function Pack(params) {\n HierarchyLayout.call(this, params);\n}\n\nPack.Definition = {\n \"type\": \"Pack\",\n \"metadata\": {\"tree\": true, \"modifies\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"sort\", \"type\": \"compare\" },\n { \"name\": \"padding\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"radius\", \"type\": \"field\", \"default\": null },\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": Output.length, \"default\": Output }\n ]\n};\n\nvar prototype = inherits(Pack, HierarchyLayout);\n\nprototype.layout = pack;\n\nprototype.params = ['size', 'padding'];\n\nprototype.fields = Output;\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","import HierarchyLayout from './HierarchyLayout';\nimport {inherits} from 'vega-util';\nimport {partition} from 'd3-hierarchy';\n\nvar Output = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n\n/**\n * Partition tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nexport default function Partition(params) {\n HierarchyLayout.call(this, params);\n}\n\nPartition.Definition = {\n \"type\": \"Partition\",\n \"metadata\": {\"tree\": true, \"modifies\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"sort\", \"type\": \"compare\" },\n { \"name\": \"padding\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"round\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": Output.length, \"default\": Output }\n ]\n};\n\nvar prototype = inherits(Partition, HierarchyLayout);\n\nprototype.layout = partition;\n\nprototype.params = ['size', 'round', 'padding'];\n\nprototype.fields = Output;\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","import {required} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar keyPrefix = \"$\", // Protect against keys like “__proto__”.\n preroot = {depth: -1},\n ambiguous = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId;\n\n function stratify(data) {\n var d,\n i,\n n = data.length,\n root,\n parent,\n node,\n nodes = new Array(n),\n nodeId,\n nodeKey,\n nodeByKey = {};\n\n for (i = 0; i < n; ++i) {\n d = data[i], node = nodes[i] = new Node(d);\n if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = keyPrefix + (node.id = nodeId);\n nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], nodeId = parentId(data[i], i, data);\n if (nodeId == null || !(nodeId += \"\")) {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n } else {\n parent = nodeByKey[keyPrefix + nodeId];\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = required(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = required(x), stratify) : parentId;\n };\n\n return stratify;\n}\n","import lookup from './lookup';\nimport {Transform} from 'vega-dataflow';\nimport {error, inherits, truthy} from 'vega-util';\nimport {stratify} from 'd3-hierarchy';\n\n /**\n * Stratify a collection of tuples into a tree structure based on\n * id and parent id fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.key - Unique key field for each tuple.\n * @param {function(object): *} params.parentKey - Field with key for parent tuple.\n */\nexport default function Stratify(params) {\n Transform.call(this, null, params);\n}\n\nStratify.Definition = {\n \"type\": \"Stratify\",\n \"metadata\": {\"treesource\": true},\n \"params\": [\n { \"name\": \"key\", \"type\": \"field\", \"required\": true },\n { \"name\": \"parentKey\", \"type\": \"field\", \"required\": true }\n ]\n};\n\nvar prototype = inherits(Stratify, Transform);\n\nprototype.transform = function(_, pulse) {\n if (!pulse.source) {\n error('Stratify transform requires an upstream data source.');\n }\n\n var tree = this.value,\n mod = _.modified(),\n out = pulse.fork(pulse.ALL).materialize(pulse.SOURCE),\n run = !this.value\n || mod\n || pulse.changed(pulse.ADD_REM)\n || pulse.modified(_.key.fields)\n || pulse.modified(_.parentKey.fields);\n\n // prevent upstream source pollution\n out.source = out.source.slice();\n\n if (run) {\n if (out.source.length) {\n tree = lookup(\n stratify().id(_.key).parentId(_.parentKey)(out.source)\n , _.key, truthy);\n } else {\n tree = lookup(stratify()([{}]), _.key, _.key);\n }\n }\n\n out.source.root = this.value = tree;\n return out;\n};\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","import HierarchyLayout from './HierarchyLayout';\nimport {error, inherits} from 'vega-util';\nimport {tree, cluster} from 'd3-hierarchy';\n\nvar Layouts = {\n tidy: tree,\n cluster: cluster\n};\n\nvar Output = ['x', 'y', 'depth', 'children'];\n\n/**\n * Tree layout. Depending on the method parameter, performs either\n * Reingold-Tilford 'tidy' layout or dendrogram 'cluster' layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nexport default function Tree(params) {\n HierarchyLayout.call(this, params);\n}\n\nTree.Definition = {\n \"type\": \"Tree\",\n \"metadata\": {\"tree\": true, \"modifies\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"sort\", \"type\": \"compare\" },\n { \"name\": \"method\", \"type\": \"enum\", \"default\": \"tidy\", \"values\": [\"tidy\", \"cluster\"] },\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"nodeSize\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"separation\", \"type\": \"boolean\", \"default\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": Output.length, \"default\": Output }\n ]\n};\n\nvar prototype = inherits(Tree, HierarchyLayout);\n\n/**\n * Tree layout generator. Supports both 'tidy' and 'cluster' layouts.\n */\nprototype.layout = function(method) {\n var m = method || 'tidy';\n if (Layouts.hasOwnProperty(m)) return Layouts[m]();\n else error('Unrecognized Tree layout method: ' + m);\n};\n\nprototype.params = ['size', 'nodeSize'];\n\nprototype.fields = Output;\n","import {ingest, tupleid, Transform} from 'vega-dataflow';\nimport {error, inherits} from 'vega-util';\n\n /**\n * Generate tuples representing links between tree nodes.\n * The resulting tuples will contain 'source' and 'target' fields,\n * which point to parent and child node tuples, respectively.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nexport default function TreeLinks(params) {\n Transform.call(this, [], params);\n}\n\nTreeLinks.Definition = {\n \"type\": \"TreeLinks\",\n \"metadata\": {\"tree\": true, \"generates\": true, \"changes\": true},\n \"params\": []\n};\n\nvar prototype = inherits(TreeLinks, Transform);\n\nprototype.transform = function(_, pulse) {\n var links = this.value,\n tree = pulse.source && pulse.source.root,\n out = pulse.fork(pulse.NO_SOURCE),\n lut = {};\n\n if (!tree) error('TreeLinks transform requires a tree data source.');\n\n if (pulse.changed(pulse.ADD_REM)) {\n // remove previous links\n out.rem = links;\n\n // build lookup table of valid tuples\n pulse.visit(pulse.SOURCE, function(t) { lut[tupleid(t)] = 1; });\n\n // generate links for all edges incident on valid tuples\n tree.each(function(node) {\n var t = node.data,\n p = node.parent && node.parent.data;\n if (p && lut[tupleid(t)] && lut[tupleid(p)]) {\n out.add.push(ingest({source: p, target: t}));\n }\n });\n this.value = out.add;\n }\n\n else if (pulse.changed(pulse.MOD)) {\n // build lookup table of modified tuples\n pulse.visit(pulse.MOD, function(t) { lut[tupleid(t)] = 1; });\n\n // gather links incident on modified tuples\n links.forEach(function(link) {\n if (lut[tupleid(link.source)] || lut[tupleid(link.target)]) {\n out.mod.push(link);\n }\n });\n }\n\n return out;\n};\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","import HierarchyLayout from './HierarchyLayout';\nimport {error, inherits} from 'vega-util';\nimport {\n treemap,\n treemapBinary,\n treemapDice,\n treemapSlice,\n treemapSliceDice,\n treemapSquarify,\n treemapResquarify\n} from 'd3-hierarchy';\n\nvar Tiles = {\n binary: treemapBinary,\n dice: treemapDice,\n slice: treemapSlice,\n slicedice: treemapSliceDice,\n squarify: treemapSquarify,\n resquarify: treemapResquarify\n};\n\nvar Output = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n\n/**\n * Treemap layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nexport default function Treemap(params) {\n HierarchyLayout.call(this, params);\n}\n\nTreemap.Definition = {\n \"type\": \"Treemap\",\n \"metadata\": {\"tree\": true, \"modifies\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"sort\", \"type\": \"compare\" },\n { \"name\": \"method\", \"type\": \"enum\", \"default\": \"squarify\",\n \"values\": [\"squarify\", \"resquarify\", \"binary\", \"dice\", \"slice\", \"slicedice\"] },\n { \"name\": \"padding\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"paddingInner\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"paddingOuter\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"paddingTop\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"paddingRight\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"paddingBottom\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"paddingLeft\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"ratio\", \"type\": \"number\", \"default\": 1.618033988749895 },\n { \"name\": \"round\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": Output.length, \"default\": Output }\n ]\n};\n\nvar prototype = inherits(Treemap, HierarchyLayout);\n\n/**\n * Treemap layout generator. Adds 'method' and 'ratio' parameters\n * to configure the underlying tile method.\n */\nprototype.layout = function() {\n var x = treemap();\n x.ratio = function(_) {\n var t = x.tile();\n if (t.ratio) x.tile(t.ratio(_));\n };\n x.method = function(_) {\n if (Tiles.hasOwnProperty(_)) x.tile(Tiles[_]);\n else error('Unrecognized Treemap layout method: ' + _);\n };\n return x;\n};\n\nprototype.params = [\n 'method', 'ratio', 'size', 'round',\n 'padding', 'paddingInner', 'paddingOuter',\n 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'\n];\n\nprototype.fields = Output;\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = (x0 * valueRight + x1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = (y0 * valueRight + y1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\nimport {voronoi} from 'd3-voronoi';\n\nexport default function Voronoi(params) {\n Transform.call(this, null, params);\n}\n\nVoronoi.Definition = {\n \"type\": \"Voronoi\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"x\", \"type\": \"field\", \"required\": true },\n { \"name\": \"y\", \"type\": \"field\", \"required\": true },\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"extent\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"default\": [[-1e5, -1e5], [1e5, 1e5]],\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"path\" }\n ]\n};\n\nvar prototype = inherits(Voronoi, Transform);\n\nvar defaultExtent = [[-1e5, -1e5], [1e5, 1e5]];\n\nprototype.transform = function(_, pulse) {\n var as = _.as || 'path',\n data = pulse.source,\n diagram, polygons, i, n;\n\n // configure and construct voronoi diagram\n diagram = voronoi().x(_.x).y(_.y);\n if (_.size) diagram.size(_.size);\n else diagram.extent(_.extent || defaultExtent);\n\n this.value = (diagram = diagram(data));\n\n // map polygons to paths\n polygons = diagram.polygons();\n for (i=0, n=data.length; i> 5,\n ch = 1 << 11;\n\nexport default function() {\n var size = [256, 256],\n text,\n font,\n fontSize,\n fontStyle,\n fontWeight,\n rotate,\n padding,\n spiral = archimedeanSpiral,\n words = [],\n random = Math.random,\n cloud = {};\n\n cloud.layout = function() {\n var contextAndRatio = getContext(canvas()),\n board = zeroArray((size[0] >> 5) * size[1]),\n bounds = null,\n n = words.length,\n i = -1,\n tags = [],\n data = words.map(function(d) {\n return {\n text: text(d),\n font: font(d),\n style: fontStyle(d),\n weight: fontWeight(d),\n rotate: rotate(d),\n size: ~~fontSize(d),\n padding: padding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d\n };\n }).sort(function(a, b) { return b.size - a.size; });\n\n while (++i < n) {\n var d = data[i];\n d.x = (size[0] * (random() + .5)) >> 1;\n d.y = (size[1] * (random() + .5)) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n if (bounds) cloudBounds(bounds, d);\n else bounds = [{x: d.x + d.x0, y: d.y + d.y0}, {x: d.x + d.x1, y: d.y + d.y1}];\n // Temporary hack\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n\n return tags;\n };\n\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext(\"2d\").getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n\n var context = canvas.getContext(\"2d\");\n context.fillStyle = context.strokeStyle = \"red\";\n context.textAlign = \"center\";\n\n return {context: context, ratio: ratio};\n }\n\n function place(board, tag, bounds) {\n var startX = tag.x,\n startY = tag.y,\n maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),\n s = spiral(size),\n dt = random() < .5 ? 1 : -1,\n t = -dt,\n dxdy,\n dx,\n dy;\n\n while (dxdy = s(t += dt)) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n\n tag.x = startX + dx;\n tag.y = startY + dy;\n\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 ||\n tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;\n // TODO only check for collisions within current bounds.\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite,\n w = tag.width >> 5,\n sw = size[0] >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n tag.sprite = null;\n return true;\n }\n }\n }\n return false;\n }\n\n cloud.words = function(_) {\n if (arguments.length) {\n words = _;\n return cloud;\n } else {\n return words;\n }\n };\n\n cloud.size = function(_) {\n if (arguments.length) {\n size = [+_[0], +_[1]];\n return cloud;\n } else {\n return size;\n }\n };\n\n cloud.font = function(_) {\n if (arguments.length) {\n font = functor(_);\n return cloud;\n } else {\n return font;\n }\n };\n\n cloud.fontStyle = function(_) {\n if (arguments.length) {\n fontStyle = functor(_);\n return cloud;\n } else {\n return fontStyle;\n }\n };\n\n cloud.fontWeight = function(_) {\n if (arguments.length) {\n fontWeight = functor(_);\n return cloud;\n } else {\n return fontWeight;\n }\n };\n\n cloud.rotate = function(_) {\n if (arguments.length) {\n rotate = functor(_);\n return cloud;\n } else {\n return rotate;\n }\n };\n\n cloud.text = function(_) {\n if (arguments.length) {\n text = functor(_);\n return cloud;\n } else {\n return text;\n }\n };\n\n cloud.spiral = function(_) {\n if (arguments.length) {\n spiral = spirals[_] || _;\n return cloud;\n } else {\n return spiral;\n }\n };\n\n cloud.fontSize = function(_) {\n if (arguments.length) {\n fontSize = functor(_);\n return cloud;\n } else {\n return fontSize;\n }\n };\n\n cloud.padding = function(_) {\n if (arguments.length) {\n padding = functor(_);\n return cloud;\n } else {\n return padding;\n }\n };\n\n cloud.random = function(_) {\n if (arguments.length) {\n random = _;\n return cloud;\n } else {\n return random;\n }\n };\n\n return cloud;\n}\n\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite) return;\n var c = contextAndRatio.context,\n ratio = contextAndRatio.ratio;\n\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0,\n y = 0,\n maxh = 0,\n n = data.length,\n w, w32, h, i, j;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + \" \" + d.weight + \" \" + ~~((d.size + 1) / ratio) + \"px \" + d.font;\n w = c.measureText(d.text + \"m\").width * ratio;\n h = d.size << 1;\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians),\n cr = Math.cos(d.rotate * cloudRadians),\n wcr = w * cr,\n wsr = w * sr,\n hcr = h * cr,\n hsr = h * sr;\n w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = (w + 0x1f) >> 5 << 5;\n }\n if (h > maxh) maxh = h;\n if (x + w >= (cw << 5)) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n if (y + h >= ch) break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0;\n // Zero the buffer\n for (i = 0; i < h * w32; i++) sprite[i] = 0;\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n var seen = 0,\n seenRow = -1;\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5),\n m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen) seenRow = j;\n else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite,\n w = tag.width >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0))\n & board[x + i]) return true;\n }\n x += sw;\n }\n return false;\n}\n\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0],\n b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\n\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function(t) {\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n };\n}\n\nfunction rectangularSpiral(size) {\n var dy = 4,\n dx = dy * size[0] / size[1],\n x = 0,\n y = 0;\n return function(t) {\n var sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\n case 0: x += dx; break;\n case 1: y += dy; break;\n case 2: x -= dx; break;\n default: y -= dy; break;\n }\n return [x, y];\n };\n}\n\n// TODO reuse arrays?\nfunction zeroArray(n) {\n var a = [],\n i = -1;\n while (++i < n) a[i] = 0;\n return a;\n}\n\nfunction functor(d) {\n return typeof d === \"function\" ? d : function() { return d; };\n}\n\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n","import cloud from './CloudLayout';\nimport {Transform} from 'vega-dataflow';\nimport {constant, inherits, isFunction} from 'vega-util';\nimport {scale} from 'vega-scale';\nimport {random} from 'vega-statistics';\n\nvar Output = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle'];\n\nvar Params = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight'];\n\nexport default function Wordcloud(params) {\n Transform.call(this, cloud(), params);\n}\n\nWordcloud.Definition = {\n \"type\": \"Wordcloud\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"font\", \"type\": \"string\", \"expr\": true, \"default\": \"sans-serif\" },\n { \"name\": \"fontStyle\", \"type\": \"string\", \"expr\": true, \"default\": \"normal\" },\n { \"name\": \"fontWeight\", \"type\": \"string\", \"expr\": true, \"default\": \"normal\" },\n { \"name\": \"fontSize\", \"type\": \"number\", \"expr\": true, \"default\": 14 },\n { \"name\": \"fontSizeRange\", \"type\": \"number\", \"array\": \"nullable\", \"default\": [10, 50] },\n { \"name\": \"rotate\", \"type\": \"number\", \"expr\": true, \"default\": 0 },\n { \"name\": \"text\", \"type\": \"field\" },\n { \"name\": \"spiral\", \"type\": \"string\", \"values\": [\"archimedean\", \"rectangular\"] },\n { \"name\": \"padding\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 7, \"default\": Output }\n ]\n};\n\nvar prototype = inherits(Wordcloud, Transform);\n\nprototype.transform = function(_, pulse) {\n function modp(param) {\n var p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n\n var mod = _.modified();\n if (!(mod || pulse.changed(pulse.ADD_REM) || Params.some(modp))) return;\n\n var data = pulse.materialize(pulse.SOURCE).source,\n layout = this.value,\n as = _.as || Output,\n fontSize = _.fontSize || 14,\n range;\n\n isFunction(fontSize)\n ? (range = _.fontSizeRange)\n : (fontSize = constant(fontSize));\n\n // create font size scaling function as needed\n if (range) {\n var fsize = fontSize,\n sizeScale = scale('sqrt')()\n .domain(extent(fsize, data))\n .range(range);\n fontSize = function(x) { return sizeScale(fsize(x)); };\n }\n\n data.forEach(function(t) {\n t[as[0]] = NaN;\n t[as[1]] = NaN;\n t[as[3]] = 0;\n });\n\n // configure layout\n var words = layout\n .words(data)\n .text(_.text)\n .size(_.size || [500, 500])\n .padding(_.padding || 1)\n .spiral(_.spiral || 'archimedean')\n .rotate(_.rotate || 0)\n .font(_.font || 'sans-serif')\n .fontStyle(_.fontStyle || 'normal')\n .fontWeight(_.fontWeight || 'normal')\n .fontSize(fontSize)\n .random(random)\n .layout();\n\n var size = layout.size(),\n dx = size[0] >> 1,\n dy = size[1] >> 1,\n i = 0,\n n = words.length,\n w, t;\n\n for (; i max) max = v;\n }\n\n return [min, max];\n}\n","export function array8(n) { return new Uint8Array(n); }\n\nexport function array16(n) { return new Uint16Array(n); }\n\nexport function array32(n) { return new Uint32Array(n); }\n","import {array8, array16, array32} from './arrays';\n\n/**\n * Maintains CrossFilter state.\n */\nexport default function Bitmaps() {\n\n var width = 8,\n data = [],\n seen = array32(0),\n curr = array(0, width),\n prev = array(0, width);\n\n return {\n\n data: function() { return data; },\n\n seen: function() {\n return (seen = lengthen(seen, data.length));\n },\n\n add: function(array) {\n for (var i=0, j=data.length, n=array.length, t; i boolean (true => remove)\n var n = data.length,\n copy = Array(n - num),\n reindex = data, // reuse old data array for index map\n t, i, j;\n\n // seek forward to first removal\n for (i=0; !map[i] && i k || m > width) {\n width = Math.max(m, width);\n curr = array(n, width, curr);\n prev = array(n, width);\n }\n }\n };\n}\n\nfunction lengthen(array, length, copy) {\n if (array.length >= length) return array;\n copy = copy || new array.constructor(length);\n copy.set(array);\n return copy;\n}\n\nfunction array(n, m, array) {\n var copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n);\n if (array) copy.set(array);\n return copy;\n}\n","export default function(index, i, query) {\n var bit = (1 << i);\n\n return {\n one: bit,\n zero: ~bit,\n range: query.slice(),\n bisect: index.bisect,\n index: index.index,\n size: index.size,\n\n onAdd: function(added, curr) {\n var dim = this,\n range = dim.bisect(dim.range, added.value),\n idx = added.index,\n lo = range[0],\n hi = range[1],\n n1 = idx.length, i;\n\n for (i=0; i 0) for (i=0; i remove\n var n = size,\n idx, i, j;\n\n // seek forward to first removal\n for (i=0; !map[index[i]] && i y ? 1 : 0;\n });\n return permute(values, index);\n}\n\nfunction merge(base, value0, index0, n0, value1, index1, n1, value, index) {\n var i0 = 0, i1 = 0, i;\n\n for (i=0; i0 < n0 && i1 < n1; ++i) {\n if (value0[i0] < value1[i1]) {\n value[i] = value0[i0];\n index[i] = index0[i0++];\n } else {\n value[i] = value1[i1];\n index[i] = index1[i1++] + base;\n }\n }\n\n for (; i0 < n0; ++i0, ++i) {\n value[i] = value0[i0];\n index[i] = index0[i0];\n }\n\n for (; i1 < n1; ++i1, ++i) {\n value[i] = value1[i1];\n index[i] = index1[i1] + base;\n }\n}\n","export default function(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import Bitmaps from './Bitmaps';\nimport Dimension from './Dimension';\nimport SortedIndex from './SortedIndex';\nimport {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * An indexed multi-dimensional filter.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of dimension accessors to filter.\n * @param {Array} params.query - An array of per-dimension range queries.\n */\nexport default function CrossFilter(params) {\n Transform.call(this, Bitmaps(), params);\n this._indices = null;\n this._dims = null;\n}\n\nCrossFilter.Definition = {\n \"type\": \"CrossFilter\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"query\", \"type\": \"array\", \"array\": true, \"required\": true,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} }\n ]\n};\n\nvar prototype = inherits(CrossFilter, Transform);\n\nprototype.transform = function(_, pulse) {\n if (!this._dims) {\n return this.init(_, pulse);\n } else {\n var init = _.modified('fields')\n || _.fields.some(function(f) { return pulse.modified(f.fields); });\n\n return init\n ? this.reinit(_, pulse)\n : this.eval(_, pulse);\n }\n};\n\nprototype.init = function(_, pulse) {\n var fields = _.fields,\n query = _.query,\n indices = this._indices = {},\n dims = this._dims = [],\n m = query.length,\n i = 0, key, index;\n\n // instantiate indices and dimensions\n for (; i lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n\n dim.range = query.slice();\n};\n\nprototype.incrementOne = function(dim, query, add, rem) {\n var bits = this.value,\n curr = bits.curr(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one,\n i, j, k;\n\n // Fast incremental update based on previous lo index.\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n\n dim.range = query.slice();\n};\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Selectively filters tuples by resolving against a filter bitmap.\n * Useful for processing the output of a cross-filter transform.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.ignore - A bit mask indicating which filters to ignore.\n * @param {object} params.filter - The per-tuple filter bitmaps. Typically this\n * parameter value is a reference to a {@link CrossFilter} transform.\n */\nexport default function ResolveFilter(params) {\n Transform.call(this, null, params);\n}\n\nResolveFilter.Definition = {\n \"type\": \"ResolveFilter\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"ignore\", \"type\": \"number\", \"required\": true,\n \"description\": \"A bit mask indicating which filters to ignore.\" },\n { \"name\": \"filter\", \"type\": \"object\", \"required\": true,\n \"description\": \"Per-tuple filter bitmaps from a CrossFilter transform.\" }\n ]\n};\n\nvar prototype = inherits(ResolveFilter, Transform);\n\nprototype.transform = function(_, pulse) {\n var ignore = ~(_.ignore || 0), // bit mask where zeros -> dims to ignore\n bitmap = _.filter,\n mask = bitmap.mask;\n\n // exit early if no relevant filter changes\n if ((mask & ignore) === 0) return pulse.StopPropagation;\n\n var output = pulse.fork(pulse.ALL),\n data = bitmap.data(),\n curr = bitmap.curr(),\n prev = bitmap.prev(),\n pass = function(k) {\n return !(curr[k] & ignore) ? data[k] : null;\n };\n\n // propagate all mod tuples that pass the filter\n output.filter(output.MOD, pass);\n\n // determine add & rem tuples via filter functions\n // for efficiency, we do *not* populate new arrays,\n // instead we add filter functions applied downstream\n\n if (!(mask & (mask-1))) { // only one filter changed\n output.filter(output.ADD, pass);\n output.filter(output.REM, function(k) {\n return (curr[k] & ignore) === mask ? data[k] : null;\n });\n\n } else { // multiple filters changed\n output.filter(output.ADD, function(k) {\n var c = curr[k] & ignore,\n f = !c && (c ^ (prev[k] & ignore));\n return f ? data[k] : null;\n });\n output.filter(output.REM, function(k) {\n var c = curr[k] & ignore,\n f = c && !(c ^ (c ^ (prev[k] & ignore)));\n return f ? data[k] : null;\n });\n }\n\n // add filter to source data in case of reflow...\n return output.filter(output.SOURCE, function(t) { return pass(t._index); });\n};\n","import {isString} from 'vega-util';\n\nvar Default = 'default';\n\nexport default function(view) {\n var cursor = view._signals.cursor;\n\n // add cursor signal to dataflow, if needed\n if (!cursor) {\n view._signals.cursor = (cursor = view.add({user: Default, item: null}));\n }\n\n // evaluate cursor on each mousemove event\n view.on(view.events('view', 'mousemove'), cursor,\n function(_, event) {\n var value = cursor.value,\n user = value ? (isString(value) ? value : value.user) : Default,\n item = event.item && event.item.cursor || null;\n\n return (value && user === value.user && item == value.item) ? value\n : {user: user, item: item};\n }\n );\n\n // when cursor signal updates, set visible cursor\n view.add(null, function(_) {\n var user = _.cursor,\n item = this.value;\n\n if (!isString(user)) {\n item = user.item;\n user = user.user;\n }\n\n setCursor(user && user !== Default ? user : (item || user));\n\n return item;\n }, {cursor: cursor});\n}\n\nfunction setCursor(cursor) {\n // set cursor on document body\n // this ensures cursor applies even if dragging out of view\n if (typeof document !== 'undefined' && document.body) {\n document.body.style.cursor = cursor;\n }\n}\n","import {changeset, isChangeSet} from 'vega-dataflow';\nimport {error} from 'vega-util';\n\nexport function dataref(view, name) {\n var data = view._runtime.data;\n if (!data.hasOwnProperty(name)) {\n error('Unrecognized data set: ' + name);\n }\n return data[name];\n}\n\nexport function data(name) {\n return dataref(this, name).values.value;\n}\n\nexport function change(name, changes) {\n if (!isChangeSet(changes)) {\n error('Second argument to changes must be a changeset.');\n }\n var dataset = dataref(this, name);\n dataset.modified = true;\n return this.pulse(dataset.input, changes);\n}\n\nexport function insert(name, _) {\n return change.call(this, name, changeset().insert(_));\n}\n\nexport function remove(name, _) {\n return change.call(this, name, changeset().remove(_));\n}\n","export function width(view) {\n var padding = view.padding();\n return Math.max(0, view._viewWidth + padding.left + padding.right);\n}\n\nexport function height(view) {\n var padding = view.padding();\n return Math.max(0, view._viewHeight + padding.top + padding.bottom);\n}\n\nexport function offset(view) {\n var padding = view.padding(),\n origin = view._origin;\n return [\n padding.left + origin[0],\n padding.top + origin[1]\n ];\n}\n\nexport function resizeRenderer(view) {\n var origin = offset(view),\n w = width(view),\n h = height(view);\n\n view._renderer.background(view._background);\n view._renderer.resize(w, h, origin);\n view._handler.origin(origin);\n\n view._resizeListeners.forEach(function(handler) {\n try {\n handler(w, h);\n } catch (error) {\n view.error(error);\n }\n });\n}\n","import eventExtend from './events-extend';\nimport {EventStream} from 'vega-dataflow';\nimport {extend, isArray, toSet} from 'vega-util';\n\nvar VIEW = 'view',\n TIMER = 'timer',\n WINDOW = 'window',\n NO_TRAP = {trap: false};\n\n/**\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\nexport function initializeEventConfig(config) {\n config = extend({}, config);\n\n var def = config.defaults;\n if (def) {\n if (isArray(def.prevent)) {\n def.prevent = toSet(def.prevent);\n }\n if (isArray(def.allow)) {\n def.allow = toSet(def.allow);\n }\n }\n\n return config;\n}\n\nfunction prevent(view, type) {\n var def = view._eventConfig.defaults,\n prevent = def && def.prevent,\n allow = def && def.allow;\n\n return prevent === false || allow === true ? false\n : prevent === true || allow === false ? true\n : prevent ? prevent[type]\n : allow ? !allow[type]\n : view.preventDefault();\n}\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @return {EventStream}\n */\nexport function events(source, type, filter) {\n var view = this,\n s = new EventStream(filter),\n send = function(e, item) {\n if (source === VIEW && prevent(view, type)) {\n e.preventDefault();\n }\n try {\n s.receive(eventExtend(view, e, item));\n } catch (error) {\n view.error(error);\n } finally {\n view.run();\n }\n },\n sources;\n\n if (source === TIMER) {\n view.timer(send, type);\n }\n\n else if (source === VIEW) {\n // send traps errors, so use {trap: false} option\n view.addEventListener(type, send, NO_TRAP);\n }\n\n else {\n if (source === WINDOW) {\n if (typeof window !== 'undefined') sources = [window];\n } else if (typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n }\n\n if (!sources) {\n view.warn('Can not resolve event source: ' + source);\n } else {\n for (var i=0, n=sources.length; i 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n let r0 = Math.round(start / step), r1 = Math.round(stop / step);\n if (r0 * step < start) ++r0;\n if (r1 * step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) * step;\n } else {\n step = -step;\n let r0 = Math.round(start * step), r1 = Math.round(stop * step);\n if (r0 / step < start) ++r0;\n if (r1 / step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","import element from './element';\nimport {debounce} from 'vega-util';\nimport {tickStep} from 'd3-array';\n\nvar BindClass = 'vega-bind',\n NameClass = 'vega-bind-name',\n RadioClass = 'vega-bind-radio',\n OptionClass = 'vega-option-';\n\n/**\n * Bind a signal to an external HTML input element. The resulting two-way\n * binding will propagate input changes to signals, and propagate signal\n * changes to the input element state. If this view instance has no parent\n * element, we assume the view is headless and no bindings are created.\n * @param {Element|string} el - The parent DOM element to which the input\n * element should be appended as a child. If string-valued, this argument\n * will be treated as a CSS selector. If null or undefined, the parent\n * element of this view will be used as the element.\n * @param {object} param - The binding parameters which specify the signal\n * to bind to, the input element type, and type-specific configuration.\n * @return {View} - This view instance.\n */\nexport default function(view, el, binding) {\n if (!el) return;\n\n var param = binding.param,\n bind = binding.state;\n\n if (!bind) {\n bind = binding.state = {\n elements: null,\n active: false,\n set: null,\n update: function(value) {\n if (value !== view.signal(param.signal)) {\n bind.source = true;\n view.signal(param.signal, value).run();\n }\n }\n };\n if (param.debounce) {\n bind.update = debounce(param.debounce, bind.update);\n }\n }\n\n generate(bind, el, param, view.signal(param.signal));\n\n if (!bind.active) {\n view.on(view._signals[param.signal], null, function() {\n bind.source\n ? (bind.source = false)\n : bind.set(view.signal(param.signal));\n });\n bind.active = true;\n }\n\n return bind;\n}\n\n/**\n * Generate an HTML input form element and bind it to a signal.\n */\nfunction generate(bind, el, param, value) {\n var div = element('div', {'class': BindClass});\n\n div.appendChild(element('span',\n {'class': NameClass},\n (param.name || param.signal)\n ));\n\n el.appendChild(div);\n\n var input = form;\n switch (param.input) {\n case 'checkbox': input = checkbox; break;\n case 'select': input = select; break;\n case 'radio': input = radio; break;\n case 'range': input = range; break;\n }\n\n input(bind, div, param, value);\n}\n\n/**\n * Generates an arbitrary input form element.\n * The input type is controlled via user-provided parameters.\n */\nfunction form(bind, el, param, value) {\n var node = element('input');\n\n for (var key in param) {\n if (key !== 'signal' && key !== 'element') {\n node.setAttribute(key === 'input' ? 'type' : key, param[key]);\n }\n }\n node.setAttribute('name', param.signal);\n node.value = value;\n\n el.appendChild(node);\n\n node.addEventListener('input', function() {\n bind.update(node.value);\n });\n\n bind.elements = [node];\n bind.set = function(value) { node.value = value; };\n}\n\n/**\n * Generates a checkbox input element.\n */\nfunction checkbox(bind, el, param, value) {\n var attr = {type: 'checkbox', name: param.signal};\n if (value) attr.checked = true;\n var node = element('input', attr);\n\n el.appendChild(node);\n\n node.addEventListener('change', function() {\n bind.update(node.checked);\n });\n\n bind.elements = [node];\n bind.set = function(value) { node.checked = !!value || null; }\n}\n\n/**\n * Generates a selection list input element.\n */\nfunction select(bind, el, param, value) {\n var node = element('select', {name: param.signal});\n\n param.options.forEach(function(option) {\n var attr = {value: option};\n if (valuesEqual(option, value)) attr.selected = true;\n node.appendChild(element('option', attr, option+''));\n });\n\n el.appendChild(node);\n\n node.addEventListener('change', function() {\n bind.update(param.options[node.selectedIndex]);\n });\n\n bind.elements = [node];\n bind.set = function(value) {\n for (var i=0, n=param.options.length; i\n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \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 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*/\nimport ASTNode from './ast';\n\nvar TokenName,\n source,\n index,\n length,\n lookahead;\n\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\n\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\n\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression';\n\n// Error messages should be identical to V8.\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\n\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.';\n\n// See also tools/generate-unicode-regex.py.\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\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\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\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\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\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]'),\n // eslint-disable-next-line no-misleading-character-class\n RegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\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\\\\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-\\\\u19D9\\\\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\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\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\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\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]');\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\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\n\nfunction isDecimalDigit(ch) {\n return (ch >= 0x30 && ch <= 0x39); // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n}\n\n// 7.2 White Space\n\nfunction 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// 7.3 Line Terminators\n\nfunction isLineTerminator(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);\n}\n\n// 7.6 Identifier Names and Identifiers\n\nfunction 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) && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch)));\n}\n\nfunction 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) && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch)));\n}\n\n// 7.6.1.1 Keywords\n\nvar keywords = {\n 'if':1, 'in':1, 'do':1,\n 'var':1, 'for':1, 'new':1, 'try':1, 'let':1,\n 'this':1, 'else':1, 'case':1, 'void':1, 'with':1, 'enum':1,\n 'while':1, 'break':1, 'catch':1, 'throw':1, 'const':1, 'yield':1, 'class':1, 'super':1,\n 'return':1, 'typeof':1, 'delete':1, 'switch':1, 'export':1, 'import':1, 'public':1, 'static':1,\n 'default':1, 'finally':1, 'extends':1, 'package':1, 'private':1,\n 'function':1, 'continue':1, 'debugger':1,\n 'interface':1, 'protected':1,\n 'instanceof':1, 'implements':1\n};\n\nfunction skipComment() {\n var ch;\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\n\nfunction 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 throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\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 throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // UTF-16 Encoding\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n cu1 = ((code - 0x10000) >> 10) + 0xD800;\n cu2 = ((code - 0x10000) & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n var ch, id;\n\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id = ch;\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n if (!isIdentifierPart(ch)) {\n break;\n }\n ++index;\n id += String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id += ch;\n }\n }\n\n return id;\n}\n\nfunction 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 getEscapedIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n}\n\nfunction 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) ? getEscapedIdentifier() : 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 = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) { // eslint-disable-line no-prototype-builtins\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n}\n\n// 7.7 Punctuators\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n\n switch (code) {\n\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n case 0x28: // ( open bracket\n case 0x29: // ) close bracket\n case 0x3B: // ; semicolon\n case 0x2C: // , comma\n case 0x7B: // { open curly brace\n case 0x7D: // } close curly brace\n case 0x5B: // [\n case 0x5D: // ]\n case 0x3A: // :\n case 0x3F: // ?\n case 0x7E: // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n\n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (U+003D) marks an assignment or comparison operator.\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n case 0x2D: // -\n case 0x2F: // /\n case 0x3C: // <\n case 0x3E: // >\n case 0x5E: // ^\n case 0x7C: // |\n case 0x25: // %\n case 0x26: // &\n case 0x2A: // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n\n case 0x21: // !\n case 0x3D: // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n }\n\n // 4-character punctuator: >>>=\n\n ch4 = source.substr(index, 4);\n\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n }\n\n // 3-character punctuators: === !== >>> <<= >>=\n\n ch3 = ch4.substr(0, 3);\n\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n }\n\n // Other 2-character punctuators: ++ -- << >> && ||\n ch2 = ch3.substr(0, 2);\n\n if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n\n // 1-character punctuators: < > = ! + - * % & | ^ /\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n}\n\n// 7.8.3 Numeric Literals\n\nfunction 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 throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\n\nfunction scanOctalLiteral(start) {\n var number = '0' + source[index++];\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\n\nfunction 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 if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n }\n\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\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 throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n}\n\n// 7.8.4 String Literals\n\nfunction scanStringLiteral() {\n var str = '',\n quote, start, ch, code, 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 str += scanHexEscape(ch);\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\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch);\n\n // \\0 is not octal escape sequence\n if (code !== 0) {\n octal = true;\n }\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 str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\n\nfunction testRegExp(pattern, flags) {\n var tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp\n .replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n throwError({}, MessageInvalidRegExp);\n })\n .replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n }\n\n // First, detect invalid regular expressions.\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\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\nfunction 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 throwError({}, MessageUnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\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 throwError({}, MessageUnterminatedRegExp);\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\nfunction scanRegExpFlags() {\n var ch, str, flags;\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 throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n\n return {\n value: flags,\n literal: str\n };\n}\n\nfunction scanRegExp() {\n var start, body, flags, value;\n\n lookahead = null;\n skipComment();\n start = index;\n\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\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\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier ||\n token.type === TokenKeyword ||\n token.type === TokenBooleanLiteral ||\n token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n var ch;\n\n skipComment();\n\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n\n ch = source.charCodeAt(index);\n\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Very common: ( and ) and ;\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n }\n\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n}\n\nfunction lex() {\n var token;\n\n token = lookahead;\n index = token.end;\n\n lookahead = advance();\n\n index = token.end;\n\n return token;\n}\n\nfunction peek() {\n var pos;\n\n pos = index;\n\n lookahead = advance();\n index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n var node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n var node = new ASTNode((operator === '||' || operator === '&&') ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\n\nfunction finishCallExpression(callee, args) {\n var node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n var node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\n\nfunction finishIdentifier(name) {\n var node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\n\nfunction finishLiteral(token) {\n var node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n node.regex = token.regex;\n }\n return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n var node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\n\nfunction finishObjectExpression(properties) {\n var node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\n\nfunction finishProperty(kind, key, value) {\n var node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n var node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n}\n\n// Throw an exception\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(\n /%(\\d)/g,\n (whole, index) => {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n }\n );\n\n\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n}\n\n// Throw an exception because of the token.\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n }\n\n // BooleanLiteral, NullLiteral, or Punctuator.\n throwError(token, MessageUnexpectedToken, token.value);\n}\n\n// Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\nfunction expect(value) {\n var token = lex();\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n}\n\n// Return true if the next token matches the specified punctuator.\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n}\n\n// Return true if the next token matches the specified keyword\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n}\n\n// 11.1.4 Array Initialiser\n\nfunction parseArrayInitialiser() {\n var elements = [];\n\n index = lookahead.start;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n\n return finishArrayExpression(elements);\n}\n\n// 11.1.5 Object Initialiser\n\nfunction parseObjectPropertyKey() {\n var token;\n\n index = lookahead.start;\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 if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n return finishLiteral(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n var token, key, id, value;\n\n index = lookahead.start;\n token = lookahead;\n\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\n\nfunction parseObjectInitialiser() {\n var properties = [],\n property, name, key, map = {},\n toString = String;\n\n index = lookahead.start;\n expect('{');\n\n while (!match('}')) {\n property = parseObjectProperty();\n\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n\n key = '$' + name;\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n\n properties.push(property);\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n\n return finishObjectExpression(properties);\n}\n\n// 11.1.6 The Grouping Operator\n\nfunction parseGroupExpression() {\n var expr;\n\n expect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n return expr;\n}\n\n\n// 11.1 Primary Expressions\n\nvar legalKeywords = {\n 'if': 1\n};\n\nfunction parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n if (match('[')) {\n return parseArrayInitialiser();\n }\n\n if (match('{')) {\n return parseObjectInitialiser();\n }\n\n type = lookahead.type;\n index = lookahead.start;\n\n\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = (token.value === 'true');\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n\n return expr;\n}\n\n// 11.2 Left-Hand-Side Expressions\n\nfunction parseArguments() {\n var args = [];\n\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n return args;\n}\n\nfunction parseNonComputedProperty() {\n var token;\n index = lookahead.start;\n token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = parseExpression();\n\n expect(']');\n\n return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n\n expr = parsePrimaryExpression();\n\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n\n return expr;\n}\n\n// 11.3 Postfix Expressions\n\nfunction parsePostfixExpression() {\n var expr = parseLeftHandSideExpressionAllowCall();\n\n if (lookahead.type === TokenPunctuator) {\n if ((match('++') || match('--'))) {\n throw new Error(DISABLED);\n }\n }\n\n return expr;\n}\n\n// 11.4 Unary Operators\n\nfunction parseUnaryExpression() {\n var token, expr;\n\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n}\n\nfunction binaryPrecedence(token) {\n var prec = 0;\n\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\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 case 'in':\n prec = 7;\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// 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n\n marker = lookahead;\n left = parseUnaryExpression();\n\n token = lookahead;\n prec = binaryPrecedence(token);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = 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 = 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 markers.pop();\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n}\n\n// 11.12 Conditional Operator\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n}\n\n// 11.14 Comma Operator\n\nfunction parseExpression() {\n var expr = parseConditionalExpression();\n\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\n\nexport default function(code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n\n peek();\n\n var expr = parseExpression();\n\n if (lookahead.type !== TokenEOF) {\n throw new Error('Unexpect token after expression.');\n }\n return expr;\n}\n","export default {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n","import {error} from 'vega-util';\n\nexport default function(codegen) {\n\n function fncall(name, args, cast, type) {\n let obj = codegen(args[0]);\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n return obj + '.' + name + (type < 0 ? '' : type === 0 ?\n '()' :\n '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n\n function fn(name, cast, type) {\n return args => fncall(name, args, cast, type);\n }\n\n const DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n\n return {\n // MATH functions\n isNaN: 'Number.isNaN',\n isFinite: 'Number.isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n\n clamp: function(args) {\n if (args.length < 3) error('Missing arguments to clamp function.');\n if (args.length > 3) error('Too many arguments to clamp function.');\n const a = args.map(codegen);\n return 'Math.max('+a[1]+', Math.min('+a[2]+','+a[0]+'))';\n },\n\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n\n // sequence functions\n length: fn('length', null, -1),\n join: fn('join', null),\n indexof: fn('indexOf', null),\n lastindexof: fn('lastIndexOf', null),\n slice: fn('slice', null),\n\n reverse: function(args) {\n return '('+codegen(args[0])+').slice().reverse()';\n },\n\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n replace: fn('replace', STRING),\n trim: fn('trim', STRING, 0),\n\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n\n // Control Flow functions\n if: function(args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n const a = args.map(codegen);\n return '('+a[0]+'?'+a[1]+':'+a[2]+')';\n }\n };\n}\n","import {format as d3_format} from 'd3-format';\nimport {\n timeFormat as d3_timeFormat,\n timeParse as d3_timeParse,\n utcFormat as d3_utcFormat,\n utcParse as d3_utcParse\n} from 'd3-time-format';\n\nvar formatCache = {};\n\nfunction formatter(type, method, specifier) {\n var k = type + ':' + specifier,\n e = formatCache[k];\n if (!e || e[0] !== method) {\n formatCache[k] = (e = [method, method(specifier)]);\n }\n return e[1];\n}\n\nexport function format(_, specifier) {\n return formatter('format', d3_format, specifier)(_);\n}\n\nexport function timeFormat(_, specifier) {\n return formatter('timeFormat', d3_timeFormat, specifier)(_);\n}\n\nexport function utcFormat(_, specifier) {\n return formatter('utcFormat', d3_utcFormat, specifier)(_);\n}\n\nexport function timeParse(_, specifier) {\n return formatter('timeParse', d3_timeParse, specifier)(_);\n}\n\nexport function utcParse(_, specifier) {\n return formatter('utcParse', d3_utcParse, specifier)(_);\n}\n\nvar dateObj = new Date(2000, 0, 1);\n\nfunction time(month, day, specifier) {\n dateObj.setMonth(month);\n dateObj.setDate(day);\n return timeFormat(dateObj, specifier);\n}\n\nexport function monthFormat(month) {\n return time(month, 1, '%B');\n}\n\nexport function monthAbbrevFormat(month) {\n return time(month, 1, '%b');\n}\n\nexport function dayFormat(day) {\n return time(0, 2 + day, '%A');\n}\n\nexport function dayAbbrevFormat(day) {\n return time(0, 2 + day, '%a');\n}\n","/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nexport function extent(array) {\n var i = 0, n, v, min, max;\n\n if (array && (n = array.length)) {\n // find first valid value\n for (v = array[i]; v == null || v !== v; v = array[++i]);\n min = max = v;\n\n // visit all other values\n for (; i max) max = v;\n }\n }\n }\n\n return [min, max];\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nexport function inrange(value, range, left, right) {\n var r0 = range[0], r1 = range[range.length-1], t;\n if (r0 > r1) {\n t = r0;\n r0 = r1;\n r1 = t;\n }\n left = left === undefined || left;\n right = right === undefined || right;\n\n return (left ? r0 <= value : r0 < value) &&\n (right ? value <= r1 : value < r1);\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nexport function clampRange(range, min, max) {\n var lo = range[0],\n hi = range[1],\n span;\n\n if (hi < lo) {\n span = hi;\n hi = lo;\n lo = span;\n }\n span = hi - lo;\n\n return span >= (max - min)\n ? [min, max]\n : [\n (lo = Math.min(Math.max(lo, min), max - span)),\n lo + span\n ];\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\nexport function span(array) {\n return (array[array.length-1] - array[0]) || 0;\n}\n","function log(df, method, args) {\n try {\n df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args)));\n } catch (err) {\n df.warn(err);\n }\n return args[args.length-1];\n}\n\nexport function warn() {\n return log(this.context.dataflow, 'warn', arguments);\n}\n\nexport function info() {\n return log(this.context.dataflow, 'info', arguments);\n}\n\nexport function debug() {\n return log(this.context.dataflow, 'debug', arguments);\n}\n","var _window = (typeof window !== 'undefined' && window) || null;\n\nexport function screen() {\n return _window ? _window.screen : {};\n}\n\nexport function windowSize() {\n return _window\n ? [_window.innerWidth, _window.innerHeight]\n : [undefined, undefined];\n}\n\nexport function containerSize() {\n var view = this.context.dataflow,\n el = view.container && view.container();\n return el\n ? [el.clientWidth, el.clientHeight]\n : [undefined, undefined];\n}\n","export var Literal = 'Literal';\nexport var Identifier = 'Identifier';\n","export var indexPrefix = '@';\nexport var scalePrefix = '%';\nexport var dataPrefix = ':';\n","import {Literal, Identifier} from './ast';\nimport {scalePrefix} from './prefixes';\nimport {bandSpace} from 'vega-scale';\nimport {isArray, isFunction, isString} from 'vega-util';\n\nexport function getScale(name, ctx) {\n var s;\n return isFunction(name) ? name\n : isString(name) ? (s = ctx.scales[name]) && s.value\n : undefined;\n}\n\nfunction addScaleDependency(scope, params, name) {\n var scaleName = scalePrefix + name;\n if (!params.hasOwnProperty(scaleName)) {\n try {\n params[scaleName] = scope.scaleRef(name);\n } catch (err) {\n // TODO: error handling? warning?\n }\n }\n}\n\nexport function scaleVisitor(name, args, scope, params) {\n if (args[0].type === Literal) {\n // add scale dependency\n addScaleDependency(scope, params, args[0].value);\n }\n else if (args[0].type === Identifier) {\n // indirect scale lookup; add all scales as parameters\n for (name in scope.scales) {\n addScaleDependency(scope, params, name);\n }\n }\n}\n\nexport function range(name, group) {\n var s = getScale(name, (group || this).context);\n return s && s.range ? s.range() : [];\n}\n\nexport function domain(name, group) {\n var s = getScale(name, (group || this).context);\n return s ? s.domain() : [];\n}\n\nexport function bandwidth(name, group) {\n var s = getScale(name, (group || this).context);\n return s && s.bandwidth ? s.bandwidth() : 0;\n}\n\nexport function bandspace(count, paddingInner, paddingOuter) {\n return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0);\n}\n\nexport function copy(name, group) {\n var s = getScale(name, (group || this).context);\n return s ? s.copy() : undefined;\n}\n\nexport function scale(name, value, group) {\n var s = getScale(name, (group || this).context);\n return s ? s(value) : undefined;\n}\n\nexport function invert(name, range, group) {\n var s = getScale(name, (group || this).context);\n return !s ? undefined\n : isArray(range) ? (s.invertRange || s.invert)(range)\n : (s.invert || s.invertExtent)(range);\n}\n","import adder from \"./adder.js\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = adder();\n\nvar areaSum = adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum.reset();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum.reset();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import adder from \"./adder.js\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum = adder(),\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum.reset();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n },\n sphere: function() {\n lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, degrees, epsilon, epsilon2, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = sqrt(cx * cx + cy * cy + cz * cz),\n w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2 += v * cx;\n Y2 += v * cy;\n Z2 += v * cz;\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n stream(object, centroidStream);\n\n var x = X2,\n y = Y2,\n z = Z2,\n m = x * x + y * y + z * z;\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = x * x + y * y + z * z;\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees];\n}\n","import {\n geoArea as area,\n geoBounds as bounds,\n geoCentroid as centroid\n} from 'd3-geo';\nimport {getScale} from './scale';\n\nfunction geoMethod(methodName, globalMethod) {\n return function(projection, geojson, group) {\n if (projection) {\n // projection defined, use it\n var p = getScale(projection, (group || this).context);\n return p && p.path[methodName](geojson);\n } else {\n // projection undefined, use global method\n return globalMethod(geojson);\n }\n };\n}\n\nexport var geoArea = geoMethod('area', area);\nexport var geoBounds = geoMethod('bounds', bounds);\nexport var geoCentroid = geoMethod('centroid', centroid);\n","import {Literal} from './ast';\nimport {dataPrefix, indexPrefix} from './prefixes';\nimport {error, truthy} from 'vega-util';\n\nexport function data(name) {\n var data = this.context.data[name];\n return data ? data.values.value : [];\n}\n\nexport function dataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) {\n error('First argument to data functions must be a string literal.');\n }\n\n var data = args[0].value,\n dataName = dataPrefix + data;\n\n if (!params.hasOwnProperty(dataName)) {\n params[dataName] = scope.getData(data).tuplesRef();\n }\n}\n\nexport function indata(name, field, value) {\n var index = this.context.data[name]['index:' + field],\n entry = index ? index.value.get(value) : undefined;\n return entry ? entry.count : entry;\n}\n\nexport function indataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to indata must be a string literal.');\n if (args[1].type !== Literal) error('Second argument to indata must be a string literal.');\n\n var data = args[0].value,\n field = args[1].value,\n indexName = indexPrefix + field;\n\n if (!params.hasOwnProperty(indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n}\n\nexport function setdata(name, tuples) {\n var df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input;\n\n df.pulse(input, df.changeset().remove(truthy).insert(tuples));\n return 1;\n}\n","import {data} from './data';\n\nvar EMPTY = {};\n\nfunction datum(d) { return d.data; }\n\nfunction treeNodes(name, context) {\n var tree = data.call(context, name);\n return tree.root && tree.root.lookup || EMPTY;\n}\n\nexport function treePath(name, source, target) {\n var nodes = treeNodes(name, this),\n s = nodes[source],\n t = nodes[target];\n return s && t ? s.path(t).map(datum) : undefined;\n}\n\nexport function treeAncestors(name, node) {\n var n = treeNodes(name, this)[node];\n return n ? n.ancestors().map(datum) : undefined;\n}\n","import {isTuple} from 'vega-dataflow';\nimport {isArray, truthy} from 'vega-util';\n\nfunction equal(a, b) {\n return a === b || a !== a && b !== b ? true\n : isArray(a) && isArray(b) && a.length === b.length ? equalArray(a, b)\n : false;\n}\n\nfunction equalArray(a, b) {\n for (var i=0, n=a.length; i, values: array<*>}.\n * Fielddef is of the form\n * {field: string, channel: string, type: 'E' | 'R'} where\n * 'type' identifies whether tuples in the dataset enumerate\n * values for the field, or specify a continuous range.\n * @param {object} datum - The tuple to test for inclusion.\n * @param {string} op - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @return {boolean} - True if the datum is in the selection, false otherwise.\n */\nexport function vlSelectionTest(name, datum, op) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === INTERSECT,\n n = entries.length,\n i = 0,\n entry, miss, count, unit, b;\n\n for (; i= 2 && args[args.length-1].value,\n field = 'unit',\n indexName = indexPrefix + field;\n\n if (op === INTERSECT && !params.hasOwnProperty(indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n\n dataVisitor(name, args, scope, params);\n}\n\n/**\n * Resolves selection for use as a scale domain or reads via the API.\n * @param {string} name - The name of the dataset representing the selection\n * @param {string} [op='union'] - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @returns {object} An object of selected fields and values.\n */\nexport function vlSelectionResolve(name, op) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n resolved = {}, types = {},\n entry, fields, values, unit, field, res, resUnit, type, union,\n n = entries.length, i = 0, j, m;\n\n // First union all entries within the same unit.\n for (; i < n; ++i) {\n entry = entries[i];\n unit = entry.unit;\n fields = entry.fields;\n values = entry.values;\n\n for (j = 0, m = fields.length; j < m; ++j) {\n field = fields[j];\n res = resolved[field.field] || (resolved[field.field] = {});\n resUnit = res[unit] || (res[unit] = []);\n types[field.field] = type = field.type.charAt(0);\n union = ops[type + '_union'];\n res[unit] = union(resUnit, array(values[j]));\n }\n }\n\n // Then resolve fields across units as per the op.\n op = op || UNION;\n Object.keys(resolved).forEach(function (field) {\n resolved[field] = Object.keys(resolved[field])\n .map(function (unit) { return resolved[field][unit]; })\n .reduce(function (acc, curr) {\n return acc === undefined ? curr :\n ops[types[field] + '_' + op](acc, curr);\n });\n });\n\n return resolved;\n}\n\nvar ops = {\n 'E_union': function (base, value) {\n if (!base.length) return value;\n\n var i = 0, n = value.length;\n for (; i= 0; });\n },\n\n 'R_union': function (base, value) {\n var lo = toNumber(value[0]), hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n\n if (!base.length) return [lo, hi];\n if (base[0] > lo) base[0] = lo;\n if (base[1] < hi) base[1] = hi;\n return base;\n },\n\n 'R_intersect': function (base, value) {\n var lo = toNumber(value[0]), hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n\n if (!base.length) return [lo, hi];\n if (hi < base[0] || base[1] < lo) {\n return [];\n } else {\n if (base[0] < lo) base[0] = lo;\n if (base[1] > hi) base[1] = hi;\n }\n return base;\n }\n}\n","import {inrange} from './arrays';\nimport {Literal} from './ast';\nimport {dataVisitor} from './data';\nimport {indexPrefix} from './prefixes';\nimport {error, field, isNumber, isString, isDate, toNumber} from 'vega-util';\n\nvar BIN = 'bin_',\n INTERSECT = 'intersect',\n UNION = 'union',\n UNIT_INDEX = 'index:unit';\n\nfunction testPoint(datum, entry) {\n var fields = entry.fields,\n values = entry.values,\n getter = entry.getter || (entry.getter = []),\n n = fields.length,\n i = 0, dval;\n\n for (; i, fields: array, values: array<*>, bins: object}\nexport function vlPoint(name, datum, op) {\n return vlSelection.call(this, name, datum, op, testPoint);\n}\n\n// Assumes interval selection typles are of the form:\n// {unit: string, intervals: array<{encoding: string, field:string, extent:array}>}\nexport function vlInterval(name, datum, op) {\n return vlSelection.call(this, name, datum, op, testInterval);\n}\n\nexport function vlMultiVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to indata must be a string literal.');\n\n var data = args[0].value,\n // vlMulti, vlMultiDomain have different # of params, but op is always last.\n op = args.length >= 2 && args[args.length-1].value,\n field = 'unit',\n indexName = indexPrefix + field;\n\n if (op === INTERSECT && !params.hasOwnProperty(indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n\n dataVisitor(name, args, scope, params);\n}\n\n/**\n * Materializes a point selection as a scale domain.\n * @param {string} name - The name of the dataset representing the selection.\n * @param {string} [encoding] - A particular encoding channel to materialize.\n * @param {string} [field] - A particular field to materialize.\n * @param {string} [op='intersect'] - The set operation for combining selections.\n * One of 'intersect' (default) or 'union'.\n * @returns {array} An array of values to serve as a scale domain.\n */\nexport function vlPointDomain(name, encoding, field, op) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n entry = entries[0],\n i = 0, n, index, values, continuous, units;\n\n if (!entry) return undefined;\n\n for (n = encoding ? entry.encodings.length : entry.fields.length; i 2;\n break;\n }\n }\n\n values = entries.reduce(function(acc, entry) {\n var extent = entry.intervals[index].extent,\n value = discrete\n ? extent.map(function (d) { return {unit: entry.unit, value: d}; })\n : {unit: entry.unit, value: extent};\n\n if (discrete) {\n acc.push.apply(acc, value);\n } else {\n acc.push(value);\n }\n return acc;\n }, []);\n\n\n return discrete ? discreteDomain(values, op) : continuousDomain(values, op);\n}\n\nfunction discreteDomain(entries, op) {\n var units = {}, count = 0,\n values = {}, domain = [],\n i = 0, n = entries.length,\n entry, unit, v, key;\n\n for (; i hi) {\n hi = extent[0];\n lo = extent[1];\n }\n domain = domain ? merge(domain, lo, hi) : [lo, hi];\n }\n\n return domain && domain.length && (+domain[0] !== +domain[1])\n ? domain\n : undefined;\n}\n\nfunction unionInterval(domain, lo, hi) {\n if (domain[0] > lo) domain[0] = lo;\n if (domain[1] < hi) domain[1] = hi;\n return domain;\n}\n\nfunction intersectInterval(domain, lo, hi) {\n if (hi < domain[0] || domain[1] < lo) {\n return [];\n } else {\n if (domain[0] < lo) domain[0] = lo;\n if (domain[1] > hi) domain[1] = hi;\n }\n return domain;\n}\n","import {isTuple} from 'vega-dataflow';\nimport {codegen, constants, functions} from 'vega-expression';\nimport {random} from 'vega-statistics';\nimport {\n isArray, isBoolean, isDate, isNumber, isObject, isRegExp, isString,\n panLinear, panLog, panPow, zoomLinear, zoomLog, zoomPow,\n toBoolean, toDate, toNumber, toString,\n pad, peek, stringValue, truncate\n} from 'vega-util';\nimport {rgb, lab, hcl, hsl} from 'd3-color';\nimport {range as sequence} from 'd3-array';\n\nimport {\n format, utcFormat, timeFormat, utcParse, timeParse,\n monthFormat, monthAbbrevFormat,\n dayFormat, dayAbbrevFormat\n} from './format';\nimport {extent, inrange, clampRange, span} from './arrays';\nimport {quarter, utcquarter} from './quarter';\nimport {warn, info, debug} from './log';\nimport inScope from './inscope';\nimport {pinchDistance, pinchAngle} from './pinch';\nimport {containerSize, screen, windowSize} from './window';\nimport flush from './flush';\nimport merge from './merge';\nimport {range, domain, bandwidth, bandspace, copy, scale, invert, scaleVisitor} from './scale';\nimport scaleGradient from './scale-gradient';\nimport {geoArea, geoBounds, geoCentroid} from './geo';\nimport {geoShape, pathShape} from './shape';\nimport {data, indata, setdata, dataVisitor, indataVisitor} from './data';\nimport {treePath, treeAncestors} from './tree';\nimport encode from './encode';\nimport modify from './modify';\nimport {vlSelectionTest, vlSelectionResolve, vlSelectionVisitor} from './selection';\nimport {vlPoint, vlPointDomain, vlMultiVisitor, vlInterval, vlIntervalDomain} from './selection.deprecated';\n\n// Expression function context object\nexport var functionContext = {\n random: function() { return random(); }, // override default\n isArray: isArray,\n isBoolean: isBoolean,\n isDate: isDate,\n isNumber: isNumber,\n isObject: isObject,\n isRegExp: isRegExp,\n isString: isString,\n isTuple: isTuple,\n toBoolean: toBoolean,\n toDate: toDate,\n toNumber: toNumber,\n toString: toString,\n pad: pad,\n peek: peek,\n truncate: truncate,\n rgb: rgb,\n lab: lab,\n hcl: hcl,\n hsl: hsl,\n sequence: sequence,\n format: format,\n utcFormat: utcFormat,\n utcParse: utcParse,\n timeFormat: timeFormat,\n timeParse: timeParse,\n monthFormat: monthFormat,\n monthAbbrevFormat: monthAbbrevFormat,\n dayFormat: dayFormat,\n dayAbbrevFormat: dayAbbrevFormat,\n quarter: quarter,\n utcquarter: utcquarter,\n warn: warn,\n info: info,\n debug: debug,\n extent: extent,\n inScope: inScope,\n clampRange: clampRange,\n pinchDistance: pinchDistance,\n pinchAngle: pinchAngle,\n screen: screen,\n containerSize: containerSize,\n windowSize: windowSize,\n span: span,\n merge: merge,\n flush: flush,\n bandspace: bandspace,\n inrange: inrange,\n setdata: setdata,\n pathShape: pathShape,\n panLinear: panLinear,\n panLog: panLog,\n panPow: panPow,\n zoomLinear: zoomLinear,\n zoomLog: zoomLog,\n zoomPow: zoomPow,\n encode: encode,\n modify: modify\n};\n\nvar eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'], // event functions\n eventPrefix = 'event.vega.', // event function prefix\n thisPrefix = 'this.', // function context prefix\n astVisitors = {}; // AST visitors for dependency analysis\n\nexport function expressionFunction(name, fn, visitor) {\n if (arguments.length === 1) {\n return functionContext[name];\n }\n\n // register with the functionContext\n functionContext[name] = fn;\n\n // if there is an astVisitor register that, too\n if (visitor) astVisitors[name] = visitor;\n\n // if the code generator has already been initialized,\n // we need to also register the function with it\n if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name;\n return this;\n}\n\n// register expression functions with ast visitors\nexpressionFunction('bandwidth', bandwidth, scaleVisitor);\nexpressionFunction('copy', copy, scaleVisitor);\nexpressionFunction('domain', domain, scaleVisitor);\nexpressionFunction('range', range, scaleVisitor);\nexpressionFunction('invert', invert, scaleVisitor);\nexpressionFunction('scale', scale, scaleVisitor);\nexpressionFunction('gradient', scaleGradient, scaleVisitor);\nexpressionFunction('geoArea', geoArea, scaleVisitor);\nexpressionFunction('geoBounds', geoBounds, scaleVisitor);\nexpressionFunction('geoCentroid', geoCentroid, scaleVisitor);\nexpressionFunction('geoShape', geoShape, scaleVisitor);\nexpressionFunction('indata', indata, indataVisitor);\nexpressionFunction('data', data, dataVisitor);\nexpressionFunction('treePath', treePath, dataVisitor);\nexpressionFunction('treeAncestors', treeAncestors, dataVisitor);\n\n// Vega-Lite selection functions.\nexpressionFunction('vlSelectionTest', vlSelectionTest, vlSelectionVisitor);\nexpressionFunction('vlSelectionResolve', vlSelectionResolve, vlSelectionVisitor);\n\n// Deprecated selection functions kept around to avoid a major version bump.\nexpressionFunction('vlSingle', vlPoint, dataVisitor);\nexpressionFunction('vlSingleDomain', vlPointDomain, dataVisitor);\nexpressionFunction('vlMulti', vlPoint, vlMultiVisitor);\nexpressionFunction('vlMultiDomain', vlPointDomain, vlMultiVisitor);\nexpressionFunction('vlInterval', vlInterval, dataVisitor);\nexpressionFunction('vlIntervalDomain', vlIntervalDomain, dataVisitor);\n\n// Build expression function registry\nfunction buildFunctions(codegen) {\n var fn = functions(codegen);\n eventFunctions.forEach(function(name) { fn[name] = eventPrefix + name; });\n for (var name in functionContext) { fn[name] = thisPrefix + name; }\n return fn;\n}\n\n// Export code generator and parameters\nexport var codegenParams = {\n blacklist: ['_'],\n whitelist: ['datum', 'event', 'item'],\n fieldvar: 'datum',\n globalvar: function(id) { return '_[' + stringValue('$' + id) + ']'; },\n functions: buildFunctions,\n constants: constants,\n visitors: astVisitors\n};\n\nexport var codeGenerator = codegen(codegenParams);\n","export function quarter(date) {\n return 1 + ~~(new Date(date).getMonth() / 3);\n}\n\nexport function utcquarter(date) {\n return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n","export default function(item) {\n var group = this.context.group,\n value = false;\n\n if (group) while (item) {\n if (item === group) { value = true; break; }\n item = item.mark.group;\n }\n return value;\n}\n","export function pinchDistance(event) {\n var t = event.touches,\n dx = t[0].clientX - t[1].clientX,\n dy = t[0].clientY - t[1].clientY;\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nexport function pinchAngle(event) {\n var t = event.touches;\n return Math.atan2(\n t[0].clientY - t[1].clientY,\n t[0].clientX - t[1].clientX\n );\n}\n","import {extend} from 'vega-util';\n\nexport default function() {\n var args = [].slice.call(arguments);\n args.unshift({});\n return extend.apply(null, args);\n}\n","import {peek} from 'vega-util';\n\nexport default function(range, value, threshold, left, right, center) {\n if (!threshold && threshold !== 0) return center;\n\n var a = range[0],\n b = peek(range),\n t = +threshold,\n l, r;\n\n // swap endpoints if range is reversed\n if (b < a) {\n l = a; a = b; b = l;\n }\n\n // compare value to endpoints\n l = Math.abs(value - a);\n r = Math.abs(b - value);\n\n // adjust if value within threshold distance of endpoint\n return l < r && l <= t ? left : r <= t ? right : center;\n}\n","import {getScale} from './scale';\nimport {pathParse, pathRender} from 'vega-scenegraph';\n\nexport function geoShape(projection, geojson, group) {\n var p = getScale(projection, (group || this).context);\n return function(context) {\n return p ? p.path.context(context)(geojson) : '';\n }\n}\n\nexport function pathShape(path) {\n var p = null;\n return function(context) {\n return context\n ? pathRender(context, (p = p || pathParse(path)))\n : path;\n };\n}\n","export default function(item, name, retval) {\n if (item) {\n var df = this.context.dataflow,\n target = item.mark.source;\n df.pulse(target, df.changeset().encode(item, name));\n }\n return retval !== undefined ? retval : item;\n}\n","import {getScale} from './scale';\nimport {Gradient} from 'vega-scenegraph';\nimport {scaleFraction} from 'vega-scale';\nimport {peek} from 'vega-util';\n\nexport default function(scale, p0, p1, count, group) {\n scale = getScale(scale, (group || this).context);\n\n var gradient = Gradient(p0, p1),\n stops = scale.domain(),\n min = stops[0],\n max = peek(stops),\n fraction = scaleFraction(scale, min, max);\n\n if (scale.ticks) {\n stops = scale.ticks(+count || 15);\n if (min !== stops[0]) stops.unshift(min);\n if (max !== peek(stops)) stops.push(max);\n }\n\n for (var i=0, n=stops.length; i `${globalvar}[\"${id}\"]`;\n\n let globals = {},\n fields = {},\n memberDepth = 0;\n\n function visit(ast) {\n if (isString(ast)) return ast;\n const generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n\n const Generators = {\n Literal: n => n.raw,\n\n Identifier: n => {\n const id = n.name;\n if (memberDepth > 0) {\n return id;\n } else if (hasOwnProperty(blacklist, id)) {\n return error('Illegal identifier: ' + id);\n } else if (hasOwnProperty(constants, id)) {\n return constants[id];\n } else if (hasOwnProperty(whitelist, id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n\n MemberExpression: n => {\n const d = !n.computed,\n o = visit(n.object);\n if (d) memberDepth += 1;\n const p = visit(n.property);\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n if (d) memberDepth -= 1;\n return o + (d ? '.'+p : '['+p+']');\n },\n\n CallExpression: n => {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n const callee = n.callee.name,\n args = n.arguments,\n fn = hasOwnProperty(functions, callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn)\n ? fn(args)\n : fn + '(' + args.map(visit).join(',') + ')';\n },\n\n ArrayExpression: n =>\n '[' + n.elements.map(visit).join(',') + ']',\n\n BinaryExpression: n =>\n '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n\n UnaryExpression: n =>\n '(' + n.operator + visit(n.argument) + ')',\n\n ConditionalExpression: n =>\n '(' + visit(n.test) +\n '?' + visit(n.consequent) +\n ':' + visit(n.alternate) +\n ')',\n\n LogicalExpression: n =>\n '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n\n ObjectExpression: n =>\n '{' + n.properties.map(visit).join(',') + '}',\n\n Property: n => {\n memberDepth += 1;\n const k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n\n function codegen(ast) {\n const result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n\n codegen.functions = functions;\n codegen.constants = constants;\n\n return codegen;\n}\n","import {codeGenerator, codegenParams} from './expression/codegen';\nimport {parse} from 'vega-expression';\nimport {error, isString, stringValue} from 'vega-util';\n\nexport var signalPrefix = '$';\n\nexport default function(expr, scope, preamble) {\n var params = {}, ast, gen;\n\n // parse the expression to an abstract syntax tree (ast)\n try {\n expr = isString(expr) ? expr : (stringValue(expr) + '');\n ast = parse(expr);\n } catch (err) {\n error('Expression parse error: ' + expr);\n }\n\n // analyze ast function calls for dependencies\n ast.visit(function visitor(node) {\n if (node.type !== 'CallExpression') return;\n var name = node.callee.name,\n visit = codegenParams.visitors[name];\n if (visit) visit(name, node.arguments, scope, params);\n });\n\n // perform code generation\n gen = codeGenerator(ast);\n\n // collect signal dependencies\n gen.globals.forEach(function(name) {\n var signalName = signalPrefix + name;\n if (!params.hasOwnProperty(signalName) && scope.getSignal(name)) {\n params[signalName] = scope.signalRef(name);\n }\n });\n\n // return generated expression code and dependencies\n return {\n $expr: preamble ? preamble + 'return(' + gen.code + ');' : gen.code,\n $fields: gen.fields,\n $params: params\n };\n}\n","import {isObject} from 'vega-util';\n\nexport function Entry(type, value, params, parent) {\n this.id = -1;\n this.type = type;\n this.value = value;\n this.params = params;\n if (parent) this.parent = parent;\n}\n\nexport function entry(type, value, params, parent) {\n return new Entry(type, value, params, parent);\n}\n\nexport function operator(value, params) {\n return entry('operator', value, params);\n}\n\n// -----\n\nexport function ref(op) {\n var ref = {$ref: op.id};\n // if operator not yet registered, cache ref to resolve later\n if (op.id < 0) (op.refs = op.refs || []).push(ref);\n return ref;\n}\n\nexport var tupleidRef = {\n $tupleid: 1,\n toString: function() { return ':_tupleid_:'; }\n};\n\nexport function fieldRef(field, name) {\n return name ? {$field: field, $name: name} : {$field: field};\n}\n\nexport var keyFieldRef = fieldRef('key');\n\nexport function compareRef(fields, orders) {\n return {$compare: fields, $order: orders};\n}\n\nexport function keyRef(fields, flat) {\n var ref = {$key: fields};\n if (flat) ref.$flat = true;\n return ref;\n}\n\n// -----\n\nexport var Ascending = 'ascending';\n\nexport var Descending = 'descending';\n\nexport function sortKey(sort) {\n return !isObject(sort) ? ''\n : (sort.order === Descending ? '-' : '+')\n + aggrField(sort.op, sort.field);\n}\n\nexport function aggrField(op, field) {\n return (op && op.signal ? '$' + op.signal : op || '')\n + (op && field ? '_' : '')\n + (field && field.signal ? '$' + field.signal : field || '');\n}\n\n// -----\n\nexport var Scope = 'scope';\n\nexport var View = 'view';\n\nexport function isSignal(_) {\n return _ && _.signal;\n}\n\nexport function hasSignal(_) {\n if (isSignal(_)) return true;\n if (isObject(_)) for (var key in _) {\n if (hasSignal(_[key])) return true;\n }\n return false;\n}\n\nexport function value(specValue, defaultValue) {\n return specValue != null ? specValue : defaultValue;\n}\n\nexport function deref(v) {\n return v && v.signal || v;\n}\n","import parseExpression from './expression';\nimport {View, Scope} from '../util';\nimport {array, error, stringValue} from 'vega-util';\n\nvar Timer = 'timer';\n\nexport default function parseStream(stream, scope) {\n var method = stream.merge ? mergeStream\n : stream.stream ? nestedStream\n : stream.type ? eventStream\n : error('Invalid stream specification: ' + stringValue(stream));\n\n return method(stream, scope);\n}\n\nfunction eventSource(source) {\n return source === Scope ? View : (source || View);\n}\n\nfunction mergeStream(stream, scope) {\n var list = stream.merge.map(function(s) {\n return parseStream(s, scope);\n });\n\n var entry = streamParameters({merge: list}, stream, scope);\n return scope.addStream(entry).id;\n}\n\nfunction nestedStream(stream, scope) {\n var id = parseStream(stream.stream, scope),\n entry = streamParameters({stream: id}, stream, scope);\n return scope.addStream(entry).id;\n}\n\nfunction eventStream(stream, scope) {\n var id, entry;\n\n if (stream.type === Timer) {\n id = scope.event(Timer, stream.throttle);\n stream = {between: stream.between, filter: stream.filter};\n } else {\n id = scope.event(eventSource(stream.source), stream.type);\n }\n\n entry = streamParameters({stream: id}, stream, scope);\n return Object.keys(entry).length === 1\n ? id\n : scope.addStream(entry).id;\n}\n\nfunction streamParameters(entry, stream, scope) {\n var param = stream.between;\n\n if (param) {\n if (param.length !== 2) {\n error('Stream \"between\" parameter must have 2 entries: ' + stringValue(stream));\n }\n entry.between = [\n parseStream(param[0], scope),\n parseStream(param[1], scope)\n ];\n }\n\n param = stream.filter ? array(stream.filter) : [];\n if (stream.marktype || stream.markname || stream.markrole) {\n // add filter for mark type, name and/or role\n param.push(filterMark(stream.marktype, stream.markname, stream.markrole));\n }\n if (stream.source === Scope) {\n // add filter to limit events from sub-scope only\n param.push('inScope(event.item)');\n }\n if (param.length) {\n entry.filter = parseExpression('(' + param.join(')&&(') + ')').$expr;\n }\n\n if ((param = stream.throttle) != null) {\n entry.throttle = +param;\n }\n\n if ((param = stream.debounce) != null) {\n entry.debounce = +param;\n }\n\n if (stream.consume) {\n entry.consume = true;\n }\n\n return entry;\n}\n\nfunction filterMark(type, name, role) {\n var item = 'event.item';\n return item\n + (type && type !== '*' ? '&&' + item + '.mark.marktype===\\'' + type + '\\'' : '')\n + (role ? '&&' + item + '.mark.role===\\'' + role + '\\'' : '')\n + (name ? '&&' + item + '.mark.name===\\'' + name + '\\'' : '');\n}\n","import parseExpression from './expression';\nimport parseStream from './stream';\nimport {Scope, View} from '../util';\nimport {selector} from 'vega-event-selector';\nimport {array, error, extend, isString, stringValue} from 'vega-util';\n\nvar preamble = 'var datum=event.item&&event.item.datum;';\n\nexport default function(spec, scope, target) {\n var events = spec.events,\n update = spec.update,\n encode = spec.encode,\n sources = [],\n value = '', entry;\n\n if (!events) {\n error('Signal update missing events specification.');\n }\n\n // interpret as an event selector string\n if (isString(events)) {\n events = selector(events, scope.isSubscope() ? Scope : View);\n }\n\n // separate event streams from signal updates\n events = array(events).filter(function(stream) {\n if (stream.signal || stream.scale) {\n sources.push(stream);\n return 0;\n } else {\n return 1;\n }\n });\n\n // merge event streams, include as source\n if (events.length) {\n sources.push(events.length > 1 ? {merge: events} : events[0]);\n }\n\n if (encode != null) {\n if (update) error('Signal encode and update are mutually exclusive.');\n update = 'encode(item(),' + stringValue(encode) + ')';\n }\n\n // resolve update value\n value = isString(update) ? parseExpression(update, scope, preamble)\n : update.expr != null ? parseExpression(update.expr, scope, preamble)\n : update.value != null ? update.value\n : update.signal != null ? {\n $expr: '_.value',\n $params: {value: scope.signalRef(update.signal)}\n }\n : error('Invalid signal update specification.');\n\n entry = {\n target: target,\n update: value\n };\n\n if (spec.force) {\n entry.options = {force: true};\n }\n\n sources.forEach(function(source) {\n scope.addUpdate(extend(streamSource(source, scope), entry));\n });\n}\n\nfunction streamSource(stream, scope) {\n return {\n source: stream.signal ? scope.signalRef(stream.signal)\n : stream.scale ? scope.scaleRef(stream.scale)\n : parseStream(stream, scope)\n };\n}\n","import {entry} from './util';\n\nfunction transform(name) {\n return function(params, value, parent) {\n return entry(name, value, params || undefined, parent);\n };\n}\n\nexport var Aggregate = transform('aggregate');\nexport var AxisTicks = transform('axisticks');\nexport var Bound = transform('bound');\nexport var Collect = transform('collect');\nexport var Compare = transform('compare');\nexport var DataJoin = transform('datajoin');\nexport var Encode = transform('encode');\nexport var Expression = transform('expression');\nexport var Extent = transform('extent');\nexport var Facet = transform('facet');\nexport var Field = transform('field');\nexport var Key = transform('key');\nexport var LegendEntries = transform('legendentries');\nexport var Load = transform('load');\nexport var Mark = transform('mark');\nexport var MultiExtent = transform('multiextent');\nexport var MultiValues = transform('multivalues');\nexport var Overlap = transform('overlap');\nexport var Params = transform('params');\nexport var PreFacet = transform('prefacet');\nexport var Projection = transform('projection');\nexport var Proxy = transform('proxy');\nexport var Relay = transform('relay');\nexport var Render = transform('render');\nexport var Scale = transform('scale');\nexport var Sieve = transform('sieve');\nexport var SortItems = transform('sortitems');\nexport var ViewLayout = transform('viewlayout');\nexport var Values = transform('values');\n","import {ref, keyFieldRef} from '../util';\nimport {Collect, Aggregate, MultiExtent, MultiValues, Sieve, Values} from '../transforms';\nimport {error, extend, isArray, isObject, isString, stringValue, toSet} from 'vega-util';\n\nvar FIELD_REF_ID = 0;\n\nvar types = [\n 'identity',\n 'ordinal', 'band', 'point',\n 'bin-linear', 'bin-ordinal',\n 'quantize', 'quantile', 'threshold',\n 'linear', 'pow', 'sqrt', 'log', 'sequential',\n 'time', 'utc'\n];\n\nvar allTypes = toSet(types),\n discreteTypes = toSet(types.slice(4, 9)),\n continuousTypes = toSet(types.slice(9)),\n ordinalTypes = toSet(types.slice(1, 6));\n\nexport function isOrdinal(type) {\n return ordinalTypes.hasOwnProperty(type);\n}\n\nexport function isDiscretizing(type) {\n return discreteTypes.hasOwnProperty(type);\n}\n\nexport function isContinuous(type) {\n return continuousTypes.hasOwnProperty(type);\n}\n\nexport function isQuantile(type) {\n return type === 'quantile';\n}\n\nexport function initScale(spec, scope) {\n var type = spec.type || 'linear';\n\n if (!allTypes.hasOwnProperty(type)) {\n error('Unrecognized scale type: ' + stringValue(type));\n }\n\n scope.addScale(spec.name, {\n type: type,\n domain: undefined\n });\n}\n\nexport function parseScale(spec, scope) {\n var params = scope.getScale(spec.name).params,\n key;\n\n params.domain = parseScaleDomain(spec.domain, spec, scope);\n\n if (spec.range != null) {\n params.range = parseScaleRange(spec, scope, params);\n }\n\n if (spec.interpolate != null) {\n parseScaleInterpolate(spec.interpolate, params);\n }\n\n if (spec.nice != null) {\n parseScaleNice(spec.nice, params);\n }\n\n for (key in spec) {\n if (params.hasOwnProperty(key) || key === 'name') continue;\n params[key] = parseLiteral(spec[key], scope);\n }\n}\n\nfunction parseLiteral(v, scope) {\n return !isObject(v) ? v\n : v.signal ? scope.signalRef(v.signal)\n : error('Unsupported object: ' + stringValue(v));\n}\n\nfunction parseArray(v, scope) {\n return v.signal\n ? scope.signalRef(v.signal)\n : v.map(function(v) { return parseLiteral(v, scope); });\n}\n\nfunction dataLookupError(name) {\n error('Can not find data set: ' + stringValue(name));\n}\n\n// -- SCALE DOMAIN ----\n\nfunction parseScaleDomain(domain, spec, scope) {\n if (!domain) {\n if (spec.domainMin != null || spec.domainMax != null) {\n error('No scale domain defined for domainMin/domainMax to override.');\n }\n return; // default domain\n }\n\n return domain.signal ? scope.signalRef(domain.signal)\n : (isArray(domain) ? explicitDomain\n : domain.fields ? multipleDomain\n : singularDomain)(domain, spec, scope);\n}\n\nfunction explicitDomain(domain, spec, scope) {\n return domain.map(function(v) {\n return parseLiteral(v, scope);\n });\n}\n\nfunction singularDomain(domain, spec, scope) {\n var data = scope.getData(domain.data);\n if (!data) dataLookupError(domain.data);\n\n return isOrdinal(spec.type)\n ? data.valuesRef(scope, domain.field, parseSort(domain.sort, false))\n : isQuantile(spec.type) ? data.domainRef(scope, domain.field)\n : data.extentRef(scope, domain.field);\n}\n\nfunction multipleDomain(domain, spec, scope) {\n var data = domain.data,\n fields = domain.fields.reduce(function(dom, d) {\n d = isString(d) ? {data: data, field: d}\n : (isArray(d) || d.signal) ? fieldRef(d, scope)\n : d;\n dom.push(d);\n return dom;\n }, []);\n\n return (isOrdinal(spec.type) ? ordinalMultipleDomain\n : isQuantile(spec.type) ? quantileMultipleDomain\n : numericMultipleDomain)(domain, scope, fields);\n}\n\nfunction fieldRef(data, scope) {\n var name = '_:vega:_' + (FIELD_REF_ID++),\n coll = Collect({});\n\n if (isArray(data)) {\n coll.value = {$ingest: data};\n } else if (data.signal) {\n var code = 'setdata(' + stringValue(name) + ',' + data.signal + ')';\n coll.params.input = scope.signalRef(code);\n }\n scope.addDataPipeline(name, [coll, Sieve({})]);\n return {data: name, field: 'data'};\n}\n\nfunction ordinalMultipleDomain(domain, scope, fields) {\n var counts, a, c, v;\n\n // get value counts for each domain field\n counts = fields.map(function(f) {\n var data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.countsRef(scope, f.field);\n });\n\n // sum counts from all fields\n a = scope.add(Aggregate({\n groupby: keyFieldRef,\n ops:['sum'], fields: [scope.fieldRef('count')], as:['count'],\n pulse: counts\n }));\n\n // collect aggregate output\n c = scope.add(Collect({pulse: ref(a)}));\n\n // extract values for combined domain\n v = scope.add(Values({\n field: keyFieldRef,\n sort: scope.sortRef(parseSort(domain.sort, true)),\n pulse: ref(c)\n }));\n\n return ref(v);\n}\n\nfunction parseSort(sort, multidomain) {\n if (sort) {\n if (!sort.field && !sort.op) {\n if (isObject(sort)) sort.field = 'key';\n else sort = {field: 'key'};\n } else if (!sort.field && sort.op !== 'count') {\n error('No field provided for sort aggregate op: ' + sort.op);\n } else if (multidomain && sort.field) {\n error('Multiple domain scales can not sort by field.');\n } else if (multidomain && sort.op && sort.op !== 'count') {\n error('Multiple domain scales support op count only.');\n }\n }\n return sort;\n}\n\nfunction quantileMultipleDomain(domain, scope, fields) {\n // get value arrays for each domain field\n var values = fields.map(function(f) {\n var data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.domainRef(scope, f.field);\n });\n\n // combine value arrays\n return ref(scope.add(MultiValues({values: values})));\n}\n\nfunction numericMultipleDomain(domain, scope, fields) {\n // get extents for each domain field\n var extents = fields.map(function(f) {\n var data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.extentRef(scope, f.field);\n });\n\n // combine extents\n return ref(scope.add(MultiExtent({extents: extents})));\n}\n\n// -- SCALE NICE -----\n\nfunction parseScaleNice(nice, params) {\n params.nice = isObject(nice)\n ? {\n interval: parseLiteral(nice.interval),\n step: parseLiteral(nice.step)\n }\n : parseLiteral(nice);\n}\n\n// -- SCALE INTERPOLATION -----\n\nfunction parseScaleInterpolate(interpolate, params) {\n params.interpolate = parseLiteral(interpolate.type || interpolate);\n if (interpolate.gamma != null) {\n params.interpolateGamma = parseLiteral(interpolate.gamma);\n }\n}\n\n// -- SCALE RANGE -----\n\nfunction parseScaleRange(spec, scope, params) {\n var range = spec.range,\n config = scope.config.range;\n\n if (range.signal) {\n return scope.signalRef(range.signal);\n } else if (isString(range)) {\n if (config && config.hasOwnProperty(range)) {\n spec = extend({}, spec, {range: config[range]});\n return parseScaleRange(spec, scope, params);\n } else if (range === 'width') {\n range = [0, {signal: 'width'}]\n } else if (range === 'height') {\n range = isOrdinal(spec.type)\n ? [0, {signal: 'height'}]\n : [{signal: 'height'}, 0]\n } else {\n error('Unrecognized scale range value: ' + stringValue(range));\n }\n } else if (range.scheme) {\n params.scheme = parseLiteral(range.scheme, scope);\n if (range.extent) params.schemeExtent = parseArray(range.extent, scope);\n if (range.count) params.schemeCount = parseLiteral(range.count, scope);\n return;\n } else if (range.step) {\n params.rangeStep = parseLiteral(range.step, scope);\n return;\n } else if (isOrdinal(spec.type) && !isArray(range)) {\n return parseScaleDomain(range, spec, scope);\n } else if (!isArray(range)) {\n error('Unsupported range type: ' + stringValue(range));\n }\n\n return range.map(function(v) {\n return parseLiteral(v, scope);\n });\n}\n","import {error, isArray, isObject, stringValue} from 'vega-util';\n\nexport default function(proj, scope) {\n var params = {};\n\n for (var name in proj) {\n if (name === 'name') continue;\n params[name] = parseParameter(proj[name], name, scope);\n }\n\n scope.addProjection(proj.name, params);\n}\n\nfunction parseParameter(_, name, scope) {\n return isArray(_) ? _.map(function(_) { return parseParameter(_, name, scope); })\n : !isObject(_) ? _\n : _.signal ? scope.signalRef(_.signal)\n : name === 'fit' ? _\n : error('Unsupported parameter object: ' + stringValue(_));\n}\n","export var Top = 'top';\nexport var Left = 'left';\nexport var Right = 'right';\nexport var Bottom = 'bottom';\nexport var Center = 'center';\n\nexport var Vertical = 'vertical';\n\nexport var Start = 'start';\nexport var Middle = 'middle';\nexport var End = 'end';\n\nexport var Index = 'index';\nexport var Label = 'label';\nexport var Offset = 'offset';\nexport var Perc = 'perc';\nexport var Perc2 = 'perc2';\nexport var Size = 'size';\nexport var Value = 'value';\n\nexport var GuideLabelStyle = 'guide-label';\nexport var GuideTitleStyle = 'guide-title';\nexport var GroupTitleStyle = 'group-title';\n\nexport var Symbols = 'symbol';\nexport var Gradient = 'gradient';\nexport var Discrete = 'discrete';\n\n// Encoding channels supported by legends\n// In priority order of 'canonical' scale\nexport var LegendScales = [\n 'size',\n 'shape',\n 'fill',\n 'stroke',\n 'strokeDash',\n 'opacity'\n];\n\nexport var Skip = {\n name: 1,\n interactive: 1\n};\n","import {toSet} from 'vega-util';\n\nvar Skip = toSet(['rule']),\n Swap = toSet(['group', 'image', 'rect']);\n\nexport default function(encode, marktype) {\n var code = '';\n\n if (Skip[marktype]) return code;\n\n if (encode.x2) {\n if (encode.x) {\n if (Swap[marktype]) {\n code += 'if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;';\n }\n code += 'o.width=o.x2-o.x;';\n } else {\n code += 'o.x=o.x2-(o.width||0);';\n }\n }\n\n if (encode.xc) {\n code += 'o.x=o.xc-(o.width||0)/2;';\n }\n\n if (encode.y2) {\n if (encode.y) {\n if (Swap[marktype]) {\n code += 'if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;';\n }\n code += 'o.height=o.y2-o.y;';\n } else {\n code += 'o.y=o.y2-(o.height||0);';\n }\n }\n\n if (encode.yc) {\n code += 'o.y=o.yc-(o.height||0)/2;';\n }\n\n return code;\n}\n","import expression from '../expression';\nimport {extend} from 'vega-util';\n\nexport default function(code, scope, params, fields) {\n var expr = expression(code, scope);\n expr.$fields.forEach(function(name) { fields[name] = 1; });\n extend(params, expr.$params);\n return expr.$expr;\n}\n","import expression from './expression';\nimport {error, isString, isObject, splitAccessPath, stringValue} from 'vega-util';\n\nexport default function(ref, scope, params, fields) {\n return resolve(isObject(ref) ? ref : {datum: ref}, scope, params, fields);\n}\n\nfunction resolve(ref, scope, params, fields) {\n var object, level, field;\n\n if (ref.signal) {\n object = 'datum';\n field = expression(ref.signal, scope, params, fields);\n } else if (ref.group || ref.parent) {\n level = Math.max(1, ref.level || 1);\n object = 'item';\n\n while (level-- > 0) {\n object += '.mark.group';\n }\n\n if (ref.parent) {\n field = ref.parent;\n object += '.datum';\n } else {\n field = ref.group;\n }\n } else if (ref.datum) {\n object = 'datum';\n field = ref.datum;\n } else {\n error('Invalid field reference: ' + stringValue(ref));\n }\n\n if (!ref.signal) {\n if (isString(field)) {\n fields[field] = 1; // TODO review field tracking?\n field = splitAccessPath(field).map(stringValue).join('][');\n } else {\n field = resolve(field, scope, params, fields);\n }\n }\n\n return object + '[' + field + ']';\n}\n","import expression from './expression';\nimport field from './field';\nimport {scalePrefix} from '../expression/prefixes';\nimport {isString, stringValue} from 'vega-util';\n\nexport default function(enc, value, scope, params, fields) {\n var scale = getScale(enc.scale, scope, params, fields),\n interp, func, flag;\n\n if (enc.range != null) {\n // pull value from scale range\n interp = +enc.range;\n func = scale + '.range()';\n value = (interp === 0) ? (func + '[0]')\n : '($=' + func + ',' + ((interp === 1) ? '$[$.length-1]'\n : '$[0]+' + interp + '*($[$.length-1]-$[0])') + ')';\n } else {\n // run value through scale and/or pull scale bandwidth\n if (value !== undefined) value = scale + '(' + value + ')';\n\n if (enc.band && (flag = hasBandwidth(enc.scale, scope))) {\n func = scale + '.bandwidth';\n interp = +enc.band;\n interp = func + '()' + (interp===1 ? '' : '*' + interp);\n\n // if we don't know the scale type, check for bandwidth\n if (flag < 0) interp = '(' + func + '?' + interp + ':0)';\n\n value = (value ? value + '+' : '') + interp;\n\n if (enc.extra) {\n // include logic to handle extraneous elements\n value = '(datum.extra?' + scale + '(datum.extra.value):' + value + ')';\n }\n }\n\n if (value == null) value = '0';\n }\n\n return value;\n}\n\nfunction hasBandwidth(name, scope) {\n if (!isString(name)) return -1;\n var type = scope.scaleType(name);\n return type === 'band' || type === 'point' ? 1 : 0;\n}\n\nexport function getScale(name, scope, params, fields) {\n var scaleName;\n\n if (isString(name)) {\n // direct scale lookup; add scale as parameter\n scaleName = scalePrefix + name;\n if (!params.hasOwnProperty(scaleName)) {\n params[scaleName] = scope.scaleRef(name);\n }\n scaleName = stringValue(scaleName);\n } else {\n // indirect scale lookup; add all scales as parameters\n for (scaleName in scope.scales) {\n params[scalePrefix + scaleName] = scope.scaleRef(scaleName);\n }\n scaleName = stringValue(scalePrefix) + '+'\n + (name.signal\n ? '(' + expression(name.signal, scope, params, fields) + ')'\n : field(name, scope, params, fields));\n }\n\n return '_[' + scaleName + ']';\n}\n","import entry from './entry';\nimport {isObject} from 'vega-util';\n\nexport default function(property, scope, params, fields) {\n return isObject(property)\n ? '(' + entry(null, property, scope, params, fields) + ')'\n : property;\n}\n","import color from './color';\nimport field from './field';\nimport scale from './scale';\nimport gradient from './gradient';\nimport property from './property';\nimport expression from './expression';\nimport {stringValue} from 'vega-util';\n\nexport default function(channel, enc, scope, params, fields) {\n if (enc.gradient != null) {\n return gradient(enc, scope, params, fields);\n }\n\n var value = enc.signal ? expression(enc.signal, scope, params, fields)\n : enc.color ? color(enc.color, scope, params, fields)\n : enc.field != null ? field(enc.field, scope, params, fields)\n : enc.value !== undefined ? stringValue(enc.value)\n : undefined;\n\n if (enc.scale != null) {\n value = scale(enc, value, scope, params, fields);\n }\n\n if (value === undefined) {\n value = null;\n }\n\n if (enc.exponent != null) {\n value = 'Math.pow(' + value + ','\n + property(enc.exponent, scope, params, fields) + ')';\n }\n\n if (enc.mult != null) {\n value += '*' + property(enc.mult, scope, params, fields);\n }\n\n if (enc.offset != null) {\n value += '+' + property(enc.offset, scope, params, fields);\n }\n\n if (enc.round) {\n value = 'Math.round(' + value + ')';\n }\n\n return value;\n}\n","import {getScale} from './scale';\nimport {stringValue} from 'vega-util';\n\nexport default function(enc, scope, params, fields) {\n return 'this.gradient('\n + getScale(enc.gradient, scope, params, fields)\n + ',' + stringValue(enc.start)\n + ',' + stringValue(enc.stop)\n + ',' + stringValue(enc.count)\n + ')';\n}\n","import entry from './entry';\n\nexport default function(enc, scope, params, fields) {\n function color(type, x, y, z) {\n var a = entry(null, x, scope, params, fields),\n b = entry(null, y, scope, params, fields),\n c = entry(null, z, scope, params, fields);\n return 'this.' + type + '(' + [a, b, c].join(',') + ').toString()';\n }\n\n return (enc.c) ? color('hcl', enc.h, enc.c, enc.l)\n : (enc.h || enc.s) ? color('hsl', enc.h, enc.s, enc.l)\n : (enc.l || enc.a) ? color('lab', enc.l, enc.a, enc.b)\n : (enc.r || enc.g || enc.b) ? color('rgb', enc.r, enc.g, enc.b)\n : null;\n}\n","import {stringValue} from 'vega-util';\n\nexport default function(obj, key, value) {\n return obj + '[' + stringValue(key) + ']=' + value + ';';\n}\n","import entry from './entry';\nimport set from './set';\nimport expression from './expression';\nimport {peek} from 'vega-util';\n\nexport default function(channel, rules, scope, params, fields) {\n var code = '';\n\n rules.forEach(function(rule) {\n var value = entry(channel, rule, scope, params, fields);\n code += rule.test\n ? expression(rule.test, scope, params, fields) + '?' + value + ':'\n : value;\n });\n\n // if no else clause, terminate with null (vega/vega#1366)\n if (peek(code) === ':') {\n code += 'null';\n }\n\n return set('o', channel, code);\n}\n","import adjustSpatial from './encode/adjust-spatial';\nimport entry from './encode/entry';\nimport rule from './encode/rule';\nimport set from './encode/set';\nimport {isArray} from 'vega-util';\n\nexport default function parseEncode(encode, marktype, params, scope) {\n var fields = {},\n code = 'var o=item,datum=o.datum,$;',\n channel, enc, value;\n\n for (channel in encode) {\n enc = encode[channel];\n if (isArray(enc)) { // rule\n code += rule(channel, enc, scope, params, fields);\n } else {\n value = entry(channel, enc, scope, params, fields);\n code += set('o', channel, value);\n }\n }\n\n code += adjustSpatial(encode, marktype);\n code += 'return 1;';\n\n return {\n $expr: code,\n $fields: Object.keys(fields),\n $output: Object.keys(encode)\n };\n}\n","export var MarkRole = 'mark';\nexport var FrameRole = 'frame';\nexport var ScopeRole = 'scope';\n\nexport var AxisRole = 'axis';\nexport var AxisDomainRole = 'axis-domain';\nexport var AxisGridRole = 'axis-grid';\nexport var AxisLabelRole = 'axis-label';\nexport var AxisTickRole = 'axis-tick';\nexport var AxisTitleRole = 'axis-title';\n\nexport var LegendRole = 'legend';\nexport var LegendBandRole = 'legend-band';\nexport var LegendEntryRole = 'legend-entry';\nexport var LegendGradientRole = 'legend-gradient';\nexport var LegendLabelRole = 'legend-label';\nexport var LegendSymbolRole = 'legend-symbol';\nexport var LegendTitleRole = 'legend-title';\n\nexport var TitleRole = 'title';\n","import parseEncode from '../encode';\nimport {FrameRole, MarkRole} from '../marks/roles';\nimport {array, extend, isArray, isObject} from 'vega-util';\n\nexport function encoder(_) {\n return isObject(_) ? extend({}, _) : {value: _};\n}\n\nexport function addEncode(object, name, value, set) {\n if (value != null) {\n if (isObject(value) && !isArray(value)) {\n object.update[name] = value;\n } else {\n object[set || 'enter'][name] = {value: value};\n }\n // object[name] = isObject(value) && !isArray(value) ? value : {value: value};\n return 1;\n } else {\n return 0;\n }\n}\n\nexport function extendEncode(encode, extra, skip) {\n for (var name in extra) {\n if (skip && skip.hasOwnProperty(name)) continue;\n encode[name] = extend(encode[name] || {}, extra[name]);\n }\n return encode;\n}\n\nexport function encoders(encode, type, role, style, scope, params) {\n var enc, key;\n params = params || {};\n params.encoders = {$encode: (enc = {})};\n\n encode = applyDefaults(encode, type, role, style, scope.config);\n\n for (key in encode) {\n enc[key] = parseEncode(encode[key], type, params, scope);\n }\n\n return params;\n}\n\nfunction applyDefaults(encode, type, role, style, config) {\n var enter = {}, key, skip, props;\n\n // ignore legend and axis\n if (role == 'legend' || String(role).indexOf('axis') === 0) {\n role = null;\n }\n\n // resolve mark config\n props = role === FrameRole ? config.group\n : (role === MarkRole) ? extend({}, config.mark, config[type])\n : null;\n\n for (key in props) {\n // do not apply defaults if relevant fields are defined\n skip = has(key, encode)\n || (key === 'fill' || key === 'stroke')\n && (has('fill', encode) || has('stroke', encode));\n\n if (!skip) enter[key] = defaultEncode(props[key]);\n }\n\n // resolve styles, apply with increasing precedence\n array(style).forEach(function(name) {\n var props = config.style && config.style[name];\n for (var key in props) {\n if (!has(key, encode)) {\n enter[key] = defaultEncode(props[key]);\n }\n }\n });\n\n encode = extend({}, encode); // defensive copy\n encode.enter = extend(enter, encode.enter);\n\n return encode;\n}\n\nfunction defaultEncode(value) {\n return value && value.signal\n ? {signal: value.signal}\n : {value: value};\n}\n\nexport function has(key, encode) {\n return encode && (\n (encode.enter && encode.enter[key]) ||\n (encode.update && encode.update[key])\n );\n}\n","import {Skip} from './constants';\nimport {extendEncode} from '../encode/encode-util';\n\nexport default function(type, role, style, key, dataRef, encode, extras) {\n return {\n type: type,\n name: extras ? extras.name : undefined,\n role: role,\n style: (extras && extras.style) || style,\n key: key,\n from: dataRef,\n interactive: !!(extras && extras.interactive),\n encode: extendEncode(encode, extras, Skip)\n };\n}\n","import {Vertical} from './constants';\nimport {value} from '../../util';\n\nexport function lookup(name, spec, config) {\n return value(spec[name], config[name]);\n}\n\nexport function isVertical(spec, configVal) {\n return value(spec.direction, configVal) === Vertical;\n}\n\nexport function gradientLength(spec, config) {\n return value(\n spec.gradientLength,\n config.gradientLength || config.gradientWidth\n );\n}\n\nexport function gradientThickness(spec, config) {\n return value(\n spec.gradientThickness,\n config.gradientThickness || config.gradientHeight\n );\n}\n\nexport function entryColumns(spec, config) {\n return value(\n spec.columns,\n value(config.columns, +isVertical(spec, config.symbolDirection))\n );\n}\n\nexport function getEncoding(name, encode) {\n var v = encode && (\n (encode.update && encode.update[name]) ||\n (encode.enter && encode.enter[name])\n );\n return v && v.signal ? v : v ? v.value : null;\n}\n\nexport function getStyle(name, scope, style) {\n var s = scope.config.style[style];\n return s && s[name];\n}\n","export var GroupMark = 'group';\nexport var RectMark = 'rect';\nexport var RuleMark = 'rule';\nexport var SymbolMark = 'symbol';\nexport var TextMark = 'text';\n","import guideMark from './guide-mark';\nimport {gradientLength, gradientThickness, isVertical, lookup} from './guide-util';\nimport {RectMark} from '../marks/marktypes';\nimport {LegendGradientRole} from '../marks/roles';\nimport {addEncode, encoder} from '../encode/encode-util';\nimport {extend} from 'vega-util';\n\nexport default function(spec, scale, config, userEncode) {\n var zero = {value: 0},\n vertical = isVertical(spec, config.gradientDirection),\n thickness = gradientThickness(spec, config),\n length = gradientLength(spec, config),\n encode, enter, start, stop, width, height;\n\n if (vertical) {\n start = [0, 1];\n stop = [0, 0];\n width = thickness;\n height = length;\n } else {\n start = [0, 0];\n stop = [1, 0];\n width = length;\n height = thickness;\n }\n\n encode = {\n enter: enter = {\n opacity: zero,\n x: zero,\n y: zero,\n width: encoder(width),\n height: encoder(height)\n },\n update: extend({}, enter, {\n opacity: {value: 1},\n fill: {gradient: scale, start: start, stop: stop}\n }),\n exit: {\n opacity: zero\n }\n };\n addEncode(encode, 'stroke', lookup('gradientStrokeColor', spec, config));\n addEncode(encode, 'strokeWidth', lookup('gradientStrokeWidth', spec, config));\n addEncode(encode, 'opacity', lookup('gradientOpacity', spec, config), 'update');\n\n return guideMark(RectMark, LegendGradientRole, null, undefined, undefined, encode, userEncode);\n}\n","import {Value, Perc, Perc2} from './constants';\nimport guideMark from './guide-mark';\nimport {gradientLength, gradientThickness, isVertical, lookup} from './guide-util';\nimport {RectMark} from '../marks/marktypes';\nimport {LegendBandRole} from '../marks/roles';\nimport {addEncode, encoder} from '../encode/encode-util';\nimport {extend} from 'vega-util';\n\nexport default function(spec, scale, config, userEncode, dataRef) {\n var zero = {value: 0},\n vertical = isVertical(spec, config.gradientDirection),\n thickness = gradientThickness(spec, config),\n length = gradientLength(spec, config),\n encode, enter, u, v, uu, vv, adjust = '';\n\n vertical\n ? (u = 'y', uu = 'y2', v = 'x', vv = 'width', adjust = '1-')\n : (u = 'x', uu = 'x2', v = 'y', vv = 'height');\n\n enter = {\n opacity: zero,\n fill: {scale: scale, field: Value}\n };\n enter[u] = {signal: adjust + 'datum.' + Perc, mult: length};\n enter[v] = zero;\n enter[uu] = {signal: adjust + 'datum.' + Perc2, mult: length};\n enter[vv] = encoder(thickness);\n\n encode = {\n enter: enter,\n update: extend({}, enter, {opacity: {value: 1}}),\n exit: {opacity: zero}\n };\n addEncode(encode, 'stroke', lookup('gradientStrokeColor', spec, config));\n addEncode(encode, 'strokeWidth', lookup('gradientStrokeWidth', spec, config));\n addEncode(encode, 'opacity', lookup('gradientOpacity', spec, config), 'update');\n\n return guideMark(RectMark, LegendBandRole, null, Value, dataRef, encode, userEncode);\n}\n","import {Index, Label, Perc, Value, GuideLabelStyle} from './constants';\nimport guideMark from './guide-mark';\nimport {gradientLength, gradientThickness, isVertical, lookup} from './guide-util';\nimport {TextMark} from '../marks/marktypes';\nimport {LegendLabelRole} from '../marks/roles';\nimport {addEncode, encoder} from '../encode/encode-util';\nimport {value} from '../../util';\n\nvar alignExpr = 'datum.' + Perc + '<=0?\"left\"'\n + ':datum.' + Perc + '>=1?\"right\":\"center\"';\n\nvar baselineExpr = 'datum.' + Perc + '<=0?\"bottom\"'\n + ':datum.' + Perc + '>=1?\"top\":\"middle\"';\n\nexport default function(spec, config, userEncode, dataRef) {\n var zero = {value: 0},\n vertical = isVertical(spec, config.gradientDirection),\n thickness = encoder(gradientThickness(spec, config)),\n length = gradientLength(spec, config),\n overlap = lookup('labelOverlap', spec, config),\n encode, enter, update, u, v, adjust = '';\n\n encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: {value: 1},\n text: {field: Label}\n },\n exit: {\n opacity: zero\n }\n };\n addEncode(encode, 'fill', lookup('labelColor', spec, config));\n addEncode(encode, 'font', lookup('labelFont', spec, config));\n addEncode(encode, 'fontSize', lookup('labelFontSize', spec, config));\n addEncode(encode, 'fontWeight', lookup('labelFontWeight', spec, config));\n addEncode(encode, 'fillOpacity', lookup('labelOpacity', spec, config));\n addEncode(encode, 'limit', value(spec.labelLimit, config.gradientLabelLimit));\n\n if (vertical) {\n enter.align = {value: 'left'};\n enter.baseline = update.baseline = {signal: baselineExpr};\n u = 'y'; v = 'x'; adjust = '1-';\n } else {\n enter.align = update.align = {signal: alignExpr};\n enter.baseline = {value: 'top'};\n u = 'x'; v = 'y';\n }\n\n enter[u] = update[u] = {signal: adjust + 'datum.' + Perc, mult: length};\n\n enter[v] = update[v] = thickness;\n thickness.offset = value(spec.labelOffset, config.gradientLabelOffset) || 0;\n\n spec = guideMark(TextMark, LegendLabelRole, GuideLabelStyle, Value, dataRef, encode, userEncode);\n if (overlap) spec.overlap = {method: overlap, order: 'datum.' + Index};\n return spec;\n}\n","import {GroupMark} from '../marks/marktypes';\n\nexport default function(role, style, name, dataRef, interactive, encode, marks, layout) {\n return {\n type: GroupMark,\n name: name,\n role: role,\n style: style,\n from: dataRef,\n interactive: interactive || false,\n encode: encode,\n marks: marks,\n layout: layout\n };\n}\n","import {\n Index, Label, Offset, Size, Value,\n Skip, GuideLabelStyle, LegendScales\n} from './constants';\nimport guideGroup from './guide-group';\nimport guideMark from './guide-mark';\nimport {entryColumns, isVertical, lookup} from './guide-util';\nimport {SymbolMark, TextMark} from '../marks/marktypes';\nimport {ScopeRole, LegendSymbolRole, LegendLabelRole} from '../marks/roles';\nimport {addEncode, encoder, extendEncode} from '../encode/encode-util';\n\nvar zero = {value: 0};\n\n// userEncode is top-level, includes entries, symbols, labels\nexport default function(spec, config, userEncode, dataRef, columns) {\n var entries = userEncode.entries,\n interactive = !!(entries && entries.interactive),\n name = entries ? entries.name : undefined,\n height = lookup('clipHeight', spec, config),\n symbolOffset = lookup('symbolOffset', spec, config),\n valueRef = {data: 'value'},\n encode = {},\n xSignal = columns + '?' + 'datum.' + Offset + ':' + 'datum.' + Size,\n yEncode = height ? encoder(height) : {field: Size},\n index = 'datum.' + Index,\n ncols = 'max(1,' + columns + ')',\n enter, update, labelOffset, symbols, labels, nrows, sort;\n\n yEncode.mult = 0.5;\n\n // -- LEGEND SYMBOLS --\n encode = {\n enter: enter = {\n opacity: zero,\n x: {signal: xSignal, mult: 0.5, offset: symbolOffset},\n y: yEncode\n },\n update: update = {\n opacity: {value: 1},\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n\n if (!spec.fill) {\n addEncode(encode, 'fill', config.symbolBaseFillColor);\n addEncode(encode, 'stroke', config.symbolBaseStrokeColor);\n }\n addEncode(encode, 'shape', lookup('symbolType', spec, config));\n addEncode(encode, 'size', lookup('symbolSize', spec, config));\n addEncode(encode, 'strokeWidth', lookup('symbolStrokeWidth', spec, config));\n addEncode(encode, 'fill', lookup('symbolFillColor', spec, config));\n addEncode(encode, 'stroke', lookup('symbolStrokeColor', spec, config));\n addEncode(encode, 'opacity', lookup('symbolOpacity', spec, config), 'update');\n\n LegendScales.forEach(function(scale) {\n if (spec[scale]) {\n update[scale] = enter[scale] = {scale: spec[scale], field: Value};\n }\n });\n\n symbols = guideMark(\n SymbolMark, LegendSymbolRole, null,\n Value, valueRef, encode, userEncode.symbols\n );\n if (height) symbols.clip = true;\n\n // -- LEGEND LABELS --\n labelOffset = encoder(symbolOffset);\n labelOffset.offset = lookup('labelOffset', spec, config);\n\n encode = {\n enter: enter = {\n opacity: zero,\n x: {signal: xSignal, offset: labelOffset},\n y: yEncode\n },\n update: update = {\n opacity: {value: 1},\n text: {field: Label},\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n\n addEncode(encode, 'align', lookup('labelAlign', spec, config));\n addEncode(encode, 'baseline', lookup('labelBaseline', spec, config));\n addEncode(encode, 'fill', lookup('labelColor', spec, config));\n addEncode(encode, 'font', lookup('labelFont', spec, config));\n addEncode(encode, 'fontSize', lookup('labelFontSize', spec, config));\n addEncode(encode, 'fontWeight', lookup('labelFontWeight', spec, config));\n addEncode(encode, 'limit', lookup('labelLimit', spec, config));\n addEncode(encode, 'fillOpacity', lookup('labelOpacity', spec, config));\n\n labels = guideMark(\n TextMark, LegendLabelRole, GuideLabelStyle,\n Value, valueRef, encode, userEncode.labels\n );\n\n // -- LEGEND ENTRY GROUPS --\n encode = {\n enter: {\n noBound: {value: true}, // ignore width/height in bounds calc\n width: zero,\n height: height ? encoder(height) : zero,\n opacity: zero\n },\n exit: {opacity: zero},\n update: update = {\n opacity: {value: 1},\n row: {signal: null},\n column: {signal: null}\n }\n };\n\n // annotate and sort groups to ensure correct ordering\n if (isVertical(spec, config.symbolDirection)) {\n nrows = 'ceil(item.mark.items.length/' + ncols + ')';\n update.row.signal = index + '%' + nrows;\n update.column.signal = 'floor(' + index + '/' + nrows + ')';\n sort = {field: ['row', index]};\n } else {\n update.row.signal = 'floor(' + index + '/' + ncols + ')';\n update.column.signal = index + '%' + ncols;\n sort = {field: index};\n }\n // handle zero column case (implies infinite columns)\n update.column.signal = columns + '?' + update.column.signal + ':' + index;\n\n // facet legend entries into sub-groups\n dataRef = {facet: {data: dataRef, name: 'value', groupby: Index}};\n\n spec = guideGroup(\n ScopeRole, null, name, dataRef, interactive,\n extendEncode(encode, entries, Skip), [symbols, labels]\n );\n spec.sort = sort;\n return spec;\n}\n\nexport function legendSymbolLayout(spec, config) {\n // layout parameters for legend entries\n return {\n align: lookup('gridAlign', spec, config),\n center: {row: true, column: false},\n columns: entryColumns(spec, config),\n padding: {\n row: lookup('rowPadding', spec, config),\n column: lookup('columnPadding', spec, config)\n }\n };\n}\n","import {isObject, stringValue} from 'vega-util';\n\nexport default function(clip, scope) {\n var expr;\n\n if (isObject(clip)) {\n if (clip.signal) {\n expr = clip.signal;\n } else if (clip.path) {\n expr = 'pathShape(' + param(clip.path) + ')';\n } else if (clip.sphere) {\n expr = 'geoShape(' + param(clip.sphere) + ', {type: \"Sphere\"})';\n }\n }\n\n return expr\n ? scope.signalRef(expr)\n : !!clip;\n}\n\nfunction param(value) {\n return isObject(value) && value.signal\n ? value.signal\n : stringValue(value);\n}","import {GroupMark} from './marktypes';\nimport {ScopeRole, MarkRole} from './roles';\n\nexport default function(spec) {\n var role = spec.role || '';\n return (!role.indexOf('axis') || !role.indexOf('legend'))\n ? role\n : spec.type === GroupMark ? ScopeRole : (role || MarkRole);\n}\n","import role from './role';\n\nexport default function(spec) {\n return {\n marktype: spec.type,\n name: spec.name || undefined,\n role: spec.role || role(spec),\n zindex: +spec.zindex || undefined\n };\n}\n","export default function(spec, scope) {\n return spec && spec.signal ? scope.signalRef(spec.signal)\n : spec === false ? false\n : true;\n}\n","import parseExpression from './expression';\nimport {entry, fieldRef, isSignal, ref} from '../util';\nimport {Params} from '../transforms';\nimport {definition} from 'vega-dataflow';\nimport {error, extend, isArray, isString, stringValue} from 'vega-util';\n\n/**\n * Parse a data transform specification.\n */\nexport default function(spec, scope) {\n var def = definition(spec.type);\n if (!def) error('Unrecognized transform type: ' + stringValue(spec.type));\n\n var t = entry(def.type.toLowerCase(), null, parseParameters(def, spec, scope));\n if (spec.signal) scope.addSignal(spec.signal, scope.proxy(t));\n t.metadata = def.metadata || {};\n\n return t;\n}\n\n/**\n * Parse all parameters of a data transform.\n */\nfunction parseParameters(def, spec, scope) {\n var params = {}, pdef, i, n;\n for (i=0, n=def.params.length; i 0;\n};\n\nprototype.toRuntime = function() {\n this.finish();\n return {\n background: this.background,\n operators: this.operators,\n streams: this.streams,\n updates: this.updates,\n bindings: this.bindings,\n eventConfig: this.eventConfig\n };\n};\n\nprototype.id = function() {\n return (this._subid ? this._subid + ':' : 0) + this._id++;\n};\n\nprototype.add = function(op) {\n this.operators.push(op);\n op.id = this.id();\n // if pre-registration references exist, resolve them now\n if (op.refs) {\n op.refs.forEach(function(ref) { ref.$ref = op.id; });\n op.refs = null;\n }\n return op;\n};\n\nprototype.proxy = function(op) {\n var vref = op instanceof Entry ? ref(op) : op;\n return this.add(Proxy({value: vref}));\n};\n\nprototype.addStream = function(stream) {\n this.streams.push(stream);\n stream.id = this.id();\n return stream;\n};\n\nprototype.addUpdate = function(update) {\n this.updates.push(update);\n return update;\n};\n\n// Apply metadata\nprototype.finish = function() {\n var name, ds;\n\n // annotate root\n if (this.root) this.root.root = true;\n\n // annotate signals\n for (name in this.signals) {\n this.signals[name].signal = name;\n }\n\n // annotate scales\n for (name in this.scales) {\n this.scales[name].scale = name;\n }\n\n // annotate data sets\n function annotate(op, name, type) {\n var data, list;\n if (op) {\n data = op.data || (op.data = {});\n list = data[name] || (data[name] = []);\n list.push(type);\n }\n }\n for (name in this.data) {\n ds = this.data[name];\n annotate(ds.input, name, 'input');\n annotate(ds.output, name, 'output');\n annotate(ds.values, name, 'values');\n for (var field in ds.index) {\n annotate(ds.index[field], name, 'index:' + field);\n }\n }\n\n return this;\n};\n\n// ----\n\nprototype.pushState = function(encode, parent, lookup) {\n this._encode.push(ref(this.add(Sieve({pulse: encode}))));\n this._parent.push(parent);\n this._lookup.push(lookup ? ref(this.proxy(lookup)) : null);\n this._markpath.push(-1);\n};\n\nprototype.popState = function() {\n this._encode.pop();\n this._parent.pop();\n this._lookup.pop();\n this._markpath.pop();\n};\n\nprototype.parent = function() {\n return peek(this._parent);\n};\n\nprototype.encode = function() {\n return peek(this._encode);\n};\n\nprototype.lookup = function() {\n return peek(this._lookup);\n};\n\nprototype.markpath = function() {\n var p = this._markpath;\n return ++p[p.length-1];\n};\n\n// ----\n\nprototype.fieldRef = function(field, name) {\n if (isString(field)) return fieldRef(field, name);\n if (!field.signal) {\n error('Unsupported field reference: ' + stringValue(field));\n }\n\n var s = field.signal,\n f = this.field[s],\n params;\n\n if (!f) {\n params = {name: this.signalRef(s)};\n if (name) params.as = name;\n this.field[s] = f = ref(this.add(Field(params)));\n }\n return f;\n};\n\nprototype.compareRef = function(cmp, stable) {\n function check(_) {\n if (isSignal(_)) {\n signal = true;\n return scope.signalRef(_.signal);\n } else {\n return _;\n }\n }\n\n var scope = this,\n signal = false,\n fields = array(cmp.field).map(check),\n orders = array(cmp.order).map(check);\n\n if (stable) {\n fields.push(tupleidRef);\n }\n\n return signal\n ? ref(this.add(Compare({fields: fields, orders: orders})))\n : compareRef(fields, orders);\n};\n\nprototype.keyRef = function(fields, flat) {\n function check(_) {\n if (isSignal(_)) {\n signal = true;\n return ref(sig[_.signal]);\n } else {\n return _;\n }\n }\n\n var sig = this.signals,\n signal = false;\n fields = array(fields).map(check);\n\n return signal\n ? ref(this.add(Key({fields: fields, flat: flat})))\n : keyRef(fields, flat);\n};\n\nprototype.sortRef = function(sort) {\n if (!sort) return sort;\n\n // including id ensures stable sorting\n var a = [aggrField(sort.op, sort.field), tupleidRef],\n o = sort.order || Ascending;\n\n return o.signal\n ? ref(this.add(Compare({\n fields: a,\n orders: [o = this.signalRef(o.signal), o]\n })))\n : compareRef(a, [o, o]);\n};\n\n// ----\n\nprototype.event = function(source, type) {\n var key = source + ':' + type;\n if (!this.events[key]) {\n var id = this.id();\n this.streams.push({\n id: id,\n source: source,\n type: type\n });\n this.events[key] = id;\n }\n return this.events[key];\n};\n\n// ----\n\nprototype.addSignal = function(name, value) {\n if (this.signals.hasOwnProperty(name)) {\n error('Duplicate signal name: ' + stringValue(name));\n }\n var op = value instanceof Entry ? value : this.add(operator(value));\n return this.signals[name] = op;\n};\n\nprototype.getSignal = function(name) {\n if (!this.signals[name]) {\n error('Unrecognized signal name: ' + stringValue(name));\n }\n return this.signals[name];\n};\n\nprototype.signalRef = function(s) {\n if (this.signals[s]) {\n return ref(this.signals[s]);\n } else if (!this.lambdas.hasOwnProperty(s)) {\n this.lambdas[s] = this.add(operator(null));\n }\n return ref(this.lambdas[s]);\n};\n\nprototype.parseLambdas = function() {\n var code = Object.keys(this.lambdas);\n for (var i=0, n=code.length; i 0 ? ',' : '')\n + (isObject(value)\n ? (value.signal || propertyLambda(value))\n : stringValue(value));\n }\n return code + ']';\n}\n\nfunction objectLambda(obj) {\n var code = '{',\n i = 0,\n key, value;\n\n for (key in obj) {\n value = obj[key];\n code += (++i > 1 ? ',' : '')\n + stringValue(key) + ':'\n + (isObject(value)\n ? (value.signal || propertyLambda(value))\n : stringValue(value));\n }\n return code + '}';\n}\n\nprototype.exprRef = function(code, name) {\n var params = {expr: parseExpression(code, this)};\n if (name) params.expr.$name = name;\n return ref(this.add(Expression(params)));\n}\n\nprototype.addBinding = function(name, bind) {\n if (!this.bindings) {\n error('Nested signals do not support binding: ' + stringValue(name));\n }\n this.bindings.push(extend({signal: name}, bind));\n};\n\n// ----\n\nprototype.addScaleProj = function(name, transform) {\n if (this.scales.hasOwnProperty(name)) {\n error('Duplicate scale or projection name: ' + stringValue(name));\n }\n this.scales[name] = this.add(transform);\n};\n\nprototype.addScale = function(name, params) {\n this.addScaleProj(name, Scale(params));\n};\n\nprototype.addProjection = function(name, params) {\n this.addScaleProj(name, Projection(params));\n};\n\nprototype.getScale = function(name) {\n if (!this.scales[name]) {\n error('Unrecognized scale name: ' + stringValue(name));\n }\n return this.scales[name];\n};\n\nprototype.projectionRef =\nprototype.scaleRef = function(name) {\n return ref(this.getScale(name));\n};\n\nprototype.projectionType =\nprototype.scaleType = function(name) {\n return this.getScale(name).params.type;\n};\n\n// ----\n\nprototype.addData = function(name, dataScope) {\n if (this.data.hasOwnProperty(name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return (this.data[name] = dataScope);\n};\n\nprototype.getData = function(name) {\n if (!this.data[name]) {\n error('Undefined data set name: ' + stringValue(name));\n }\n return this.data[name];\n};\n\nprototype.addDataPipeline = function(name, entries) {\n if (this.data.hasOwnProperty(name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return this.addData(name, DataScope.fromEntries(this, entries));\n};\n","import {extend, isArray, isObject} from 'vega-util';\n\nexport default function(configs) {\n var output = defaults();\n (configs || []).forEach(function(config) {\n var key, value, style;\n if (config) {\n for (key in config) {\n if (key === 'style') {\n style = output.style || (output.style = {});\n for (key in config.style) {\n style[key] = extend(style[key] || {}, config.style[key]);\n }\n } else {\n value = config[key];\n output[key] = isObject(value) && !isArray(value)\n ? extend(isObject(output[key]) ? output[key] : {}, value)\n : value;\n }\n }\n }\n });\n return output;\n}\n\nvar defaultFont = 'sans-serif',\n defaultSymbolSize = 30,\n defaultStrokeWidth = 2,\n defaultColor = '#4c78a8',\n black = \"#000\",\n gray = '#888',\n lightGray = '#ddd';\n\n/**\n * Standard configuration defaults for Vega specification parsing.\n * Users can provide their own (sub-)set of these default values\n * by passing in a config object to the top-level parse method.\n */\nfunction defaults() {\n return {\n // default padding around visualization\n padding: 0,\n\n // default for automatic sizing; options: \"none\", \"pad\", \"fit\"\n // or provide an object (e.g., {\"type\": \"pad\", \"resize\": true})\n autosize: 'pad',\n\n // default view background color\n // covers the entire view component\n background: null,\n\n // default event handling configuration\n // preventDefault for view-sourced event types except 'wheel'\n events: {\n defaults: {allow: ['wheel']}\n },\n\n // defaults for top-level group marks\n // accepts mark properties (fill, stroke, etc)\n // covers the data rectangle within group width/height\n group: null,\n\n // defaults for basic mark types\n // each subset accepts mark properties (fill, stroke, etc)\n mark: null,\n arc: { fill: defaultColor },\n area: { fill: defaultColor },\n image: null,\n line: {\n stroke: defaultColor,\n strokeWidth: defaultStrokeWidth\n },\n path: { stroke: defaultColor },\n rect: { fill: defaultColor },\n rule: { stroke: black },\n shape: { stroke: defaultColor },\n symbol: {\n fill: defaultColor,\n size: 64\n },\n text: {\n fill: black,\n font: defaultFont,\n fontSize: 11\n },\n\n // style definitions\n style: {\n // axis & legend labels\n \"guide-label\": {\n fill: black,\n font: defaultFont,\n fontSize: 10\n },\n // axis & legend titles\n \"guide-title\": {\n fill: black,\n font: defaultFont,\n fontSize: 11,\n fontWeight: 'bold'\n },\n // headers, including chart title\n \"group-title\": {\n fill: black,\n font: defaultFont,\n fontSize: 13,\n fontWeight: 'bold'\n },\n // defaults for styled point marks in Vega-Lite\n point: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'circle'\n },\n circle: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth\n },\n square: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'square'\n },\n // defaults for styled group marks in Vega-Lite\n cell: {\n fill: 'transparent',\n stroke: lightGray\n }\n },\n\n // defaults for axes\n axis: {\n minExtent: 0,\n maxExtent: 200,\n bandPosition: 0.5,\n domain: true,\n domainWidth: 1,\n domainColor: gray,\n grid: false,\n gridWidth: 1,\n gridColor: lightGray,\n labels: true,\n labelAngle: 0,\n labelLimit: 180,\n labelPadding: 2,\n ticks: true,\n tickColor: gray,\n tickOffset: 0,\n tickRound: true,\n tickSize: 5,\n tickWidth: 1,\n titleAlign: 'center',\n titlePadding: 4\n },\n\n // correction for centering bias\n axisBand: {\n tickOffset: -1\n },\n\n // defaults for legends\n legend: {\n orient: 'right',\n offset: 18,\n padding: 0,\n gridAlign: 'each',\n columnPadding: 10,\n rowPadding: 2,\n symbolDirection: 'vertical',\n gradientDirection: 'vertical',\n gradientLength: 200,\n gradientThickness: 16,\n gradientStrokeColor: lightGray,\n gradientStrokeWidth: 0,\n gradientLabelOffset: 2,\n labelAlign: 'left',\n labelBaseline: 'middle',\n labelLimit: 160,\n labelOffset: 4,\n labelOverlap: true,\n symbolType: 'circle',\n symbolSize: 100,\n symbolOffset: 0,\n symbolStrokeWidth: 1.5,\n symbolBaseFillColor: 'transparent',\n symbolBaseStrokeColor: gray,\n titleAlign: 'left',\n titleBaseline: 'top',\n titleLimit: 180,\n titlePadding: 5\n },\n\n // defaults for group title\n title: {\n orient: 'top',\n anchor: 'middle',\n offset: 4\n },\n\n // defaults for scale ranges\n range: {\n category: {\n scheme: 'tableau10'\n },\n ordinal: {\n scheme: 'blues',\n extent: [0.2, 1]\n },\n heatmap: {\n scheme: 'viridis'\n },\n ramp: {\n scheme: 'blues',\n extent: [0.2, 1]\n },\n diverging: {\n scheme: 'blueorange'\n },\n symbol: [\n 'circle',\n 'square',\n 'triangle-up',\n 'cross',\n 'diamond',\n 'triangle-right',\n 'triangle-down',\n 'triangle-left'\n ]\n }\n };\n}\n","import parseView from './parsers/view';\nimport Scope from './Scope';\nimport defaults from './config';\nimport {error, isObject} from 'vega-util';\n\nexport default function(spec, config) {\n if (!isObject(spec)) error('Input Vega specification must be an object.');\n return parseView(spec, new Scope(defaults([config, spec.config])))\n .toRuntime();\n}\n","import {isObject} from 'vega-util';\n\nexport default function(spec, config) {\n spec = spec || config.autosize;\n if (isObject(spec)) {\n return spec;\n } else {\n spec = spec || 'pad';\n return {type: spec};\n }\n}\n","/**\n * Parse an expression given the argument signature and body code.\n */\nexport default function expression(args, code, ctx) {\n // wrap code in return statement if expression does not terminate\n if (code[code.length-1] !== ';') {\n code = 'return(' + code + ');';\n }\n var fn = Function.apply(null, args.concat(code));\n return ctx && ctx.functions ? fn.bind(ctx.functions) : fn;\n}\n\n/**\n * Parse an expression used to update an operator value.\n */\nexport function operatorExpression(code, ctx) {\n return expression(['_'], code, ctx);\n}\n\n/**\n * Parse an expression provided as an operator parameter value.\n */\nexport function parameterExpression(code, ctx) {\n return expression(['datum', '_'], code, ctx);\n}\n\n/**\n * Parse an expression applied to an event stream.\n */\nexport function eventExpression(code, ctx) {\n return expression(['event'], code, ctx);\n}\n\n/**\n * Parse an expression used to handle an event-driven operator update.\n */\nexport function handlerExpression(code, ctx) {\n return expression(['_', 'event'], code, ctx);\n}\n\n/**\n * Parse an expression that performs visual encoding.\n */\nexport function encodeExpression(code, ctx) {\n return expression(['item', '_'], code, ctx);\n}\n","import parseDataflow from './dataflow';\nimport {parameterExpression, encodeExpression} from './expression';\nimport {tupleid} from 'vega-dataflow';\nimport {accessor, array, compare, error, field, isArray, isObject, key} from 'vega-util';\n\n/**\n * Parse a set of operator parameters.\n */\nexport default function parseParameters(spec, ctx, params) {\n params = params || {};\n var key, value;\n\n for (key in spec) {\n value = spec[key];\n\n params[key] = isArray(value)\n ? value.map(function(v) { return parseParameter(v, ctx, params); })\n : parseParameter(value, ctx, params);\n }\n return params;\n}\n\n/**\n * Parse a single parameter.\n */\nfunction parseParameter(spec, ctx, params) {\n if (!spec || !isObject(spec)) return spec;\n\n for (var i=0, n=PARSERS.length, p; i= 0) {\n t = handlers[i].type;\n h = handlers[i].handler;\n if (type === t && (handler === h || handler === h.raw)) {\n this._handler.off(t, h);\n break;\n }\n }\n return this;\n};\n\nprototype.addResizeListener = function(handler) {\n var l = this._resizeListeners;\n if (l.indexOf(handler) < 0) {\n // add handler if it isn't already registered\n // note: error trapping handled elsewhere, so\n // no need to wrap handlers here\n l.push(handler);\n }\n return this;\n};\n\nprototype.removeResizeListener = function(handler) {\n var l = this._resizeListeners,\n i = l.indexOf(handler);\n if (i >= 0) {\n l.splice(i, 1);\n }\n return this;\n};\n\nfunction findOperatorHandler(op, handler) {\n var t = op._targets || [],\n h = t.filter(function(op) {\n var u = op._update;\n return u && u.handler === handler;\n });\n return h.length ? h[0] : null;\n}\n\nfunction addOperatorListener(view, name, op, handler) {\n var h = findOperatorHandler(op, handler);\n if (!h) {\n h = trap(this, function() { handler(name, op.value); });\n h.handler = handler;\n view.on(op, null, h);\n }\n return view;\n}\n\nfunction removeOperatorListener(view, op, handler) {\n var h = findOperatorHandler(op, handler);\n if (h) op._targets.remove(h);\n return view;\n}\n\nprototype.addSignalListener = function(name, handler) {\n return addOperatorListener(this, name, lookupSignal(this, name), handler);\n};\n\nprototype.removeSignalListener = function(name, handler) {\n return removeOperatorListener(this, lookupSignal(this, name), handler);\n};\n\nprototype.addDataListener = function(name, handler) {\n return addOperatorListener(this, name, dataref(this, name).values, handler);\n};\n\nprototype.removeDataListener = function(name, handler) {\n return removeOperatorListener(this, dataref(this, name).values, handler);\n};\n\nprototype.preventDefault = function(_) {\n if (arguments.length) {\n this._preventDefault = _;\n return this;\n } else {\n return this._preventDefault;\n }\n};\n\nprototype.timer = timer;\nprototype.events = events;\nprototype.finalize = finalize;\nprototype.hover = hover;\n\n// -- DATA ----\nprototype.data = data;\nprototype.change = change;\nprototype.insert = insert;\nprototype.remove = remove;\n\n// -- SCALES --\nprototype.scale = scale;\n\n// -- INITIALIZATION ----\nprototype.initialize = initialize;\n\n// -- HEADLESS RENDERING ----\nprototype.toImageURL = renderToImageURL;\nprototype.toCanvas = renderToCanvas;\nprototype.toSVG = renderToSVG;\n\n// -- SAVE / RESTORE STATE ----\nprototype.getState = getState;\nprototype.setState = setState;\n","import {transforms} from 'vega-dataflow';\nimport {functionContext} from 'vega-parser';\nimport {parse, context} from 'vega-runtime';\n\nexport default function(view, spec, functions) {\n var fn = functions || functionContext;\n return parse(spec, context(view, transforms, fn));\n}\n","import {interval} from 'd3-timer';\n\nexport default function(callback, delay) {\n function tick(elapsed) {\n callback({timestamp: Date.now(), elapsed: elapsed});\n }\n this._timers.push(interval(tick, delay));\n}\n","import {Timer, now} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n delay = +delay, time = time == null ? now() : +time;\n t.restart(function tick(elapsed) {\n elapsed += total;\n t.restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n return t;\n}\n","import {offset} from './render-size';\nimport {constant, isString} from 'vega-util';\nimport {point} from 'vega-scenegraph';\n\n/**\n * Extend an event with additional view-specific methods.\n * Adds a new property ('vega') to an event that provides a number\n * of methods for querying information about the current interaction.\n * The vega object provides the following methods:\n * view - Returns the backing View instance.\n * item - Returns the currently active scenegraph item (if any).\n * group - Returns the currently active scenegraph group (if any).\n * This method accepts a single string-typed argument indicating the name\n * of the desired parent group. The scenegraph will be traversed from\n * the item up towards the root to search for a matching group. If no\n * argument is provided the enclosing group for the active item is\n * returned, unless the item it itself a group, in which case it is\n * returned directly.\n * xy - Returns a two-element array containing the x and y coordinates for\n * mouse or touch events. For touch events, this is based on the first\n * elements in the changedTouches array. This method accepts a single\n * argument: either an item instance or mark name that should serve as\n * the reference coordinate system. If no argument is provided the\n * top-level view coordinate system is assumed.\n * x - Returns the current x-coordinate, accepts the same arguments as xy.\n * y - Returns the current y-coordinate, accepts the same arguments as xy.\n * @param {Event} event - The input event to extend.\n * @param {Item} item - The currently active scenegraph item (if any).\n * @return {Event} - The extended input event.\n */\nexport default function(view, event, item) {\n var el = view._renderer.canvas(),\n p, e, translate;\n\n if (el) {\n translate = offset(view);\n e = event.changedTouches ? event.changedTouches[0] : event;\n p = point(e, el);\n p[0] -= translate[0];\n p[1] -= translate[1];\n }\n\n event.dataflow = view;\n event.vega = extension(view, item, p);\n event.item = item;\n return event;\n}\n\nfunction extension(view, item, point) {\n var itemGroup = item\n ? item.mark.marktype === 'group' ? item : item.mark.group\n : null;\n\n function group(name) {\n var g = itemGroup, i;\n if (name) for (i = item; i; i = i.mark.group) {\n if (i.mark.name === name) { g = i; break; }\n }\n return g && g.mark && g.mark.interactive ? g : {};\n }\n\n function xy(item) {\n if (!item) return point;\n if (isString(item)) item = group(item);\n\n var p = point.slice();\n while (item) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n item = item.mark && item.mark.group;\n }\n return p;\n }\n\n return {\n view: constant(view),\n item: constant(item || {}),\n group: group,\n xy: xy,\n x: function(item) { return xy(item)[0]; },\n y: function(item) { return xy(item)[1]; }\n };\n}\n","/**\n * Finalize a View instance that is being removed.\n * Cancel any running timers.\n * Remove all external event listeners.\n * Remove any currently displayed tooltip.\n */\nexport default function() {\n var tooltip = this._tooltip,\n timers = this._timers,\n listeners = this._eventListeners,\n n, m, e;\n\n n = timers.length;\n while (--n >= 0) {\n timers[n].stop();\n }\n\n n = listeners.length;\n while (--n >= 0) {\n e = listeners[n];\n m = e.sources.length;\n while (--m >= 0) {\n e.sources[m].removeEventListener(e.type, e.handler);\n }\n }\n\n if (tooltip) {\n tooltip.call(this, this._handler, null, null, null);\n }\n\n return this;\n}\n","import {error} from 'vega-util';\n\nexport function scale(name) {\n var scales = this._runtime.scales;\n if (!scales.hasOwnProperty(name)) {\n error('Unrecognized scale or projection: ' + name);\n }\n return scales[name].value;\n}\n","import {offset} from './render-size';\nimport trap from './trap';\n\nexport default function(view, prevHandler, el, constructor) {\n // instantiate scenegraph handler\n var handler = new constructor(view.loader(), trap(view, view.tooltip()))\n .scene(view.scenegraph().root)\n .initialize(el, offset(view), view);\n\n // transfer event handlers\n if (prevHandler) {\n prevHandler.handlers().forEach(function(h) {\n handler.on(h.type, h.handler);\n });\n }\n\n return handler;\n}\n","import renderHeadless from './render-headless';\nimport {RenderType as Type} from 'vega-scenegraph';\n\n/**\n * Produce an image URL for the visualization. Depending on the type\n * parameter, the generated URL contains data for either a PNG or SVG image.\n * The URL can be used (for example) to download images of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @param {string} type - The image type. One of 'svg', 'png' or 'canvas'.\n * The 'canvas' and 'png' types are synonyms for a PNG image.\n * @return {Promise} - A promise that resolves to an image URL.\n */\nexport default function(type, scaleFactor) {\n return (type !== Type.Canvas && type !== Type.SVG && type !== Type.PNG)\n ? Promise.reject('Unrecognized image type: ' + type)\n : renderHeadless(this, type, scaleFactor).then(function(renderer) {\n return type === Type.SVG\n ? toBlobURL(renderer.svg(), 'image/svg+xml')\n : renderer.canvas().toDataURL('image/png');\n });\n}\n\nfunction toBlobURL(data, mime) {\n var blob = new Blob([data], {type: mime});\n return window.URL.createObjectURL(blob);\n}\n","import renderHeadless from './render-headless';\nimport {RenderType} from 'vega-scenegraph';\n\n/**\n * Produce a Canvas instance containing a rendered visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to a Canvas instance.\n */\nexport default function(scaleFactor) {\n return renderHeadless(this, RenderType.Canvas, scaleFactor)\n .then(function(renderer) { return renderer.canvas(); });\n}\n","import renderHeadless from './render-headless';\nimport {RenderType} from 'vega-scenegraph';\n\n/**\n * Produce a rendered SVG string of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to an SVG string.\n */\nexport default function(scaleFactor) {\n return renderHeadless(this, RenderType.SVG, scaleFactor)\n .then(function(renderer) { return renderer.svg(); });\n}\n","// -- Transforms -----\n\nimport {extend} from 'vega-util';\nimport {transforms} from 'vega-dataflow';\nimport * as tx from 'vega-transforms';\nimport * as vtx from 'vega-view-transforms';\nimport * as encode from 'vega-encode';\nimport * as geo from 'vega-geo';\nimport * as force from 'vega-force';\nimport * as tree from 'vega-hierarchy';\nimport * as voronoi from 'vega-voronoi';\nimport * as wordcloud from 'vega-wordcloud';\nimport * as xf from 'vega-crossfilter';\nextend(transforms, tx, vtx, encode, geo, force, tree, voronoi, wordcloud, xf);\n\n\n// -- Exports -----\n\nexport {\n version\n} from './package.json';\n\nexport * from 'vega-statistics';\n\nexport * from 'vega-util';\n\nexport * from 'vega-loader';\n\nexport * from 'vega-scenegraph';\n\nexport {\n Dataflow,\n EventStream,\n Parameters,\n Pulse,\n MultiPulse,\n Operator,\n Transform,\n changeset,\n ingest,\n isTuple,\n definition,\n transform,\n transforms,\n tupleid\n} from 'vega-dataflow';\n\nexport {\n scale,\n scheme,\n schemeDiscretized,\n interpolate,\n interpolateRange,\n timeInterval,\n utcInterval\n} from 'vega-scale';\n\nexport {\n projection\n} from 'vega-projection';\n\nexport {\n View\n} from 'vega-view';\n\nexport {\n parse,\n expressionFunction,\n formatLocale,\n timeFormatLocale\n} from 'vega-parser';\n\nexport {\n parse as runtime,\n context as runtimeContext\n} from 'vega-runtime';\n","var name = \"vega-themes\";\nvar version$1 = \"2.10.0\";\nvar description = \"Themes for stylized Vega and Vega-Lite visualizations.\";\nvar keywords = [\n\t\"vega\",\n\t\"vega-lite\",\n\t\"themes\",\n\t\"style\"\n];\nvar license = \"BSD-3-Clause\";\nvar author = {\n\tname: \"UW Interactive Data Lab\",\n\turl: \"https://idl.cs.washington.edu\"\n};\nvar contributors = [\n\t{\n\t\tname: \"Emily Gu\",\n\t\turl: \"https://github.com/emilygu\"\n\t},\n\t{\n\t\tname: \"Arvind Satyanarayan\",\n\t\turl: \"http://arvindsatya.com\"\n\t},\n\t{\n\t\tname: \"Jeffrey Heer\",\n\t\turl: \"https://idl.cs.washington.edu\"\n\t},\n\t{\n\t\tname: \"Dominik Moritz\",\n\t\turl: \"https://www.domoritz.de\"\n\t}\n];\nvar main = \"build/vega-themes.js\";\nvar module = \"build/vega-themes.module.js\";\nvar unpkg = \"build/vega-themes.min.js\";\nvar jsdelivr = \"build/vega-themes.min.js\";\nvar types = \"build/vega-themes.module.d.ts\";\nvar repository = {\n\ttype: \"git\",\n\turl: \"https://github.com/vega/vega-themes.git\"\n};\nvar files = [\n\t\"src\",\n\t\"build\"\n];\nvar scripts = {\n\tprebuild: \"yarn clean\",\n\tbuild: \"rollup -c\",\n\tclean: \"rimraf build && rimraf examples/build\",\n\t\"copy:data\": \"rsync -r node_modules/vega-datasets/data/* examples/data\",\n\t\"copy:build\": \"rsync -r build/* examples/build\",\n\t\"deploy:gh\": \"yarn build && mkdir -p examples/build && rsync -r build/* examples/build && gh-pages -d examples\",\n\tpreversion: \"yarn lint\",\n\tserve: \"browser-sync start -s -f build examples --serveStatic examples\",\n\tstart: \"yarn build && concurrently --kill-others -n Server,Rollup 'yarn serve' 'rollup -c -w'\",\n\tprepare: \"beemo create-config\",\n\teslintbase: \"beemo eslint .\",\n\tformat: \"yarn eslintbase --fix\",\n\tlint: \"yarn eslintbase\",\n\trelease: \"auto shipit\"\n};\nvar devDependencies = {\n\t\"@auto-it/conventional-commits\": \"^10.32.2\",\n\t\"@auto-it/first-time-contributor\": \"^10.32.2\",\n\t\"@rollup/plugin-json\": \"^4.1.0\",\n\t\"@rollup/plugin-node-resolve\": \"^13.0.6\",\n\t\"rollup-plugin-ts\": \"^1.4.7\",\n\tauto: \"^10.32.2\",\n\t\"browser-sync\": \"^2.27.7\",\n\tconcurrently: \"^6.4.0\",\n\t\"gh-pages\": \"^3.2.3\",\n\trollup: \"^2.60.0\",\n\t\"rollup-plugin-bundle-size\": \"^1.0.3\",\n\t\"rollup-plugin-terser\": \"^7.0.2\",\n\ttypescript: \"^4.4.4\",\n\tvega: \"^5.19.1\",\n\t\"vega-lite\": \"^5.0.0\",\n\t\"vega-lite-dev-config\": \"^0.20.0\"\n};\nvar peerDependencies = {\n\tvega: \"*\",\n\t\"vega-lite\": \"*\"\n};\nvar pkg = {\n\tname: name,\n\tversion: version$1,\n\tdescription: description,\n\tkeywords: keywords,\n\tlicense: license,\n\tauthor: author,\n\tcontributors: contributors,\n\tmain: main,\n\tmodule: module,\n\tunpkg: unpkg,\n\tjsdelivr: jsdelivr,\n\ttypes: types,\n\trepository: repository,\n\tfiles: files,\n\tscripts: scripts,\n\tdevDependencies: devDependencies,\n\tpeerDependencies: peerDependencies\n};\n\nconst lightColor = '#fff';\nconst medColor = '#888';\nconst darkTheme = {\n background: '#333',\n title: {\n color: lightColor,\n subtitleColor: lightColor,\n },\n style: {\n 'guide-label': {\n fill: lightColor,\n },\n 'guide-title': {\n fill: lightColor,\n },\n },\n axis: {\n domainColor: lightColor,\n gridColor: medColor,\n tickColor: lightColor,\n },\n};\n\nconst markColor$7 = '#4572a7';\nconst excelTheme = {\n background: '#fff',\n arc: { fill: markColor$7 },\n area: { fill: markColor$7 },\n line: { stroke: markColor$7, strokeWidth: 2 },\n path: { stroke: markColor$7 },\n rect: { fill: markColor$7 },\n shape: { stroke: markColor$7 },\n symbol: { fill: markColor$7, strokeWidth: 1.5, size: 50 },\n axis: {\n bandPosition: 0.5,\n grid: true,\n gridColor: '#000000',\n gridOpacity: 1,\n gridWidth: 0.5,\n labelPadding: 10,\n tickSize: 5,\n tickWidth: 0.5,\n },\n axisBand: {\n grid: false,\n tickExtra: true,\n },\n legend: {\n labelBaseline: 'middle',\n labelFontSize: 11,\n symbolSize: 50,\n symbolType: 'square',\n },\n range: {\n category: [\n '#4572a7',\n '#aa4643',\n '#8aa453',\n '#71598e',\n '#4598ae',\n '#d98445',\n '#94aace',\n '#d09393',\n '#b9cc98',\n '#a99cbc',\n ],\n },\n};\n\nconst markColor$6 = '#30a2da';\nconst axisColor$2 = '#cbcbcb';\nconst guideLabelColor = '#999';\nconst guideTitleColor = '#333';\nconst backgroundColor$2 = '#f0f0f0';\nconst blackTitle = '#333';\nconst fiveThirtyEightTheme = {\n arc: { fill: markColor$6 },\n area: { fill: markColor$6 },\n axis: {\n domainColor: axisColor$2,\n grid: true,\n gridColor: axisColor$2,\n gridWidth: 1,\n labelColor: guideLabelColor,\n labelFontSize: 10,\n titleColor: guideTitleColor,\n tickColor: axisColor$2,\n tickSize: 10,\n titleFontSize: 14,\n titlePadding: 10,\n labelPadding: 4,\n },\n axisBand: {\n grid: false,\n },\n background: backgroundColor$2,\n group: {\n fill: backgroundColor$2,\n },\n legend: {\n labelColor: blackTitle,\n labelFontSize: 11,\n padding: 1,\n symbolSize: 30,\n symbolType: 'square',\n titleColor: blackTitle,\n titleFontSize: 14,\n titlePadding: 10,\n },\n line: {\n stroke: markColor$6,\n strokeWidth: 2,\n },\n path: { stroke: markColor$6, strokeWidth: 0.5 },\n rect: { fill: markColor$6 },\n range: {\n category: [\n '#30a2da',\n '#fc4f30',\n '#e5ae38',\n '#6d904f',\n '#8b8b8b',\n '#b96db8',\n '#ff9e27',\n '#56cc60',\n '#52d2ca',\n '#52689e',\n '#545454',\n '#9fe4f8',\n ],\n diverging: ['#cc0020', '#e77866', '#f6e7e1', '#d6e8ed', '#91bfd9', '#1d78b5'],\n heatmap: ['#d6e8ed', '#cee0e5', '#91bfd9', '#549cc6', '#1d78b5'],\n },\n point: {\n filled: true,\n shape: 'circle',\n },\n shape: { stroke: markColor$6 },\n bar: {\n binSpacing: 2,\n fill: markColor$6,\n stroke: null,\n },\n title: {\n anchor: 'start',\n fontSize: 24,\n fontWeight: 600,\n offset: 20,\n },\n};\n\nconst markColor$5 = '#000';\nconst ggplot2Theme = {\n group: {\n fill: '#e5e5e5',\n },\n arc: { fill: markColor$5 },\n area: { fill: markColor$5 },\n line: { stroke: markColor$5 },\n path: { stroke: markColor$5 },\n rect: { fill: markColor$5 },\n shape: { stroke: markColor$5 },\n symbol: { fill: markColor$5, size: 40 },\n axis: {\n domain: false,\n grid: true,\n gridColor: '#FFFFFF',\n gridOpacity: 1,\n labelColor: '#7F7F7F',\n labelPadding: 4,\n tickColor: '#7F7F7F',\n tickSize: 5.67,\n titleFontSize: 16,\n titleFontWeight: 'normal',\n },\n legend: {\n labelBaseline: 'middle',\n labelFontSize: 11,\n symbolSize: 40,\n },\n range: {\n category: [\n '#000000',\n '#7F7F7F',\n '#1A1A1A',\n '#999999',\n '#333333',\n '#B0B0B0',\n '#4D4D4D',\n '#C9C9C9',\n '#666666',\n '#DCDCDC',\n ],\n },\n};\n\nconst headlineFontSize = 22;\nconst headlineFontWeight = 'normal';\nconst labelFont$1 = 'Benton Gothic, sans-serif';\nconst labelFontSize = 11.5;\nconst labelFontWeight = 'normal';\nconst markColor$4 = '#82c6df';\n// const markHighlight = '#006d8f';\n// const markDemocrat = '#5789b8';\n// const markRepublican = '#d94f54';\nconst titleFont = 'Benton Gothic Bold, sans-serif';\nconst titleFontWeight = 'normal';\nconst titleFontSize$1 = 13;\nconst colorSchemes$1 = {\n 'category-6': ['#ec8431', '#829eb1', '#c89d29', '#3580b1', '#adc839', '#ab7fb4'],\n 'fire-7': ['#fbf2c7', '#f9e39c', '#f8d36e', '#f4bb6a', '#e68a4f', '#d15a40', '#ab4232'],\n 'fireandice-6': ['#e68a4f', '#f4bb6a', '#f9e39c', '#dadfe2', '#a6b7c6', '#849eae'],\n 'ice-7': ['#edefee', '#dadfe2', '#c4ccd2', '#a6b7c6', '#849eae', '#607785', '#47525d'],\n};\nconst latimesTheme = {\n background: '#ffffff',\n title: {\n anchor: 'start',\n color: '#000000',\n font: titleFont,\n fontSize: headlineFontSize,\n fontWeight: headlineFontWeight,\n },\n arc: { fill: markColor$4 },\n area: { fill: markColor$4 },\n line: { stroke: markColor$4, strokeWidth: 2 },\n path: { stroke: markColor$4 },\n rect: { fill: markColor$4 },\n shape: { stroke: markColor$4 },\n symbol: { fill: markColor$4, size: 30 },\n axis: {\n labelFont: labelFont$1,\n labelFontSize,\n labelFontWeight,\n titleFont,\n titleFontSize: titleFontSize$1,\n titleFontWeight,\n },\n axisX: {\n labelAngle: 0,\n labelPadding: 4,\n tickSize: 3,\n },\n axisY: {\n labelBaseline: 'middle',\n maxExtent: 45,\n minExtent: 45,\n tickSize: 2,\n titleAlign: 'left',\n titleAngle: 0,\n titleX: -45,\n titleY: -11,\n },\n legend: {\n labelFont: labelFont$1,\n labelFontSize,\n symbolType: 'square',\n titleFont,\n titleFontSize: titleFontSize$1,\n titleFontWeight,\n },\n range: {\n category: colorSchemes$1['category-6'],\n diverging: colorSchemes$1['fireandice-6'],\n heatmap: colorSchemes$1['fire-7'],\n ordinal: colorSchemes$1['fire-7'],\n ramp: colorSchemes$1['fire-7'],\n },\n};\n\nconst markColor$3 = '#ab5787';\nconst axisColor$1 = '#979797';\nconst quartzTheme = {\n background: '#f9f9f9',\n arc: { fill: markColor$3 },\n area: { fill: markColor$3 },\n line: { stroke: markColor$3 },\n path: { stroke: markColor$3 },\n rect: { fill: markColor$3 },\n shape: { stroke: markColor$3 },\n symbol: { fill: markColor$3, size: 30 },\n axis: {\n domainColor: axisColor$1,\n domainWidth: 0.5,\n gridWidth: 0.2,\n labelColor: axisColor$1,\n tickColor: axisColor$1,\n tickWidth: 0.2,\n titleColor: axisColor$1,\n },\n axisBand: {\n grid: false,\n },\n axisX: {\n grid: true,\n tickSize: 10,\n },\n axisY: {\n domain: false,\n grid: true,\n tickSize: 0,\n },\n legend: {\n labelFontSize: 11,\n padding: 1,\n symbolSize: 30,\n symbolType: 'square',\n },\n range: {\n category: [\n '#ab5787',\n '#51b2e5',\n '#703c5c',\n '#168dd9',\n '#d190b6',\n '#00609f',\n '#d365ba',\n '#154866',\n '#666666',\n '#c4c4c4',\n ],\n },\n};\n\nconst markColor$2 = '#3e5c69';\nconst voxTheme = {\n background: '#fff',\n arc: { fill: markColor$2 },\n area: { fill: markColor$2 },\n line: { stroke: markColor$2 },\n path: { stroke: markColor$2 },\n rect: { fill: markColor$2 },\n shape: { stroke: markColor$2 },\n symbol: { fill: markColor$2 },\n axis: {\n domainWidth: 0.5,\n grid: true,\n labelPadding: 2,\n tickSize: 5,\n tickWidth: 0.5,\n titleFontWeight: 'normal',\n },\n axisBand: {\n grid: false,\n },\n axisX: {\n gridWidth: 0.2,\n },\n axisY: {\n gridDash: [3],\n gridWidth: 0.4,\n },\n legend: {\n labelFontSize: 11,\n padding: 1,\n symbolType: 'square',\n },\n range: {\n category: ['#3e5c69', '#6793a6', '#182429', '#0570b0', '#3690c0', '#74a9cf', '#a6bddb', '#e2ddf2'],\n },\n};\n\nconst markColor$1 = '#1696d2';\nconst axisColor = '#000000';\nconst backgroundColor$1 = '#FFFFFF';\nconst font = 'Lato';\nconst labelFont = 'Lato';\nconst sourceFont = 'Lato';\nconst gridColor$1 = '#DEDDDD';\nconst titleFontSize = 18;\nconst colorSchemes = {\n 'main-colors': ['#1696d2', '#d2d2d2', '#000000', '#fdbf11', '#ec008b', '#55b748', '#5c5859', '#db2b27'],\n 'shades-blue': ['#CFE8F3', '#A2D4EC', '#73BFE2', '#46ABDB', '#1696D2', '#12719E', '#0A4C6A', '#062635'],\n 'shades-gray': ['#F5F5F5', '#ECECEC', '#E3E3E3', '#DCDBDB', '#D2D2D2', '#9D9D9D', '#696969', '#353535'],\n 'shades-yellow': ['#FFF2CF', '#FCE39E', '#FDD870', '#FCCB41', '#FDBF11', '#E88E2D', '#CA5800', '#843215'],\n 'shades-magenta': ['#F5CBDF', '#EB99C2', '#E46AA7', '#E54096', '#EC008B', '#AF1F6B', '#761548', '#351123'],\n 'shades-green': ['#DCEDD9', '#BCDEB4', '#98CF90', '#78C26D', '#55B748', '#408941', '#2C5C2D', '#1A2E19'],\n 'shades-black': ['#D5D5D4', '#ADABAC', '#848081', '#5C5859', '#332D2F', '#262223', '#1A1717', '#0E0C0D'],\n 'shades-red': ['#F8D5D4', '#F1AAA9', '#E9807D', '#E25552', '#DB2B27', '#A4201D', '#6E1614', '#370B0A'],\n 'one-group': ['#1696d2', '#000000'],\n 'two-groups-cat-1': ['#1696d2', '#000000'],\n 'two-groups-cat-2': ['#1696d2', '#fdbf11'],\n 'two-groups-cat-3': ['#1696d2', '#db2b27'],\n 'two-groups-seq': ['#a2d4ec', '#1696d2'],\n 'three-groups-cat': ['#1696d2', '#fdbf11', '#000000'],\n 'three-groups-seq': ['#a2d4ec', '#1696d2', '#0a4c6a'],\n 'four-groups-cat-1': ['#000000', '#d2d2d2', '#fdbf11', '#1696d2'],\n 'four-groups-cat-2': ['#1696d2', '#ec0008b', '#fdbf11', '#5c5859'],\n 'four-groups-seq': ['#cfe8f3', '#73bf42', '#1696d2', '#0a4c6a'],\n 'five-groups-cat-1': ['#1696d2', '#fdbf11', '#d2d2d2', '#ec008b', '#000000'],\n 'five-groups-cat-2': ['#1696d2', '#0a4c6a', '#d2d2d2', '#fdbf11', '#332d2f'],\n 'five-groups-seq': ['#cfe8f3', '#73bf42', '#1696d2', '#0a4c6a', '#000000'],\n 'six-groups-cat-1': ['#1696d2', '#ec008b', '#fdbf11', '#000000', '#d2d2d2', '#55b748'],\n 'six-groups-cat-2': ['#1696d2', '#d2d2d2', '#ec008b', '#fdbf11', '#332d2f', '#0a4c6a'],\n 'six-groups-seq': ['#cfe8f3', '#a2d4ec', '#73bfe2', '#46abdb', '#1696d2', '#12719e'],\n 'diverging-colors': ['#ca5800', '#fdbf11', '#fdd870', '#fff2cf', '#cfe8f3', '#73bfe2', '#1696d2', '#0a4c6a'],\n};\nconst urbanInstituteTheme = {\n background: backgroundColor$1,\n title: {\n anchor: 'start',\n fontSize: titleFontSize,\n font: font,\n },\n axisX: {\n domain: true,\n domainColor: axisColor,\n domainWidth: 1,\n grid: false,\n labelFontSize: 12,\n labelFont: labelFont,\n labelAngle: 0,\n tickColor: axisColor,\n tickSize: 5,\n titleFontSize: 12,\n titlePadding: 10,\n titleFont: font,\n },\n axisY: {\n domain: false,\n domainWidth: 1,\n grid: true,\n gridColor: gridColor$1,\n gridWidth: 1,\n labelFontSize: 12,\n labelFont: labelFont,\n labelPadding: 8,\n ticks: false,\n titleFontSize: 12,\n titlePadding: 10,\n titleFont: font,\n titleAngle: 0,\n titleY: -10,\n titleX: 18,\n },\n legend: {\n labelFontSize: 12,\n labelFont: labelFont,\n symbolSize: 100,\n titleFontSize: 12,\n titlePadding: 10,\n titleFont: font,\n orient: 'right',\n offset: 10,\n },\n view: {\n stroke: 'transparent',\n },\n range: {\n category: colorSchemes['six-groups-cat-1'],\n diverging: colorSchemes['diverging-colors'],\n heatmap: colorSchemes['diverging-colors'],\n ordinal: colorSchemes['six-groups-seq'],\n ramp: colorSchemes['shades-blue'],\n },\n area: {\n fill: markColor$1,\n },\n rect: {\n fill: markColor$1,\n },\n line: {\n color: markColor$1,\n stroke: markColor$1,\n strokeWidth: 5,\n },\n trail: {\n color: markColor$1,\n stroke: markColor$1,\n strokeWidth: 0,\n size: 1,\n },\n path: {\n stroke: markColor$1,\n strokeWidth: 0.5,\n },\n point: {\n filled: true,\n },\n text: {\n font: sourceFont,\n color: markColor$1,\n fontSize: 11,\n align: 'center',\n fontWeight: 400,\n size: 11,\n },\n style: {\n bar: {\n fill: markColor$1,\n stroke: null,\n },\n },\n arc: { fill: markColor$1 },\n shape: { stroke: markColor$1 },\n symbol: { fill: markColor$1, size: 30 },\n};\n\n/**\n * Copyright 2020 Google LLC.\n *\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file or at\n * https://developers.google.com/open-source/licenses/bsd\n */\nconst markColor = '#3366CC';\nconst gridColor = '#ccc';\nconst defaultFont = 'Arial, sans-serif';\nconst googlechartsTheme = {\n arc: { fill: markColor },\n area: { fill: markColor },\n path: { stroke: markColor },\n rect: { fill: markColor },\n shape: { stroke: markColor },\n symbol: { stroke: markColor },\n circle: { fill: markColor },\n background: '#fff',\n padding: {\n top: 10,\n right: 10,\n bottom: 10,\n left: 10,\n },\n style: {\n 'guide-label': {\n font: defaultFont,\n fontSize: 12,\n },\n 'guide-title': {\n font: defaultFont,\n fontSize: 12,\n },\n 'group-title': {\n font: defaultFont,\n fontSize: 12,\n },\n },\n title: {\n font: defaultFont,\n fontSize: 14,\n fontWeight: 'bold',\n dy: -3,\n anchor: 'start',\n },\n axis: {\n gridColor: gridColor,\n tickColor: gridColor,\n domain: false,\n grid: true,\n },\n range: {\n category: [\n '#4285F4',\n '#DB4437',\n '#F4B400',\n '#0F9D58',\n '#AB47BC',\n '#00ACC1',\n '#FF7043',\n '#9E9D24',\n '#5C6BC0',\n '#F06292',\n '#00796B',\n '#C2185B',\n ],\n heatmap: ['#c6dafc', '#5e97f6', '#2a56c6'],\n },\n};\n\nconst ptToPx = (value) => value * (1 / 3 + 1);\nconst fontSmallPx = ptToPx(9);\nconst legendFontPx = ptToPx(10);\nconst fontLargePx = ptToPx(12);\nconst fontStandard = 'Segoe UI';\nconst fontTitle = 'wf_standard-font, helvetica, arial, sans-serif';\nconst firstLevelElementColor = '#252423';\nconst secondLevelElementColor = '#605E5C';\nconst backgroundColor = 'transparent';\nconst backgroundSecondaryColor = '#C8C6C4';\nconst paletteColor1 = '#118DFF';\nconst paletteColor2 = '#12239E';\nconst paletteColor3 = '#E66C37';\nconst paletteColor4 = '#6B007B';\nconst paletteColor5 = '#E044A7';\nconst paletteColor6 = '#744EC2';\nconst paletteColor7 = '#D9B300';\nconst paletteColor8 = '#D64550';\nconst divergentColorMax = paletteColor1;\nconst divergentColorMin = '#DEEFFF';\nconst divergentPalette = [divergentColorMin, divergentColorMax];\nconst ordinalPalette = [\n divergentColorMin,\n '#c7e4ff',\n '#b0d9ff',\n '#9aceff',\n '#83c3ff',\n '#6cb9ff',\n '#55aeff',\n '#3fa3ff',\n '#2898ff',\n divergentColorMax,\n];\nconst powerbiTheme = {\n view: { stroke: backgroundColor },\n background: backgroundColor,\n font: fontStandard,\n header: {\n titleFont: fontTitle,\n titleFontSize: fontLargePx,\n titleColor: firstLevelElementColor,\n labelFont: fontStandard,\n labelFontSize: legendFontPx,\n labelColor: secondLevelElementColor,\n },\n axis: {\n ticks: false,\n grid: false,\n domain: false,\n labelColor: secondLevelElementColor,\n labelFontSize: fontSmallPx,\n titleFont: fontTitle,\n titleColor: firstLevelElementColor,\n titleFontSize: fontLargePx,\n titleFontWeight: 'normal',\n },\n axisQuantitative: {\n tickCount: 3,\n grid: true,\n gridColor: backgroundSecondaryColor,\n gridDash: [1, 5],\n labelFlush: false,\n },\n axisBand: { tickExtra: true },\n axisX: { labelPadding: 5 },\n axisY: { labelPadding: 10 },\n bar: { fill: paletteColor1 },\n line: {\n stroke: paletteColor1,\n strokeWidth: 3,\n strokeCap: 'round',\n strokeJoin: 'round',\n },\n text: { font: fontStandard, fontSize: fontSmallPx, fill: secondLevelElementColor },\n arc: { fill: paletteColor1 },\n area: { fill: paletteColor1, line: true, opacity: 0.6 },\n path: { stroke: paletteColor1 },\n rect: { fill: paletteColor1 },\n point: { fill: paletteColor1, filled: true, size: 75 },\n shape: { stroke: paletteColor1 },\n symbol: { fill: paletteColor1, strokeWidth: 1.5, size: 50 },\n legend: {\n titleFont: fontStandard,\n titleFontWeight: 'bold',\n titleColor: secondLevelElementColor,\n labelFont: fontStandard,\n labelFontSize: legendFontPx,\n labelColor: secondLevelElementColor,\n symbolType: 'circle',\n symbolSize: 75,\n },\n range: {\n category: [\n paletteColor1,\n paletteColor2,\n paletteColor3,\n paletteColor4,\n paletteColor5,\n paletteColor6,\n paletteColor7,\n paletteColor8,\n ],\n diverging: divergentPalette,\n heatmap: divergentPalette,\n ordinal: ordinalPalette,\n },\n};\n\nconst version = pkg.version;\n\nexport { darkTheme as dark, excelTheme as excel, fiveThirtyEightTheme as fivethirtyeight, ggplot2Theme as ggplot2, googlechartsTheme as googlecharts, latimesTheme as latimes, powerbiTheme as powerbi, quartzTheme as quartz, urbanInstituteTheme as urbaninstitute, version, voxTheme as vox };\n","import defaultStyle from './style';\nvar EL_ID = 'vg-tooltip-element';\nexport var DEFAULT_OPTIONS = {\n /**\n * X offset.\n */\n offsetX: 10,\n /**\n * Y offset.\n */\n offsetY: 10,\n /**\n * ID of the tooltip element.\n */\n id: EL_ID,\n /**\n * ID of the tooltip CSS style.\n */\n styleId: 'vega-tooltip-style',\n /**\n * The name of the theme. You can use the CSS class called [THEME]-theme to style the tooltips.\n *\n * There are two predefined themes: \"light\" (default) and \"dark\".\n */\n theme: 'light',\n /**\n * Do not use the default styles provided by Vega Tooltip. If you enable this option, you need to use your own styles. It is not necessary to disable the default style when using a custom theme.\n */\n disableDefaultStyle: false,\n /**\n * HTML sanitizer function that removes dangerous HTML to prevent XSS.\n *\n * This should be a function from string to string. You may replace it with a formatter such as a markdown formatter.\n */\n sanitize: escapeHTML,\n /**\n * The maximum recursion depth when printing objects in the tooltip.\n */\n maxDepth: 2,\n};\n/**\n * Escape special HTML characters.\n *\n * @param value A value to convert to string and HTML-escape.\n */\nexport function escapeHTML(value) {\n return String(value)\n .replace(/&/g, '&')\n .replace(/\" + valueToHtml(title) + \"\";\n }\n var keys = Object.keys(rest);\n if (keys.length > 0) {\n content += '';\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var val = rest[key];\n if (isObject(val)) {\n val = stringify(val, maxDepth);\n }\n content += \"\";\n }\n content += \"
          \" + valueToHtml(key) + \":\" + valueToHtml(val) + \"
          \";\n }\n return content || '{}'; // show empty object if there are no properties\n }\n return valueToHtml(value);\n}\nexport function replacer(maxDepth) {\n var stack = [];\n return function (key, value) {\n if (typeof value !== 'object' || value === null) {\n return value;\n }\n var pos = stack.indexOf(this) + 1;\n stack.length = pos;\n if (stack.length > maxDepth) {\n return '[Object]';\n }\n if (stack.indexOf(value) >= 0) {\n return '[Circular]';\n }\n stack.push(value);\n return value;\n };\n}\n/**\n * Stringify any JS object to valid JSON\n */\nexport function stringify(obj, maxDepth) {\n return JSON.stringify(obj, replacer(maxDepth));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0VmFsdWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZm9ybWF0VmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4RDs7Ozs7R0FLRztBQUNILE1BQU0sc0JBQXNCLEtBQVUsRUFBRSxXQUFtQyxFQUFFLFFBQWdCO0lBQzNGLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sTUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQXJELENBQXFELENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQUcsQ0FBQztLQUNoRztJQUVELElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ25CLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUVqQixJQUFNLFVBQWlDLEVBQS9CLGdCQUFLLEVBQUUsb0NBQXdCLENBQUM7UUFFeEMsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLElBQUksU0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQU8sQ0FBQztTQUM3QztRQUVELElBQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQixPQUFPLElBQUksU0FBUyxDQUFDO1lBQ3JCLEtBQWtCLFVBQUksRUFBSixhQUFJLEVBQUosa0JBQUksRUFBSixJQUFJO2dCQUFqQixJQUFNLEdBQUcsYUFBQTtnQkFDWixJQUFJLEdBQUcsR0FBSSxJQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNqQixHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDaEM7Z0JBRUQsT0FBTyxJQUFJLDJCQUF1QixXQUFXLENBQUMsR0FBRyxDQUFDLGtDQUEyQixXQUFXLENBQUMsR0FBRyxDQUFDLGVBQVksQ0FBQzthQUMzRztZQUNELE9BQU8sSUFBSSxVQUFVLENBQUM7U0FDdkI7UUFFRCxPQUFPLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQywrQ0FBK0M7S0FDeEU7SUFFRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQsTUFBTSxtQkFBbUIsUUFBZ0I7SUFDdkMsSUFBTSxLQUFLLEdBQVUsRUFBRSxDQUFDO0lBRXhCLE9BQU8sVUFBb0IsR0FBVyxFQUFFLEtBQVU7UUFDaEQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUMvQyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbkIsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsRUFBRTtZQUMzQixPQUFPLFVBQVUsQ0FBQztTQUNuQjtRQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0IsT0FBTyxZQUFZLENBQUM7U0FDckI7UUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBUSxFQUFFLFFBQWdCO0lBQ2xELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDakQsQ0FBQyJ9","import * as tslib_1 from \"tslib\";\nimport { createDefaultStyle, DEFAULT_OPTIONS, escapeHTML } from './defaults';\nimport { formatValue } from './formatValue';\nimport { calculatePosition } from './position';\n/**\n * The tooltip handler class.\n */\nvar Handler = /** @class */ (function () {\n /**\n * Create the tooltip handler and initialize the element and style.\n *\n * @param options Tooltip Options\n */\n function Handler(options) {\n this.options = tslib_1.__assign({}, DEFAULT_OPTIONS, options);\n var elementId = this.options.id;\n // bind this to call\n this.call = this.tooltip_handler.bind(this);\n // prepend a default stylesheet for tooltips to the head\n if (!this.options.disableDefaultStyle && !document.getElementById(this.options.styleId)) {\n var style = document.createElement('style');\n style.setAttribute('id', this.options.styleId);\n style.innerHTML = createDefaultStyle(elementId);\n if (document.head.childNodes.length > 0) {\n document.head.insertBefore(style, document.head.childNodes[0]);\n }\n else {\n document.head.appendChild(style);\n }\n }\n // append a div element that we use as a tooltip unless it already exists\n this.el = document.getElementById(elementId);\n if (!this.el) {\n this.el = document.createElement('div');\n this.el.setAttribute('id', elementId);\n this.el.classList.add('vg-tooltip');\n document.body.appendChild(this.el);\n }\n }\n /**\n * The tooltip handler function.\n */\n Handler.prototype.tooltip_handler = function (handler, event, item, value) {\n // console.log(handler, event, item, value);\n // hide tooltip for null, undefined, or empty string values\n if (value == null || value === '') {\n this.el.classList.remove('visible', this.options.theme + \"-theme\");\n return;\n }\n // set the tooltip content\n this.el.innerHTML = formatValue(value, escapeHTML, this.options.maxDepth);\n // make the tooltip visible\n this.el.classList.add('visible', this.options.theme + \"-theme\");\n var _a = calculatePosition(event, this.el.getBoundingClientRect(), this.options.offsetX, this.options.offsetY), x = _a.x, y = _a.y;\n this.el.setAttribute('style', \"top: \" + y + \"px; left: \" + x + \"px\");\n };\n return Handler;\n}());\nexport { Handler };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9IYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBVyxNQUFNLFlBQVksQ0FBQztBQUN0RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUvQzs7R0FFRztBQUNIO0lBZ0JFOzs7O09BSUc7SUFDSCxpQkFBWSxPQUEwQjtRQUNwQyxJQUFJLENBQUMsT0FBTyx3QkFBUSxlQUFlLEVBQUssT0FBTyxDQUFFLENBQUM7UUFDbEQsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFFbEMsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUMsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZGLElBQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQyxLQUFLLENBQUMsU0FBUyxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRWhELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdkMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEU7aUJBQU07Z0JBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEM7U0FDRjtRQUVELHlFQUF5RTtRQUN6RSxJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDWixJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUVwQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxpQ0FBZSxHQUF2QixVQUF3QixPQUFZLEVBQUUsS0FBaUIsRUFBRSxJQUFTLEVBQUUsS0FBVTtRQUM1RSw0Q0FBNEM7UUFFNUMsMkRBQTJEO1FBQzNELElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFdBQVEsQ0FBQyxDQUFDO1lBQ25FLE9BQU87U0FDUjtRQUVELDBCQUEwQjtRQUMxQixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTFFLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxXQUFRLENBQUMsQ0FBQztRQUUxRCxJQUFBLDBHQUtMLEVBTE8sUUFBQyxFQUFFLFFBQUMsQ0FLVjtRQUVGLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFRLENBQUMsa0JBQWEsQ0FBQyxPQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQ0gsY0FBQztBQUFELENBQUMsQUEvRUQsSUErRUMifQ==","// generated with build-style.sh\nexport default \"#vg-tooltip-element {\\n visibility: hidden;\\n padding: 8px;\\n position: fixed;\\n z-index: 1000;\\n font-family: sans-serif;\\n font-size: 11px;\\n border-radius: 3px;\\n box-shadow: 2px 2px 4px rgba(0,0,0,0.1);\\n\\n /* The default theme is the light theme. */\\n background-color: rgba(255, 255, 255, 0.95);\\n border: 1px solid #d9d9d9;\\n color: black;\\n}\\n#vg-tooltip-element.visible {\\n visibility: visible;\\n}\\n#vg-tooltip-element h2 {\\n margin-top: 0;\\n margin-bottom: 10px;\\n font-size: 13px;\\n}\\n#vg-tooltip-element table {\\n border-spacing: 0;\\n}\\n#vg-tooltip-element td {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n padding-top: 2px;\\n padding-bottom: 2px;\\n}\\n#vg-tooltip-element td.key {\\n color: #808080;\\n max-width: 150px;\\n text-align: right;\\n padding-right: 4px;\\n}\\n#vg-tooltip-element td.value {\\n display: block;\\n max-width: 300px;\\n max-height: 7em;\\n text-align: left;\\n}\\n\\n/* Dark and light color themes */\\n#vg-tooltip-element.dark-theme {\\n background-color: rgba(32, 32, 32, 0.9);\\n border: 1px solid #f5f5f5;\\n color: white;\\n}\\n#vg-tooltip-element.dark-theme td.key {\\n color: #bfbfbf;\\n}\\n\\n#vg-tooltip-element.light-theme {\\n background-color: rgba(255, 255, 255, 0.95);\\n border: 1px solid #d9d9d9;\\n color: black;\\n}\\n#vg-tooltip-element.light-theme td.key {\\n color: #808080;\\n}\";\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3R5bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0NBQWdDO0FBQ2hDLGVBQWUsczBDQThEYixDQUFBIn0=","/**\n * Position the tooltip\n *\n * @param event The mouse event.\n * @param tooltipBox\n * @param offsetX Horizontal offset.\n * @param offsetY Vertical offset.\n */\nexport function calculatePosition(event, tooltipBox, offsetX, offsetY) {\n var x = event.clientX + offsetX;\n if (x + tooltipBox.width > window.innerWidth) {\n x = +event.clientX - offsetX - tooltipBox.width;\n }\n var y = event.clientY + offsetY;\n if (y + tooltipBox.height > window.innerHeight) {\n y = +event.clientY - offsetY - tooltipBox.height;\n }\n return { x: x, y: y };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcG9zaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILE1BQU0sNEJBQ0osS0FBaUIsRUFDakIsVUFBNkMsRUFDN0MsT0FBZSxFQUNmLE9BQWU7SUFFZixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUNoQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUU7UUFDNUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztLQUNqRDtJQUVELElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ2hDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRTtRQUM5QyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO0tBQ2xEO0lBRUQsT0FBTyxFQUFFLENBQUMsR0FBQSxFQUFFLENBQUMsR0FBQSxFQUFFLENBQUM7QUFDbEIsQ0FBQyJ9","// generated with build-style.sh\nexport default \".vega-embed {\\n position: relative;\\n display: inline-block;\\n padding-right: 38px;\\n}\\n\\n.vega-embed .vega-actions-wrapper {\\n display: inline-flex;\\n position: absolute;\\n top: 0;\\n right: 0;\\n padding: 6px;\\n z-index: 1000;\\n\\n opacity: 0.2;\\n background: white;\\n box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);\\n color: #1b1e23;\\n border: 1px solid #aaa;\\n border-radius: 999px;\\n transition: opacity 0.4s ease-in;\\n}\\n\\n.vega-embed:hover .vega-actions-wrapper {\\n transition: opacity 0.2s ease;\\n opacity: 1;\\n}\\n\\n.vega-embed .vega-actions {\\n position: absolute;\\n top: 0;\\n right: 0;\\n display: none;\\n flex-direction: column;\\n\\n padding-bottom: 8px;\\n padding-top: 8px;\\n border-radius: 4px;\\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);\\n border: 1px solid #d9d9d9;\\n background: white;\\n}\\n\\n.vega-embed .vega-actions-wrapper:hover {\\n background: transparent;\\n color: transparent;\\n border: none;\\n box-shadow: none;\\n}\\n\\n.vega-embed .vega-actions-wrapper:hover .vega-actions {\\n display: flex;\\n}\\n\\n.vega-embed .vega-actions a {\\n padding: 8px 16px;\\n font-family: sans-serif;\\n font-size: 14px;\\n font-weight: 600;\\n white-space: nowrap;\\n color: #434a56;\\n text-decoration: none;\\n}\\n\\n.vega-embed .vega-actions a:hover {\\n background-color: #f7f7f9;\\n color: #1b1e23;\\n}\";\n//# sourceMappingURL=style.js.map","import { isArray } from 'vega-util';\n/**\n * From vega-lite\n */\nexport function mergeDeep(dest) {\n var src = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n src[_i - 1] = arguments[_i];\n }\n for (var _a = 0, src_1 = src; _a < src_1.length; _a++) {\n var s = src_1[_a];\n dest = deepMerge_(dest, s);\n }\n return dest;\n}\nfunction deepMerge_(dest, src) {\n if (typeof src !== 'object' || src === null) {\n return dest;\n }\n for (var p in src) {\n if (!src.hasOwnProperty(p)) {\n continue;\n }\n if (src[p] === undefined) {\n continue;\n }\n if (typeof src[p] !== 'object' || isArray(src[p]) || src[p] === null) {\n dest[p] = src[p];\n }\n else if (typeof dest[p] !== 'object' || dest[p] === null) {\n dest[p] = mergeDeep(isArray(src[p].constructor) ? [] : {}, src[p]);\n }\n else {\n mergeDeep(dest[p], src[p]);\n }\n }\n return dest;\n}\nexport function isURL(s) {\n return s.startsWith('http://') || s.startsWith('https://') || s.startsWith('//');\n}\n//# sourceMappingURL=util.js.map","import * as tslib_1 from \"tslib\";\nimport * as d3 from 'd3-selection';\nimport * as stringify_ from 'json-stringify-pretty-compact';\nimport { satisfies } from 'semver';\nimport * as vegaImport from 'vega-lib';\nimport * as vlImport from 'vega-lite';\nimport schemaParser from 'vega-schema-url-parser';\nimport * as themes from 'vega-themes';\nimport { Handler } from 'vega-tooltip';\nimport { post } from './post';\nimport embedStyle from './style';\nimport { mergeDeep } from './util';\n// https://github.com/rollup/rollup/issues/670\nvar stringify = stringify_.default || stringify_;\nexport var vega = vegaImport;\nexport var vl = vlImport;\nvar NAMES = {\n vega: 'Vega',\n 'vega-lite': 'Vega-Lite',\n};\nvar VERSION = {\n vega: vega.version,\n 'vega-lite': vl ? vl.version : 'not available',\n};\nvar PREPROCESSOR = {\n vega: function (vgjson, _) { return vgjson; },\n 'vega-lite': function (vljson, config) { return vl.compile(vljson, { config: config }).spec; },\n};\nvar SVG_CIRCLES = \"\\n\\n \\n \\n \\n\";\nfunction isTooltipHandler(h) {\n return typeof h === 'function';\n}\nfunction viewSource(source, sourceHeader, sourceFooter, mode) {\n var header = \"\" + sourceHeader + \"
          \";\n    var footer = \"
          \" + sourceFooter + \"\";\n var win = window.open('');\n win.document.write(header + source + footer);\n win.document.title = NAMES[mode] + \" JSON Source\";\n}\n/**\n * Try to guess the type of spec.\n *\n * @param spec Vega or Vega-Lite spec.\n */\nexport function guessMode(spec, providedMode) {\n // Decide mode\n var parsed;\n if (spec.$schema) {\n parsed = schemaParser(spec.$schema);\n if (providedMode && providedMode !== parsed.library) {\n console.warn(\"The given visualization spec is written in \" + NAMES[parsed.library] + \", but mode argument sets \" + NAMES[providedMode] + \".\");\n }\n var mode = parsed.library;\n if (!satisfies(VERSION[mode], \"^\" + parsed.version.slice(1))) {\n console.warn(\"The input spec uses \" + mode + \" \" + parsed.version + \", but the current version of \" + NAMES[mode] + \" is \" + VERSION[mode] + \".\");\n }\n return mode;\n }\n else {\n // try to guess from the provided spec\n if ('mark' in spec ||\n 'encoding' in spec ||\n 'layer' in spec ||\n 'hconcat' in spec ||\n 'vconcat' in spec ||\n 'facet' in spec ||\n 'repeat' in spec) {\n return 'vega-lite';\n }\n if ('marks' in spec || 'signals' in spec || 'scales' in spec || 'axes' in spec) {\n return 'vega';\n }\n }\n return providedMode || 'vega';\n}\n/**\n * Embed a Vega visualization component in a web page. This function returns a promise.\n *\n * @param el DOM element in which to place component (DOM node or CSS selector).\n * @param spec String : A URL string from which to load the Vega specification.\n * Object : The Vega/Vega-Lite specification as a parsed JSON object.\n * @param opt A JavaScript object containing options for embedding.\n */\nexport default function embed(el, spec, opt) {\n if (opt === void 0) { opt = {}; }\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n var actions, loader, renderer, logLevel, data, config, data, ID, style, mode, vgSpec, parsed, div, runtime, view, handler, wrapper, ctrl, _loop_1, _i, _a, ext, editorUrl_1;\n return tslib_1.__generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n opt = opt || {};\n actions = opt.actions === true || opt.actions === false\n ? opt.actions\n : mergeDeep({}, { export: { svg: true, png: true }, source: true, compiled: false, editor: true }, opt.actions || {});\n loader = opt.loader || vega.loader();\n renderer = opt.renderer || 'canvas';\n logLevel = opt.logLevel || vega.Warn;\n if (!vega.isString(spec)) return [3 /*break*/, 2];\n return [4 /*yield*/, loader.load(spec)];\n case 1:\n data = _b.sent();\n return [2 /*return*/, embed(el, JSON.parse(data), opt)];\n case 2:\n config = opt.config || {};\n if (!vega.isString(config)) return [3 /*break*/, 4];\n return [4 /*yield*/, loader.load(config)];\n case 3:\n data = _b.sent();\n return [2 /*return*/, embed(el, spec, tslib_1.__assign({}, opt, { config: JSON.parse(data) }))];\n case 4:\n if (opt.defaultStyle) {\n ID = 'vega-embed-style';\n if (!document.getElementById(ID)) {\n style = document.createElement('style');\n style.id = ID;\n style.innerText = opt.defaultStyle === true ? (embedStyle || '').toString() : opt.defaultStyle;\n document.getElementsByTagName('head')[0].appendChild(style);\n }\n }\n if (opt.theme) {\n config = mergeDeep({}, themes[opt.theme], config);\n }\n mode = guessMode(spec, opt.mode);\n vgSpec = PREPROCESSOR[mode](spec, config);\n if (mode === 'vega-lite') {\n if (vgSpec.$schema) {\n parsed = schemaParser(vgSpec.$schema);\n if (!satisfies(VERSION.vega, \"^\" + parsed.version.slice(1))) {\n console.warn(\"The compiled spec uses Vega \" + parsed.version + \", but current version is \" + VERSION.vega + \".\");\n }\n }\n }\n div = d3\n .select(el) // d3.select supports elements and strings\n .classed('vega-embed', true)\n .html('');\n if (opt.onBeforeParse) {\n // Allow Vega spec to be modified before being used\n vgSpec = opt.onBeforeParse(vgSpec);\n }\n runtime = vega.parse(vgSpec, mode === 'vega-lite' ? {} : config);\n view = new vega.View(runtime, {\n loader: loader,\n logLevel: logLevel,\n renderer: renderer,\n }).initialize(el);\n if (opt.tooltip !== false) {\n handler = void 0;\n if (isTooltipHandler(opt.tooltip)) {\n handler = opt.tooltip;\n }\n else {\n // user provided boolean true or tooltip options\n handler = new Handler(opt.tooltip === true ? {} : opt.tooltip).call;\n }\n view.tooltip(handler);\n }\n // do not automatically enable hover for Vega-Lite.\n if (opt.hover === undefined ? mode !== 'vega-lite' : opt.hover) {\n view.hover();\n }\n if (opt) {\n if (opt.width) {\n view.width(opt.width);\n }\n if (opt.height) {\n view.height(opt.height);\n }\n if (opt.padding) {\n view.padding(opt.padding);\n }\n }\n if (!opt.runAsync) return [3 /*break*/, 6];\n return [4 /*yield*/, view.runAsync()];\n case 5:\n _b.sent();\n return [3 /*break*/, 7];\n case 6:\n view.run();\n _b.label = 7;\n case 7:\n if (actions !== false) {\n wrapper = div.append('div').attr('class', 'vega-actions-wrapper');\n if (opt.defaultStyle === true) {\n wrapper.html(SVG_CIRCLES);\n }\n ctrl = wrapper.insert('div').attr('class', 'vega-actions');\n // add 'Export' action\n if (actions === true || actions.export !== false) {\n _loop_1 = function (ext) {\n if (actions === true || actions.export === true || actions.export[ext]) {\n ctrl\n .append('a')\n .text(\"Export as \" + ext.toUpperCase())\n .attr('href', '#')\n .attr('target', '_blank')\n .attr('download', \"visualization.\" + ext)\n .on('mousedown', function () {\n var _this = this;\n view\n .toImageURL(ext, opt.scaleFactor)\n .then(function (url) {\n _this.href = url;\n })\n .catch(function (error) {\n throw error;\n });\n d3.event.preventDefault();\n });\n }\n };\n for (_i = 0, _a = ['svg', 'png']; _i < _a.length; _i++) {\n ext = _a[_i];\n _loop_1(ext);\n }\n }\n // add 'View Source' action\n if (actions === true || actions.source !== false) {\n ctrl\n .append('a')\n .text('View Source')\n .attr('href', '#')\n .on('click', function () {\n viewSource(stringify(spec), opt.sourceHeader || '', opt.sourceFooter || '', mode);\n d3.event.preventDefault();\n });\n }\n // add 'View Compiled' action\n if (mode === 'vega-lite' && (actions === true || actions.compiled !== false)) {\n ctrl\n .append('a')\n .text('View Vega')\n .attr('href', '#')\n .on('click', function () {\n viewSource(stringify(vgSpec), opt.sourceHeader || '', opt.sourceFooter || '', 'vega');\n d3.event.preventDefault();\n });\n }\n // add 'Open in Vega Editor' action\n if (actions === true || actions.editor !== false) {\n editorUrl_1 = opt.editorUrl || 'https://vega.github.io/editor/';\n ctrl\n .append('a')\n .text('Open in Vega Editor')\n .attr('href', '#')\n .on('click', function () {\n post(window, editorUrl_1, {\n config: config,\n mode: mode,\n renderer: renderer,\n spec: stringify(spec),\n });\n d3.event.preventDefault();\n });\n }\n }\n return [2 /*return*/, { view: view, spec: spec }];\n }\n });\n });\n}\n//# sourceMappingURL=embed.js.map","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","/**\n * Open editor url in a new window, and pass a message.\n */\nexport function post(window, url, data) {\n var editor = window.open(url);\n var wait = 10000;\n var step = 250;\n var count = ~~(wait / step);\n function listen(evt) {\n if (evt.source === editor) {\n count = 0;\n window.removeEventListener('message', listen, false);\n }\n }\n window.addEventListener('message', listen, false);\n // send message\n // periodically resend until ack received or timeout\n function send() {\n if (count <= 0) {\n return;\n }\n editor.postMessage(data, '*');\n setTimeout(send, step);\n count -= 1;\n }\n setTimeout(send, step);\n}\n//# sourceMappingURL=post.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar channel_1 = require(\"../../channel\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar scale_1 = require(\"../../scale\");\nvar type_1 = require(\"../../type\");\nvar util_1 = require(\"../../util\");\nvar common_1 = require(\"../common\");\nvar config_1 = require(\"./config\");\nfunction labels(model, channel, specifiedLabelsSpec, orient) {\n var fieldDef = model.fieldDef(channel) ||\n (channel === 'x' ? model.fieldDef('x2') :\n channel === 'y' ? model.fieldDef('y2') :\n undefined);\n var axis = model.axis(channel);\n var config = model.config;\n var labelsSpec = {};\n // Text\n if (fielddef_1.isTimeFieldDef(fieldDef)) {\n var isUTCScale = model.getScaleComponent(channel).get('type') === scale_1.ScaleType.UTC;\n var expr = common_1.timeFormatExpression('datum.value', fieldDef.timeUnit, axis.format, config.axis.shortTimeLabels, config.timeFormat, isUTCScale);\n if (expr) {\n labelsSpec.text = { signal: expr };\n }\n }\n // Label Angle\n var angle = config_1.getAxisConfig('labelAngle', model.config, channel, orient, model.getScaleComponent(channel).get('type'));\n if (angle === undefined) {\n angle = labelAngle(axis, channel, fieldDef);\n if (angle) {\n labelsSpec.angle = { value: angle };\n }\n }\n if (angle !== undefined) {\n var align = labelAlign(angle, orient);\n if (align) {\n labelsSpec.align = { value: align };\n }\n labelsSpec.baseline = labelBaseline(angle, orient);\n }\n labelsSpec = tslib_1.__assign({}, labelsSpec, specifiedLabelsSpec);\n return util_1.keys(labelsSpec).length === 0 ? undefined : labelsSpec;\n}\nexports.labels = labels;\nfunction labelBaseline(angle, orient) {\n if (orient === 'top' || orient === 'bottom') {\n if (angle <= 45 || 315 <= angle) {\n return { value: orient === 'top' ? 'bottom' : 'top' };\n }\n else if (135 <= angle && angle <= 225) {\n return { value: orient === 'top' ? 'top' : 'bottom' };\n }\n else {\n return { value: 'middle' };\n }\n }\n else {\n if ((angle <= 45 || 315 <= angle) || (135 <= angle && angle <= 225)) {\n return { value: 'middle' };\n }\n else if (45 <= angle && angle <= 135) {\n return { value: orient === 'left' ? 'top' : 'bottom' };\n }\n else {\n return { value: orient === 'left' ? 'bottom' : 'top' };\n }\n }\n}\nexports.labelBaseline = labelBaseline;\nfunction labelAngle(axis, channel, fieldDef) {\n if (axis.labelAngle !== undefined) {\n // Make angle within [0,360)\n return ((axis.labelAngle % 360) + 360) % 360;\n }\n else {\n if (channel === channel_1.X && util_1.contains([type_1.NOMINAL, type_1.ORDINAL], fieldDef.type)) {\n return 270;\n }\n }\n return undefined;\n}\nexports.labelAngle = labelAngle;\nfunction labelAlign(angle, orient) {\n angle = ((angle % 360) + 360) % 360;\n if (orient === 'top' || orient === 'bottom') {\n if (angle % 180 === 0) {\n return 'center';\n }\n else if (0 < angle && angle < 180) {\n return orient === 'top' ? 'right' : 'left';\n }\n else {\n return orient === 'top' ? 'left' : 'right';\n }\n }\n else {\n if ((angle + 90) % 180 === 0) {\n return 'center';\n }\n else if (90 <= angle && angle < 270) {\n return orient === 'left' ? 'left' : 'right';\n }\n else {\n return orient === 'left' ? 'right' : 'left';\n }\n }\n}\nexports.labelAlign = labelAlign;\n//# sourceMappingURL=encode.js.map","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var noOptions = {};\n var nonWS = /[^\\s\\u00a0]/;\n var Pos = CodeMirror.Pos, cmp = CodeMirror.cmpPos;\n\n function firstNonWS(str) {\n var found = str.search(nonWS);\n return found == -1 ? 0 : found;\n }\n\n CodeMirror.commands.toggleComment = function(cm) {\n cm.toggleComment();\n };\n\n CodeMirror.defineExtension(\"toggleComment\", function(options) {\n if (!options) options = noOptions;\n var cm = this;\n var minLine = Infinity, ranges = this.listSelections(), mode = null;\n for (var i = ranges.length - 1; i >= 0; i--) {\n var from = ranges[i].from(), to = ranges[i].to();\n if (from.line >= minLine) continue;\n if (to.line >= minLine) to = Pos(minLine, 0);\n minLine = from.line;\n if (mode == null) {\n if (cm.uncomment(from, to, options)) mode = \"un\";\n else { cm.lineComment(from, to, options); mode = \"line\"; }\n } else if (mode == \"un\") {\n cm.uncomment(from, to, options);\n } else {\n cm.lineComment(from, to, options);\n }\n }\n });\n\n // Rough heuristic to try and detect lines that are part of multi-line string\n function probablyInsideString(cm, pos, line) {\n return /\\bstring\\b/.test(cm.getTokenTypeAt(Pos(pos.line, 0))) && !/^[\\'\\\"\\`]/.test(line)\n }\n\n function getMode(cm, pos) {\n var mode = cm.getMode()\n return mode.useInnerComments === false || !mode.innerMode ? mode : cm.getModeAt(pos)\n }\n\n CodeMirror.defineExtension(\"lineComment\", function(from, to, options) {\n if (!options) options = noOptions;\n var self = this, mode = getMode(self, from);\n var firstLine = self.getLine(from.line);\n if (firstLine == null || probablyInsideString(self, from, firstLine)) return;\n\n var commentString = options.lineComment || mode.lineComment;\n if (!commentString) {\n if (options.blockCommentStart || mode.blockCommentStart) {\n options.fullLines = true;\n self.blockComment(from, to, options);\n }\n return;\n }\n\n var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1);\n var pad = options.padding == null ? \" \" : options.padding;\n var blankLines = options.commentBlankLines || from.line == to.line;\n\n self.operation(function() {\n if (options.indent) {\n var baseString = null;\n for (var i = from.line; i < end; ++i) {\n var line = self.getLine(i);\n var whitespace = line.search(nonWS) === -1 ? line : line.slice(0, firstNonWS(line));\n if (baseString == null || baseString.length > whitespace.length) {\n baseString = whitespace;\n }\n }\n for (var i = from.line; i < end; ++i) {\n var line = self.getLine(i), cut = baseString.length;\n if (!blankLines && !nonWS.test(line)) continue;\n if (line.slice(0, cut) != baseString) cut = firstNonWS(line);\n self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut));\n }\n } else {\n for (var i = from.line; i < end; ++i) {\n if (blankLines || nonWS.test(self.getLine(i)))\n self.replaceRange(commentString + pad, Pos(i, 0));\n }\n }\n });\n });\n\n CodeMirror.defineExtension(\"blockComment\", function(from, to, options) {\n if (!options) options = noOptions;\n var self = this, mode = getMode(self, from);\n var startString = options.blockCommentStart || mode.blockCommentStart;\n var endString = options.blockCommentEnd || mode.blockCommentEnd;\n if (!startString || !endString) {\n if ((options.lineComment || mode.lineComment) && options.fullLines != false)\n self.lineComment(from, to, options);\n return;\n }\n if (/\\bcomment\\b/.test(self.getTokenTypeAt(Pos(from.line, 0)))) return\n\n var end = Math.min(to.line, self.lastLine());\n if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end;\n\n var pad = options.padding == null ? \" \" : options.padding;\n if (from.line > end) return;\n\n self.operation(function() {\n if (options.fullLines != false) {\n var lastLineHasText = nonWS.test(self.getLine(end));\n self.replaceRange(pad + endString, Pos(end));\n self.replaceRange(startString + pad, Pos(from.line, 0));\n var lead = options.blockCommentLead || mode.blockCommentLead;\n if (lead != null) for (var i = from.line + 1; i <= end; ++i)\n if (i != end || lastLineHasText)\n self.replaceRange(lead + pad, Pos(i, 0));\n } else {\n var atCursor = cmp(self.getCursor(\"to\"), to) == 0, empty = !self.somethingSelected()\n self.replaceRange(endString, to);\n if (atCursor) self.setSelection(empty ? to : self.getCursor(\"from\"), to)\n self.replaceRange(startString, from);\n }\n });\n });\n\n CodeMirror.defineExtension(\"uncomment\", function(from, to, options) {\n if (!options) options = noOptions;\n var self = this, mode = getMode(self, from);\n var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), start = Math.min(from.line, end);\n\n // Try finding line comments\n var lineString = options.lineComment || mode.lineComment, lines = [];\n var pad = options.padding == null ? \" \" : options.padding, didSomething;\n lineComment: {\n if (!lineString) break lineComment;\n for (var i = start; i <= end; ++i) {\n var line = self.getLine(i);\n var found = line.indexOf(lineString);\n if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1;\n if (found == -1 && nonWS.test(line)) break lineComment;\n if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment;\n lines.push(line);\n }\n self.operation(function() {\n for (var i = start; i <= end; ++i) {\n var line = lines[i - start];\n var pos = line.indexOf(lineString), endPos = pos + lineString.length;\n if (pos < 0) continue;\n if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length;\n didSomething = true;\n self.replaceRange(\"\", Pos(i, pos), Pos(i, endPos));\n }\n });\n if (didSomething) return true;\n }\n\n // Try block comments\n var startString = options.blockCommentStart || mode.blockCommentStart;\n var endString = options.blockCommentEnd || mode.blockCommentEnd;\n if (!startString || !endString) return false;\n var lead = options.blockCommentLead || mode.blockCommentLead;\n var startLine = self.getLine(start), open = startLine.indexOf(startString)\n if (open == -1) return false\n var endLine = end == start ? startLine : self.getLine(end)\n var close = endLine.indexOf(endString, end == start ? open + startString.length : 0);\n var insideStart = Pos(start, open + 1), insideEnd = Pos(end, close + 1)\n if (close == -1 ||\n !/comment/.test(self.getTokenTypeAt(insideStart)) ||\n !/comment/.test(self.getTokenTypeAt(insideEnd)) ||\n self.getRange(insideStart, insideEnd, \"\\n\").indexOf(endString) > -1)\n return false;\n\n // Avoid killing block comments completely outside the selection.\n // Positions of the last startString before the start of the selection, and the first endString after it.\n var lastStart = startLine.lastIndexOf(startString, from.ch);\n var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length);\n if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false;\n // Positions of the first endString after the end of the selection, and the last startString before it.\n firstEnd = endLine.indexOf(endString, to.ch);\n var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch);\n lastStart = (firstEnd == -1 || almostLastStart == -1) ? -1 : to.ch + almostLastStart;\n if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false;\n\n self.operation(function() {\n self.replaceRange(\"\", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)),\n Pos(end, close + endString.length));\n var openEnd = open + startString.length;\n if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length;\n self.replaceRange(\"\", Pos(start, open), Pos(start, openEnd));\n if (lead) for (var i = start + 1; i <= end; ++i) {\n var line = self.getLine(i), found = line.indexOf(lead);\n if (found == -1 || nonWS.test(line.slice(0, found))) continue;\n var foundEnd = found + lead.length;\n if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length;\n self.replaceRange(\"\", Pos(i, found), Pos(i, foundEnd));\n }\n });\n return true;\n });\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar channel_1 = require(\"../../channel\");\nvar util_1 = require(\"../../util\");\nvar dataflow_1 = require(\"./dataflow\");\nvar GeoPointNode = /** @class */ (function (_super) {\n tslib_1.__extends(GeoPointNode, _super);\n function GeoPointNode(parent, projection, fields, as) {\n var _this = _super.call(this, parent) || this;\n _this.projection = projection;\n _this.fields = fields;\n _this.as = as;\n return _this;\n }\n GeoPointNode.prototype.clone = function () {\n return new GeoPointNode(null, this.projection, util_1.duplicate(this.fields), util_1.duplicate(this.as));\n };\n GeoPointNode.parseAll = function (parent, model) {\n if (!model.projectionName()) {\n return parent;\n }\n [[channel_1.LONGITUDE, channel_1.LATITUDE], [channel_1.LONGITUDE2, channel_1.LATITUDE2]].forEach(function (coordinates) {\n var pair = coordinates.map(function (channel) { return model.channelHasField(channel) ? model.fieldDef(channel).field : undefined; });\n var suffix = coordinates[0] === channel_1.LONGITUDE2 ? '2' : '';\n if (pair[0] || pair[1]) {\n parent = new GeoPointNode(parent, model.projectionName(), pair, [model.getName('x' + suffix), model.getName('y' + suffix)]);\n }\n });\n return parent;\n };\n GeoPointNode.prototype.assemble = function () {\n return {\n type: 'geopoint',\n projection: this.projection,\n fields: this.fields,\n as: this.as\n };\n };\n return GeoPointNode;\n}(dataflow_1.DataFlowNode));\nexports.GeoPointNode = GeoPointNode;\n//# sourceMappingURL=geopoint.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar data_1 = require(\"../../data\");\nvar encoding_1 = require(\"../../encoding\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar mark_1 = require(\"../../mark\");\nvar sort_1 = require(\"../../sort\");\nvar util_1 = require(\"../../util\");\nvar common_1 = require(\"../common\");\nvar area_1 = require(\"./area\");\nvar bar_1 = require(\"./bar\");\nvar geoshape_1 = require(\"./geoshape\");\nvar line_1 = require(\"./line\");\nvar point_1 = require(\"./point\");\nvar rect_1 = require(\"./rect\");\nvar rule_1 = require(\"./rule\");\nvar text_1 = require(\"./text\");\nvar tick_1 = require(\"./tick\");\nvar markCompiler = {\n area: area_1.area,\n bar: bar_1.bar,\n circle: point_1.circle,\n geoshape: geoshape_1.geoshape,\n line: line_1.line,\n point: point_1.point,\n rect: rect_1.rect,\n rule: rule_1.rule,\n square: point_1.square,\n text: text_1.text,\n tick: tick_1.tick,\n trail: line_1.trail\n};\nfunction parseMarkGroup(model) {\n if (util_1.contains([mark_1.LINE, mark_1.AREA, mark_1.TRAIL], model.mark)) {\n return parsePathMark(model);\n }\n else {\n return getMarkGroups(model);\n }\n}\nexports.parseMarkGroup = parseMarkGroup;\nvar FACETED_PATH_PREFIX = 'faceted_path_';\nfunction parsePathMark(model) {\n var details = pathGroupingFields(model.mark, model.encoding);\n var pathMarks = getMarkGroups(model, {\n // If has subfacet for line/area group, need to use faceted data from below.\n fromPrefix: (details.length > 0 ? FACETED_PATH_PREFIX : '')\n });\n if (details.length > 0) { // have level of details - need to facet line into subgroups\n // TODO: for non-stacked plot, map order to zindex. (Maybe rename order for layer to zindex?)\n return [{\n name: model.getName('pathgroup'),\n type: 'group',\n from: {\n facet: {\n name: FACETED_PATH_PREFIX + model.requestDataName(data_1.MAIN),\n data: model.requestDataName(data_1.MAIN),\n groupby: details,\n }\n },\n encode: {\n update: {\n width: { field: { group: 'width' } },\n height: { field: { group: 'height' } }\n }\n },\n marks: pathMarks\n }];\n }\n else {\n return pathMarks;\n }\n}\nfunction getSort(model) {\n var encoding = model.encoding, stack = model.stack, mark = model.mark, markDef = model.markDef;\n var order = encoding.order;\n if (!vega_util_1.isArray(order) && fielddef_1.isValueDef(order)) {\n return undefined;\n }\n else if ((vega_util_1.isArray(order) || fielddef_1.isFieldDef(order)) && !stack) {\n // Sort by the order field if it is specified and the field is not stacked. (For stacked field, order specify stack order.)\n return common_1.sortParams(order, { expr: 'datum' });\n }\n else if (mark_1.isPathMark(mark)) {\n // For both line and area, we sort values based on dimension by default\n var dimensionChannelDef = encoding[markDef.orient === 'horizontal' ? 'y' : 'x'];\n if (fielddef_1.isFieldDef(dimensionChannelDef)) {\n var s = dimensionChannelDef.sort;\n var sortField = sort_1.isSortField(s) ?\n fielddef_1.vgField({\n // FIXME: this op might not already exist?\n // FIXME: what if dimensionChannel (x or y) contains custom domain?\n aggregate: encoding_1.isAggregate(model.encoding) ? s.op : undefined,\n field: s.field\n }, { expr: 'datum' }) :\n fielddef_1.vgField(dimensionChannelDef, {\n // For stack with imputation, we only have bin_mid\n binSuffix: model.stack && model.stack.impute ? 'mid' : undefined,\n expr: 'datum'\n });\n return {\n field: sortField,\n order: 'descending'\n };\n }\n return undefined;\n }\n return undefined;\n}\nexports.getSort = getSort;\nfunction getMarkGroups(model, opt) {\n if (opt === void 0) { opt = { fromPrefix: '' }; }\n var mark = model.mark;\n var clip = model.markDef.clip !== undefined ?\n !!model.markDef.clip : scaleClip(model);\n var style = common_1.getStyles(model.markDef);\n var key = model.encoding.key;\n var sort = getSort(model);\n var postEncodingTransform = markCompiler[mark].postEncodingTransform ? markCompiler[mark].postEncodingTransform(model) : null;\n return [tslib_1.__assign({ name: model.getName('marks'), type: markCompiler[mark].vgMark }, (clip ? { clip: true } : {}), (style ? { style: style } : {}), (key ? { key: { field: key.field } } : {}), (sort ? { sort: sort } : {}), { from: { data: opt.fromPrefix + model.requestDataName(data_1.MAIN) }, encode: {\n update: markCompiler[mark].encodeEntry(model)\n } }, (postEncodingTransform ? {\n transform: postEncodingTransform\n } : {}))];\n}\n/**\n * Returns list of path grouping fields\n * that the model's spec contains.\n */\nfunction pathGroupingFields(mark, encoding) {\n return util_1.keys(encoding).reduce(function (details, channel) {\n switch (channel) {\n // x, y, x2, y2, lat, long, lat1, long2, order, tooltip, href, cursor should not cause lines to group\n case 'x':\n case 'y':\n case 'order':\n case 'tooltip':\n case 'href':\n case 'x2':\n case 'y2':\n case 'latitude':\n case 'longitude':\n case 'latitude2':\n case 'longitude2':\n // TODO: case 'cursor':\n // text, shape, shouldn't be a part of line/trail/area\n case 'text':\n case 'shape':\n return details;\n case 'detail':\n case 'key':\n var channelDef = encoding[channel];\n if (channelDef) {\n (vega_util_1.isArray(channelDef) ? channelDef : [channelDef]).forEach(function (fieldDef) {\n if (!fieldDef.aggregate) {\n details.push(fielddef_1.vgField(fieldDef, {}));\n }\n });\n }\n return details;\n case 'size':\n if (mark === 'trail') {\n // For trail, size should not group trail lines.\n return details;\n }\n // For line, it should group lines.\n /* tslint:disable */\n // intentional fall through\n case 'color':\n case 'fill':\n case 'stroke':\n case 'opacity':\n // TODO strokeDashOffset:\n /* tslint:enable */\n var fieldDef = fielddef_1.getFieldDef(encoding[channel]);\n if (fieldDef && !fieldDef.aggregate) {\n details.push(fielddef_1.vgField(fieldDef, {}));\n }\n return details;\n default:\n throw new Error(\"Bug: Channel \" + channel + \" unimplemented for line mark\");\n }\n }, []);\n}\nexports.pathGroupingFields = pathGroupingFields;\n/**\n * If scales are bound to interval selections, we want to automatically clip\n * marks to account for panning/zooming interactions. We identify bound scales\n * by the domainRaw property, which gets added during scale parsing.\n */\nfunction scaleClip(model) {\n var xScale = model.getScaleComponent('x');\n var yScale = model.getScaleComponent('y');\n return (xScale && xScale.get('domainRaw')) ||\n (yScale && yScale.get('domainRaw')) ? true : false;\n}\n//# sourceMappingURL=mark.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar timeunit_1 = require(\"../../timeunit\");\nvar util_1 = require(\"../../util\");\nvar dataflow_1 = require(\"./dataflow\");\nvar TimeUnitNode = /** @class */ (function (_super) {\n tslib_1.__extends(TimeUnitNode, _super);\n function TimeUnitNode(parent, formula) {\n var _this = _super.call(this, parent) || this;\n _this.formula = formula;\n return _this;\n }\n TimeUnitNode.prototype.clone = function () {\n return new TimeUnitNode(null, util_1.duplicate(this.formula));\n };\n TimeUnitNode.makeFromEncoding = function (parent, model) {\n var formula = model.reduceFieldDef(function (timeUnitComponent, fieldDef) {\n if (fieldDef.timeUnit) {\n var f = fielddef_1.vgField(fieldDef);\n timeUnitComponent[f] = {\n as: f,\n timeUnit: fieldDef.timeUnit,\n field: fieldDef.field\n };\n }\n return timeUnitComponent;\n }, {});\n if (util_1.keys(formula).length === 0) {\n return null;\n }\n return new TimeUnitNode(parent, formula);\n };\n TimeUnitNode.makeFromTransform = function (parent, t) {\n var _a;\n return new TimeUnitNode(parent, (_a = {},\n _a[t.field] = {\n as: t.as,\n timeUnit: t.timeUnit,\n field: t.field\n },\n _a));\n };\n TimeUnitNode.prototype.merge = function (other) {\n this.formula = tslib_1.__assign({}, this.formula, other.formula);\n other.remove();\n };\n TimeUnitNode.prototype.producedFields = function () {\n var out = {};\n util_1.vals(this.formula).forEach(function (f) {\n out[f.as] = true;\n });\n return out;\n };\n TimeUnitNode.prototype.dependentFields = function () {\n var out = {};\n util_1.vals(this.formula).forEach(function (f) {\n out[f.field] = true;\n });\n return out;\n };\n TimeUnitNode.prototype.assemble = function () {\n return util_1.vals(this.formula).map(function (c) {\n return {\n type: 'formula',\n as: c.as,\n expr: timeunit_1.fieldExpr(c.timeUnit, c.field)\n };\n });\n };\n return TimeUnitNode;\n}(dataflow_1.DataFlowNode));\nexports.TimeUnitNode = TimeUnitNode;\n//# sourceMappingURL=timeunit.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar log = tslib_1.__importStar(require(\"./log\"));\nfunction extractCompositionLayout(layout) {\n var _a = layout || {}, _b = _a.align, align = _b === void 0 ? undefined : _b, _c = _a.center, center = _c === void 0 ? undefined : _c, _d = _a.bounds, bounds = _d === void 0 ? undefined : _d, _e = _a.spacing, spacing = _e === void 0 ? undefined : _e;\n return { align: align, bounds: bounds, center: center, spacing: spacing };\n}\nexports.extractCompositionLayout = extractCompositionLayout;\nfunction _normalizeAutoSize(autosize) {\n return vega_util_1.isString(autosize) ? { type: autosize } : autosize || {};\n}\nfunction normalizeAutoSize(topLevelAutosize, configAutosize, isUnitOrLayer) {\n if (isUnitOrLayer === void 0) { isUnitOrLayer = true; }\n var autosize = tslib_1.__assign({ type: 'pad' }, _normalizeAutoSize(configAutosize), _normalizeAutoSize(topLevelAutosize));\n if (autosize.type === 'fit') {\n if (!isUnitOrLayer) {\n log.warn(log.message.FIT_NON_SINGLE);\n autosize.type = 'pad';\n }\n }\n return autosize;\n}\nexports.normalizeAutoSize = normalizeAutoSize;\nvar TOP_LEVEL_PROPERTIES = [\n 'background', 'padding', 'datasets'\n // We do not include \"autosize\" here as it is supported by only unit and layer specs and thus need to be normalized\n];\nfunction extractTopLevelProperties(t) {\n return TOP_LEVEL_PROPERTIES.reduce(function (o, p) {\n if (t && t[p] !== undefined) {\n o[p] = t[p];\n }\n return o;\n }, {});\n}\nexports.extractTopLevelProperties = extractTopLevelProperties;\n//# sourceMappingURL=toplevelprops.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar aggregate_1 = require(\"../../aggregate\");\nvar bin_1 = require(\"../../bin\");\nvar channel_1 = require(\"../../channel\");\nvar data_1 = require(\"../../data\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar log = tslib_1.__importStar(require(\"../../log\"));\nvar scale_1 = require(\"../../scale\");\nvar sort_1 = require(\"../../sort\");\nvar util = tslib_1.__importStar(require(\"../../util\"));\nvar vega_schema_1 = require(\"../../vega.schema\");\nvar common_1 = require(\"../common\");\nvar calculate_1 = require(\"../data/calculate\");\nvar optimize_1 = require(\"../data/optimize\");\nvar model_1 = require(\"../model\");\nvar selection_1 = require(\"../selection/selection\");\nfunction parseScaleDomain(model) {\n if (model_1.isUnitModel(model)) {\n parseUnitScaleDomain(model);\n }\n else {\n parseNonUnitScaleDomain(model);\n }\n}\nexports.parseScaleDomain = parseScaleDomain;\nfunction parseUnitScaleDomain(model) {\n var scales = model.specifiedScales;\n var localScaleComponents = model.component.scales;\n util.keys(localScaleComponents).forEach(function (channel) {\n var specifiedScale = scales[channel];\n var specifiedDomain = specifiedScale ? specifiedScale.domain : undefined;\n var domains = parseDomainForChannel(model, channel);\n var localScaleCmpt = localScaleComponents[channel];\n localScaleCmpt.domains = domains;\n if (scale_1.isSelectionDomain(specifiedDomain)) {\n // As scale parsing occurs before selection parsing, we use a temporary\n // signal here and append the scale.domain definition. This is replaced\n // with the correct domainRaw signal during scale assembly.\n // For more information, see isRawSelectionDomain in selection.ts.\n // FIXME: replace this with a special property in the scaleComponent\n localScaleCmpt.set('domainRaw', {\n signal: selection_1.SELECTION_DOMAIN + util.hash(specifiedDomain)\n }, true);\n }\n if (model.component.data.isFaceted) {\n // get resolve from closest facet parent as this decides whether we need to refer to cloned subtree or not\n var facetParent = model;\n while (!model_1.isFacetModel(facetParent) && facetParent.parent) {\n facetParent = facetParent.parent;\n }\n var resolve = facetParent.component.resolve.scale[channel];\n if (resolve === 'shared') {\n for (var _i = 0, domains_1 = domains; _i < domains_1.length; _i++) {\n var domain = domains_1[_i];\n // Replace the scale domain with data output from a cloned subtree after the facet.\n if (vega_schema_1.isDataRefDomain(domain)) {\n // use data from cloned subtree (which is the same as data but with a prefix added once)\n domain.data = optimize_1.FACET_SCALE_PREFIX + domain.data.replace(optimize_1.FACET_SCALE_PREFIX, '');\n }\n }\n }\n }\n });\n}\nfunction parseNonUnitScaleDomain(model) {\n for (var _i = 0, _a = model.children; _i < _a.length; _i++) {\n var child = _a[_i];\n parseScaleDomain(child);\n }\n var localScaleComponents = model.component.scales;\n util.keys(localScaleComponents).forEach(function (channel) {\n var domains;\n var domainRaw = null;\n for (var _i = 0, _a = model.children; _i < _a.length; _i++) {\n var child = _a[_i];\n var childComponent = child.component.scales[channel];\n if (childComponent) {\n if (domains === undefined) {\n domains = childComponent.domains;\n }\n else {\n domains = domains.concat(childComponent.domains);\n }\n var dr = childComponent.get('domainRaw');\n if (domainRaw && dr && domainRaw.signal !== dr.signal) {\n log.warn('The same selection must be used to override scale domains in a layered view.');\n }\n domainRaw = dr;\n }\n }\n localScaleComponents[channel].domains = domains;\n if (domainRaw) {\n localScaleComponents[channel].set('domainRaw', domainRaw, true);\n }\n });\n}\n/**\n * Remove unaggregated domain if it is not applicable\n * Add unaggregated domain if domain is not specified and config.scale.useUnaggregatedDomain is true.\n */\nfunction normalizeUnaggregatedDomain(domain, fieldDef, scaleType, scaleConfig) {\n if (domain === 'unaggregated') {\n var _a = canUseUnaggregatedDomain(fieldDef, scaleType), valid = _a.valid, reason = _a.reason;\n if (!valid) {\n log.warn(reason);\n return undefined;\n }\n }\n else if (domain === undefined && scaleConfig.useUnaggregatedDomain) {\n // Apply config if domain is not specified.\n var valid = canUseUnaggregatedDomain(fieldDef, scaleType).valid;\n if (valid) {\n return 'unaggregated';\n }\n }\n return domain;\n}\nfunction parseDomainForChannel(model, channel) {\n var scaleType = model.getScaleComponent(channel).get('type');\n var domain = normalizeUnaggregatedDomain(model.scaleDomain(channel), model.fieldDef(channel), scaleType, model.config.scale);\n if (domain !== model.scaleDomain(channel)) {\n model.specifiedScales[channel] = tslib_1.__assign({}, model.specifiedScales[channel], { domain: domain });\n }\n // If channel is either X or Y then union them with X2 & Y2 if they exist\n if (channel === 'x' && model.channelHasField('x2')) {\n if (model.channelHasField('x')) {\n return parseSingleChannelDomain(scaleType, domain, model, 'x').concat(parseSingleChannelDomain(scaleType, domain, model, 'x2'));\n }\n else {\n return parseSingleChannelDomain(scaleType, domain, model, 'x2');\n }\n }\n else if (channel === 'y' && model.channelHasField('y2')) {\n if (model.channelHasField('y')) {\n return parseSingleChannelDomain(scaleType, domain, model, 'y').concat(parseSingleChannelDomain(scaleType, domain, model, 'y2'));\n }\n else {\n return parseSingleChannelDomain(scaleType, domain, model, 'y2');\n }\n }\n return parseSingleChannelDomain(scaleType, domain, model, channel);\n}\nexports.parseDomainForChannel = parseDomainForChannel;\nfunction mapDomainToDataSignal(domain, type, timeUnit) {\n return domain.map(function (v) {\n var data = fielddef_1.valueExpr(v, { timeUnit: timeUnit, type: type });\n return { signal: \"{data: \" + data + \"}\" };\n });\n}\nfunction parseSingleChannelDomain(scaleType, domain, model, channel) {\n var fieldDef = model.fieldDef(channel);\n if (domain && domain !== 'unaggregated' && !scale_1.isSelectionDomain(domain)) { // explicit value\n var type = fieldDef.type, timeUnit = fieldDef.timeUnit;\n if (type === 'temporal' || timeUnit) {\n return mapDomainToDataSignal(domain, type, timeUnit);\n }\n return [domain];\n }\n var stack = model.stack;\n if (stack && channel === stack.fieldChannel) {\n if (stack.offset === 'normalize') {\n return [[0, 1]];\n }\n var data = model.requestDataName(data_1.MAIN);\n return [{\n data: data,\n field: model.vgField(channel, { suffix: 'start' })\n }, {\n data: data,\n field: model.vgField(channel, { suffix: 'end' })\n }];\n }\n var sort = channel_1.isScaleChannel(channel) ? domainSort(model, channel, scaleType) : undefined;\n if (domain === 'unaggregated') {\n var data = model.requestDataName(data_1.MAIN);\n var field = fieldDef.field;\n return [{\n data: data,\n field: fielddef_1.vgField({ field: field, aggregate: 'min' })\n }, {\n data: data,\n field: fielddef_1.vgField({ field: field, aggregate: 'max' })\n }];\n }\n else if (fieldDef.bin) { // bin\n if (scale_1.isBinScale(scaleType)) {\n var signal = model.getName(bin_1.binToString(fieldDef.bin) + \"_\" + fieldDef.field + \"_bins\");\n return [{ signal: \"sequence(\" + signal + \".start, \" + signal + \".stop + \" + signal + \".step, \" + signal + \".step)\" }];\n }\n if (scale_1.hasDiscreteDomain(scaleType)) {\n // ordinal bin scale takes domain from bin_range, ordered by bin start\n // This is useful for both axis-based scale (x/y) and legend-based scale (other channels).\n return [{\n // If sort by aggregation of a specified sort field, we need to use RAW table,\n // so we can aggregate values for the scale independently from the main aggregation.\n data: util.isBoolean(sort) ? model.requestDataName(data_1.MAIN) : model.requestDataName(data_1.RAW),\n // Use range if we added it and the scale does not support computing a range as a signal.\n field: model.vgField(channel, common_1.binRequiresRange(fieldDef, channel) ? { binSuffix: 'range' } : {}),\n // we have to use a sort object if sort = true to make the sort correct by bin start\n sort: sort === true || !sort_1.isSortField(sort) ? {\n field: model.vgField(channel, {}),\n op: 'min' // min or max doesn't matter since we sort by the start of the bin range\n } : sort\n }];\n }\n else { // continuous scales\n if (channel === 'x' || channel === 'y') {\n if (bin_1.isBinParams(fieldDef.bin) && fieldDef.bin.extent) {\n return [fieldDef.bin.extent];\n }\n // X/Y position have to include start and end for non-ordinal scale\n var data = model.requestDataName(data_1.MAIN);\n return [{\n data: data,\n field: model.vgField(channel, {})\n }, {\n data: data,\n field: model.vgField(channel, { binSuffix: 'end' })\n }];\n }\n else {\n // TODO: use bin_mid\n return [{\n data: model.requestDataName(data_1.MAIN),\n field: model.vgField(channel, {})\n }];\n }\n }\n }\n else if (sort) {\n return [{\n // If sort by aggregation of a specified sort field, we need to use RAW table,\n // so we can aggregate values for the scale independently from the main aggregation.\n data: util.isBoolean(sort) ? model.requestDataName(data_1.MAIN) : model.requestDataName(data_1.RAW),\n field: model.vgField(channel),\n sort: sort\n }];\n }\n else {\n return [{\n data: model.requestDataName(data_1.MAIN),\n field: model.vgField(channel)\n }];\n }\n}\nfunction domainSort(model, channel, scaleType) {\n if (!scale_1.hasDiscreteDomain(scaleType)) {\n return undefined;\n }\n var fieldDef = model.fieldDef(channel);\n var sort = fieldDef.sort;\n // if the sort is specified with array, use the derived sort index field\n if (sort_1.isSortArray(sort)) {\n return {\n op: 'min',\n field: calculate_1.sortArrayIndexField(fieldDef, channel),\n order: 'ascending'\n };\n }\n // Sorted based on an aggregate calculation over a specified sort field (only for ordinal scale)\n if (sort_1.isSortField(sort)) {\n // flatten nested fields\n return tslib_1.__assign({}, sort, (sort.field ? { field: util.replacePathInField(sort.field) } : {}));\n }\n if (sort === 'descending') {\n return {\n op: 'min',\n field: model.vgField(channel),\n order: 'descending'\n };\n }\n if (util.contains(['ascending', undefined /* default =ascending*/], sort)) {\n return true;\n }\n // sort == null\n return undefined;\n}\nexports.domainSort = domainSort;\n/**\n * Determine if a scale can use unaggregated domain.\n * @return {Boolean} Returns true if all of the following conditons applies:\n * 1. `scale.domain` is `unaggregated`\n * 2. Aggregation function is not `count` or `sum`\n * 3. The scale is quantitative or time scale.\n */\nfunction canUseUnaggregatedDomain(fieldDef, scaleType) {\n if (!fieldDef.aggregate) {\n return {\n valid: false,\n reason: log.message.unaggregateDomainHasNoEffectForRawField(fieldDef)\n };\n }\n if (!aggregate_1.SHARED_DOMAIN_OP_INDEX[fieldDef.aggregate]) {\n return {\n valid: false,\n reason: log.message.unaggregateDomainWithNonSharedDomainOp(fieldDef.aggregate)\n };\n }\n if (fieldDef.type === 'quantitative') {\n if (scaleType === 'log') {\n return {\n valid: false,\n reason: log.message.unaggregatedDomainWithLogScale(fieldDef)\n };\n }\n }\n return { valid: true };\n}\nexports.canUseUnaggregatedDomain = canUseUnaggregatedDomain;\n/**\n * Converts an array of domains to a single Vega scale domain.\n */\nfunction mergeDomains(domains) {\n var uniqueDomains = util.unique(domains.map(function (domain) {\n // ignore sort property when computing the unique domains\n if (vega_schema_1.isDataRefDomain(domain)) {\n var _s = domain.sort, domainWithoutSort = tslib_1.__rest(domain, [\"sort\"]);\n return domainWithoutSort;\n }\n return domain;\n }), util.hash);\n var sorts = util.unique(domains.map(function (d) {\n if (vega_schema_1.isDataRefDomain(d)) {\n var s = d.sort;\n if (s !== undefined && !util.isBoolean(s)) {\n if (s.op === 'count') {\n // let's make sure that if op is count, we don't use a field\n delete s.field;\n }\n if (s.order === 'ascending') {\n // drop order: ascending as it is the default\n delete s.order;\n }\n }\n return s;\n }\n return undefined;\n }).filter(function (s) { return s !== undefined; }), util.hash);\n if (uniqueDomains.length === 1) {\n var domain = domains[0];\n if (vega_schema_1.isDataRefDomain(domain) && sorts.length > 0) {\n var sort_2 = sorts[0];\n if (sorts.length > 1) {\n log.warn(log.message.MORE_THAN_ONE_SORT);\n sort_2 = true;\n }\n return tslib_1.__assign({}, domain, { sort: sort_2 });\n }\n return domain;\n }\n // only keep simple sort properties that work with unioned domains\n var simpleSorts = util.unique(sorts.map(function (s) {\n if (s === true) {\n return s;\n }\n if (s.op === 'count') {\n return s;\n }\n log.warn(log.message.domainSortDropped(s));\n return true;\n }), util.hash);\n var sort = undefined;\n if (simpleSorts.length === 1) {\n sort = simpleSorts[0];\n }\n else if (simpleSorts.length > 1) {\n log.warn(log.message.MORE_THAN_ONE_SORT);\n sort = true;\n }\n var allData = util.unique(domains.map(function (d) {\n if (vega_schema_1.isDataRefDomain(d)) {\n return d.data;\n }\n return null;\n }), function (x) { return x; });\n if (allData.length === 1 && allData[0] !== null) {\n // create a union domain of different fields with a single data source\n var domain = tslib_1.__assign({ data: allData[0], fields: uniqueDomains.map(function (d) { return d.field; }) }, (sort ? { sort: sort } : {}));\n return domain;\n }\n return tslib_1.__assign({ fields: uniqueDomains }, (sort ? { sort: sort } : {}));\n}\nexports.mergeDomains = mergeDomains;\n/**\n * Return a field if a scale single field.\n * Return `undefined` otherwise.\n *\n */\nfunction getFieldFromDomain(domain) {\n if (vega_schema_1.isDataRefDomain(domain) && vega_util_1.isString(domain.field)) {\n return domain.field;\n }\n else if (vega_schema_1.isDataRefUnionedDomain(domain)) {\n var field = void 0;\n for (var _i = 0, _a = domain.fields; _i < _a.length; _i++) {\n var nonUnionDomain = _a[_i];\n if (vega_schema_1.isDataRefDomain(nonUnionDomain) && vega_util_1.isString(nonUnionDomain.field)) {\n if (!field) {\n field = nonUnionDomain.field;\n }\n else if (field !== nonUnionDomain.field) {\n log.warn('Detected faceted independent scales that union domain of multiple fields from different data sources. We will use the first field. The result view size may be incorrect.');\n return field;\n }\n }\n }\n log.warn('Detected faceted independent scales that union domain of identical fields from different source detected. We will assume that this is the same field from a different fork of the same data source. However, if this is not case, the result view size maybe incorrect.');\n return field;\n }\n else if (vega_schema_1.isFieldRefUnionDomain(domain)) {\n log.warn('Detected faceted independent scales that union domain of multiple fields from the same data source. We will use the first field. The result view size may be incorrect.');\n var field = domain.fields[0];\n return vega_util_1.isString(field) ? field : undefined;\n }\n return undefined;\n}\nexports.getFieldFromDomain = getFieldFromDomain;\nfunction assembleDomain(model, channel) {\n var scaleComponent = model.component.scales[channel];\n var domains = scaleComponent.domains.map(function (domain) {\n // Correct references to data as the original domain's data was determined\n // in parseScale, which happens before parseData. Thus the original data\n // reference can be incorrect.\n if (vega_schema_1.isDataRefDomain(domain)) {\n domain.data = model.lookupDataSource(domain.data);\n }\n return domain;\n });\n // domains is an array that has to be merged into a single vega domain\n return mergeDomains(domains);\n}\nexports.assembleDomain = assembleDomain;\n//# sourceMappingURL=domain.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"./util\");\nexports.AXIS_PARTS = ['domain', 'grid', 'labels', 'ticks', 'title'];\n/**\n * A dictionary listing whether a certain axis property is applicable for only main axes or only grid axes.\n * (Properties not listed are applicable for both)\n */\nexports.AXIS_PROPERTY_TYPE = {\n grid: 'grid',\n gridScale: 'grid',\n domain: 'main',\n labels: 'main',\n labelFlush: 'main',\n labelOverlap: 'main',\n minExtent: 'main',\n maxExtent: 'main',\n offset: 'main',\n ticks: 'main',\n title: 'main',\n values: 'both',\n scale: 'both',\n zindex: 'both' // this is actually set afterward, so it doesn't matter\n};\nvar COMMON_AXIS_PROPERTIES_INDEX = {\n orient: 1,\n domain: 1,\n format: 1,\n grid: 1,\n labelBound: 1,\n labelFlush: 1,\n labelPadding: 1,\n labels: 1,\n labelOverlap: 1,\n maxExtent: 1,\n minExtent: 1,\n offset: 1,\n position: 1,\n tickCount: 1,\n ticks: 1,\n tickSize: 1,\n title: 1,\n titlePadding: 1,\n values: 1,\n zindex: 1,\n};\nvar AXIS_PROPERTIES_INDEX = tslib_1.__assign({}, COMMON_AXIS_PROPERTIES_INDEX, { encoding: 1, labelAngle: 1, titleMaxLength: 1 });\nvar VG_AXIS_PROPERTIES_INDEX = tslib_1.__assign({ scale: 1 }, COMMON_AXIS_PROPERTIES_INDEX, { gridScale: 1, encode: 1 });\nfunction isAxisProperty(prop) {\n return !!AXIS_PROPERTIES_INDEX[prop];\n}\nexports.isAxisProperty = isAxisProperty;\nexports.VG_AXIS_PROPERTIES = util_1.flagKeys(VG_AXIS_PROPERTIES_INDEX);\n// Export for dependent projects\nexports.AXIS_PROPERTIES = util_1.flagKeys(AXIS_PROPERTIES_INDEX);\n//# sourceMappingURL=axis.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar logical_1 = require(\"./logical\");\nvar predicate_1 = require(\"./predicate\");\nfunction isFilter(t) {\n return t['filter'] !== undefined;\n}\nexports.isFilter = isFilter;\nfunction isLookup(t) {\n return t['lookup'] !== undefined;\n}\nexports.isLookup = isLookup;\nfunction isWindow(t) {\n return t['window'] !== undefined;\n}\nexports.isWindow = isWindow;\nfunction isCalculate(t) {\n return t['calculate'] !== undefined;\n}\nexports.isCalculate = isCalculate;\nfunction isBin(t) {\n return !!t['bin'];\n}\nexports.isBin = isBin;\nfunction isTimeUnit(t) {\n return t['timeUnit'] !== undefined;\n}\nexports.isTimeUnit = isTimeUnit;\nfunction isAggregate(t) {\n return t['aggregate'] !== undefined;\n}\nexports.isAggregate = isAggregate;\nfunction isStack(t) {\n return t['stack'] !== undefined;\n}\nexports.isStack = isStack;\nfunction normalizeTransform(transform) {\n return transform.map(function (t) {\n if (isFilter(t)) {\n return {\n filter: logical_1.normalizeLogicalOperand(t.filter, predicate_1.normalizePredicate)\n };\n }\n return t;\n });\n}\nexports.normalizeTransform = normalizeTransform;\n//# sourceMappingURL=transform.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar encoding_1 = require(\"../encoding\");\nvar encoding_2 = require(\"./../encoding\");\nvar fielddef_1 = require(\"./../fielddef\");\nvar log = tslib_1.__importStar(require(\"./../log\"));\nvar common_1 = require(\"./common\");\nexports.BOXPLOT = 'box-plot';\nfunction isBoxPlotDef(mark) {\n return !!mark['type'];\n}\nexports.isBoxPlotDef = isBoxPlotDef;\nexports.BOXPLOT_STYLES = ['boxWhisker', 'box', 'boxMid'];\nexports.VL_ONLY_BOXPLOT_CONFIG_PROPERTY_INDEX = {\n box: ['size', 'color', 'extent'],\n boxWhisker: ['color'],\n boxMid: ['color']\n};\nvar supportedChannels = ['x', 'y', 'color', 'detail', 'opacity', 'size'];\nfunction filterUnsupportedChannels(spec) {\n return tslib_1.__assign({}, spec, { encoding: encoding_1.reduce(spec.encoding, function (newEncoding, fieldDef, channel) {\n if (supportedChannels.indexOf(channel) > -1) {\n newEncoding[channel] = fieldDef;\n }\n else {\n log.warn(log.message.incompatibleChannel(channel, exports.BOXPLOT));\n }\n return newEncoding;\n }, {}) });\n}\nexports.filterUnsupportedChannels = filterUnsupportedChannels;\nfunction normalizeBoxPlot(spec, config) {\n var _a, _b, _c, _d;\n spec = filterUnsupportedChannels(spec);\n // TODO: use selection\n var mark = spec.mark, encoding = spec.encoding, selection = spec.selection, _p = spec.projection, outerSpec = tslib_1.__rest(spec, [\"mark\", \"encoding\", \"selection\", \"projection\"]);\n var kIQRScalar = undefined;\n if (vega_util_1.isNumber(config.box.extent)) {\n kIQRScalar = config.box.extent;\n }\n if (isBoxPlotDef(mark)) {\n if (mark.extent) {\n if (mark.extent === 'min-max') {\n kIQRScalar = undefined;\n }\n }\n }\n var orient = boxOrient(spec);\n var _e = boxParams(spec, orient, kIQRScalar), transform = _e.transform, continuousAxisChannelDef = _e.continuousAxisChannelDef, continuousAxis = _e.continuousAxis, encodingWithoutContinuousAxis = _e.encodingWithoutContinuousAxis;\n var color = encodingWithoutContinuousAxis.color, size = encodingWithoutContinuousAxis.size, encodingWithoutSizeColorAndContinuousAxis = tslib_1.__rest(encodingWithoutContinuousAxis, [\"color\", \"size\"]);\n // Size encoding or the default config.box.size is applied to box and boxMid\n var sizeMixins = size ? { size: size } : common_1.getMarkSpecificConfigMixins(config.box, 'size');\n var continuousAxisScaleAndAxis = {};\n if (continuousAxisChannelDef.scale) {\n continuousAxisScaleAndAxis['scale'] = continuousAxisChannelDef.scale;\n }\n if (continuousAxisChannelDef.axis) {\n continuousAxisScaleAndAxis['axis'] = continuousAxisChannelDef.axis;\n }\n return tslib_1.__assign({}, outerSpec, { transform: transform, layer: [\n {\n mark: {\n type: 'rule',\n style: 'boxWhisker'\n },\n encoding: tslib_1.__assign((_a = {}, _a[continuousAxis] = tslib_1.__assign({ field: 'lower_whisker_' + continuousAxisChannelDef.field, type: continuousAxisChannelDef.type }, continuousAxisScaleAndAxis), _a[continuousAxis + '2'] = {\n field: 'lower_box_' + continuousAxisChannelDef.field,\n type: continuousAxisChannelDef.type\n }, _a), encodingWithoutSizeColorAndContinuousAxis, common_1.getMarkSpecificConfigMixins(config.boxWhisker, 'color'))\n }, {\n mark: {\n type: 'rule',\n style: 'boxWhisker'\n },\n encoding: tslib_1.__assign((_b = {}, _b[continuousAxis] = {\n field: 'upper_box_' + continuousAxisChannelDef.field,\n type: continuousAxisChannelDef.type\n }, _b[continuousAxis + '2'] = {\n field: 'upper_whisker_' + continuousAxisChannelDef.field,\n type: continuousAxisChannelDef.type\n }, _b), encodingWithoutSizeColorAndContinuousAxis, common_1.getMarkSpecificConfigMixins(config.boxWhisker, 'color'))\n },\n tslib_1.__assign({}, (selection ? { selection: selection } : {}), { mark: {\n type: 'bar',\n style: 'box'\n }, encoding: tslib_1.__assign((_c = {}, _c[continuousAxis] = {\n field: 'lower_box_' + continuousAxisChannelDef.field,\n type: continuousAxisChannelDef.type\n }, _c[continuousAxis + '2'] = {\n field: 'upper_box_' + continuousAxisChannelDef.field,\n type: continuousAxisChannelDef.type\n }, _c), encodingWithoutContinuousAxis, (encodingWithoutContinuousAxis.color ? {} : common_1.getMarkSpecificConfigMixins(config.box, 'color')), sizeMixins) }),\n {\n mark: {\n type: 'tick',\n style: 'boxMid'\n },\n encoding: tslib_1.__assign((_d = {}, _d[continuousAxis] = {\n field: 'mid_box_' + continuousAxisChannelDef.field,\n type: continuousAxisChannelDef.type\n }, _d), encodingWithoutSizeColorAndContinuousAxis, common_1.getMarkSpecificConfigMixins(config.boxMid, 'color'), sizeMixins)\n }\n ] });\n}\nexports.normalizeBoxPlot = normalizeBoxPlot;\nfunction boxOrient(spec) {\n var mark = spec.mark, encoding = spec.encoding, _p = spec.projection, _outerSpec = tslib_1.__rest(spec, [\"mark\", \"encoding\", \"projection\"]);\n if (fielddef_1.isFieldDef(encoding.x) && fielddef_1.isContinuous(encoding.x)) {\n // x is continuous\n if (fielddef_1.isFieldDef(encoding.y) && fielddef_1.isContinuous(encoding.y)) {\n // both x and y are continuous\n if (encoding.x.aggregate === undefined && encoding.y.aggregate === exports.BOXPLOT) {\n return 'vertical';\n }\n else if (encoding.y.aggregate === undefined && encoding.x.aggregate === exports.BOXPLOT) {\n return 'horizontal';\n }\n else if (encoding.x.aggregate === exports.BOXPLOT && encoding.y.aggregate === exports.BOXPLOT) {\n throw new Error('Both x and y cannot have aggregate');\n }\n else {\n if (isBoxPlotDef(mark) && mark.orient) {\n return mark.orient;\n }\n // default orientation = vertical\n return 'vertical';\n }\n }\n // x is continuous but y is not\n return 'horizontal';\n }\n else if (fielddef_1.isFieldDef(encoding.y) && fielddef_1.isContinuous(encoding.y)) {\n // y is continuous but x is not\n return 'vertical';\n }\n else {\n // Neither x nor y is continuous.\n throw new Error('Need a valid continuous axis for boxplots');\n }\n}\nfunction boxContinousAxis(spec, orient) {\n var mark = spec.mark, encoding = spec.encoding, _p = spec.projection, _outerSpec = tslib_1.__rest(spec, [\"mark\", \"encoding\", \"projection\"]);\n var continuousAxisChannelDef;\n var continuousAxis;\n if (orient === 'vertical') {\n continuousAxis = 'y';\n continuousAxisChannelDef = encoding.y; // Safe to cast because if y is not continuous fielddef, the orient would not be vertical.\n }\n else {\n continuousAxis = 'x';\n continuousAxisChannelDef = encoding.x; // Safe to cast because if x is not continuous fielddef, the orient would not be horizontal.\n }\n if (continuousAxisChannelDef && continuousAxisChannelDef.aggregate) {\n var aggregate = continuousAxisChannelDef.aggregate, continuousAxisWithoutAggregate = tslib_1.__rest(continuousAxisChannelDef, [\"aggregate\"]);\n if (aggregate !== exports.BOXPLOT) {\n log.warn(\"Continuous axis should not have customized aggregation function \" + aggregate);\n }\n continuousAxisChannelDef = continuousAxisWithoutAggregate;\n }\n return {\n continuousAxisChannelDef: continuousAxisChannelDef,\n continuousAxis: continuousAxis\n };\n}\nfunction boxParams(spec, orient, kIQRScalar) {\n var _a = boxContinousAxis(spec, orient), continuousAxisChannelDef = _a.continuousAxisChannelDef, continuousAxis = _a.continuousAxis;\n var encoding = spec.encoding;\n var isMinMax = kIQRScalar === undefined;\n var aggregate = [\n {\n op: 'q1',\n field: continuousAxisChannelDef.field,\n as: 'lower_box_' + continuousAxisChannelDef.field\n },\n {\n op: 'q3',\n field: continuousAxisChannelDef.field,\n as: 'upper_box_' + continuousAxisChannelDef.field\n },\n {\n op: 'median',\n field: continuousAxisChannelDef.field,\n as: 'mid_box_' + continuousAxisChannelDef.field\n }\n ];\n var postAggregateCalculates = [];\n aggregate.push({\n op: 'min',\n field: continuousAxisChannelDef.field,\n as: (isMinMax ? 'lower_whisker_' : 'min_') + continuousAxisChannelDef.field\n });\n aggregate.push({\n op: 'max',\n field: continuousAxisChannelDef.field,\n as: (isMinMax ? 'upper_whisker_' : 'max_') + continuousAxisChannelDef.field\n });\n if (!isMinMax) {\n postAggregateCalculates = [\n {\n calculate: \"datum.upper_box_\" + continuousAxisChannelDef.field + \" - datum.lower_box_\" + continuousAxisChannelDef.field,\n as: 'iqr_' + continuousAxisChannelDef.field\n },\n {\n calculate: \"min(datum.upper_box_\" + continuousAxisChannelDef.field + \" + datum.iqr_\" + continuousAxisChannelDef.field + \" * \" + kIQRScalar + \", datum.max_\" + continuousAxisChannelDef.field + \")\",\n as: 'upper_whisker_' + continuousAxisChannelDef.field\n },\n {\n calculate: \"max(datum.lower_box_\" + continuousAxisChannelDef.field + \" - datum.iqr_\" + continuousAxisChannelDef.field + \" * \" + kIQRScalar + \", datum.min_\" + continuousAxisChannelDef.field + \")\",\n as: 'lower_whisker_' + continuousAxisChannelDef.field\n }\n ];\n }\n var groupby = [];\n var bins = [];\n var timeUnits = [];\n var encodingWithoutContinuousAxis = {};\n encoding_2.forEach(encoding, function (channelDef, channel) {\n if (channel === continuousAxis) {\n // Skip continuous axis as we already handle it separately\n return;\n }\n if (fielddef_1.isFieldDef(channelDef)) {\n if (channelDef.aggregate && channelDef.aggregate !== exports.BOXPLOT) {\n aggregate.push({\n op: channelDef.aggregate,\n field: channelDef.field,\n as: fielddef_1.vgField(channelDef)\n });\n }\n else if (channelDef.aggregate === undefined) {\n var transformedField = fielddef_1.vgField(channelDef);\n // Add bin or timeUnit transform if applicable\n var bin = channelDef.bin;\n if (bin) {\n var field = channelDef.field;\n bins.push({ bin: bin, field: field, as: transformedField });\n }\n else if (channelDef.timeUnit) {\n var timeUnit = channelDef.timeUnit, field = channelDef.field;\n timeUnits.push({ timeUnit: timeUnit, field: field, as: transformedField });\n }\n groupby.push(transformedField);\n }\n // now the field should refer to post-transformed field instead\n encodingWithoutContinuousAxis[channel] = {\n field: fielddef_1.vgField(channelDef),\n type: channelDef.type\n };\n }\n else {\n // For value def, just copy\n encodingWithoutContinuousAxis[channel] = encoding[channel];\n }\n });\n return {\n transform: [].concat(bins, timeUnits, [{ aggregate: aggregate, groupby: groupby }], postAggregateCalculates),\n continuousAxisChannelDef: continuousAxisChannelDef,\n continuousAxis: continuousAxis,\n encodingWithoutContinuousAxis: encodingWithoutContinuousAxis\n };\n}\n//# sourceMappingURL=boxplot.js.map","\"use strict\";\n/**\n * Vega-Lite's singleton logger utility.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar vega_util_1 = require(\"vega-util\");\nvar util_1 = require(\"./util\");\n/**\n * Main (default) Vega Logger instance for Vega-Lite\n */\nvar main = vega_util_1.logger(vega_util_1.Warn);\nvar current = main;\n/**\n * Logger tool for checking if the code throws correct warning\n */\nvar LocalLogger = /** @class */ (function () {\n function LocalLogger() {\n this.warns = [];\n this.infos = [];\n this.debugs = [];\n }\n LocalLogger.prototype.level = function () {\n return this;\n };\n LocalLogger.prototype.warn = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var _a;\n (_a = this.warns).push.apply(_a, args);\n return this;\n };\n LocalLogger.prototype.info = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var _a;\n (_a = this.infos).push.apply(_a, args);\n return this;\n };\n LocalLogger.prototype.debug = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var _a;\n (_a = this.debugs).push.apply(_a, args);\n return this;\n };\n LocalLogger.prototype.error = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n throw Error.apply(void 0, args);\n return this; // @ts-ignore\n };\n return LocalLogger;\n}());\nexports.LocalLogger = LocalLogger;\nfunction wrap(f) {\n return function () {\n current = new LocalLogger();\n f(current);\n reset();\n };\n}\nexports.wrap = wrap;\n/**\n * Set the singleton logger to be a custom logger\n */\nfunction set(newLogger) {\n current = newLogger;\n return current;\n}\nexports.set = set;\n/**\n * Reset the main logger to use the default Vega Logger\n */\nfunction reset() {\n current = main;\n return current;\n}\nexports.reset = reset;\nfunction warn() {\n var _ = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n _[_i] = arguments[_i];\n }\n current.warn.apply(current, arguments);\n}\nexports.warn = warn;\nfunction info() {\n var _ = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n _[_i] = arguments[_i];\n }\n current.info.apply(current, arguments);\n}\nexports.info = info;\nfunction debug() {\n var _ = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n _[_i] = arguments[_i];\n }\n current.debug.apply(current, arguments);\n}\nexports.debug = debug;\n/**\n * Collection of all Vega-Lite Error Messages\n */\nvar message;\n(function (message) {\n message.INVALID_SPEC = 'Invalid spec';\n // FIT\n message.FIT_NON_SINGLE = 'Autosize \"fit\" only works for single views and layered views.';\n message.CANNOT_FIX_RANGE_STEP_WITH_FIT = 'Cannot use a fixed value of \"rangeStep\" when \"autosize\" is \"fit\".';\n // SELECTION\n function cannotProjectOnChannelWithoutField(channel) {\n return \"Cannot project a selection on encoding channel \\\"\" + channel + \"\\\", which has no field.\";\n }\n message.cannotProjectOnChannelWithoutField = cannotProjectOnChannelWithoutField;\n function nearestNotSupportForContinuous(mark) {\n return \"The \\\"nearest\\\" transform is not supported for \" + mark + \" marks.\";\n }\n message.nearestNotSupportForContinuous = nearestNotSupportForContinuous;\n function selectionNotFound(name) {\n return \"Cannot find a selection named \\\"\" + name + \"\\\"\";\n }\n message.selectionNotFound = selectionNotFound;\n message.SCALE_BINDINGS_CONTINUOUS = 'Scale bindings are currently only supported for scales with unbinned, continuous domains.';\n // REPEAT\n function noSuchRepeatedValue(field) {\n return \"Unknown repeated value \\\"\" + field + \"\\\".\";\n }\n message.noSuchRepeatedValue = noSuchRepeatedValue;\n // CONCAT\n message.CONCAT_CANNOT_SHARE_AXIS = 'Axes cannot be shared in concatenated views.';\n // REPEAT\n message.REPEAT_CANNOT_SHARE_AXIS = 'Axes cannot be shared in repeated views.';\n // TITLE\n function cannotSetTitleAnchor(type) {\n return \"Cannot set title \\\"anchor\\\" for a \" + type + \" spec\";\n }\n message.cannotSetTitleAnchor = cannotSetTitleAnchor;\n // DATA\n function unrecognizedParse(p) {\n return \"Unrecognized parse \\\"\" + p + \"\\\".\";\n }\n message.unrecognizedParse = unrecognizedParse;\n function differentParse(field, local, ancestor) {\n return \"An ancestor parsed field \\\"\" + field + \"\\\" as \" + ancestor + \" but a child wants to parse the field as \" + local + \".\";\n }\n message.differentParse = differentParse;\n // TRANSFORMS\n function invalidTransformIgnored(transform) {\n return \"Ignoring an invalid transform: \" + util_1.stringify(transform) + \".\";\n }\n message.invalidTransformIgnored = invalidTransformIgnored;\n message.NO_FIELDS_NEEDS_AS = 'If \"from.fields\" is not specified, \"as\" has to be a string that specifies the key to be used for the data from the secondary source.';\n // ENCODING & FACET\n function encodingOverridden(channels) {\n return \"Layer's shared \" + channels.join(',') + \" channel \" + (channels.length === 1 ? 'is' : 'are') + \" overriden\";\n }\n message.encodingOverridden = encodingOverridden;\n function projectionOverridden(opt) {\n var parentProjection = opt.parentProjection, projection = opt.projection;\n return \"Layer's shared projection \" + util_1.stringify(parentProjection) + \" is overridden by a child projection \" + util_1.stringify(projection) + \".\";\n }\n message.projectionOverridden = projectionOverridden;\n function primitiveChannelDef(channel, type, value) {\n return \"Channel \" + channel + \" is a \" + type + \". Converted to {value: \" + util_1.stringify(value) + \"}.\";\n }\n message.primitiveChannelDef = primitiveChannelDef;\n function invalidFieldType(type) {\n return \"Invalid field type \\\"\" + type + \"\\\"\";\n }\n message.invalidFieldType = invalidFieldType;\n function nonZeroScaleUsedWithLengthMark(mark, channel, opt) {\n var scaleText = opt.scaleType ? opt.scaleType + \" scale\" :\n opt.zeroFalse ? 'scale with zero=false' :\n 'scale with custom domain that excludes zero';\n return \"A \" + scaleText + \" is used to encode \" + mark + \"'s \" + channel + \". This can be misleading as the \" + (channel === 'x' ? 'width' : 'height') + \" of the \" + mark + \" can be arbitrary based on the scale domain. You may want to use point mark instead.\";\n }\n message.nonZeroScaleUsedWithLengthMark = nonZeroScaleUsedWithLengthMark;\n function invalidFieldTypeForCountAggregate(type, aggregate) {\n return \"Invalid field type \\\"\" + type + \"\\\" for aggregate: \\\"\" + aggregate + \"\\\", using \\\"quantitative\\\" instead.\";\n }\n message.invalidFieldTypeForCountAggregate = invalidFieldTypeForCountAggregate;\n function invalidAggregate(aggregate) {\n return \"Invalid aggregation operator \\\"\" + aggregate + \"\\\"\";\n }\n message.invalidAggregate = invalidAggregate;\n function emptyOrInvalidFieldType(type, channel, newType) {\n return \"Invalid field type \\\"\" + type + \"\\\" for channel \\\"\" + channel + \"\\\", using \\\"\" + newType + \"\\\" instead.\";\n }\n message.emptyOrInvalidFieldType = emptyOrInvalidFieldType;\n function droppingColor(type, opt) {\n var fill = opt.fill, stroke = opt.stroke;\n return \"Dropping color \" + type + \" as the plot also has \" + (fill && stroke ? 'fill and stroke' : fill ? 'fill' : 'stroke');\n }\n message.droppingColor = droppingColor;\n function emptyFieldDef(fieldDef, channel) {\n return \"Dropping \" + util_1.stringify(fieldDef) + \" from channel \\\"\" + channel + \"\\\" since it does not contain data field or value.\";\n }\n message.emptyFieldDef = emptyFieldDef;\n function latLongDeprecated(channel, type, newChannel) {\n return channel + \"-encoding with type \" + type + \" is deprecated. Replacing with \" + newChannel + \"-encoding.\";\n }\n message.latLongDeprecated = latLongDeprecated;\n message.LINE_WITH_VARYING_SIZE = 'Line marks cannot encode size with a non-groupby field. You may want to use trail marks instead.';\n function incompatibleChannel(channel, markOrFacet, when) {\n return channel + \" dropped as it is incompatible with \\\"\" + markOrFacet + \"\\\"\" + (when ? \" when \" + when : '') + \".\";\n }\n message.incompatibleChannel = incompatibleChannel;\n function invalidEncodingChannel(channel) {\n return channel + \"-encoding is dropped as \" + channel + \" is not a valid encoding channel.\";\n }\n message.invalidEncodingChannel = invalidEncodingChannel;\n function facetChannelShouldBeDiscrete(channel) {\n return channel + \" encoding should be discrete (ordinal / nominal / binned).\";\n }\n message.facetChannelShouldBeDiscrete = facetChannelShouldBeDiscrete;\n function discreteChannelCannotEncode(channel, type) {\n return \"Using discrete channel \\\"\" + channel + \"\\\" to encode \\\"\" + type + \"\\\" field can be misleading as it does not encode \" + (type === 'ordinal' ? 'order' : 'magnitude') + \".\";\n }\n message.discreteChannelCannotEncode = discreteChannelCannotEncode;\n // Mark\n message.BAR_WITH_POINT_SCALE_AND_RANGESTEP_NULL = 'Bar mark should not be used with point scale when rangeStep is null. Please use band scale instead.';\n function lineWithRange(hasX2, hasY2) {\n var channels = hasX2 && hasY2 ? 'x2 and y2' : hasX2 ? 'x2' : 'y2';\n return \"Line mark is for continuous lines and thus cannot be used with \" + channels + \". We will use the rule mark (line segments) instead.\";\n }\n message.lineWithRange = lineWithRange;\n function orientOverridden(original, actual) {\n return \"Specified orient \\\"\" + original + \"\\\" overridden with \\\"\" + actual + \"\\\"\";\n }\n message.orientOverridden = orientOverridden;\n // SCALE\n message.CANNOT_UNION_CUSTOM_DOMAIN_WITH_FIELD_DOMAIN = 'custom domain scale cannot be unioned with default field-based domain';\n function cannotUseScalePropertyWithNonColor(prop) {\n return \"Cannot use the scale property \\\"\" + prop + \"\\\" with non-color channel.\";\n }\n message.cannotUseScalePropertyWithNonColor = cannotUseScalePropertyWithNonColor;\n function unaggregateDomainHasNoEffectForRawField(fieldDef) {\n return \"Using unaggregated domain with raw field has no effect (\" + util_1.stringify(fieldDef) + \").\";\n }\n message.unaggregateDomainHasNoEffectForRawField = unaggregateDomainHasNoEffectForRawField;\n function unaggregateDomainWithNonSharedDomainOp(aggregate) {\n return \"Unaggregated domain not applicable for \\\"\" + aggregate + \"\\\" since it produces values outside the origin domain of the source data.\";\n }\n message.unaggregateDomainWithNonSharedDomainOp = unaggregateDomainWithNonSharedDomainOp;\n function unaggregatedDomainWithLogScale(fieldDef) {\n return \"Unaggregated domain is currently unsupported for log scale (\" + util_1.stringify(fieldDef) + \").\";\n }\n message.unaggregatedDomainWithLogScale = unaggregatedDomainWithLogScale;\n function cannotApplySizeToNonOrientedMark(mark) {\n return \"Cannot apply size to non-oriented mark \\\"\" + mark + \"\\\".\";\n }\n message.cannotApplySizeToNonOrientedMark = cannotApplySizeToNonOrientedMark;\n function rangeStepDropped(channel) {\n return \"rangeStep for \\\"\" + channel + \"\\\" is dropped as top-level \" + (channel === 'x' ? 'width' : 'height') + \" is provided.\";\n }\n message.rangeStepDropped = rangeStepDropped;\n function scaleTypeNotWorkWithChannel(channel, scaleType, defaultScaleType) {\n return \"Channel \\\"\" + channel + \"\\\" does not work with \\\"\" + scaleType + \"\\\" scale. We are using \\\"\" + defaultScaleType + \"\\\" scale instead.\";\n }\n message.scaleTypeNotWorkWithChannel = scaleTypeNotWorkWithChannel;\n function scaleTypeNotWorkWithFieldDef(scaleType, defaultScaleType) {\n return \"FieldDef does not work with \\\"\" + scaleType + \"\\\" scale. We are using \\\"\" + defaultScaleType + \"\\\" scale instead.\";\n }\n message.scaleTypeNotWorkWithFieldDef = scaleTypeNotWorkWithFieldDef;\n function scalePropertyNotWorkWithScaleType(scaleType, propName, channel) {\n return channel + \"-scale's \\\"\" + propName + \"\\\" is dropped as it does not work with \" + scaleType + \" scale.\";\n }\n message.scalePropertyNotWorkWithScaleType = scalePropertyNotWorkWithScaleType;\n function scaleTypeNotWorkWithMark(mark, scaleType) {\n return \"Scale type \\\"\" + scaleType + \"\\\" does not work with mark \\\"\" + mark + \"\\\".\";\n }\n message.scaleTypeNotWorkWithMark = scaleTypeNotWorkWithMark;\n function mergeConflictingProperty(property, propertyOf, v1, v2) {\n return \"Conflicting \" + propertyOf.toString() + \" property \\\"\" + property.toString() + \"\\\" (\" + util_1.stringify(v1) + \" and \" + util_1.stringify(v2) + \"). Using \" + util_1.stringify(v1) + \".\";\n }\n message.mergeConflictingProperty = mergeConflictingProperty;\n function independentScaleMeansIndependentGuide(channel) {\n return \"Setting the scale to be independent for \\\"\" + channel + \"\\\" means we also have to set the guide (axis or legend) to be independent.\";\n }\n message.independentScaleMeansIndependentGuide = independentScaleMeansIndependentGuide;\n function domainSortDropped(sort) {\n return \"Dropping sort property \" + util_1.stringify(sort) + \" as unioned domains only support boolean or op 'count'.\";\n }\n message.domainSortDropped = domainSortDropped;\n message.UNABLE_TO_MERGE_DOMAINS = 'Unable to merge domains';\n message.MORE_THAN_ONE_SORT = 'Domains that should be unioned has conflicting sort properties. Sort will be set to true.';\n // AXIS\n message.INVALID_CHANNEL_FOR_AXIS = 'Invalid channel for axis.';\n // STACK\n function cannotStackRangedMark(channel) {\n return \"Cannot stack \\\"\" + channel + \"\\\" if there is already \\\"\" + channel + \"2\\\"\";\n }\n message.cannotStackRangedMark = cannotStackRangedMark;\n function cannotStackNonLinearScale(scaleType) {\n return \"Cannot stack non-linear scale (\" + scaleType + \")\";\n }\n message.cannotStackNonLinearScale = cannotStackNonLinearScale;\n function stackNonSummativeAggregate(aggregate) {\n return \"Stacking is applied even though the aggregate function is non-summative (\\\"\" + aggregate + \"\\\")\";\n }\n message.stackNonSummativeAggregate = stackNonSummativeAggregate;\n // TIMEUNIT\n function invalidTimeUnit(unitName, value) {\n return \"Invalid \" + unitName + \": \" + util_1.stringify(value);\n }\n message.invalidTimeUnit = invalidTimeUnit;\n function dayReplacedWithDate(fullTimeUnit) {\n return \"Time unit \\\"\" + fullTimeUnit + \"\\\" is not supported. We are replacing it with \" + fullTimeUnit.replace('day', 'date') + \".\";\n }\n message.dayReplacedWithDate = dayReplacedWithDate;\n function droppedDay(d) {\n return \"Dropping day from datetime \" + util_1.stringify(d) + \" as day cannot be combined with other units.\";\n }\n message.droppedDay = droppedDay;\n})(message = exports.message || (exports.message = {}));\n//# sourceMappingURL=log.js.map","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"css\", function(config, parserConfig) {\n var inline = parserConfig.inline\n if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode(\"text/css\");\n\n var indentUnit = config.indentUnit,\n tokenHooks = parserConfig.tokenHooks,\n documentTypes = parserConfig.documentTypes || {},\n mediaTypes = parserConfig.mediaTypes || {},\n mediaFeatures = parserConfig.mediaFeatures || {},\n mediaValueKeywords = parserConfig.mediaValueKeywords || {},\n propertyKeywords = parserConfig.propertyKeywords || {},\n nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {},\n fontProperties = parserConfig.fontProperties || {},\n counterDescriptors = parserConfig.counterDescriptors || {},\n colorKeywords = parserConfig.colorKeywords || {},\n valueKeywords = parserConfig.valueKeywords || {},\n allowNested = parserConfig.allowNested,\n lineComment = parserConfig.lineComment,\n supportsAtComponent = parserConfig.supportsAtComponent === true,\n highlightNonStandardPropertyKeywords = config.highlightNonStandardPropertyKeywords !== false;\n\n var type, override;\n function ret(style, tp) { type = tp; return style; }\n\n // Tokenizers\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (tokenHooks[ch]) {\n var result = tokenHooks[ch](stream, state);\n if (result !== false) return result;\n }\n if (ch == \"@\") {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"def\", stream.current());\n } else if (ch == \"=\" || (ch == \"~\" || ch == \"|\") && stream.eat(\"=\")) {\n return ret(null, \"compare\");\n } else if (ch == \"\\\"\" || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n } else if (ch == \"#\") {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"atom\", \"hash\");\n } else if (ch == \"!\") {\n stream.match(/^\\s*\\w*/);\n return ret(\"keyword\", \"important\");\n } else if (/\\d/.test(ch) || ch == \".\" && stream.eat(/\\d/)) {\n stream.eatWhile(/[\\w.%]/);\n return ret(\"number\", \"unit\");\n } else if (ch === \"-\") {\n if (/[\\d.]/.test(stream.peek())) {\n stream.eatWhile(/[\\w.%]/);\n return ret(\"number\", \"unit\");\n } else if (stream.match(/^-[\\w\\\\\\-]*/)) {\n stream.eatWhile(/[\\w\\\\\\-]/);\n if (stream.match(/^\\s*:/, false))\n return ret(\"variable-2\", \"variable-definition\");\n return ret(\"variable-2\", \"variable\");\n } else if (stream.match(/^\\w+-/)) {\n return ret(\"meta\", \"meta\");\n }\n } else if (/[,+>*\\/]/.test(ch)) {\n return ret(null, \"select-op\");\n } else if (ch == \".\" && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) {\n return ret(\"qualifier\", \"qualifier\");\n } else if (/[:;{}\\[\\]\\(\\)]/.test(ch)) {\n return ret(null, ch);\n } else if (stream.match(/^[\\w-.]+(?=\\()/)) {\n if (/^(url(-prefix)?|domain|regexp)$/i.test(stream.current())) {\n state.tokenize = tokenParenthesized;\n }\n return ret(\"variable callee\", \"variable\");\n } else if (/[\\w\\\\\\-]/.test(ch)) {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"property\", \"word\");\n } else {\n return ret(null, null);\n }\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, ch;\n while ((ch = stream.next()) != null) {\n if (ch == quote && !escaped) {\n if (quote == \")\") stream.backUp(1);\n break;\n }\n escaped = !escaped && ch == \"\\\\\";\n }\n if (ch == quote || !escaped && quote != \")\") state.tokenize = null;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenParenthesized(stream, state) {\n stream.next(); // Must be '('\n if (!stream.match(/^\\s*[\\\"\\')]/, false))\n state.tokenize = tokenString(\")\");\n else\n state.tokenize = null;\n return ret(null, \"(\");\n }\n\n // Context management\n\n function Context(type, indent, prev) {\n this.type = type;\n this.indent = indent;\n this.prev = prev;\n }\n\n function pushContext(state, stream, type, indent) {\n state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context);\n return type;\n }\n\n function popContext(state) {\n if (state.context.prev)\n state.context = state.context.prev;\n return state.context.type;\n }\n\n function pass(type, stream, state) {\n return states[state.context.type](type, stream, state);\n }\n function popAndPass(type, stream, state, n) {\n for (var i = n || 1; i > 0; i--)\n state.context = state.context.prev;\n return pass(type, stream, state);\n }\n\n // Parser\n\n function wordAsValue(stream) {\n var word = stream.current().toLowerCase();\n if (valueKeywords.hasOwnProperty(word))\n override = \"atom\";\n else if (colorKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else\n override = \"variable\";\n }\n\n var states = {};\n\n states.top = function(type, stream, state) {\n if (type == \"{\") {\n return pushContext(state, stream, \"block\");\n } else if (type == \"}\" && state.context.prev) {\n return popContext(state);\n } else if (supportsAtComponent && /@component/i.test(type)) {\n return pushContext(state, stream, \"atComponentBlock\");\n } else if (/^@(-moz-)?document$/i.test(type)) {\n return pushContext(state, stream, \"documentTypes\");\n } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) {\n return pushContext(state, stream, \"atBlock\");\n } else if (/^@(font-face|counter-style)/i.test(type)) {\n state.stateArg = type;\n return \"restricted_atBlock_before\";\n } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) {\n return \"keyframes\";\n } else if (type && type.charAt(0) == \"@\") {\n return pushContext(state, stream, \"at\");\n } else if (type == \"hash\") {\n override = \"builtin\";\n } else if (type == \"word\") {\n override = \"tag\";\n } else if (type == \"variable-definition\") {\n return \"maybeprop\";\n } else if (type == \"interpolation\") {\n return pushContext(state, stream, \"interpolation\");\n } else if (type == \":\") {\n return \"pseudo\";\n } else if (allowNested && type == \"(\") {\n return pushContext(state, stream, \"parens\");\n }\n return state.context.type;\n };\n\n states.block = function(type, stream, state) {\n if (type == \"word\") {\n var word = stream.current().toLowerCase();\n if (propertyKeywords.hasOwnProperty(word)) {\n override = \"property\";\n return \"maybeprop\";\n } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) {\n override = highlightNonStandardPropertyKeywords ? \"string-2\" : \"property\";\n return \"maybeprop\";\n } else if (allowNested) {\n override = stream.match(/^\\s*:(?:\\s|$)/, false) ? \"property\" : \"tag\";\n return \"block\";\n } else {\n override += \" error\";\n return \"maybeprop\";\n }\n } else if (type == \"meta\") {\n return \"block\";\n } else if (!allowNested && (type == \"hash\" || type == \"qualifier\")) {\n override = \"error\";\n return \"block\";\n } else {\n return states.top(type, stream, state);\n }\n };\n\n states.maybeprop = function(type, stream, state) {\n if (type == \":\") return pushContext(state, stream, \"prop\");\n return pass(type, stream, state);\n };\n\n states.prop = function(type, stream, state) {\n if (type == \";\") return popContext(state);\n if (type == \"{\" && allowNested) return pushContext(state, stream, \"propBlock\");\n if (type == \"}\" || type == \"{\") return popAndPass(type, stream, state);\n if (type == \"(\") return pushContext(state, stream, \"parens\");\n\n if (type == \"hash\" && !/^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(stream.current())) {\n override += \" error\";\n } else if (type == \"word\") {\n wordAsValue(stream);\n } else if (type == \"interpolation\") {\n return pushContext(state, stream, \"interpolation\");\n }\n return \"prop\";\n };\n\n states.propBlock = function(type, _stream, state) {\n if (type == \"}\") return popContext(state);\n if (type == \"word\") { override = \"property\"; return \"maybeprop\"; }\n return state.context.type;\n };\n\n states.parens = function(type, stream, state) {\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n if (type == \")\") return popContext(state);\n if (type == \"(\") return pushContext(state, stream, \"parens\");\n if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n if (type == \"word\") wordAsValue(stream);\n return \"parens\";\n };\n\n states.pseudo = function(type, stream, state) {\n if (type == \"meta\") return \"pseudo\";\n\n if (type == \"word\") {\n override = \"variable-3\";\n return state.context.type;\n }\n return pass(type, stream, state);\n };\n\n states.documentTypes = function(type, stream, state) {\n if (type == \"word\" && documentTypes.hasOwnProperty(stream.current())) {\n override = \"tag\";\n return state.context.type;\n } else {\n return states.atBlock(type, stream, state);\n }\n };\n\n states.atBlock = function(type, stream, state) {\n if (type == \"(\") return pushContext(state, stream, \"atBlock_parens\");\n if (type == \"}\" || type == \";\") return popAndPass(type, stream, state);\n if (type == \"{\") return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\");\n\n if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n\n if (type == \"word\") {\n var word = stream.current().toLowerCase();\n if (word == \"only\" || word == \"not\" || word == \"and\" || word == \"or\")\n override = \"keyword\";\n else if (mediaTypes.hasOwnProperty(word))\n override = \"attribute\";\n else if (mediaFeatures.hasOwnProperty(word))\n override = \"property\";\n else if (mediaValueKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else if (propertyKeywords.hasOwnProperty(word))\n override = \"property\";\n else if (nonStandardPropertyKeywords.hasOwnProperty(word))\n override = highlightNonStandardPropertyKeywords ? \"string-2\" : \"property\";\n else if (valueKeywords.hasOwnProperty(word))\n override = \"atom\";\n else if (colorKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else\n override = \"error\";\n }\n return state.context.type;\n };\n\n states.atComponentBlock = function(type, stream, state) {\n if (type == \"}\")\n return popAndPass(type, stream, state);\n if (type == \"{\")\n return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\", false);\n if (type == \"word\")\n override = \"error\";\n return state.context.type;\n };\n\n states.atBlock_parens = function(type, stream, state) {\n if (type == \")\") return popContext(state);\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state, 2);\n return states.atBlock(type, stream, state);\n };\n\n states.restricted_atBlock_before = function(type, stream, state) {\n if (type == \"{\")\n return pushContext(state, stream, \"restricted_atBlock\");\n if (type == \"word\" && state.stateArg == \"@counter-style\") {\n override = \"variable\";\n return \"restricted_atBlock_before\";\n }\n return pass(type, stream, state);\n };\n\n states.restricted_atBlock = function(type, stream, state) {\n if (type == \"}\") {\n state.stateArg = null;\n return popContext(state);\n }\n if (type == \"word\") {\n if ((state.stateArg == \"@font-face\" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) ||\n (state.stateArg == \"@counter-style\" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase())))\n override = \"error\";\n else\n override = \"property\";\n return \"maybeprop\";\n }\n return \"restricted_atBlock\";\n };\n\n states.keyframes = function(type, stream, state) {\n if (type == \"word\") { override = \"variable\"; return \"keyframes\"; }\n if (type == \"{\") return pushContext(state, stream, \"top\");\n return pass(type, stream, state);\n };\n\n states.at = function(type, stream, state) {\n if (type == \";\") return popContext(state);\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n if (type == \"word\") override = \"tag\";\n else if (type == \"hash\") override = \"builtin\";\n return \"at\";\n };\n\n states.interpolation = function(type, stream, state) {\n if (type == \"}\") return popContext(state);\n if (type == \"{\" || type == \";\") return popAndPass(type, stream, state);\n if (type == \"word\") override = \"variable\";\n else if (type != \"variable\" && type != \"(\" && type != \")\") override = \"error\";\n return \"interpolation\";\n };\n\n return {\n startState: function(base) {\n return {tokenize: null,\n state: inline ? \"block\" : \"top\",\n stateArg: null,\n context: new Context(inline ? \"block\" : \"top\", base || 0, null)};\n },\n\n token: function(stream, state) {\n if (!state.tokenize && stream.eatSpace()) return null;\n var style = (state.tokenize || tokenBase)(stream, state);\n if (style && typeof style == \"object\") {\n type = style[1];\n style = style[0];\n }\n override = style;\n if (type != \"comment\")\n state.state = states[state.state](type, stream, state);\n return override;\n },\n\n indent: function(state, textAfter) {\n var cx = state.context, ch = textAfter && textAfter.charAt(0);\n var indent = cx.indent;\n if (cx.type == \"prop\" && (ch == \"}\" || ch == \")\")) cx = cx.prev;\n if (cx.prev) {\n if (ch == \"}\" && (cx.type == \"block\" || cx.type == \"top\" ||\n cx.type == \"interpolation\" || cx.type == \"restricted_atBlock\")) {\n // Resume indentation from parent context.\n cx = cx.prev;\n indent = cx.indent;\n } else if (ch == \")\" && (cx.type == \"parens\" || cx.type == \"atBlock_parens\") ||\n ch == \"{\" && (cx.type == \"at\" || cx.type == \"atBlock\")) {\n // Dedent relative to current context.\n indent = Math.max(0, cx.indent - indentUnit);\n }\n }\n return indent;\n },\n\n electricChars: \"}\",\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n blockCommentContinue: \" * \",\n lineComment: lineComment,\n fold: \"brace\"\n };\n});\n\n function keySet(array) {\n var keys = {};\n for (var i = 0; i < array.length; ++i) {\n keys[array[i].toLowerCase()] = true;\n }\n return keys;\n }\n\n var documentTypes_ = [\n \"domain\", \"regexp\", \"url\", \"url-prefix\"\n ], documentTypes = keySet(documentTypes_);\n\n var mediaTypes_ = [\n \"all\", \"aural\", \"braille\", \"handheld\", \"print\", \"projection\", \"screen\",\n \"tty\", \"tv\", \"embossed\"\n ], mediaTypes = keySet(mediaTypes_);\n\n var mediaFeatures_ = [\n \"width\", \"min-width\", \"max-width\", \"height\", \"min-height\", \"max-height\",\n \"device-width\", \"min-device-width\", \"max-device-width\", \"device-height\",\n \"min-device-height\", \"max-device-height\", \"aspect-ratio\",\n \"min-aspect-ratio\", \"max-aspect-ratio\", \"device-aspect-ratio\",\n \"min-device-aspect-ratio\", \"max-device-aspect-ratio\", \"color\", \"min-color\",\n \"max-color\", \"color-index\", \"min-color-index\", \"max-color-index\",\n \"monochrome\", \"min-monochrome\", \"max-monochrome\", \"resolution\",\n \"min-resolution\", \"max-resolution\", \"scan\", \"grid\", \"orientation\",\n \"device-pixel-ratio\", \"min-device-pixel-ratio\", \"max-device-pixel-ratio\",\n \"pointer\", \"any-pointer\", \"hover\", \"any-hover\", \"prefers-color-scheme\",\n \"dynamic-range\", \"video-dynamic-range\"\n ], mediaFeatures = keySet(mediaFeatures_);\n\n var mediaValueKeywords_ = [\n \"landscape\", \"portrait\", \"none\", \"coarse\", \"fine\", \"on-demand\", \"hover\",\n \"interlace\", \"progressive\",\n \"dark\", \"light\",\n \"standard\", \"high\"\n ], mediaValueKeywords = keySet(mediaValueKeywords_);\n\n var propertyKeywords_ = [\n \"align-content\", \"align-items\", \"align-self\", \"alignment-adjust\",\n \"alignment-baseline\", \"all\", \"anchor-point\", \"animation\", \"animation-delay\",\n \"animation-direction\", \"animation-duration\", \"animation-fill-mode\",\n \"animation-iteration-count\", \"animation-name\", \"animation-play-state\",\n \"animation-timing-function\", \"appearance\", \"azimuth\", \"backdrop-filter\",\n \"backface-visibility\", \"background\", \"background-attachment\",\n \"background-blend-mode\", \"background-clip\", \"background-color\",\n \"background-image\", \"background-origin\", \"background-position\",\n \"background-position-x\", \"background-position-y\", \"background-repeat\",\n \"background-size\", \"baseline-shift\", \"binding\", \"bleed\", \"block-size\",\n \"bookmark-label\", \"bookmark-level\", \"bookmark-state\", \"bookmark-target\",\n \"border\", \"border-bottom\", \"border-bottom-color\", \"border-bottom-left-radius\",\n \"border-bottom-right-radius\", \"border-bottom-style\", \"border-bottom-width\",\n \"border-collapse\", \"border-color\", \"border-image\", \"border-image-outset\",\n \"border-image-repeat\", \"border-image-slice\", \"border-image-source\",\n \"border-image-width\", \"border-left\", \"border-left-color\", \"border-left-style\",\n \"border-left-width\", \"border-radius\", \"border-right\", \"border-right-color\",\n \"border-right-style\", \"border-right-width\", \"border-spacing\", \"border-style\",\n \"border-top\", \"border-top-color\", \"border-top-left-radius\",\n \"border-top-right-radius\", \"border-top-style\", \"border-top-width\",\n \"border-width\", \"bottom\", \"box-decoration-break\", \"box-shadow\", \"box-sizing\",\n \"break-after\", \"break-before\", \"break-inside\", \"caption-side\", \"caret-color\",\n \"clear\", \"clip\", \"color\", \"color-profile\", \"column-count\", \"column-fill\",\n \"column-gap\", \"column-rule\", \"column-rule-color\", \"column-rule-style\",\n \"column-rule-width\", \"column-span\", \"column-width\", \"columns\", \"contain\",\n \"content\", \"counter-increment\", \"counter-reset\", \"crop\", \"cue\", \"cue-after\",\n \"cue-before\", \"cursor\", \"direction\", \"display\", \"dominant-baseline\",\n \"drop-initial-after-adjust\", \"drop-initial-after-align\",\n \"drop-initial-before-adjust\", \"drop-initial-before-align\", \"drop-initial-size\",\n \"drop-initial-value\", \"elevation\", \"empty-cells\", \"fit\", \"fit-content\", \"fit-position\",\n \"flex\", \"flex-basis\", \"flex-direction\", \"flex-flow\", \"flex-grow\",\n \"flex-shrink\", \"flex-wrap\", \"float\", \"float-offset\", \"flow-from\", \"flow-into\",\n \"font\", \"font-family\", \"font-feature-settings\", \"font-kerning\",\n \"font-language-override\", \"font-optical-sizing\", \"font-size\",\n \"font-size-adjust\", \"font-stretch\", \"font-style\", \"font-synthesis\",\n \"font-variant\", \"font-variant-alternates\", \"font-variant-caps\",\n \"font-variant-east-asian\", \"font-variant-ligatures\", \"font-variant-numeric\",\n \"font-variant-position\", \"font-variation-settings\", \"font-weight\", \"gap\",\n \"grid\", \"grid-area\", \"grid-auto-columns\", \"grid-auto-flow\", \"grid-auto-rows\",\n \"grid-column\", \"grid-column-end\", \"grid-column-gap\", \"grid-column-start\",\n \"grid-gap\", \"grid-row\", \"grid-row-end\", \"grid-row-gap\", \"grid-row-start\",\n \"grid-template\", \"grid-template-areas\", \"grid-template-columns\",\n \"grid-template-rows\", \"hanging-punctuation\", \"height\", \"hyphens\", \"icon\",\n \"image-orientation\", \"image-rendering\", \"image-resolution\", \"inline-box-align\",\n \"inset\", \"inset-block\", \"inset-block-end\", \"inset-block-start\", \"inset-inline\",\n \"inset-inline-end\", \"inset-inline-start\", \"isolation\", \"justify-content\",\n \"justify-items\", \"justify-self\", \"left\", \"letter-spacing\", \"line-break\",\n \"line-height\", \"line-height-step\", \"line-stacking\", \"line-stacking-ruby\",\n \"line-stacking-shift\", \"line-stacking-strategy\", \"list-style\",\n \"list-style-image\", \"list-style-position\", \"list-style-type\", \"margin\",\n \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\", \"marks\",\n \"marquee-direction\", \"marquee-loop\", \"marquee-play-count\", \"marquee-speed\",\n \"marquee-style\", \"mask-clip\", \"mask-composite\", \"mask-image\", \"mask-mode\",\n \"mask-origin\", \"mask-position\", \"mask-repeat\", \"mask-size\",\"mask-type\",\n \"max-block-size\", \"max-height\", \"max-inline-size\",\n \"max-width\", \"min-block-size\", \"min-height\", \"min-inline-size\", \"min-width\",\n \"mix-blend-mode\", \"move-to\", \"nav-down\", \"nav-index\", \"nav-left\", \"nav-right\",\n \"nav-up\", \"object-fit\", \"object-position\", \"offset\", \"offset-anchor\",\n \"offset-distance\", \"offset-path\", \"offset-position\", \"offset-rotate\",\n \"opacity\", \"order\", \"orphans\", \"outline\", \"outline-color\", \"outline-offset\",\n \"outline-style\", \"outline-width\", \"overflow\", \"overflow-style\",\n \"overflow-wrap\", \"overflow-x\", \"overflow-y\", \"padding\", \"padding-bottom\",\n \"padding-left\", \"padding-right\", \"padding-top\", \"page\", \"page-break-after\",\n \"page-break-before\", \"page-break-inside\", \"page-policy\", \"pause\",\n \"pause-after\", \"pause-before\", \"perspective\", \"perspective-origin\", \"pitch\",\n \"pitch-range\", \"place-content\", \"place-items\", \"place-self\", \"play-during\",\n \"position\", \"presentation-level\", \"punctuation-trim\", \"quotes\",\n \"region-break-after\", \"region-break-before\", \"region-break-inside\",\n \"region-fragment\", \"rendering-intent\", \"resize\", \"rest\", \"rest-after\",\n \"rest-before\", \"richness\", \"right\", \"rotate\", \"rotation\", \"rotation-point\",\n \"row-gap\", \"ruby-align\", \"ruby-overhang\", \"ruby-position\", \"ruby-span\",\n \"scale\", \"scroll-behavior\", \"scroll-margin\", \"scroll-margin-block\",\n \"scroll-margin-block-end\", \"scroll-margin-block-start\", \"scroll-margin-bottom\",\n \"scroll-margin-inline\", \"scroll-margin-inline-end\",\n \"scroll-margin-inline-start\", \"scroll-margin-left\", \"scroll-margin-right\",\n \"scroll-margin-top\", \"scroll-padding\", \"scroll-padding-block\",\n \"scroll-padding-block-end\", \"scroll-padding-block-start\",\n \"scroll-padding-bottom\", \"scroll-padding-inline\", \"scroll-padding-inline-end\",\n \"scroll-padding-inline-start\", \"scroll-padding-left\", \"scroll-padding-right\",\n \"scroll-padding-top\", \"scroll-snap-align\", \"scroll-snap-type\",\n \"shape-image-threshold\", \"shape-inside\", \"shape-margin\", \"shape-outside\",\n \"size\", \"speak\", \"speak-as\", \"speak-header\", \"speak-numeral\",\n \"speak-punctuation\", \"speech-rate\", \"stress\", \"string-set\", \"tab-size\",\n \"table-layout\", \"target\", \"target-name\", \"target-new\", \"target-position\",\n \"text-align\", \"text-align-last\", \"text-combine-upright\", \"text-decoration\",\n \"text-decoration-color\", \"text-decoration-line\", \"text-decoration-skip\",\n \"text-decoration-skip-ink\", \"text-decoration-style\", \"text-emphasis\",\n \"text-emphasis-color\", \"text-emphasis-position\", \"text-emphasis-style\",\n \"text-height\", \"text-indent\", \"text-justify\", \"text-orientation\",\n \"text-outline\", \"text-overflow\", \"text-rendering\", \"text-shadow\",\n \"text-size-adjust\", \"text-space-collapse\", \"text-transform\",\n \"text-underline-position\", \"text-wrap\", \"top\", \"touch-action\", \"transform\", \"transform-origin\",\n \"transform-style\", \"transition\", \"transition-delay\", \"transition-duration\",\n \"transition-property\", \"transition-timing-function\", \"translate\",\n \"unicode-bidi\", \"user-select\", \"vertical-align\", \"visibility\", \"voice-balance\",\n \"voice-duration\", \"voice-family\", \"voice-pitch\", \"voice-range\", \"voice-rate\",\n \"voice-stress\", \"voice-volume\", \"volume\", \"white-space\", \"widows\", \"width\",\n \"will-change\", \"word-break\", \"word-spacing\", \"word-wrap\", \"writing-mode\", \"z-index\",\n // SVG-specific\n \"clip-path\", \"clip-rule\", \"mask\", \"enable-background\", \"filter\", \"flood-color\",\n \"flood-opacity\", \"lighting-color\", \"stop-color\", \"stop-opacity\", \"pointer-events\",\n \"color-interpolation\", \"color-interpolation-filters\",\n \"color-rendering\", \"fill\", \"fill-opacity\", \"fill-rule\", \"image-rendering\",\n \"marker\", \"marker-end\", \"marker-mid\", \"marker-start\", \"paint-order\", \"shape-rendering\", \"stroke\",\n \"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-linecap\", \"stroke-linejoin\",\n \"stroke-miterlimit\", \"stroke-opacity\", \"stroke-width\", \"text-rendering\",\n \"baseline-shift\", \"dominant-baseline\", \"glyph-orientation-horizontal\",\n \"glyph-orientation-vertical\", \"text-anchor\", \"writing-mode\",\n ], propertyKeywords = keySet(propertyKeywords_);\n\n var nonStandardPropertyKeywords_ = [\n \"accent-color\", \"aspect-ratio\", \"border-block\", \"border-block-color\", \"border-block-end\",\n \"border-block-end-color\", \"border-block-end-style\", \"border-block-end-width\",\n \"border-block-start\", \"border-block-start-color\", \"border-block-start-style\",\n \"border-block-start-width\", \"border-block-style\", \"border-block-width\",\n \"border-inline\", \"border-inline-color\", \"border-inline-end\",\n \"border-inline-end-color\", \"border-inline-end-style\",\n \"border-inline-end-width\", \"border-inline-start\", \"border-inline-start-color\",\n \"border-inline-start-style\", \"border-inline-start-width\",\n \"border-inline-style\", \"border-inline-width\", \"content-visibility\", \"margin-block\",\n \"margin-block-end\", \"margin-block-start\", \"margin-inline\", \"margin-inline-end\",\n \"margin-inline-start\", \"overflow-anchor\", \"overscroll-behavior\", \"padding-block\", \"padding-block-end\",\n \"padding-block-start\", \"padding-inline\", \"padding-inline-end\",\n \"padding-inline-start\", \"scroll-snap-stop\", \"scrollbar-3d-light-color\",\n \"scrollbar-arrow-color\", \"scrollbar-base-color\", \"scrollbar-dark-shadow-color\",\n \"scrollbar-face-color\", \"scrollbar-highlight-color\", \"scrollbar-shadow-color\",\n \"scrollbar-track-color\", \"searchfield-cancel-button\", \"searchfield-decoration\",\n \"searchfield-results-button\", \"searchfield-results-decoration\", \"shape-inside\", \"zoom\"\n ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_);\n\n var fontProperties_ = [\n \"font-display\", \"font-family\", \"src\", \"unicode-range\", \"font-variant\",\n \"font-feature-settings\", \"font-stretch\", \"font-weight\", \"font-style\"\n ], fontProperties = keySet(fontProperties_);\n\n var counterDescriptors_ = [\n \"additive-symbols\", \"fallback\", \"negative\", \"pad\", \"prefix\", \"range\",\n \"speak-as\", \"suffix\", \"symbols\", \"system\"\n ], counterDescriptors = keySet(counterDescriptors_);\n\n var colorKeywords_ = [\n \"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\",\n \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\",\n \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\",\n \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\",\n \"darkgray\", \"darkgreen\", \"darkgrey\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\",\n \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\",\n \"darkslateblue\", \"darkslategray\", \"darkslategrey\", \"darkturquoise\", \"darkviolet\",\n \"deeppink\", \"deepskyblue\", \"dimgray\", \"dimgrey\", \"dodgerblue\", \"firebrick\",\n \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\",\n \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\",\n \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\",\n \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\",\n \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightgrey\", \"lightpink\",\n \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\", \"lightslategrey\",\n \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\",\n \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\",\n \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\",\n \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\",\n \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\",\n \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\",\n \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\",\n \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\",\n \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\",\n \"slateblue\", \"slategray\", \"slategrey\", \"snow\", \"springgreen\", \"steelblue\", \"tan\",\n \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\",\n \"whitesmoke\", \"yellow\", \"yellowgreen\"\n ], colorKeywords = keySet(colorKeywords_);\n\n var valueKeywords_ = [\n \"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"afar\",\n \"after-white-space\", \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\",\n \"always\", \"amharic\", \"amharic-abegede\", \"antialiased\", \"appworkspace\",\n \"arabic-indic\", \"armenian\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\", \"avoid-page\",\n \"avoid-region\", \"axis-pan\", \"background\", \"backwards\", \"baseline\", \"below\", \"bidi-override\", \"binary\",\n \"bengali\", \"blink\", \"block\", \"block-axis\", \"blur\", \"bold\", \"bolder\", \"border\", \"border-box\",\n \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"brightness\", \"bullets\", \"button\",\n \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"cambodian\",\n \"capitalize\", \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\",\n \"cell\", \"center\", \"checkbox\", \"circle\", \"cjk-decimal\", \"cjk-earthly-branch\",\n \"cjk-heavenly-stem\", \"cjk-ideographic\", \"clear\", \"clip\", \"close-quote\",\n \"col-resize\", \"collapse\", \"color\", \"color-burn\", \"color-dodge\", \"column\", \"column-reverse\",\n \"compact\", \"condensed\", \"conic-gradient\", \"contain\", \"content\", \"contents\",\n \"content-box\", \"context-menu\", \"continuous\", \"contrast\", \"copy\", \"counter\", \"counters\", \"cover\", \"crop\",\n \"cross\", \"crosshair\", \"cubic-bezier\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\",\n \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\",\n \"destination-in\", \"destination-out\", \"destination-over\", \"devanagari\", \"difference\",\n \"disc\", \"discard\", \"disclosure-closed\", \"disclosure-open\", \"document\",\n \"dot-dash\", \"dot-dot-dash\",\n \"dotted\", \"double\", \"down\", \"drop-shadow\", \"e-resize\", \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\",\n \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\", \"ethiopic\", \"ethiopic-abegede\",\n \"ethiopic-abegede-am-et\", \"ethiopic-abegede-gez\", \"ethiopic-abegede-ti-er\",\n \"ethiopic-abegede-ti-et\", \"ethiopic-halehame-aa-er\",\n \"ethiopic-halehame-aa-et\", \"ethiopic-halehame-am-et\",\n \"ethiopic-halehame-gez\", \"ethiopic-halehame-om-et\",\n \"ethiopic-halehame-sid-et\", \"ethiopic-halehame-so-et\",\n \"ethiopic-halehame-ti-er\", \"ethiopic-halehame-ti-et\", \"ethiopic-halehame-tig\",\n \"ethiopic-numeric\", \"ew-resize\", \"exclusion\", \"expanded\", \"extends\", \"extra-condensed\",\n \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fill-box\", \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\",\n \"forwards\", \"from\", \"geometricPrecision\", \"georgian\", \"grayscale\", \"graytext\", \"grid\", \"groove\",\n \"gujarati\", \"gurmukhi\", \"hand\", \"hangul\", \"hangul-consonant\", \"hard-light\", \"hebrew\",\n \"help\", \"hidden\", \"hide\", \"higher\", \"highlight\", \"highlighttext\",\n \"hiragana\", \"hiragana-iroha\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"hue-rotate\", \"icon\", \"ignore\",\n \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\",\n \"infobackground\", \"infotext\", \"inherit\", \"initial\", \"inline\", \"inline-axis\",\n \"inline-block\", \"inline-flex\", \"inline-grid\", \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\",\n \"italic\", \"japanese-formal\", \"japanese-informal\", \"justify\", \"kannada\",\n \"katakana\", \"katakana-iroha\", \"keep-all\", \"khmer\",\n \"korean-hangul-formal\", \"korean-hanja-formal\", \"korean-hanja-informal\",\n \"landscape\", \"lao\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\",\n \"line-through\", \"linear\", \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\",\n \"local\", \"logical\", \"loud\", \"lower\", \"lower-alpha\", \"lower-armenian\",\n \"lower-greek\", \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\",\n \"lower-roman\", \"lowercase\", \"ltr\", \"luminosity\", \"malayalam\", \"manipulation\", \"match\", \"matrix\", \"matrix3d\",\n \"media-play-button\", \"media-slider\", \"media-sliderthumb\",\n \"media-volume-slider\", \"media-volume-sliderthumb\", \"medium\",\n \"menu\", \"menulist\", \"menulist-button\",\n \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\",\n \"mix\", \"mongolian\", \"monospace\", \"move\", \"multiple\", \"multiple_mask_images\", \"multiply\", \"myanmar\", \"n-resize\",\n \"narrower\", \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\",\n \"no-open-quote\", \"no-repeat\", \"none\", \"normal\", \"not-allowed\", \"nowrap\",\n \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\", \"oblique\", \"octal\", \"opacity\", \"open-quote\",\n \"optimizeLegibility\", \"optimizeSpeed\", \"oriya\", \"oromo\", \"outset\",\n \"outside\", \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\",\n \"painted\", \"page\", \"paused\", \"persian\", \"perspective\", \"pinch-zoom\", \"plus-darker\", \"plus-lighter\",\n \"pointer\", \"polygon\", \"portrait\", \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\",\n \"progress\", \"push-button\", \"radial-gradient\", \"radio\", \"read-only\",\n \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\",\n \"relative\", \"repeat\", \"repeating-linear-gradient\", \"repeating-radial-gradient\",\n \"repeating-conic-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\",\n \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\",\n \"rotateZ\", \"round\", \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\",\n \"s-resize\", \"sans-serif\", \"saturate\", \"saturation\", \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\",\n \"scroll\", \"scrollbar\", \"scroll-position\", \"se-resize\", \"searchfield\",\n \"searchfield-cancel-button\", \"searchfield-decoration\",\n \"searchfield-results-button\", \"searchfield-results-decoration\", \"self-start\", \"self-end\",\n \"semi-condensed\", \"semi-expanded\", \"separate\", \"sepia\", \"serif\", \"show\", \"sidama\",\n \"simp-chinese-formal\", \"simp-chinese-informal\", \"single\",\n \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\",\n \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\",\n \"small\", \"small-caps\", \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"somali\",\n \"source-atop\", \"source-in\", \"source-out\", \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\",\n \"square-button\", \"start\", \"static\", \"status-bar\", \"stretch\", \"stroke\", \"stroke-box\", \"sub\",\n \"subpixel-antialiased\", \"svg_masks\", \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\",\n \"table-caption\", \"table-cell\", \"table-column\", \"table-column-group\",\n \"table-footer-group\", \"table-header-group\", \"table-row\", \"table-row-group\",\n \"tamil\",\n \"telugu\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thai\",\n \"thick\", \"thin\", \"threeddarkshadow\", \"threedface\", \"threedhighlight\",\n \"threedlightshadow\", \"threedshadow\", \"tibetan\", \"tigre\", \"tigrinya-er\",\n \"tigrinya-er-abegede\", \"tigrinya-et\", \"tigrinya-et-abegede\", \"to\", \"top\",\n \"trad-chinese-formal\", \"trad-chinese-informal\", \"transform\",\n \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\",\n \"transparent\", \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unidirectional-pan\", \"unset\", \"up\",\n \"upper-alpha\", \"upper-armenian\", \"upper-greek\", \"upper-hexadecimal\",\n \"upper-latin\", \"upper-norwegian\", \"upper-roman\", \"uppercase\", \"urdu\", \"url\",\n \"var\", \"vertical\", \"vertical-text\", \"view-box\", \"visible\", \"visibleFill\", \"visiblePainted\",\n \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\",\n \"window\", \"windowframe\", \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\",\n \"xx-large\", \"xx-small\"\n ], valueKeywords = keySet(valueKeywords_);\n\n var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_)\n .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_)\n .concat(valueKeywords_);\n CodeMirror.registerHelper(\"hintWords\", \"css\", allWords);\n\n function tokenCComment(stream, state) {\n var maybeEnd = false, ch;\n while ((ch = stream.next()) != null) {\n if (maybeEnd && ch == \"/\") {\n state.tokenize = null;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return [\"comment\", \"comment\"];\n }\n\n CodeMirror.defineMIME(\"text/css\", {\n documentTypes: documentTypes,\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n fontProperties: fontProperties,\n counterDescriptors: counterDescriptors,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n tokenHooks: {\n \"/\": function(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n }\n },\n name: \"css\"\n });\n\n CodeMirror.defineMIME(\"text/x-scss\", {\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n fontProperties: fontProperties,\n allowNested: true,\n lineComment: \"//\",\n tokenHooks: {\n \"/\": function(stream, state) {\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return [\"comment\", \"comment\"];\n } else if (stream.eat(\"*\")) {\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n } else {\n return [\"operator\", \"operator\"];\n }\n },\n \":\": function(stream) {\n if (stream.match(/^\\s*\\{/, false))\n return [null, null]\n return false;\n },\n \"$\": function(stream) {\n stream.match(/^[\\w-]+/);\n if (stream.match(/^\\s*:/, false))\n return [\"variable-2\", \"variable-definition\"];\n return [\"variable-2\", \"variable\"];\n },\n \"#\": function(stream) {\n if (!stream.eat(\"{\")) return false;\n return [null, \"interpolation\"];\n }\n },\n name: \"css\",\n helperType: \"scss\"\n });\n\n CodeMirror.defineMIME(\"text/x-less\", {\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n fontProperties: fontProperties,\n allowNested: true,\n lineComment: \"//\",\n tokenHooks: {\n \"/\": function(stream, state) {\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return [\"comment\", \"comment\"];\n } else if (stream.eat(\"*\")) {\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n } else {\n return [\"operator\", \"operator\"];\n }\n },\n \"@\": function(stream) {\n if (stream.eat(\"{\")) return [null, \"interpolation\"];\n if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\\b/i, false)) return false;\n stream.eatWhile(/[\\w\\\\\\-]/);\n if (stream.match(/^\\s*:/, false))\n return [\"variable-2\", \"variable-definition\"];\n return [\"variable-2\", \"variable\"];\n },\n \"&\": function() {\n return [\"atom\", \"atom\"];\n }\n },\n name: \"css\",\n helperType: \"less\"\n });\n\n CodeMirror.defineMIME(\"text/x-gss\", {\n documentTypes: documentTypes,\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n fontProperties: fontProperties,\n counterDescriptors: counterDescriptors,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n supportsAtComponent: true,\n tokenHooks: {\n \"/\": function(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n }\n },\n name: \"css\",\n helperType: \"gss\"\n });\n\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar predicate_1 = require(\"../../predicate\");\nvar util_1 = require(\"../../util\");\nvar dataflow_1 = require(\"./dataflow\");\nvar FilterNode = /** @class */ (function (_super) {\n tslib_1.__extends(FilterNode, _super);\n function FilterNode(parent, model, filter) {\n var _this = _super.call(this, parent) || this;\n _this.model = model;\n _this.filter = filter;\n _this.expr = predicate_1.expression(_this.model, _this.filter, _this);\n return _this;\n }\n FilterNode.prototype.clone = function () {\n return new FilterNode(null, this.model, util_1.duplicate(this.filter));\n };\n FilterNode.prototype.assemble = function () {\n return {\n type: 'filter',\n expr: this.expr\n };\n };\n return FilterNode;\n}(dataflow_1.DataFlowNode));\nexports.FilterNode = FilterNode;\n//# sourceMappingURL=filter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar aggregate_1 = require(\"./aggregate\");\nvar channel_1 = require(\"./channel\");\nvar encoding_1 = require(\"./encoding\");\nvar fielddef_1 = require(\"./fielddef\");\nvar log = tslib_1.__importStar(require(\"./log\"));\nvar mark_1 = require(\"./mark\");\nvar scale_1 = require(\"./scale\");\nvar util_1 = require(\"./util\");\nvar STACK_OFFSET_INDEX = {\n zero: 1,\n center: 1,\n normalize: 1\n};\nfunction isStackOffset(s) {\n return !!STACK_OFFSET_INDEX[s];\n}\nexports.isStackOffset = isStackOffset;\nexports.STACKABLE_MARKS = [mark_1.BAR, mark_1.AREA, mark_1.RULE, mark_1.POINT, mark_1.CIRCLE, mark_1.SQUARE, mark_1.LINE, mark_1.TEXT, mark_1.TICK];\nexports.STACK_BY_DEFAULT_MARKS = [mark_1.BAR, mark_1.AREA];\nfunction potentialStackedChannel(encoding) {\n var xDef = encoding.x;\n var yDef = encoding.y;\n if (fielddef_1.isFieldDef(xDef) && fielddef_1.isFieldDef(yDef)) {\n if (xDef.type === 'quantitative' && yDef.type === 'quantitative') {\n if (xDef.stack) {\n return 'x';\n }\n else if (yDef.stack) {\n return 'y';\n }\n // if there is no explicit stacking, only apply stack if there is only one aggregate for x or y\n if ((!!xDef.aggregate) !== (!!yDef.aggregate)) {\n return xDef.aggregate ? 'x' : 'y';\n }\n }\n else if (xDef.type === 'quantitative') {\n return 'x';\n }\n else if (yDef.type === 'quantitative') {\n return 'y';\n }\n }\n else if (fielddef_1.isFieldDef(xDef) && xDef.type === 'quantitative') {\n return 'x';\n }\n else if (fielddef_1.isFieldDef(yDef) && yDef.type === 'quantitative') {\n return 'y';\n }\n return undefined;\n}\n// Note: CompassQL uses this method and only pass in required properties of each argument object.\n// If required properties change, make sure to update CompassQL.\nfunction stack(m, encoding, stackConfig) {\n var mark = mark_1.isMarkDef(m) ? m.type : m;\n // Should have stackable mark\n if (!util_1.contains(exports.STACKABLE_MARKS, mark)) {\n return null;\n }\n var fieldChannel = potentialStackedChannel(encoding);\n if (!fieldChannel) {\n return null;\n }\n var stackedFieldDef = encoding[fieldChannel];\n var stackedField = fielddef_1.isStringFieldDef(stackedFieldDef) ? fielddef_1.vgField(stackedFieldDef, {}) : undefined;\n var dimensionChannel = fieldChannel === 'x' ? 'y' : 'x';\n var dimensionDef = encoding[dimensionChannel];\n var dimensionField = fielddef_1.isStringFieldDef(dimensionDef) ? fielddef_1.vgField(dimensionDef, {}) : undefined;\n // Should have grouping level of detail that is different from the dimension field\n var stackBy = channel_1.NONPOSITION_CHANNELS.reduce(function (sc, channel) {\n if (encoding_1.channelHasField(encoding, channel)) {\n var channelDef = encoding[channel];\n (vega_util_1.isArray(channelDef) ? channelDef : [channelDef]).forEach(function (cDef) {\n var fieldDef = fielddef_1.getFieldDef(cDef);\n if (fieldDef.aggregate) {\n return;\n }\n // Check whether the channel's field is identical to x/y's field or if the channel is a repeat\n var f = fielddef_1.isStringFieldDef(fieldDef) ? fielddef_1.vgField(fieldDef, {}) : undefined;\n if (\n // if fielddef is a repeat, just include it in the stack by\n !f ||\n // otherwise, the field must be different from x and y fields.\n (f !== dimensionField && f !== stackedField)) {\n sc.push({ channel: channel, fieldDef: fieldDef });\n }\n });\n }\n return sc;\n }, []);\n if (stackBy.length === 0) {\n return null;\n }\n // Automatically determine offset\n var offset = undefined;\n if (stackedFieldDef.stack !== undefined) {\n offset = stackedFieldDef.stack;\n }\n else if (util_1.contains(exports.STACK_BY_DEFAULT_MARKS, mark)) {\n // Bar and Area with sum ops are automatically stacked by default\n offset = stackConfig === undefined ? 'zero' : stackConfig;\n }\n else {\n offset = stackConfig;\n }\n if (!offset || !isStackOffset(offset)) {\n return null;\n }\n // warn when stacking non-linear\n if (stackedFieldDef.scale && stackedFieldDef.scale.type && stackedFieldDef.scale.type !== scale_1.ScaleType.LINEAR) {\n log.warn(log.message.cannotStackNonLinearScale(stackedFieldDef.scale.type));\n }\n // Check if it is a ranged mark\n if (encoding_1.channelHasField(encoding, fieldChannel === channel_1.X ? channel_1.X2 : channel_1.Y2)) {\n if (stackedFieldDef.stack !== undefined) {\n log.warn(log.message.cannotStackRangedMark(fieldChannel));\n }\n return null;\n }\n // Warn if stacking summative aggregate\n if (stackedFieldDef.aggregate && !util_1.contains(aggregate_1.SUM_OPS, stackedFieldDef.aggregate)) {\n log.warn(log.message.stackNonSummativeAggregate(stackedFieldDef.aggregate));\n }\n return {\n groupbyChannel: dimensionDef ? dimensionChannel : undefined,\n fieldChannel: fieldChannel,\n impute: mark_1.isPathMark(mark),\n stackBy: stackBy,\n offset: offset\n };\n}\nexports.stack = stack;\n//# sourceMappingURL=stack.js.map","var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n gap,\n indent,\n meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"' : '\\\\\"',\n '\\\\': '\\\\\\\\'\n },\n rep;\n\nfunction quote(string) {\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n \n escapable.lastIndex = 0;\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n}\n\nfunction str(key, holder) {\n // Produce a string from holder[key].\n var i, // The loop counter.\n k, // The member key.\n v, // The member value.\n length,\n mind = gap,\n partial,\n value = holder[key];\n \n // If the value has a toJSON method, call it to obtain a replacement value.\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n \n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n if (typeof rep === 'function') {\n value = rep.call(holder, key, value);\n }\n \n // What happens next depends on the value's type.\n switch (typeof value) {\n case 'string':\n return quote(value);\n \n case 'number':\n // JSON numbers must be finite. Encode non-finite numbers as null.\n return isFinite(value) ? String(value) : 'null';\n \n case 'boolean':\n case 'null':\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce 'null'. The case is included here in\n // the remote chance that this gets fixed someday.\n return String(value);\n \n case 'object':\n if (!value) return 'null';\n gap += indent;\n partial = [];\n \n // Array.isArray\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n \n // Join all of the elements together, separated with commas, and\n // wrap them in brackets.\n v = partial.length === 0 ? '[]' : gap ?\n '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n \n // If the replacer is an array, use it to select the members to be\n // stringified.\n if (rep && typeof rep === 'object') {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n k = rep[i];\n if (typeof k === 'string') {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n else {\n // Otherwise, iterate through all of the keys in the object.\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n \n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0 ? '{}' : gap ?\n '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' :\n '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n}\n\nmodule.exports = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n \n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n if (typeof space === 'number') {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n }\n // If the space parameter is a string, it will be used as the indent string.\n else if (typeof space === 'string') {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n rep = replacer;\n if (replacer && typeof replacer !== 'function'\n && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) {\n throw new Error('JSON.stringify');\n }\n \n // Make a fake root object containing our value under the key of ''.\n // Return the result of stringifying the value.\n return str('', {'': value});\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar channel_1 = require(\"../../channel\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar log = tslib_1.__importStar(require(\"../../log\"));\nvar scale_1 = require(\"../../scale\");\nvar sort_1 = require(\"../../sort\");\nvar vega_schema_1 = require(\"../../vega.schema\");\nvar domain_1 = require(\"../scale/domain\");\nvar calculate_1 = require(\"./calculate\");\nvar dataflow_1 = require(\"./dataflow\");\n/**\n * A node that helps us track what fields we are faceting by.\n */\nvar FacetNode = /** @class */ (function (_super) {\n tslib_1.__extends(FacetNode, _super);\n /**\n * @param model The facet model.\n * @param name The name that this facet source will have.\n * @param data The source data for this facet data.\n */\n function FacetNode(parent, model, name, data) {\n var _this = _super.call(this, parent) || this;\n _this.model = model;\n _this.name = name;\n _this.data = data;\n for (var _i = 0, _a = [channel_1.COLUMN, channel_1.ROW]; _i < _a.length; _i++) {\n var channel = _a[_i];\n var fieldDef = model.facet[channel];\n if (fieldDef) {\n var bin = fieldDef.bin, sort = fieldDef.sort;\n _this[channel] = tslib_1.__assign({ name: model.getName(channel + \"_domain\"), fields: [\n fielddef_1.vgField(fieldDef)\n ].concat((bin ? [fielddef_1.vgField(fieldDef, { binSuffix: 'end' })] : [])) }, (sort_1.isSortField(sort) ? { sortField: sort } :\n vega_util_1.isArray(sort) ? { sortIndexField: calculate_1.sortArrayIndexField(fieldDef, channel) } :\n {}));\n }\n }\n _this.childModel = model.child;\n return _this;\n }\n Object.defineProperty(FacetNode.prototype, \"fields\", {\n get: function () {\n return ((this.column && this.column.fields) || []).concat((this.row && this.row.fields) || []);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * The name to reference this source is its name.\n */\n FacetNode.prototype.getSource = function () {\n return this.name;\n };\n FacetNode.prototype.getChildIndependentFieldsWithStep = function () {\n var childIndependentFieldsWithStep = {};\n for (var _i = 0, _a = ['x', 'y']; _i < _a.length; _i++) {\n var channel = _a[_i];\n var childScaleComponent = this.childModel.component.scales[channel];\n if (childScaleComponent && !childScaleComponent.merged) {\n var type = childScaleComponent.get('type');\n var range = childScaleComponent.get('range');\n if (scale_1.hasDiscreteDomain(type) && vega_schema_1.isVgRangeStep(range)) {\n var domain = domain_1.assembleDomain(this.childModel, channel);\n var field = domain_1.getFieldFromDomain(domain);\n if (field) {\n childIndependentFieldsWithStep[channel] = field;\n }\n else {\n log.warn('Unknown field for ${channel}. Cannot calculate view size.');\n }\n }\n }\n }\n return childIndependentFieldsWithStep;\n };\n FacetNode.prototype.assembleRowColumnData = function (channel, crossedDataName, childIndependentFieldsWithStep) {\n var childChannel = channel === 'row' ? 'y' : 'x';\n var fields = [];\n var ops = [];\n var as = [];\n if (childIndependentFieldsWithStep[childChannel]) {\n if (crossedDataName) {\n // If there is a crossed data, calculate max\n fields.push(\"distinct_\" + childIndependentFieldsWithStep[childChannel]);\n ops.push('max');\n }\n else {\n // If there is no crossed data, just calculate distinct\n fields.push(childIndependentFieldsWithStep[childChannel]);\n ops.push('distinct');\n }\n // Although it is technically a max, just name it distinct so it's easier to refer to it\n as.push(\"distinct_\" + childIndependentFieldsWithStep[childChannel]);\n }\n var _a = this[channel], sortField = _a.sortField, sortIndexField = _a.sortIndexField;\n if (sortField) {\n var op = sortField.op, field = sortField.field;\n fields.push(field);\n ops.push(op);\n as.push(fielddef_1.vgField(sortField));\n }\n else if (sortIndexField) {\n fields.push(sortIndexField);\n ops.push('max');\n as.push(sortIndexField);\n }\n return {\n name: this[channel].name,\n // Use data from the crossed one if it exist\n source: crossedDataName || this.data,\n transform: [tslib_1.__assign({ type: 'aggregate', groupby: this[channel].fields }, (fields.length ? {\n fields: fields, ops: ops, as: as\n } : {}))]\n };\n };\n FacetNode.prototype.assemble = function () {\n var data = [];\n var crossedDataName = null;\n var childIndependentFieldsWithStep = this.getChildIndependentFieldsWithStep();\n if (this.column && this.row && (childIndependentFieldsWithStep.x || childIndependentFieldsWithStep.y)) {\n // Need to create a cross dataset to correctly calculate cardinality\n crossedDataName = \"cross_\" + this.column.name + \"_\" + this.row.name;\n var fields = [].concat(childIndependentFieldsWithStep.x ? [childIndependentFieldsWithStep.x] : [], childIndependentFieldsWithStep.y ? [childIndependentFieldsWithStep.y] : []);\n var ops = fields.map(function () { return 'distinct'; });\n data.push({\n name: crossedDataName,\n source: this.data,\n transform: [{\n type: 'aggregate',\n groupby: this.column.fields.concat(this.row.fields),\n fields: fields,\n ops: ops\n }]\n });\n }\n for (var _i = 0, _a = [channel_1.COLUMN, channel_1.ROW]; _i < _a.length; _i++) {\n var channel = _a[_i];\n if (this[channel]) {\n data.push(this.assembleRowColumnData(channel, crossedDataName, childIndependentFieldsWithStep));\n }\n }\n return data;\n };\n return FacetNode;\n}(dataflow_1.DataFlowNode));\nexports.FacetNode = FacetNode;\n//# sourceMappingURL=facet.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar channel_1 = require(\"../../channel\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar log = tslib_1.__importStar(require(\"../../log\"));\nvar util_1 = require(\"../../util\");\nvar common_1 = require(\"../common\");\nvar dataflow_1 = require(\"./dataflow\");\nfunction addDimension(dims, channel, fieldDef) {\n if (fieldDef.bin) {\n dims[fielddef_1.vgField(fieldDef, {})] = true;\n dims[fielddef_1.vgField(fieldDef, { binSuffix: 'end' })] = true;\n if (common_1.binRequiresRange(fieldDef, channel)) {\n dims[fielddef_1.vgField(fieldDef, { binSuffix: 'range' })] = true;\n }\n }\n else {\n dims[fielddef_1.vgField(fieldDef)] = true;\n }\n return dims;\n}\nfunction mergeMeasures(parentMeasures, childMeasures) {\n for (var f in childMeasures) {\n if (childMeasures.hasOwnProperty(f)) {\n // when we merge a measure, we either have to add an aggregation operator or even a new field\n var ops = childMeasures[f];\n for (var op in ops) {\n if (ops.hasOwnProperty(op)) {\n if (f in parentMeasures) {\n // add operator to existing measure field\n parentMeasures[f][op] = ops[op];\n }\n else {\n parentMeasures[f] = { op: ops[op] };\n }\n }\n }\n }\n }\n}\nvar AggregateNode = /** @class */ (function (_super) {\n tslib_1.__extends(AggregateNode, _super);\n /**\n * @param dimensions string set for dimensions\n * @param measures dictionary mapping field name => dict of aggregation functions and names to use\n */\n function AggregateNode(parent, dimensions, measures) {\n var _this = _super.call(this, parent) || this;\n _this.dimensions = dimensions;\n _this.measures = measures;\n return _this;\n }\n AggregateNode.prototype.clone = function () {\n return new AggregateNode(null, tslib_1.__assign({}, this.dimensions), util_1.duplicate(this.measures));\n };\n AggregateNode.makeFromEncoding = function (parent, model) {\n var isAggregate = false;\n model.forEachFieldDef(function (fd) {\n if (fd.aggregate) {\n isAggregate = true;\n }\n });\n var meas = {};\n var dims = {};\n if (!isAggregate) {\n // no need to create this node if the model has no aggregation\n return null;\n }\n model.forEachFieldDef(function (fieldDef, channel) {\n var aggregate = fieldDef.aggregate, field = fieldDef.field;\n if (aggregate) {\n if (aggregate === 'count') {\n meas['*'] = meas['*'] || {};\n meas['*']['count'] = fielddef_1.vgField(fieldDef);\n }\n else {\n meas[field] = meas[field] || {};\n meas[field][aggregate] = fielddef_1.vgField(fieldDef);\n // For scale channel with domain === 'unaggregated', add min/max so we can use their union as unaggregated domain\n if (channel_1.isScaleChannel(channel) && model.scaleDomain(channel) === 'unaggregated') {\n meas[field]['min'] = fielddef_1.vgField({ field: field, aggregate: 'min' });\n meas[field]['max'] = fielddef_1.vgField({ field: field, aggregate: 'max' });\n }\n }\n }\n else {\n addDimension(dims, channel, fieldDef);\n }\n });\n if ((util_1.keys(dims).length + util_1.keys(meas).length) === 0) {\n return null;\n }\n return new AggregateNode(parent, dims, meas);\n };\n AggregateNode.makeFromTransform = function (parent, t) {\n var dims = {};\n var meas = {};\n for (var _i = 0, _a = t.aggregate; _i < _a.length; _i++) {\n var s = _a[_i];\n var op = s.op, field = s.field, as = s.as;\n if (op) {\n if (op === 'count') {\n meas['*'] = meas['*'] || {};\n meas['*']['count'] = as || fielddef_1.vgField(s);\n }\n else {\n meas[field] = meas[field] || {};\n meas[field][op] = as || fielddef_1.vgField(s);\n }\n }\n }\n for (var _b = 0, _c = t.groupby || []; _b < _c.length; _b++) {\n var s = _c[_b];\n dims[s] = true;\n }\n if ((util_1.keys(dims).length + util_1.keys(meas).length) === 0) {\n return null;\n }\n return new AggregateNode(parent, dims, meas);\n };\n AggregateNode.prototype.merge = function (other) {\n if (!util_1.differ(this.dimensions, other.dimensions)) {\n mergeMeasures(this.measures, other.measures);\n other.remove();\n }\n else {\n log.debug('different dimensions, cannot merge');\n }\n };\n AggregateNode.prototype.addDimensions = function (fields) {\n var _this = this;\n fields.forEach(function (f) { return _this.dimensions[f] = true; });\n };\n AggregateNode.prototype.dependentFields = function () {\n var out = {};\n util_1.keys(this.dimensions).forEach(function (f) { return out[f] = true; });\n util_1.keys(this.measures).forEach(function (m) { return out[m] = true; });\n return out;\n };\n AggregateNode.prototype.producedFields = function () {\n var _this = this;\n var out = {};\n util_1.keys(this.measures).forEach(function (field) {\n util_1.keys(_this.measures[field]).forEach(function (op) {\n out[op + \"_\" + field] = true;\n });\n });\n return out;\n };\n AggregateNode.prototype.assemble = function () {\n var ops = [];\n var fields = [];\n var as = [];\n for (var _i = 0, _a = util_1.keys(this.measures); _i < _a.length; _i++) {\n var field = _a[_i];\n for (var _b = 0, _c = util_1.keys(this.measures[field]); _b < _c.length; _b++) {\n var op = _c[_b];\n as.push(this.measures[field][op]);\n ops.push(op);\n fields.push(field);\n }\n }\n var result = {\n type: 'aggregate',\n groupby: util_1.keys(this.dimensions),\n ops: ops,\n fields: fields,\n as: as\n };\n return result;\n };\n return AggregateNode;\n}(dataflow_1.DataFlowNode));\nexports.AggregateNode = AggregateNode;\n//# sourceMappingURL=aggregate.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar channel_1 = require(\"../../channel\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar log = tslib_1.__importStar(require(\"../../log\"));\nvar mark_1 = require(\"../../mark\");\nvar scale_1 = require(\"../../scale\");\nvar mixins = tslib_1.__importStar(require(\"./mixins\"));\nexports.rect = {\n vgMark: 'rect',\n encodeEntry: function (model) {\n return tslib_1.__assign({}, mixins.baseEncodeEntry(model, { size: 'ignore', orient: 'ignore' }), x(model), y(model));\n }\n};\nfunction x(model) {\n var xDef = model.encoding.x;\n var x2Def = model.encoding.x2;\n var xScale = model.getScaleComponent(channel_1.X);\n var xScaleType = xScale ? xScale.get('type') : undefined;\n if (fielddef_1.isFieldDef(xDef) && xDef.bin && !x2Def) {\n return mixins.binnedPosition(xDef, 'x', model.scaleName('x'), 0, xScale.get('reverse'));\n }\n else if (fielddef_1.isFieldDef(xDef) && xScale && scale_1.hasDiscreteDomain(xScaleType)) {\n /* istanbul ignore else */\n if (xScaleType === scale_1.ScaleType.BAND) {\n return mixins.bandPosition(xDef, 'x', model);\n }\n else {\n // We don't support rect mark with point/ordinal scale\n throw new Error(log.message.scaleTypeNotWorkWithMark(mark_1.RECT, xScaleType));\n }\n }\n else { // continuous scale or no scale\n return tslib_1.__assign({}, mixins.pointPosition('x', model, 'zeroOrMax'), mixins.pointPosition2(model, 'zeroOrMin', 'x2'));\n }\n}\nexports.x = x;\nfunction y(model) {\n var yDef = model.encoding.y;\n var y2Def = model.encoding.y2;\n var yScale = model.getScaleComponent(channel_1.Y);\n var yScaleType = yScale ? yScale.get('type') : undefined;\n if (fielddef_1.isFieldDef(yDef) && yDef.bin && !y2Def) {\n return mixins.binnedPosition(yDef, 'y', model.scaleName('y'), 0, yScale.get('reverse'));\n }\n else if (fielddef_1.isFieldDef(yDef) && yScale && scale_1.hasDiscreteDomain(yScaleType)) {\n /* istanbul ignore else */\n if (yScaleType === scale_1.ScaleType.BAND) {\n return mixins.bandPosition(yDef, 'y', model);\n }\n else {\n // We don't support rect mark with point/ordinal scale\n throw new Error(log.message.scaleTypeNotWorkWithMark(mark_1.RECT, yScaleType));\n }\n }\n else { // continuous scale or no scale\n return tslib_1.__assign({}, mixins.pointPosition('y', model, 'zeroOrMax'), mixins.pointPosition2(model, 'zeroOrMin', 'y2'));\n }\n}\nexports.y = y;\n//# sourceMappingURL=rect.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar channel_1 = require(\"../../channel\");\nvar log = tslib_1.__importStar(require(\"../../log\"));\nvar scale_1 = require(\"../../scale\");\nvar util = tslib_1.__importStar(require(\"../../util\"));\nvar util_1 = require(\"../../util\");\nvar model_1 = require(\"../model\");\nvar split_1 = require(\"../split\");\nvar range_1 = require(\"./range\");\nfunction parseScaleProperty(model, property) {\n if (model_1.isUnitModel(model)) {\n parseUnitScaleProperty(model, property);\n }\n else {\n parseNonUnitScaleProperty(model, property);\n }\n}\nexports.parseScaleProperty = parseScaleProperty;\nfunction parseUnitScaleProperty(model, property) {\n var localScaleComponents = model.component.scales;\n util_1.keys(localScaleComponents).forEach(function (channel) {\n var specifiedScale = model.specifiedScales[channel];\n var localScaleCmpt = localScaleComponents[channel];\n var mergedScaleCmpt = model.getScaleComponent(channel);\n var fieldDef = model.fieldDef(channel);\n var config = model.config;\n var specifiedValue = specifiedScale[property];\n var sType = mergedScaleCmpt.get('type');\n var supportedByScaleType = scale_1.scaleTypeSupportProperty(sType, property);\n var channelIncompatability = scale_1.channelScalePropertyIncompatability(channel, property);\n if (specifiedValue !== undefined) {\n // If there is a specified value, check if it is compatible with scale type and channel\n if (!supportedByScaleType) {\n log.warn(log.message.scalePropertyNotWorkWithScaleType(sType, property, channel));\n }\n else if (channelIncompatability) { // channel\n log.warn(channelIncompatability);\n }\n }\n if (supportedByScaleType && channelIncompatability === undefined) {\n if (specifiedValue !== undefined) {\n // copyKeyFromObject ensure type safety\n localScaleCmpt.copyKeyFromObject(property, specifiedScale);\n }\n else {\n var value = getDefaultValue(property, channel, fieldDef, mergedScaleCmpt.get('type'), mergedScaleCmpt.get('padding'), mergedScaleCmpt.get('paddingInner'), specifiedScale.domain, model.markDef, config);\n if (value !== undefined) {\n localScaleCmpt.set(property, value, false);\n }\n }\n }\n });\n}\n// Note: This method is used in Voyager.\nfunction getDefaultValue(property, channel, fieldDef, scaleType, scalePadding, scalePaddingInner, specifiedDomain, markDef, config) {\n var scaleConfig = config.scale;\n // If we have default rule-base, determine default value first\n switch (property) {\n case 'nice':\n return nice(scaleType, channel, fieldDef);\n case 'padding':\n return padding(channel, scaleType, scaleConfig, fieldDef, markDef, config.bar);\n case 'paddingInner':\n return paddingInner(scalePadding, channel, scaleConfig);\n case 'paddingOuter':\n return paddingOuter(scalePadding, channel, scaleType, scalePaddingInner, scaleConfig);\n case 'reverse':\n return reverse(scaleType, fieldDef.sort);\n case 'zero':\n return zero(channel, fieldDef, specifiedDomain, markDef);\n }\n // Otherwise, use scale config\n return scaleConfig[property];\n}\nexports.getDefaultValue = getDefaultValue;\nfunction parseNonUnitScaleProperty(model, property) {\n var localScaleComponents = model.component.scales;\n for (var _i = 0, _a = model.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (property === 'range') {\n range_1.parseScaleRange(child);\n }\n else {\n parseScaleProperty(child, property);\n }\n }\n util_1.keys(localScaleComponents).forEach(function (channel) {\n var valueWithExplicit;\n for (var _i = 0, _a = model.children; _i < _a.length; _i++) {\n var child = _a[_i];\n var childComponent = child.component.scales[channel];\n if (childComponent) {\n var childValueWithExplicit = childComponent.getWithExplicit(property);\n valueWithExplicit = split_1.mergeValuesWithExplicit(valueWithExplicit, childValueWithExplicit, property, 'scale', split_1.tieBreakByComparing(function (v1, v2) {\n switch (property) {\n case 'range':\n // For range step, prefer larger step\n if (v1.step && v2.step) {\n return v1.step - v2.step;\n }\n return 0;\n // TODO: precedence rule for other properties\n }\n return 0;\n }));\n }\n }\n localScaleComponents[channel].setWithExplicit(property, valueWithExplicit);\n });\n}\nexports.parseNonUnitScaleProperty = parseNonUnitScaleProperty;\nfunction nice(scaleType, channel, fieldDef) {\n if (fieldDef.bin || util.contains([scale_1.ScaleType.TIME, scale_1.ScaleType.UTC], scaleType)) {\n return undefined;\n }\n return util.contains([channel_1.X, channel_1.Y], channel); // return true for quantitative X/Y unless binned\n}\nexports.nice = nice;\nfunction padding(channel, scaleType, scaleConfig, fieldDef, markDef, barConfig) {\n if (util.contains([channel_1.X, channel_1.Y], channel)) {\n if (scale_1.isContinuousToContinuous(scaleType)) {\n if (scaleConfig.continuousPadding !== undefined) {\n return scaleConfig.continuousPadding;\n }\n var type = markDef.type, orient = markDef.orient;\n if (type === 'bar' && !fieldDef.bin) {\n if ((orient === 'vertical' && channel === 'x') ||\n (orient === 'horizontal' && channel === 'y')) {\n return barConfig.continuousBandSize;\n }\n }\n }\n if (scaleType === scale_1.ScaleType.POINT) {\n return scaleConfig.pointPadding;\n }\n }\n return undefined;\n}\nexports.padding = padding;\nfunction paddingInner(paddingValue, channel, scaleConfig) {\n if (paddingValue !== undefined) {\n // If user has already manually specified \"padding\", no need to add default paddingInner.\n return undefined;\n }\n if (util.contains([channel_1.X, channel_1.Y], channel)) {\n // Padding is only set for X and Y by default.\n // Basically it doesn't make sense to add padding for color and size.\n // paddingOuter would only be called if it's a band scale, just return the default for bandScale.\n return scaleConfig.bandPaddingInner;\n }\n return undefined;\n}\nexports.paddingInner = paddingInner;\nfunction paddingOuter(paddingValue, channel, scaleType, paddingInnerValue, scaleConfig) {\n if (paddingValue !== undefined) {\n // If user has already manually specified \"padding\", no need to add default paddingOuter.\n return undefined;\n }\n if (util.contains([channel_1.X, channel_1.Y], channel)) {\n // Padding is only set for X and Y by default.\n // Basically it doesn't make sense to add padding for color and size.\n if (scaleType === scale_1.ScaleType.BAND) {\n if (scaleConfig.bandPaddingOuter !== undefined) {\n return scaleConfig.bandPaddingOuter;\n }\n /* By default, paddingOuter is paddingInner / 2. The reason is that\n size (width/height) = step * (cardinality - paddingInner + 2 * paddingOuter).\n and we want the width/height to be integer by default.\n Note that step (by default) and cardinality are integers.) */\n return paddingInnerValue / 2;\n }\n }\n return undefined;\n}\nexports.paddingOuter = paddingOuter;\nfunction reverse(scaleType, sort) {\n if (scale_1.hasContinuousDomain(scaleType) && sort === 'descending') {\n // For continuous domain scales, Vega does not support domain sort.\n // Thus, we reverse range instead if sort is descending\n return true;\n }\n return undefined;\n}\nexports.reverse = reverse;\nfunction zero(channel, fieldDef, specifiedScale, markDef) {\n // If users explicitly provide a domain range, we should not augment zero as that will be unexpected.\n var hasCustomDomain = !!specifiedScale && specifiedScale !== 'unaggregated';\n if (hasCustomDomain) {\n return false;\n }\n // If there is no custom domain, return true only for the following cases:\n // 1) using quantitative field with size\n // While this can be either ratio or interval fields, our assumption is that\n // ratio are more common.\n if (channel === 'size' && fieldDef.type === 'quantitative') {\n return true;\n }\n // 2) non-binned, quantitative x-scale or y-scale\n // (For binning, we should not include zero by default because binning are calculated without zero.)\n if (!fieldDef.bin && util.contains([channel_1.X, channel_1.Y], channel)) {\n var orient = markDef.orient, type = markDef.type;\n if (util_1.contains(['bar', 'area', 'line', 'trail'], type)) {\n if ((orient === 'horizontal' && channel === 'y') ||\n (orient === 'vertical' && channel === 'x')) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\nexports.zero = zero;\n//# sourceMappingURL=properties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"../../util\");\nvar dataflow_1 = require(\"./dataflow\");\nvar facet_1 = require(\"./facet\");\nvar formatparse_1 = require(\"./formatparse\");\nvar source_1 = require(\"./source\");\nvar timeunit_1 = require(\"./timeunit\");\n/**\n * Start optimization path at the leaves. Useful for merging up or removing things.\n *\n * If the callback returns true, the recursion continues.\n */\nfunction iterateFromLeaves(f) {\n function optimizeNextFromLeaves(node) {\n if (node instanceof source_1.SourceNode) {\n return;\n }\n var next = node.parent;\n if (f(node)) {\n optimizeNextFromLeaves(next);\n }\n }\n return optimizeNextFromLeaves;\n}\nexports.iterateFromLeaves = iterateFromLeaves;\n/**\n * Move parse nodes up to forks.\n */\nfunction moveParseUp(node) {\n var parent = node.parent;\n // move parse up by merging or swapping\n if (node instanceof formatparse_1.ParseNode) {\n if (parent instanceof source_1.SourceNode) {\n return false;\n }\n if (parent.numChildren() > 1) {\n // don't move parse further up but continue with parent.\n return true;\n }\n if (parent instanceof formatparse_1.ParseNode) {\n parent.merge(node);\n }\n else {\n // don't swap with nodes that produce something that the parse node depends on (e.g. lookup)\n if (util_1.hasIntersection(parent.producedFields(), node.dependentFields())) {\n return true;\n }\n node.swapWithParent();\n }\n }\n return true;\n}\nexports.moveParseUp = moveParseUp;\n/**\n * Repeatedly remove leaf nodes that are not output or facet nodes.\n * The reason is that we don't need subtrees that don't have any output nodes.\n * Facet nodes are needed for the row or column domains.\n */\nfunction removeUnusedSubtrees(node) {\n if (node instanceof dataflow_1.OutputNode || node.numChildren() > 0 || node instanceof facet_1.FacetNode) {\n // no need to continue with parent because it is output node or will have children (there was a fork)\n return false;\n }\n else {\n node.remove();\n }\n return true;\n}\nexports.removeUnusedSubtrees = removeUnusedSubtrees;\n/**\n * Removes duplicate time unit nodes (as determined by the name of the\n * output field) that may be generated due to selections projected over\n * time units.\n */\nfunction removeDuplicateTimeUnits(leaf) {\n var fields = {};\n return iterateFromLeaves(function (node) {\n if (node instanceof timeunit_1.TimeUnitNode) {\n var pfields = node.producedFields();\n var dupe = util_1.keys(pfields).every(function (k) { return !!fields[k]; });\n if (dupe) {\n node.remove();\n }\n else {\n fields = tslib_1.__assign({}, fields, pfields);\n }\n }\n return true;\n })(leaf);\n}\nexports.removeDuplicateTimeUnits = removeDuplicateTimeUnits;\n//# sourceMappingURL=optimizers.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar vega_util_1 = require(\"vega-util\");\nvar mark_1 = require(\"./mark\");\nvar mark_2 = require(\"./mark\");\n/**\n * Required Encoding Channels for each mark type\n */\nexports.DEFAULT_REQUIRED_CHANNEL_MAP = {\n text: ['text'],\n line: ['x', 'y'],\n trail: ['x', 'y'],\n area: ['x', 'y']\n};\n/**\n * Supported Encoding Channel for each mark type\n */\nexports.DEFAULT_SUPPORTED_CHANNEL_TYPE = {\n bar: vega_util_1.toSet(['row', 'column', 'x', 'y', 'size', 'color', 'fill', 'stroke', 'detail']),\n line: vega_util_1.toSet(['row', 'column', 'x', 'y', 'color', 'fill', 'stroke', 'color', 'detail']),\n trail: vega_util_1.toSet(['row', 'column', 'x', 'y', 'color', 'fill', 'stroke', 'color', 'detail', 'size']),\n area: vega_util_1.toSet(['row', 'column', 'x', 'y', 'color', 'fill', 'stroke', 'detail']),\n tick: vega_util_1.toSet(['row', 'column', 'x', 'y', 'color', 'fill', 'stroke', 'detail']),\n circle: vega_util_1.toSet(['row', 'column', 'x', 'y', 'color', 'fill', 'stroke', 'size', 'detail']),\n square: vega_util_1.toSet(['row', 'column', 'x', 'y', 'color', 'fill', 'stroke', 'size', 'detail']),\n point: vega_util_1.toSet(['row', 'column', 'x', 'y', 'color', 'fill', 'stroke', 'size', 'detail', 'shape']),\n geoshape: vega_util_1.toSet(['row', 'column', 'color', 'fill', 'stroke', 'detail', 'shape']),\n text: vega_util_1.toSet(['row', 'column', 'size', 'color', 'fill', 'stroke', 'text']) // TODO(#724) revise\n};\n// TODO: consider if we should add validate method and\n// requires ZSchema in the main vega-lite repo\n/**\n * Further check if encoding mapping of a spec is invalid and\n * return error if it is invalid.\n *\n * This checks if\n * (1) all the required encoding channels for the mark type are specified\n * (2) all the specified encoding channels are supported by the mark type\n * @param {[type]} spec [description]\n * @param {RequiredChannelMap = DefaultRequiredChannelMap} requiredChannelMap\n * @param {SupportedChannelMap = DefaultSupportedChannelMap} supportedChannelMap\n * @return {String} Return one reason why the encoding is invalid,\n * or null if the encoding is valid.\n */\nfunction getEncodingMappingError(spec, requiredChannelMap, supportedChannelMap) {\n if (requiredChannelMap === void 0) { requiredChannelMap = exports.DEFAULT_REQUIRED_CHANNEL_MAP; }\n if (supportedChannelMap === void 0) { supportedChannelMap = exports.DEFAULT_SUPPORTED_CHANNEL_TYPE; }\n var mark = mark_1.isMarkDef(spec.mark) ? spec.mark.type : spec.mark;\n var encoding = spec.encoding;\n var requiredChannels = requiredChannelMap[mark];\n var supportedChannels = supportedChannelMap[mark];\n for (var i in requiredChannels) { // all required channels are in encoding`\n if (!(requiredChannels[i] in encoding)) {\n return 'Missing encoding channel \\\"' + requiredChannels[i] +\n '\\\" for mark \\\"' + mark + '\\\"';\n }\n }\n for (var channel in encoding) { // all channels in encoding are supported\n if (!supportedChannels[channel]) {\n return 'Encoding channel \\\"' + channel +\n '\\\" is not supported by mark type \\\"' + mark + '\\\"';\n }\n }\n if (mark === mark_2.BAR && !encoding.x && !encoding.y) {\n return 'Missing both x and y for bar';\n }\n return null;\n}\nexports.getEncodingMappingError = getEncodingMappingError;\n//# sourceMappingURL=validate.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar log = tslib_1.__importStar(require(\"../log\"));\nvar spec_1 = require(\"../spec\");\nvar baseconcat_1 = require(\"./baseconcat\");\nvar buildmodel_1 = require(\"./buildmodel\");\nvar parse_1 = require(\"./layoutsize/parse\");\nvar ConcatModel = /** @class */ (function (_super) {\n tslib_1.__extends(ConcatModel, _super);\n function ConcatModel(spec, parent, parentGivenName, repeater, config) {\n var _this = _super.call(this, spec, parent, parentGivenName, config, repeater, spec.resolve) || this;\n _this.type = 'concat';\n if (spec.resolve && spec.resolve.axis && (spec.resolve.axis.x === 'shared' || spec.resolve.axis.y === 'shared')) {\n log.warn(log.message.CONCAT_CANNOT_SHARE_AXIS);\n }\n _this.isVConcat = spec_1.isVConcatSpec(spec);\n _this.children = (spec_1.isVConcatSpec(spec) ? spec.vconcat : spec.hconcat).map(function (child, i) {\n return buildmodel_1.buildModel(child, _this, _this.getName('concat_' + i), undefined, repeater, config, false);\n });\n return _this;\n }\n ConcatModel.prototype.parseLayoutSize = function () {\n parse_1.parseConcatLayoutSize(this);\n };\n ConcatModel.prototype.parseAxisGroup = function () {\n return null;\n };\n ConcatModel.prototype.assembleDefaultLayout = function () {\n return tslib_1.__assign({}, (this.isVConcat ? { columns: 1 } : {}), { bounds: 'full', \n // Use align each so it can work with multiple plots with different size\n align: 'each' });\n };\n return ConcatModel;\n}(baseconcat_1.BaseConcatModel));\nexports.ConcatModel = ConcatModel;\n//# sourceMappingURL=concat.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar log = tslib_1.__importStar(require(\"../../log\"));\nvar predicate_1 = require(\"../../predicate\");\nvar scale_1 = require(\"../../scale\");\nvar util_1 = require(\"../../util\");\nvar vega_schema_1 = require(\"../../vega.schema\");\nvar common_1 = require(\"../common\");\nvar selection_1 = require(\"../selection/selection\");\nvar ref = tslib_1.__importStar(require(\"./valueref\"));\nfunction color(model, opt) {\n if (opt === void 0) { opt = { valueOnly: false }; }\n var _a, _b;\n var markDef = model.markDef, encoding = model.encoding, config = model.config;\n var filled = markDef.filled, markType = markDef.type;\n var configValue = {\n fill: common_1.getMarkConfig('fill', markDef, config),\n stroke: common_1.getMarkConfig('stroke', markDef, config),\n color: common_1.getMarkConfig('color', markDef, config)\n };\n var transparentIfNeeded = util_1.contains(['bar', 'point', 'circle', 'square', 'geoshape'], markType) ? 'transparent' : undefined;\n var defaultValue = {\n fill: markDef.fill || configValue.fill ||\n // If there is no fill, always fill symbols, bar, geoshape\n // with transparent fills https://github.com/vega/vega-lite/issues/1316\n transparentIfNeeded,\n stroke: markDef.stroke || configValue.stroke\n };\n var colorVgChannel = filled ? 'fill' : 'stroke';\n var fillStrokeMarkDefAndConfig = tslib_1.__assign({}, (defaultValue.fill ? {\n fill: { value: defaultValue.fill }\n } : {}), (defaultValue.stroke ? {\n stroke: { value: defaultValue.stroke }\n } : {}));\n if (encoding.fill || encoding.stroke) {\n // ignore encoding.color, markDef.color, config.color\n if (markDef.color) {\n // warn for markDef.color (no need to warn encoding.color as it will be dropped in normalized already)\n log.warn(log.message.droppingColor('property', { fill: 'fill' in encoding, stroke: 'stroke' in encoding }));\n }\n return tslib_1.__assign({}, nonPosition('fill', model, { defaultValue: defaultValue.fill || transparentIfNeeded }), nonPosition('stroke', model, { defaultValue: defaultValue.stroke }));\n }\n else if (encoding.color) {\n return tslib_1.__assign({}, fillStrokeMarkDefAndConfig, nonPosition('color', model, {\n vgChannel: colorVgChannel,\n // apply default fill/stroke first, then color config, then transparent if needed.\n defaultValue: markDef[colorVgChannel] || markDef.color || configValue[colorVgChannel] || configValue.color || (filled ? transparentIfNeeded : undefined)\n }));\n }\n else if (markDef.fill || markDef.stroke) {\n // Ignore markDef.color, config.color\n if (markDef.color) {\n log.warn(log.message.droppingColor('property', { fill: 'fill' in markDef, stroke: 'stroke' in markDef }));\n }\n return fillStrokeMarkDefAndConfig;\n }\n else if (markDef.color) {\n return tslib_1.__assign({}, fillStrokeMarkDefAndConfig, (_a = {}, _a[colorVgChannel] = { value: markDef.color }, _a));\n }\n else if (configValue.fill || configValue.stroke) {\n // ignore config.color\n return fillStrokeMarkDefAndConfig;\n }\n else if (configValue.color) {\n return tslib_1.__assign({}, (transparentIfNeeded ? { fill: { value: 'transparent' } } : {}), (_b = {}, _b[colorVgChannel] = { value: configValue.color }, _b));\n }\n return {};\n}\nexports.color = color;\nfunction baseEncodeEntry(model, ignore) {\n return tslib_1.__assign({}, markDefProperties(model.markDef, ignore), color(model), nonPosition('opacity', model), tooltip(model), text(model, 'href'));\n}\nexports.baseEncodeEntry = baseEncodeEntry;\nfunction markDefProperties(mark, ignore) {\n return vega_schema_1.VG_MARK_CONFIGS.reduce(function (m, prop) {\n if (mark[prop] !== undefined && ignore[prop] !== 'ignore') {\n m[prop] = { value: mark[prop] };\n }\n return m;\n }, {});\n}\nfunction valueIfDefined(prop, value) {\n var _a;\n if (value !== undefined) {\n return _a = {}, _a[prop] = { value: value }, _a;\n }\n return undefined;\n}\nexports.valueIfDefined = valueIfDefined;\nfunction validPredicate(vgRef) {\n return vgRef + \" !== null && !isNaN(\" + vgRef + \")\";\n}\nfunction defined(model) {\n if (model.config.invalidValues === 'filter') {\n var fields = ['x', 'y'].map(function (channel) {\n var scaleComponent = model.getScaleComponent(channel);\n if (scaleComponent) {\n var scaleType = scaleComponent.get('type');\n // Discrete domain scales can handle invalid values, but continuous scales can't.\n if (scale_1.hasContinuousDomain(scaleType)) {\n return model.vgField(channel, { expr: 'datum' });\n }\n }\n return undefined;\n })\n .filter(function (field) { return !!field; })\n .map(validPredicate);\n if (fields.length > 0) {\n return {\n defined: { signal: fields.join(' && ') }\n };\n }\n }\n return {};\n}\nexports.defined = defined;\n/**\n * Return mixins for non-positional channels with scales. (Text doesn't have scale.)\n */\nfunction nonPosition(channel, model, opt) {\n if (opt === void 0) { opt = {}; }\n var defaultValue = opt.defaultValue, vgChannel = opt.vgChannel;\n var defaultRef = opt.defaultRef || (defaultValue !== undefined ? { value: defaultValue } : undefined);\n var channelDef = model.encoding[channel];\n return wrapCondition(model, channelDef, vgChannel || channel, function (cDef) {\n return ref.midPoint(channel, cDef, model.scaleName(channel), model.getScaleComponent(channel), null, // No need to provide stack for non-position as it does not affect mid point\n defaultRef);\n });\n}\nexports.nonPosition = nonPosition;\n/**\n * Return a mixin that include a Vega production rule for a Vega-Lite conditional channel definition.\n * or a simple mixin if channel def has no condition.\n */\nfunction wrapCondition(model, channelDef, vgChannel, refFn) {\n var _a, _b;\n var condition = channelDef && channelDef.condition;\n var valueRef = refFn(channelDef);\n if (condition) {\n var conditions = vega_util_1.isArray(condition) ? condition : [condition];\n var vgConditions = conditions.map(function (c) {\n var conditionValueRef = refFn(c);\n var test = fielddef_1.isConditionalSelection(c) ? selection_1.selectionPredicate(model, c.selection) : predicate_1.expression(model, c.test);\n return tslib_1.__assign({ test: test }, conditionValueRef);\n });\n return _a = {},\n _a[vgChannel] = vgConditions.concat((valueRef !== undefined ? [valueRef] : [])),\n _a;\n }\n else {\n return valueRef !== undefined ? (_b = {}, _b[vgChannel] = valueRef, _b) : {};\n }\n}\nexports.wrapCondition = wrapCondition;\nfunction tooltip(model) {\n var channel = 'tooltip';\n var channelDef = model.encoding[channel];\n if (vega_util_1.isArray(channelDef)) {\n var keyValues = channelDef.map(function (fieldDef) {\n var key = fieldDef.title !== undefined ? fieldDef.title : fielddef_1.vgField(fieldDef, { binSuffix: 'range' });\n var value = ref.text(fieldDef, model.config).signal;\n return \"\\\"\" + key + \"\\\": \" + value;\n });\n return { tooltip: { signal: \"{\" + keyValues.join(', ') + \"}\" } };\n }\n else {\n // if not an array, behave just like text\n return textCommon(model, channel, channelDef);\n }\n}\nexports.tooltip = tooltip;\nfunction text(model, channel) {\n if (channel === void 0) { channel = 'text'; }\n var channelDef = model.encoding[channel];\n return textCommon(model, channel, channelDef);\n}\nexports.text = text;\nfunction textCommon(model, channel, channelDef) {\n return wrapCondition(model, channelDef, channel, function (cDef) { return ref.text(cDef, model.config); });\n}\nfunction bandPosition(fieldDef, channel, model) {\n var _a, _b, _c;\n var scaleName = model.scaleName(channel);\n var sizeChannel = channel === 'x' ? 'width' : 'height';\n if (model.encoding.size || model.markDef.size !== undefined) {\n var orient = model.markDef.orient;\n if (orient) {\n var centeredBandPositionMixins = (_a = {},\n // Use xc/yc and place the mark at the middle of the band\n // This way we never have to deal with size's condition for x/y position.\n _a[channel + 'c'] = ref.fieldRef(fieldDef, scaleName, {}, { band: 0.5 }),\n _a);\n if (fielddef_1.getFieldDef(model.encoding.size)) {\n return tslib_1.__assign({}, centeredBandPositionMixins, nonPosition('size', model, { vgChannel: sizeChannel }));\n }\n else if (fielddef_1.isValueDef(model.encoding.size)) {\n return tslib_1.__assign({}, centeredBandPositionMixins, nonPosition('size', model, { vgChannel: sizeChannel }));\n }\n else if (model.markDef.size !== undefined) {\n return tslib_1.__assign({}, centeredBandPositionMixins, (_b = {}, _b[sizeChannel] = { value: model.markDef.size }, _b));\n }\n }\n else {\n log.warn(log.message.cannotApplySizeToNonOrientedMark(model.markDef.type));\n }\n }\n return _c = {},\n _c[channel] = ref.fieldRef(fieldDef, scaleName, { binSuffix: 'range' }),\n _c[sizeChannel] = ref.bandRef(scaleName),\n _c;\n}\nexports.bandPosition = bandPosition;\nfunction centeredBandPosition(channel, model, defaultPosRef, defaultSizeRef) {\n var centerChannel = channel === 'x' ? 'xc' : 'yc';\n var sizeChannel = channel === 'x' ? 'width' : 'height';\n return tslib_1.__assign({}, pointPosition(channel, model, defaultPosRef, centerChannel), nonPosition('size', model, { defaultRef: defaultSizeRef, vgChannel: sizeChannel }));\n}\nexports.centeredBandPosition = centeredBandPosition;\nfunction binnedPosition(fieldDef, channel, scaleName, spacing, reverse) {\n if (channel === 'x') {\n return {\n x2: ref.bin(fieldDef, scaleName, 'start', reverse ? 0 : spacing),\n x: ref.bin(fieldDef, scaleName, 'end', reverse ? spacing : 0)\n };\n }\n else {\n return {\n y2: ref.bin(fieldDef, scaleName, 'start', reverse ? spacing : 0),\n y: ref.bin(fieldDef, scaleName, 'end', reverse ? 0 : spacing)\n };\n }\n}\nexports.binnedPosition = binnedPosition;\n/**\n * Return mixins for point (non-band) position channels.\n */\nfunction pointPosition(channel, model, defaultRef, vgChannel) {\n // TODO: refactor how refer to scale as discussed in https://github.com/vega/vega-lite/pull/1613\n var _a;\n var encoding = model.encoding, mark = model.mark, stack = model.stack;\n var channelDef = encoding[channel];\n var scaleName = model.scaleName(channel);\n var scale = model.getScaleComponent(channel);\n var offset = ref.getOffset(channel, model.markDef);\n var valueRef = !channelDef && (encoding.latitude || encoding.longitude) ?\n // use geopoint output if there are lat/long and there is no point position overriding lat/long.\n { field: model.getName(channel) } : tslib_1.__assign({}, ref.position(channel, encoding[channel], scaleName, scale, stack, ref.getDefaultRef(defaultRef, channel, scaleName, scale, mark)), (offset ? { offset: offset } : {}));\n return _a = {},\n _a[vgChannel || channel] = valueRef,\n _a;\n}\nexports.pointPosition = pointPosition;\n/**\n * Return mixins for x2, y2.\n * If channel is not specified, return one channel based on orientation.\n */\nfunction pointPosition2(model, defaultRef, channel) {\n var _a;\n var encoding = model.encoding, mark = model.mark, stack = model.stack;\n var baseChannel = channel === 'x2' ? 'x' : 'y';\n var channelDef = encoding[baseChannel];\n var scaleName = model.scaleName(baseChannel);\n var scale = model.getScaleComponent(baseChannel);\n var offset = ref.getOffset(channel, model.markDef);\n var valueRef = !channelDef && (encoding.latitude || encoding.longitude) ?\n // use geopoint output if there are lat2/long2 and there is no point position2 overriding lat2/long2.\n { field: model.getName(channel) } : tslib_1.__assign({}, ref.position2(channel, channelDef, encoding[channel], scaleName, scale, stack, ref.getDefaultRef(defaultRef, baseChannel, scaleName, scale, mark)), (offset ? { offset: offset } : {}));\n return _a = {}, _a[channel] = valueRef, _a;\n}\nexports.pointPosition2 = pointPosition2;\n//# sourceMappingURL=mixins.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\n/**\n * A node in the dataflow tree.\n */\nvar DataFlowNode = /** @class */ (function () {\n function DataFlowNode(parent, debugName) {\n this.debugName = debugName;\n this._children = [];\n this._parent = null;\n if (parent) {\n this.parent = parent;\n }\n }\n /**\n * Clone this node with a deep copy but don't clone links to children or parents.\n */\n DataFlowNode.prototype.clone = function () {\n throw new Error('Cannot clone node');\n };\n /**\n * Set of fields that are being created by this node.\n */\n DataFlowNode.prototype.producedFields = function () {\n return {};\n };\n DataFlowNode.prototype.dependentFields = function () {\n return {};\n };\n Object.defineProperty(DataFlowNode.prototype, \"parent\", {\n get: function () {\n return this._parent;\n },\n /**\n * Set the parent of the node and also add this not to the parent's children.\n */\n set: function (parent) {\n this._parent = parent;\n parent.addChild(this);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataFlowNode.prototype, \"children\", {\n get: function () {\n return this._children;\n },\n enumerable: true,\n configurable: true\n });\n DataFlowNode.prototype.numChildren = function () {\n return this._children.length;\n };\n DataFlowNode.prototype.addChild = function (child) {\n this._children.push(child);\n };\n DataFlowNode.prototype.removeChild = function (oldChild) {\n this._children.splice(this._children.indexOf(oldChild), 1);\n };\n /**\n * Remove node from the dataflow.\n */\n DataFlowNode.prototype.remove = function () {\n for (var _i = 0, _a = this._children; _i < _a.length; _i++) {\n var child = _a[_i];\n child.parent = this._parent;\n }\n this._parent.removeChild(this);\n };\n /**\n * Insert another node as a parent of this node.\n */\n DataFlowNode.prototype.insertAsParentOf = function (other) {\n var parent = other.parent;\n parent.removeChild(this);\n this.parent = parent;\n other.parent = this;\n };\n DataFlowNode.prototype.swapWithParent = function () {\n var parent = this._parent;\n var newParent = parent.parent;\n // reconnect the children\n for (var _i = 0, _a = this._children; _i < _a.length; _i++) {\n var child = _a[_i];\n child.parent = parent;\n }\n // remove old links\n this._children = []; // equivalent to removing every child link one by one\n parent.removeChild(this);\n parent.parent.removeChild(parent);\n // swap two nodes\n this.parent = newParent;\n parent.parent = this;\n };\n return DataFlowNode;\n}());\nexports.DataFlowNode = DataFlowNode;\nvar OutputNode = /** @class */ (function (_super) {\n tslib_1.__extends(OutputNode, _super);\n /**\n * @param source The name of the source. Will change in assemble.\n * @param type The type of the output node.\n * @param refCounts A global ref counter map.\n */\n function OutputNode(parent, source, type, refCounts) {\n var _this = _super.call(this, parent, source) || this;\n _this.type = type;\n _this.refCounts = refCounts;\n _this._source = _this._name = source;\n if (_this.refCounts && !(_this._name in _this.refCounts)) {\n _this.refCounts[_this._name] = 0;\n }\n return _this;\n }\n OutputNode.prototype.clone = function () {\n var cloneObj = new this.constructor;\n cloneObj.debugName = 'clone_' + this.debugName;\n cloneObj._source = this._source;\n cloneObj._name = 'clone_' + this._name;\n cloneObj.type = this.type;\n cloneObj.refCounts = this.refCounts;\n cloneObj.refCounts[cloneObj._name] = 0;\n return cloneObj;\n };\n /**\n * Request the datasource name and increase the ref counter.\n *\n * During the parsing phase, this will return the simple name such as 'main' or 'raw'.\n * It is crucial to request the name from an output node to mark it as a required node.\n * If nobody ever requests the name, this datasource will not be instantiated in the assemble phase.\n *\n * In the assemble phase, this will return the correct name.\n */\n OutputNode.prototype.getSource = function () {\n this.refCounts[this._name]++;\n return this._source;\n };\n OutputNode.prototype.isRequired = function () {\n return !!this.refCounts[this._name];\n };\n OutputNode.prototype.setSource = function (source) {\n this._source = source;\n };\n return OutputNode;\n}(DataFlowNode));\nexports.OutputNode = OutputNode;\n//# sourceMappingURL=dataflow.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar vega_util_1 = require(\"vega-util\");\nvar util_1 = require(\"./util\");\nvar Mark;\n(function (Mark) {\n Mark.AREA = 'area';\n Mark.BAR = 'bar';\n Mark.LINE = 'line';\n Mark.POINT = 'point';\n Mark.RECT = 'rect';\n Mark.RULE = 'rule';\n Mark.TEXT = 'text';\n Mark.TICK = 'tick';\n Mark.TRAIL = 'trail';\n Mark.CIRCLE = 'circle';\n Mark.SQUARE = 'square';\n Mark.GEOSHAPE = 'geoshape';\n})(Mark = exports.Mark || (exports.Mark = {}));\nexports.AREA = Mark.AREA;\nexports.BAR = Mark.BAR;\nexports.LINE = Mark.LINE;\nexports.POINT = Mark.POINT;\nexports.TEXT = Mark.TEXT;\nexports.TICK = Mark.TICK;\nexports.TRAIL = Mark.TRAIL;\nexports.RECT = Mark.RECT;\nexports.RULE = Mark.RULE;\nexports.GEOSHAPE = Mark.GEOSHAPE;\nexports.CIRCLE = Mark.CIRCLE;\nexports.SQUARE = Mark.SQUARE;\n// Using mapped type to declare index, ensuring we always have all marks when we add more.\nvar MARK_INDEX = {\n area: 1,\n bar: 1,\n line: 1,\n point: 1,\n text: 1,\n tick: 1,\n trail: 1,\n rect: 1,\n geoshape: 1,\n rule: 1,\n circle: 1,\n square: 1\n};\nfunction isMark(m) {\n return !!MARK_INDEX[m];\n}\nexports.isMark = isMark;\nfunction isPathMark(m) {\n return util_1.contains(['line', 'area', 'trail'], m);\n}\nexports.isPathMark = isPathMark;\nexports.PRIMITIVE_MARKS = util_1.flagKeys(MARK_INDEX);\nfunction isMarkDef(mark) {\n return mark['type'];\n}\nexports.isMarkDef = isMarkDef;\nvar PRIMITIVE_MARK_INDEX = vega_util_1.toSet(exports.PRIMITIVE_MARKS);\nfunction isPrimitiveMark(mark) {\n var markType = isMarkDef(mark) ? mark.type : mark;\n return markType in PRIMITIVE_MARK_INDEX;\n}\nexports.isPrimitiveMark = isPrimitiveMark;\nexports.STROKE_CONFIG = ['stroke', 'strokeWidth',\n 'strokeDash', 'strokeDashOffset', 'strokeOpacity', 'strokeJoin', 'strokeMiterLimit'];\nexports.FILL_CONFIG = ['fill', 'fillOpacity'];\nexports.FILL_STROKE_CONFIG = [].concat(exports.STROKE_CONFIG, exports.FILL_CONFIG);\nexports.VL_ONLY_MARK_CONFIG_PROPERTIES = ['filled', 'color'];\nexports.VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX = {\n area: ['line', 'point'],\n bar: ['binSpacing', 'continuousBandSize', 'discreteBandSize'],\n line: ['point'],\n text: ['shortTimeLabels'],\n tick: ['bandSize', 'thickness']\n};\nexports.defaultMarkConfig = {\n color: '#4c78a8',\n};\nexports.defaultBarConfig = {\n binSpacing: 1,\n continuousBandSize: 5\n};\nexports.defaultTickConfig = {\n thickness: 1\n};\n//# sourceMappingURL=mark.js.map","function stringify (obj, options) {\n options = options || {}\n var indent = JSON.stringify([1], null, get(options, 'indent', 2)).slice(2, -3)\n var addMargin = get(options, 'margins', false)\n var maxLength = (indent === '' ? Infinity : get(options, 'maxLength', 80))\n\n return (function _stringify (obj, currentIndent, reserved) {\n if (obj && typeof obj.toJSON === 'function') {\n obj = obj.toJSON()\n }\n\n var string = JSON.stringify(obj)\n\n if (string === undefined) {\n return string\n }\n\n var length = maxLength - currentIndent.length - reserved\n\n if (string.length <= length) {\n var prettified = prettify(string, addMargin)\n if (prettified.length <= length) {\n return prettified\n }\n }\n\n if (typeof obj === 'object' && obj !== null) {\n var nextIndent = currentIndent + indent\n var items = []\n var delimiters\n var comma = function (array, index) {\n return (index === array.length - 1 ? 0 : 1)\n }\n\n if (Array.isArray(obj)) {\n for (var index = 0; index < obj.length; index++) {\n items.push(\n _stringify(obj[index], nextIndent, comma(obj, index)) || 'null'\n )\n }\n delimiters = '[]'\n } else {\n Object.keys(obj).forEach(function (key, index, array) {\n var keyPart = JSON.stringify(key) + ': '\n var value = _stringify(obj[key], nextIndent,\n keyPart.length + comma(array, index))\n if (value !== undefined) {\n items.push(keyPart + value)\n }\n })\n delimiters = '{}'\n }\n\n if (items.length > 0) {\n return [\n delimiters[0],\n indent + items.join(',\\n' + nextIndent),\n delimiters[1]\n ].join('\\n' + currentIndent)\n }\n }\n\n return string\n }(obj, '', 0))\n}\n\n// Note: This regex matches even invalid JSON strings, but since we’re\n// working on the output of `JSON.stringify` we know that only valid strings\n// are present (unless the user supplied a weird `options.indent` but in\n// that case we don’t care since the output would be invalid anyway).\nvar stringOrChar = /(\"(?:[^\\\\\"]|\\\\.)*\")|[:,\\][}{]/g\n\nfunction prettify (string, addMargin) {\n var m = addMargin ? ' ' : ''\n var tokens = {\n '{': '{' + m,\n '[': '[' + m,\n '}': m + '}',\n ']': m + ']',\n ',': ', ',\n ':': ': '\n }\n return string.replace(stringOrChar, function (match, string) {\n return string ? match : tokens[match]\n })\n}\n\nfunction get (options, name, defaultValue) {\n return (name in options ? options[name] : defaultValue)\n}\n\nmodule.exports = stringify\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar channel_1 = require(\"../../channel\");\nvar log = tslib_1.__importStar(require(\"../../log\"));\nvar scale_1 = require(\"../../scale\");\nvar scale_2 = require(\"../../scale\");\nvar util = tslib_1.__importStar(require(\"../../util\"));\nvar vega_schema_1 = require(\"../../vega.schema\");\nvar model_1 = require(\"../model\");\nvar split_1 = require(\"../split\");\nvar properties_1 = require(\"./properties\");\nexports.RANGE_PROPERTIES = ['range', 'rangeStep', 'scheme'];\nfunction parseScaleRange(model) {\n if (model_1.isUnitModel(model)) {\n parseUnitScaleRange(model);\n }\n else {\n properties_1.parseNonUnitScaleProperty(model, 'range');\n }\n}\nexports.parseScaleRange = parseScaleRange;\nfunction parseUnitScaleRange(model) {\n var localScaleComponents = model.component.scales;\n // use SCALE_CHANNELS instead of scales[channel] to ensure that x, y come first!\n channel_1.SCALE_CHANNELS.forEach(function (channel) {\n var localScaleCmpt = localScaleComponents[channel];\n if (!localScaleCmpt) {\n return;\n }\n var mergedScaleCmpt = model.getScaleComponent(channel);\n var specifiedScale = model.specifiedScales[channel];\n var fieldDef = model.fieldDef(channel);\n // Read if there is a specified width/height\n var sizeType = channel === 'x' ? 'width' : channel === 'y' ? 'height' : undefined;\n var sizeSpecified = sizeType ? !!model.component.layoutSize.get(sizeType) : undefined;\n var scaleType = mergedScaleCmpt.get('type');\n // if autosize is fit, size cannot be data driven\n var rangeStep = util.contains(['point', 'band'], scaleType) || !!specifiedScale.rangeStep;\n if (sizeType && model.fit && !sizeSpecified && rangeStep) {\n log.warn(log.message.CANNOT_FIX_RANGE_STEP_WITH_FIT);\n sizeSpecified = true;\n }\n var xyRangeSteps = getXYRangeStep(model);\n var rangeWithExplicit = parseRangeForChannel(channel, scaleType, fieldDef.type, specifiedScale, model.config, localScaleCmpt.get('zero'), model.mark, sizeSpecified, model.getName(sizeType), xyRangeSteps);\n localScaleCmpt.setWithExplicit('range', rangeWithExplicit);\n });\n}\nfunction getXYRangeStep(model) {\n var xyRangeSteps = [];\n var xScale = model.getScaleComponent('x');\n var xRange = xScale && xScale.get('range');\n if (xRange && vega_schema_1.isVgRangeStep(xRange) && vega_util_1.isNumber(xRange.step)) {\n xyRangeSteps.push(xRange.step);\n }\n var yScale = model.getScaleComponent('y');\n var yRange = yScale && yScale.get('range');\n if (yRange && vega_schema_1.isVgRangeStep(yRange) && vega_util_1.isNumber(yRange.step)) {\n xyRangeSteps.push(yRange.step);\n }\n return xyRangeSteps;\n}\n/**\n * Return mixins that includes one of the range properties (range, rangeStep, scheme).\n */\nfunction parseRangeForChannel(channel, scaleType, type, specifiedScale, config, zero, mark, sizeSpecified, sizeSignal, xyRangeSteps) {\n var noRangeStep = sizeSpecified || specifiedScale.rangeStep === null;\n // Check if any of the range properties is specified.\n // If so, check if it is compatible and make sure that we only output one of the properties\n for (var _i = 0, RANGE_PROPERTIES_1 = exports.RANGE_PROPERTIES; _i < RANGE_PROPERTIES_1.length; _i++) {\n var property = RANGE_PROPERTIES_1[_i];\n if (specifiedScale[property] !== undefined) {\n var supportedByScaleType = scale_1.scaleTypeSupportProperty(scaleType, property);\n var channelIncompatability = scale_1.channelScalePropertyIncompatability(channel, property);\n if (!supportedByScaleType) {\n log.warn(log.message.scalePropertyNotWorkWithScaleType(scaleType, property, channel));\n }\n else if (channelIncompatability) { // channel\n log.warn(channelIncompatability);\n }\n else {\n switch (property) {\n case 'range':\n return split_1.makeExplicit(specifiedScale[property]);\n case 'scheme':\n return split_1.makeExplicit(parseScheme(specifiedScale[property]));\n case 'rangeStep':\n var rangeStep = specifiedScale[property];\n if (rangeStep !== null) {\n if (!sizeSpecified) {\n return split_1.makeExplicit({ step: rangeStep });\n }\n else {\n // If top-level size is specified, we ignore specified rangeStep.\n log.warn(log.message.rangeStepDropped(channel));\n }\n }\n }\n }\n }\n }\n return split_1.makeImplicit(defaultRange(channel, scaleType, type, config, zero, mark, sizeSignal, xyRangeSteps, noRangeStep));\n}\nexports.parseRangeForChannel = parseRangeForChannel;\nfunction parseScheme(scheme) {\n if (scale_1.isExtendedScheme(scheme)) {\n var r = { scheme: scheme.name };\n if (scheme.count) {\n r.count = scheme.count;\n }\n if (scheme.extent) {\n r.extent = scheme.extent;\n }\n return r;\n }\n return { scheme: scheme };\n}\nfunction defaultRange(channel, scaleType, type, config, zero, mark, sizeSignal, xyRangeSteps, noRangeStep) {\n switch (channel) {\n case channel_1.X:\n case channel_1.Y:\n if (util.contains(['point', 'band'], scaleType) && !noRangeStep) {\n if (channel === channel_1.X && mark === 'text') {\n if (config.scale.textXRangeStep) {\n return { step: config.scale.textXRangeStep };\n }\n }\n else {\n if (config.scale.rangeStep) {\n return { step: config.scale.rangeStep };\n }\n }\n }\n // If range step is null, use zero to width or height.\n // Note that these range signals are temporary\n // as they can be merged and renamed.\n // (We do not have the right size signal here since parseLayoutSize() happens after parseScale().)\n // We will later replace these temporary names with\n // the final name in assembleScaleRange()\n if (channel === channel_1.Y && scale_2.hasContinuousDomain(scaleType)) {\n // For y continuous scale, we have to start from the height as the bottom part has the max value.\n return [{ signal: sizeSignal }, 0];\n }\n else {\n return [0, { signal: sizeSignal }];\n }\n case channel_1.SIZE:\n // TODO: support custom rangeMin, rangeMax\n var rangeMin = sizeRangeMin(mark, zero, config);\n var rangeMax = sizeRangeMax(mark, xyRangeSteps, config);\n return [rangeMin, rangeMax];\n case channel_1.SHAPE:\n return 'symbol';\n case channel_1.COLOR:\n case channel_1.FILL:\n case channel_1.STROKE:\n if (scaleType === 'ordinal') {\n // Only nominal data uses ordinal scale by default\n return type === 'nominal' ? 'category' : 'ordinal';\n }\n return mark === 'rect' || mark === 'geoshape' ? 'heatmap' : 'ramp';\n case channel_1.OPACITY:\n // TODO: support custom rangeMin, rangeMax\n return [config.scale.minOpacity, config.scale.maxOpacity];\n }\n /* istanbul ignore next: should never reach here */\n throw new Error(\"Scale range undefined for channel \" + channel);\n}\nexports.defaultRange = defaultRange;\nfunction sizeRangeMin(mark, zero, config) {\n if (zero) {\n return 0;\n }\n switch (mark) {\n case 'bar':\n case 'tick':\n return config.scale.minBandSize;\n case 'line':\n case 'trail':\n case 'rule':\n return config.scale.minStrokeWidth;\n case 'text':\n return config.scale.minFontSize;\n case 'point':\n case 'square':\n case 'circle':\n return config.scale.minSize;\n }\n /* istanbul ignore next: should never reach here */\n // sizeRangeMin not implemented for the mark\n throw new Error(log.message.incompatibleChannel('size', mark));\n}\nfunction sizeRangeMax(mark, xyRangeSteps, config) {\n var scaleConfig = config.scale;\n switch (mark) {\n case 'bar':\n case 'tick':\n if (config.scale.maxBandSize !== undefined) {\n return config.scale.maxBandSize;\n }\n return minXYRangeStep(xyRangeSteps, config.scale) - 1;\n case 'line':\n case 'trail':\n case 'rule':\n return config.scale.maxStrokeWidth;\n case 'text':\n return config.scale.maxFontSize;\n case 'point':\n case 'square':\n case 'circle':\n if (config.scale.maxSize) {\n return config.scale.maxSize;\n }\n // FIXME this case totally should be refactored\n var pointStep = minXYRangeStep(xyRangeSteps, scaleConfig);\n return (pointStep - 2) * (pointStep - 2);\n }\n /* istanbul ignore next: should never reach here */\n // sizeRangeMax not implemented for the mark\n throw new Error(log.message.incompatibleChannel('size', mark));\n}\n/**\n * @returns {number} Range step of x or y or minimum between the two if both are ordinal scale.\n */\nfunction minXYRangeStep(xyRangeSteps, scaleConfig) {\n if (xyRangeSteps.length > 0) {\n return Math.min.apply(null, xyRangeSteps);\n }\n if (scaleConfig.rangeStep) {\n return scaleConfig.rangeStep;\n }\n return 21; // FIXME: re-evaluate the default value here.\n}\n//# sourceMappingURL=range.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar channel_1 = require(\"./channel\");\nvar compositeMark = tslib_1.__importStar(require(\"./compositemark\"));\nvar vlEncoding = tslib_1.__importStar(require(\"./encoding\"));\nvar encoding_1 = require(\"./encoding\");\nvar log = tslib_1.__importStar(require(\"./log\"));\nvar mark_1 = require(\"./mark\");\nvar stack_1 = require(\"./stack\");\nvar util_1 = require(\"./util\");\n/* Custom type guards */\nfunction isFacetSpec(spec) {\n return spec['facet'] !== undefined;\n}\nexports.isFacetSpec = isFacetSpec;\nfunction isUnitSpec(spec) {\n return !!spec['mark'];\n}\nexports.isUnitSpec = isUnitSpec;\nfunction isLayerSpec(spec) {\n return spec['layer'] !== undefined;\n}\nexports.isLayerSpec = isLayerSpec;\nfunction isRepeatSpec(spec) {\n return spec['repeat'] !== undefined;\n}\nexports.isRepeatSpec = isRepeatSpec;\nfunction isConcatSpec(spec) {\n return isVConcatSpec(spec) || isHConcatSpec(spec);\n}\nexports.isConcatSpec = isConcatSpec;\nfunction isVConcatSpec(spec) {\n return spec['vconcat'] !== undefined;\n}\nexports.isVConcatSpec = isVConcatSpec;\nfunction isHConcatSpec(spec) {\n return spec['hconcat'] !== undefined;\n}\nexports.isHConcatSpec = isHConcatSpec;\n/**\n * Decompose extended unit specs into composition of pure unit specs.\n */\n// TODO: consider moving this to another file. Maybe vl.spec.normalize or vl.normalize\nfunction normalize(spec, config) {\n if (isFacetSpec(spec)) {\n return normalizeFacet(spec, config);\n }\n if (isLayerSpec(spec)) {\n return normalizeLayer(spec, config);\n }\n if (isRepeatSpec(spec)) {\n return normalizeRepeat(spec, config);\n }\n if (isVConcatSpec(spec)) {\n return normalizeVConcat(spec, config);\n }\n if (isHConcatSpec(spec)) {\n return normalizeHConcat(spec, config);\n }\n if (isUnitSpec(spec)) {\n var hasRow = encoding_1.channelHasField(spec.encoding, channel_1.ROW);\n var hasColumn = encoding_1.channelHasField(spec.encoding, channel_1.COLUMN);\n if (hasRow || hasColumn) {\n return normalizeFacetedUnit(spec, config);\n }\n return normalizeNonFacetUnit(spec, config);\n }\n throw new Error(log.message.INVALID_SPEC);\n}\nexports.normalize = normalize;\nfunction normalizeFacet(spec, config) {\n var subspec = spec.spec, rest = tslib_1.__rest(spec, [\"spec\"]);\n return tslib_1.__assign({}, rest, { \n // TODO: remove \"any\" once we support all facet listed in https://github.com/vega/vega-lite/issues/2760\n spec: normalize(subspec, config) });\n}\nfunction mergeEncoding(opt) {\n var parentEncoding = opt.parentEncoding, encoding = opt.encoding;\n if (parentEncoding && encoding) {\n var overriden = util_1.keys(parentEncoding).reduce(function (o, key) {\n if (encoding[key]) {\n o.push(key);\n }\n return o;\n }, []);\n if (overriden.length > 0) {\n log.warn(log.message.encodingOverridden(overriden));\n }\n }\n var merged = tslib_1.__assign({}, (parentEncoding || {}), (encoding || {}));\n return util_1.keys(merged).length > 0 ? merged : undefined;\n}\nfunction mergeProjection(opt) {\n var parentProjection = opt.parentProjection, projection = opt.projection;\n if (parentProjection && projection) {\n log.warn(log.message.projectionOverridden({ parentProjection: parentProjection, projection: projection }));\n }\n return projection || parentProjection;\n}\nfunction normalizeLayer(spec, config, parentEncoding, parentProjection) {\n var layer = spec.layer, encoding = spec.encoding, projection = spec.projection, rest = tslib_1.__rest(spec, [\"layer\", \"encoding\", \"projection\"]);\n var mergedEncoding = mergeEncoding({ parentEncoding: parentEncoding, encoding: encoding });\n var mergedProjection = mergeProjection({ parentProjection: parentProjection, projection: projection });\n return tslib_1.__assign({}, rest, { layer: layer.map(function (subspec) {\n if (isLayerSpec(subspec)) {\n return normalizeLayer(subspec, config, mergedEncoding, mergedProjection);\n }\n return normalizeNonFacetUnit(subspec, config, mergedEncoding, mergedProjection);\n }) });\n}\nfunction normalizeRepeat(spec, config) {\n var subspec = spec.spec, rest = tslib_1.__rest(spec, [\"spec\"]);\n return tslib_1.__assign({}, rest, { spec: normalize(subspec, config) });\n}\nfunction normalizeVConcat(spec, config) {\n var vconcat = spec.vconcat, rest = tslib_1.__rest(spec, [\"vconcat\"]);\n return tslib_1.__assign({}, rest, { vconcat: vconcat.map(function (subspec) { return normalize(subspec, config); }) });\n}\nfunction normalizeHConcat(spec, config) {\n var hconcat = spec.hconcat, rest = tslib_1.__rest(spec, [\"hconcat\"]);\n return tslib_1.__assign({}, rest, { hconcat: hconcat.map(function (subspec) { return normalize(subspec, config); }) });\n}\nfunction normalizeFacetedUnit(spec, config) {\n // New encoding in the inside spec should not contain row / column\n // as row/column should be moved to facet\n var _a = spec.encoding, row = _a.row, column = _a.column, encoding = tslib_1.__rest(_a, [\"row\", \"column\"]);\n // Mark and encoding should be moved into the inner spec\n var mark = spec.mark, width = spec.width, projection = spec.projection, height = spec.height, selection = spec.selection, _ = spec.encoding, outerSpec = tslib_1.__rest(spec, [\"mark\", \"width\", \"projection\", \"height\", \"selection\", \"encoding\"]);\n return tslib_1.__assign({}, outerSpec, { facet: tslib_1.__assign({}, (row ? { row: row } : {}), (column ? { column: column } : {})), spec: normalizeNonFacetUnit(tslib_1.__assign({}, (projection ? { projection: projection } : {}), { mark: mark }, (width ? { width: width } : {}), (height ? { height: height } : {}), { encoding: encoding }, (selection ? { selection: selection } : {})), config) });\n}\nfunction isNonFacetUnitSpecWithPrimitiveMark(spec) {\n return mark_1.isPrimitiveMark(spec.mark);\n}\nfunction getPointOverlay(markDef, markConfig, encoding) {\n if (markDef.point === 'transparent') {\n return { opacity: 0 };\n }\n else if (markDef.point) { // truthy : true or object\n return vega_util_1.isObject(markDef.point) ? markDef.point : {};\n }\n else if (markDef.point !== undefined) { // false or null\n return null;\n }\n else { // undefined (not disabled)\n if (markConfig.point || encoding.shape) {\n // enable point overlay if config[mark].point is truthy or if encoding.shape is provided\n return vega_util_1.isObject(markConfig.point) ? markConfig.point : {};\n }\n // markDef.point is defined as falsy\n return null;\n }\n}\nfunction getLineOverlay(markDef, markConfig) {\n if (markDef.line) { // true or object\n return markDef.line === true ? {} : markDef.line;\n }\n else if (markDef.line !== undefined) { // false or null\n return null;\n }\n else { // undefined (not disabled)\n if (markConfig.line) {\n // enable line overlay if config[mark].line is truthy\n return markConfig.line === true ? {} : markConfig.line;\n }\n // markDef.point is defined as falsy\n return null;\n }\n}\nfunction normalizeNonFacetUnit(spec, config, parentEncoding, parentProjection) {\n var encoding = spec.encoding, projection = spec.projection;\n var mark = mark_1.isMarkDef(spec.mark) ? spec.mark.type : spec.mark;\n // merge parent encoding / projection first\n if (parentEncoding || parentProjection) {\n var mergedProjection = mergeProjection({ parentProjection: parentProjection, projection: projection });\n var mergedEncoding = mergeEncoding({ parentEncoding: parentEncoding, encoding: encoding });\n return normalizeNonFacetUnit(tslib_1.__assign({}, spec, (mergedProjection ? { projection: mergedProjection } : {}), (mergedEncoding ? { encoding: mergedEncoding } : {})), config);\n }\n if (isNonFacetUnitSpecWithPrimitiveMark(spec)) {\n // TODO: thoroughly test\n if (encoding_1.isRanged(encoding)) {\n return normalizeRangedUnit(spec);\n }\n if (mark === 'line' && (encoding.x2 || encoding.y2)) {\n log.warn(log.message.lineWithRange(!!encoding.x2, !!encoding.y2));\n return normalizeNonFacetUnit(tslib_1.__assign({ mark: 'rule' }, spec), config, parentEncoding, parentProjection);\n }\n if (mark_1.isPathMark(mark)) {\n return normalizePathOverlay(spec, config);\n }\n return spec; // Nothing to normalize\n }\n else {\n return compositeMark.normalize(spec, config);\n }\n}\nfunction normalizeRangedUnit(spec) {\n var hasX = encoding_1.channelHasField(spec.encoding, channel_1.X);\n var hasY = encoding_1.channelHasField(spec.encoding, channel_1.Y);\n var hasX2 = encoding_1.channelHasField(spec.encoding, channel_1.X2);\n var hasY2 = encoding_1.channelHasField(spec.encoding, channel_1.Y2);\n if ((hasX2 && !hasX) || (hasY2 && !hasY)) {\n var normalizedSpec = util_1.duplicate(spec);\n if (hasX2 && !hasX) {\n normalizedSpec.encoding.x = normalizedSpec.encoding.x2;\n delete normalizedSpec.encoding.x2;\n }\n if (hasY2 && !hasY) {\n normalizedSpec.encoding.y = normalizedSpec.encoding.y2;\n delete normalizedSpec.encoding.y2;\n }\n return normalizedSpec;\n }\n return spec;\n}\nfunction dropLineAndPoint(markDef) {\n var _point = markDef.point, _line = markDef.line, mark = tslib_1.__rest(markDef, [\"point\", \"line\"]);\n return util_1.keys(mark).length > 1 ? mark : mark.type;\n}\nfunction normalizePathOverlay(spec, config) {\n if (config === void 0) { config = {}; }\n var _a;\n // _ is used to denote a dropped property of the unit spec\n // which should not be carried over to the layer spec\n var selection = spec.selection, projection = spec.projection, encoding = spec.encoding, mark = spec.mark, outerSpec = tslib_1.__rest(spec, [\"selection\", \"projection\", \"encoding\", \"mark\"]);\n var markDef = mark_1.isMarkDef(mark) ? mark : { type: mark };\n var pointOverlay = getPointOverlay(markDef, config[markDef.type], encoding);\n var lineOverlay = markDef.type === 'area' && getLineOverlay(markDef, config[markDef.type]);\n if (!pointOverlay && !lineOverlay) {\n return tslib_1.__assign({}, spec, { \n // Do not include point / line overlay in the normalize spec\n mark: dropLineAndPoint(markDef) });\n }\n var layer = [tslib_1.__assign({}, (selection ? { selection: selection } : {}), { \n // Do not include point / line overlay in the normalize spec\n mark: dropLineAndPoint(tslib_1.__assign({}, markDef, (markDef.type === 'area' ? { opacity: 0.7 } : {}))), \n // drop shape from encoding as this might be used to trigger point overlay\n encoding: util_1.omit(encoding, ['shape']) })];\n // FIXME: determine rules for applying selections.\n // Need to copy stack config to overlayed layer\n var stackProps = stack_1.stack(markDef, encoding, config ? config.stack : undefined);\n var overlayEncoding = encoding;\n if (stackProps) {\n var stackFieldChannel = stackProps.fieldChannel, offset = stackProps.offset;\n overlayEncoding = tslib_1.__assign({}, encoding, (_a = {}, _a[stackFieldChannel] = tslib_1.__assign({}, encoding[stackFieldChannel], (offset ? { stack: offset } : {})), _a));\n }\n if (lineOverlay) {\n layer.push(tslib_1.__assign({}, (projection ? { projection: projection } : {}), { mark: tslib_1.__assign({ type: 'line' }, util_1.pick(markDef, ['clip', 'interpolate']), lineOverlay), encoding: overlayEncoding }));\n }\n if (pointOverlay) {\n layer.push(tslib_1.__assign({}, (projection ? { projection: projection } : {}), { mark: tslib_1.__assign({ type: 'point', opacity: 1, filled: true }, util_1.pick(markDef, ['clip']), pointOverlay), encoding: overlayEncoding }));\n }\n return tslib_1.__assign({}, outerSpec, { layer: layer });\n}\n// TODO: add vl.spec.validate & move stuff from vl.validate to here\n/* Accumulate non-duplicate fieldDefs in a dictionary */\nfunction accumulate(dict, defs) {\n defs.forEach(function (fieldDef) {\n // Consider only pure fieldDef properties (ignoring scale, axis, legend)\n var pureFieldDef = ['field', 'type', 'value', 'timeUnit', 'bin', 'aggregate'].reduce(function (f, key) {\n if (fieldDef[key] !== undefined) {\n f[key] = fieldDef[key];\n }\n return f;\n }, {});\n var key = util_1.hash(pureFieldDef);\n dict[key] = dict[key] || fieldDef;\n });\n return dict;\n}\n/* Recursively get fieldDefs from a spec, returns a dictionary of fieldDefs */\nfunction fieldDefIndex(spec, dict) {\n if (dict === void 0) { dict = {}; }\n // FIXME(https://github.com/vega/vega-lite/issues/2207): Support fieldDefIndex for repeat\n if (isLayerSpec(spec)) {\n spec.layer.forEach(function (layer) {\n if (isUnitSpec(layer)) {\n accumulate(dict, vlEncoding.fieldDefs(layer.encoding));\n }\n else {\n fieldDefIndex(layer, dict);\n }\n });\n }\n else if (isFacetSpec(spec)) {\n accumulate(dict, vlEncoding.fieldDefs(spec.facet));\n fieldDefIndex(spec.spec, dict);\n }\n else if (isRepeatSpec(spec)) {\n fieldDefIndex(spec.spec, dict);\n }\n else if (isConcatSpec(spec)) {\n var childSpec = isVConcatSpec(spec) ? spec.vconcat : spec.hconcat;\n childSpec.forEach(function (child) { return fieldDefIndex(child, dict); });\n }\n else { // Unit Spec\n accumulate(dict, vlEncoding.fieldDefs(spec.encoding));\n }\n return dict;\n}\n/* Returns all non-duplicate fieldDefs in a spec in a flat array */\nfunction fieldDefs(spec) {\n return util_1.vals(fieldDefIndex(spec));\n}\nexports.fieldDefs = fieldDefs;\nfunction isStacked(spec, config) {\n config = config || spec.config;\n if (mark_1.isPrimitiveMark(spec.mark)) {\n return stack_1.stack(spec.mark, spec.encoding, config ? config.stack : undefined) !== null;\n }\n return false;\n}\nexports.isStacked = isStacked;\n//# sourceMappingURL=spec.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nfunction extractTitleConfig(titleConfig) {\n var \n // These are non-mark title config that need to be hardcoded\n anchor = titleConfig.anchor, offset = titleConfig.offset, orient = titleConfig.orient, \n // color needs to be redirect to fill\n color = titleConfig.color, \n // The rest are mark config.\n titleMarkConfig = tslib_1.__rest(titleConfig, [\"anchor\", \"offset\", \"orient\", \"color\"]);\n var mark = tslib_1.__assign({}, titleMarkConfig, color ? { fill: color } : {});\n var nonMark = tslib_1.__assign({}, anchor ? { anchor: anchor } : {}, offset ? { offset: offset } : {}, orient ? { orient: orient } : {});\n return { mark: mark, nonMark: nonMark };\n}\nexports.extractTitleConfig = extractTitleConfig;\n//# sourceMappingURL=title.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar predicate_1 = require(\"../../predicate\");\nvar sort_1 = require(\"../../sort\");\nvar util_1 = require(\"../../util\");\nvar dataflow_1 = require(\"./dataflow\");\n/**\n * We don't know what a calculate node depends on so we should never move it beyond anything that produces fields.\n */\nvar CalculateNode = /** @class */ (function (_super) {\n tslib_1.__extends(CalculateNode, _super);\n function CalculateNode(parent, transform) {\n var _this = _super.call(this, parent) || this;\n _this.transform = transform;\n return _this;\n }\n CalculateNode.prototype.clone = function () {\n return new CalculateNode(null, util_1.duplicate(this.transform));\n };\n CalculateNode.parseAllForSortIndex = function (parent, model) {\n // get all the encoding with sort fields from model\n model.forEachFieldDef(function (fieldDef, channel) {\n if (!fielddef_1.isScaleFieldDef(fieldDef)) {\n return;\n }\n if (sort_1.isSortArray(fieldDef.sort)) {\n var field_1 = fieldDef.field, timeUnit_1 = fieldDef.timeUnit;\n var sort = fieldDef.sort;\n // generate `datum[\"a\"] === val0 ? 0 : datum[\"a\"] === val1 ? 1 : ... : n` via FieldEqualPredicate\n var calculate = sort.map(function (sortValue, i) {\n return predicate_1.fieldFilterExpression({ field: field_1, timeUnit: timeUnit_1, equal: sortValue }) + \" ? \" + i + \" : \";\n }).join('') + sort.length;\n parent = new CalculateNode(parent, {\n calculate: calculate,\n as: sortArrayIndexField(fieldDef, channel)\n });\n }\n });\n return parent;\n };\n CalculateNode.prototype.producedFields = function () {\n var out = {};\n out[this.transform.as] = true;\n return out;\n };\n CalculateNode.prototype.assemble = function () {\n return {\n type: 'formula',\n expr: this.transform.calculate,\n as: this.transform.as\n };\n };\n return CalculateNode;\n}(dataflow_1.DataFlowNode));\nexports.CalculateNode = CalculateNode;\nfunction sortArrayIndexField(fieldDef, channel, expr) {\n return fielddef_1.vgField(fieldDef, { prefix: channel, suffix: 'sort_index', expr: expr });\n}\nexports.sortArrayIndexField = sortArrayIndexField;\n//# sourceMappingURL=calculate.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar aggregate = tslib_1.__importStar(require(\"./aggregate\"));\nexports.aggregate = aggregate;\nvar axis = tslib_1.__importStar(require(\"./axis\"));\nexports.axis = axis;\nvar bin = tslib_1.__importStar(require(\"./bin\"));\nexports.bin = bin;\nvar channel = tslib_1.__importStar(require(\"./channel\"));\nexports.channel = channel;\nvar compositeMark = tslib_1.__importStar(require(\"./compositemark\"));\nexports.compositeMark = compositeMark;\nvar compile_1 = require(\"./compile/compile\");\nexports.compile = compile_1.compile;\nvar config = tslib_1.__importStar(require(\"./config\"));\nexports.config = config;\nvar data = tslib_1.__importStar(require(\"./data\"));\nexports.data = data;\nvar datetime = tslib_1.__importStar(require(\"./datetime\"));\nexports.datetime = datetime;\nvar encoding = tslib_1.__importStar(require(\"./encoding\"));\nexports.encoding = encoding;\nvar facet = tslib_1.__importStar(require(\"./facet\"));\nexports.facet = facet;\nvar fieldDef = tslib_1.__importStar(require(\"./fielddef\"));\nexports.fieldDef = fieldDef;\nvar header = tslib_1.__importStar(require(\"./header\"));\nexports.header = header;\nvar legend = tslib_1.__importStar(require(\"./legend\"));\nexports.legend = legend;\nvar mark = tslib_1.__importStar(require(\"./mark\"));\nexports.mark = mark;\nvar scale = tslib_1.__importStar(require(\"./scale\"));\nexports.scale = scale;\nvar sort = tslib_1.__importStar(require(\"./sort\"));\nexports.sort = sort;\nvar spec = tslib_1.__importStar(require(\"./spec\"));\nexports.spec = spec;\nvar stack = tslib_1.__importStar(require(\"./stack\"));\nexports.stack = stack;\nvar timeUnit = tslib_1.__importStar(require(\"./timeunit\"));\nexports.timeUnit = timeUnit;\nvar transform = tslib_1.__importStar(require(\"./transform\"));\nexports.transform = transform;\nvar type = tslib_1.__importStar(require(\"./type\"));\nexports.type = type;\nvar util = tslib_1.__importStar(require(\"./util\"));\nexports.util = util;\nvar validate = tslib_1.__importStar(require(\"./validate\"));\nexports.validate = validate;\nvar package_json_1 = tslib_1.__importDefault(require(\"../package.json\"));\nvar version = package_json_1.default.version;\nexports.version = version;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar channel_1 = require(\"../../channel\");\nvar log = tslib_1.__importStar(require(\"../../log\"));\nvar scale_1 = require(\"../../scale\");\nvar util = tslib_1.__importStar(require(\"../../util\"));\n/**\n * Determine if there is a specified scale type and if it is appropriate,\n * or determine default type if type is unspecified or inappropriate.\n */\n// NOTE: CompassQL uses this method.\nfunction scaleType(specifiedType, channel, fieldDef, mark, scaleConfig) {\n var defaultScaleType = defaultType(channel, fieldDef, mark, scaleConfig);\n if (!channel_1.isScaleChannel(channel)) {\n // There is no scale for these channels\n return null;\n }\n if (specifiedType !== undefined) {\n // Check if explicitly specified scale type is supported by the channel\n if (!scale_1.channelSupportScaleType(channel, specifiedType)) {\n log.warn(log.message.scaleTypeNotWorkWithChannel(channel, specifiedType, defaultScaleType));\n return defaultScaleType;\n }\n // Check if explicitly specified scale type is supported by the data type\n if (!scale_1.scaleTypeSupportDataType(specifiedType, fieldDef.type, fieldDef.bin)) {\n log.warn(log.message.scaleTypeNotWorkWithFieldDef(specifiedType, defaultScaleType));\n return defaultScaleType;\n }\n return specifiedType;\n }\n return defaultScaleType;\n}\nexports.scaleType = scaleType;\n/**\n * Determine appropriate default scale type.\n */\n// NOTE: Voyager uses this method.\nfunction defaultType(channel, fieldDef, mark, scaleConfig) {\n switch (fieldDef.type) {\n case 'nominal':\n case 'ordinal':\n if (channel_1.isColorChannel(channel) || channel_1.rangeType(channel) === 'discrete') {\n if (channel === 'shape' && fieldDef.type === 'ordinal') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'ordinal'));\n }\n return 'ordinal';\n }\n if (util.contains(['x', 'y'], channel)) {\n if (util.contains(['rect', 'bar', 'rule'], mark)) {\n // The rect/bar mark should fit into a band.\n // For rule, using band scale to make rule align with axis ticks better https://github.com/vega/vega-lite/issues/3429\n return 'band';\n }\n if (mark === 'bar') {\n return 'band';\n }\n }\n // Otherwise, use ordinal point scale so we can easily get center positions of the marks.\n return 'point';\n case 'temporal':\n if (channel_1.isColorChannel(channel)) {\n return 'sequential';\n }\n else if (channel_1.rangeType(channel) === 'discrete') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'temporal'));\n // TODO: consider using quantize (equivalent to binning) once we have it\n return 'ordinal';\n }\n return 'time';\n case 'quantitative':\n if (channel_1.isColorChannel(channel)) {\n if (fieldDef.bin) {\n return 'bin-ordinal';\n }\n // Use `sequential` as the default color scale for continuous data\n // since it supports both array range and scheme range.\n return 'sequential';\n }\n else if (channel_1.rangeType(channel) === 'discrete') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'quantitative'));\n // TODO: consider using quantize (equivalent to binning) once we have it\n return 'ordinal';\n }\n // x and y use a linear scale because selections don't work with bin scales.\n // Binned scales apply discretization but pan/zoom apply transformations to a [min, max] extent domain.\n if (fieldDef.bin && channel !== 'x' && channel !== 'y') {\n return 'bin-linear';\n }\n return 'linear';\n case 'latitude':\n case 'longitude':\n case 'geojson':\n return undefined;\n }\n /* istanbul ignore next: should never reach this */\n throw new Error(log.message.invalidFieldType(fieldDef.type));\n}\n//# sourceMappingURL=type.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar channel_1 = require(\"../../channel\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar mark_1 = require(\"../../mark\");\nvar scale_1 = require(\"../../scale\");\nvar util_1 = require(\"../../util\");\nvar dataflow_1 = require(\"./dataflow\");\nvar FilterInvalidNode = /** @class */ (function (_super) {\n tslib_1.__extends(FilterInvalidNode, _super);\n function FilterInvalidNode(parent, fieldDefs) {\n var _this = _super.call(this, parent) || this;\n _this.fieldDefs = fieldDefs;\n return _this;\n }\n FilterInvalidNode.prototype.clone = function () {\n return new FilterInvalidNode(null, tslib_1.__assign({}, this.fieldDefs));\n };\n FilterInvalidNode.make = function (parent, model) {\n var config = model.config, mark = model.mark;\n if (config.invalidValues !== 'filter') {\n return null;\n }\n var filter = model.reduceFieldDef(function (aggregator, fieldDef, channel) {\n var scaleComponent = channel_1.isScaleChannel(channel) && model.getScaleComponent(channel);\n if (scaleComponent) {\n var scaleType = scaleComponent.get('type');\n // While discrete domain scales can handle invalid values, continuous scales can't.\n // Thus, for non-path marks, we have to filter null for scales with continuous domains.\n // (For path marks, we will use \"defined\" property and skip these values instead.)\n if (scale_1.hasContinuousDomain(scaleType) && !fieldDef.aggregate && !mark_1.isPathMark(mark)) {\n aggregator[fieldDef.field] = fieldDef;\n }\n }\n return aggregator;\n }, {});\n if (!util_1.keys(filter).length) {\n return null;\n }\n return new FilterInvalidNode(parent, filter);\n };\n Object.defineProperty(FilterInvalidNode.prototype, \"filter\", {\n get: function () {\n return this.fieldDefs;\n },\n enumerable: true,\n configurable: true\n });\n // create the VgTransforms for each of the filtered fields\n FilterInvalidNode.prototype.assemble = function () {\n var _this = this;\n var filters = util_1.keys(this.filter).reduce(function (vegaFilters, field) {\n var fieldDef = _this.fieldDefs[field];\n var ref = fielddef_1.vgField(fieldDef, { expr: 'datum' });\n if (fieldDef !== null) {\n vegaFilters.push(ref + \" !== null\");\n vegaFilters.push(\"!isNaN(\" + ref + \")\");\n }\n return vegaFilters;\n }, []);\n return filters.length > 0 ?\n {\n type: 'filter',\n expr: filters.join(' && ')\n } : null;\n };\n return FilterInvalidNode;\n}(dataflow_1.DataFlowNode));\nexports.FilterInvalidNode = FilterInvalidNode;\n//# sourceMappingURL=filterinvalid.js.map","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../../mode/sql/sql\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../../mode/sql/sql\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var tables;\n var defaultTable;\n var keywords;\n var identifierQuote;\n var CONS = {\n QUERY_DIV: \";\",\n ALIAS_KEYWORD: \"AS\"\n };\n var Pos = CodeMirror.Pos, cmpPos = CodeMirror.cmpPos;\n\n function isArray(val) { return Object.prototype.toString.call(val) == \"[object Array]\" }\n\n function getKeywords(editor) {\n var mode = editor.doc.modeOption;\n if (mode === \"sql\") mode = \"text/x-sql\";\n return CodeMirror.resolveMode(mode).keywords;\n }\n\n function getIdentifierQuote(editor) {\n var mode = editor.doc.modeOption;\n if (mode === \"sql\") mode = \"text/x-sql\";\n return CodeMirror.resolveMode(mode).identifierQuote || \"`\";\n }\n\n function getText(item) {\n return typeof item == \"string\" ? item : item.text;\n }\n\n function wrapTable(name, value) {\n if (isArray(value)) value = {columns: value}\n if (!value.text) value.text = name\n return value\n }\n\n function parseTables(input) {\n var result = {}\n if (isArray(input)) {\n for (var i = input.length - 1; i >= 0; i--) {\n var item = input[i]\n result[getText(item).toUpperCase()] = wrapTable(getText(item), item)\n }\n } else if (input) {\n for (var name in input)\n result[name.toUpperCase()] = wrapTable(name, input[name])\n }\n return result\n }\n\n function getTable(name) {\n return tables[name.toUpperCase()]\n }\n\n function shallowClone(object) {\n var result = {};\n for (var key in object) if (object.hasOwnProperty(key))\n result[key] = object[key];\n return result;\n }\n\n function match(string, word) {\n var len = string.length;\n var sub = getText(word).substr(0, len);\n return string.toUpperCase() === sub.toUpperCase();\n }\n\n function addMatches(result, search, wordlist, formatter) {\n if (isArray(wordlist)) {\n for (var i = 0; i < wordlist.length; i++)\n if (match(search, wordlist[i])) result.push(formatter(wordlist[i]))\n } else {\n for (var word in wordlist) if (wordlist.hasOwnProperty(word)) {\n var val = wordlist[word]\n if (!val || val === true)\n val = word\n else\n val = val.displayText ? {text: val.text, displayText: val.displayText} : val.text\n if (match(search, val)) result.push(formatter(val))\n }\n }\n }\n\n function cleanName(name) {\n // Get rid name from identifierQuote and preceding dot(.)\n if (name.charAt(0) == \".\") {\n name = name.substr(1);\n }\n // replace duplicated identifierQuotes with single identifierQuotes\n // and remove single identifierQuotes\n var nameParts = name.split(identifierQuote+identifierQuote);\n for (var i = 0; i < nameParts.length; i++)\n nameParts[i] = nameParts[i].replace(new RegExp(identifierQuote,\"g\"), \"\");\n return nameParts.join(identifierQuote);\n }\n\n function insertIdentifierQuotes(name) {\n var nameParts = getText(name).split(\".\");\n for (var i = 0; i < nameParts.length; i++)\n nameParts[i] = identifierQuote +\n // duplicate identifierQuotes\n nameParts[i].replace(new RegExp(identifierQuote,\"g\"), identifierQuote+identifierQuote) +\n identifierQuote;\n var escaped = nameParts.join(\".\");\n if (typeof name == \"string\") return escaped;\n name = shallowClone(name);\n name.text = escaped;\n return name;\n }\n\n function nameCompletion(cur, token, result, editor) {\n // Try to complete table, column names and return start position of completion\n var useIdentifierQuotes = false;\n var nameParts = [];\n var start = token.start;\n var cont = true;\n while (cont) {\n cont = (token.string.charAt(0) == \".\");\n useIdentifierQuotes = useIdentifierQuotes || (token.string.charAt(0) == identifierQuote);\n\n start = token.start;\n nameParts.unshift(cleanName(token.string));\n\n token = editor.getTokenAt(Pos(cur.line, token.start));\n if (token.string == \".\") {\n cont = true;\n token = editor.getTokenAt(Pos(cur.line, token.start));\n }\n }\n\n // Try to complete table names\n var string = nameParts.join(\".\");\n addMatches(result, string, tables, function(w) {\n return useIdentifierQuotes ? insertIdentifierQuotes(w) : w;\n });\n\n // Try to complete columns from defaultTable\n addMatches(result, string, defaultTable, function(w) {\n return useIdentifierQuotes ? insertIdentifierQuotes(w) : w;\n });\n\n // Try to complete columns\n string = nameParts.pop();\n var table = nameParts.join(\".\");\n\n var alias = false;\n var aliasTable = table;\n // Check if table is available. If not, find table by Alias\n if (!getTable(table)) {\n var oldTable = table;\n table = findTableByAlias(table, editor);\n if (table !== oldTable) alias = true;\n }\n\n var columns = getTable(table);\n if (columns && columns.columns)\n columns = columns.columns;\n\n if (columns) {\n addMatches(result, string, columns, function(w) {\n var tableInsert = table;\n if (alias == true) tableInsert = aliasTable;\n if (typeof w == \"string\") {\n w = tableInsert + \".\" + w;\n } else {\n w = shallowClone(w);\n w.text = tableInsert + \".\" + w.text;\n }\n return useIdentifierQuotes ? insertIdentifierQuotes(w) : w;\n });\n }\n\n return start;\n }\n\n function eachWord(lineText, f) {\n var words = lineText.split(/\\s+/)\n for (var i = 0; i < words.length; i++)\n if (words[i]) f(words[i].replace(/[`,;]/g, ''))\n }\n\n function findTableByAlias(alias, editor) {\n var doc = editor.doc;\n var fullQuery = doc.getValue();\n var aliasUpperCase = alias.toUpperCase();\n var previousWord = \"\";\n var table = \"\";\n var separator = [];\n var validRange = {\n start: Pos(0, 0),\n end: Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).length)\n };\n\n //add separator\n var indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV);\n while(indexOfSeparator != -1) {\n separator.push(doc.posFromIndex(indexOfSeparator));\n indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV, indexOfSeparator+1);\n }\n separator.unshift(Pos(0, 0));\n separator.push(Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).text.length));\n\n //find valid range\n var prevItem = null;\n var current = editor.getCursor()\n for (var i = 0; i < separator.length; i++) {\n if ((prevItem == null || cmpPos(current, prevItem) > 0) && cmpPos(current, separator[i]) <= 0) {\n validRange = {start: prevItem, end: separator[i]};\n break;\n }\n prevItem = separator[i];\n }\n\n if (validRange.start) {\n var query = doc.getRange(validRange.start, validRange.end, false);\n\n for (var i = 0; i < query.length; i++) {\n var lineText = query[i];\n eachWord(lineText, function(word) {\n var wordUpperCase = word.toUpperCase();\n if (wordUpperCase === aliasUpperCase && getTable(previousWord))\n table = previousWord;\n if (wordUpperCase !== CONS.ALIAS_KEYWORD)\n previousWord = word;\n });\n if (table) break;\n }\n }\n return table;\n }\n\n CodeMirror.registerHelper(\"hint\", \"sql\", function(editor, options) {\n tables = parseTables(options && options.tables)\n var defaultTableName = options && options.defaultTable;\n var disableKeywords = options && options.disableKeywords;\n defaultTable = defaultTableName && getTable(defaultTableName);\n keywords = getKeywords(editor);\n identifierQuote = getIdentifierQuote(editor);\n\n if (defaultTableName && !defaultTable)\n defaultTable = findTableByAlias(defaultTableName, editor);\n\n defaultTable = defaultTable || [];\n\n if (defaultTable.columns)\n defaultTable = defaultTable.columns;\n\n var cur = editor.getCursor();\n var result = [];\n var token = editor.getTokenAt(cur), start, end, search;\n if (token.end > cur.ch) {\n token.end = cur.ch;\n token.string = token.string.slice(0, cur.ch - token.start);\n }\n\n if (token.string.match(/^[.`\"'\\w@][\\w$#]*$/g)) {\n search = token.string;\n start = token.start;\n end = token.end;\n } else {\n start = end = cur.ch;\n search = \"\";\n }\n if (search.charAt(0) == \".\" || search.charAt(0) == identifierQuote) {\n start = nameCompletion(cur, token, result, editor);\n } else {\n var objectOrClass = function(w, className) {\n if (typeof w === \"object\") {\n w.className = className;\n } else {\n w = { text: w, className: className };\n }\n return w;\n };\n addMatches(result, search, defaultTable, function(w) {\n return objectOrClass(w, \"CodeMirror-hint-table CodeMirror-hint-default-table\");\n });\n addMatches(\n result,\n search,\n tables, function(w) {\n return objectOrClass(w, \"CodeMirror-hint-table\");\n }\n );\n if (!disableKeywords)\n addMatches(result, search, keywords, function(w) {\n return objectOrClass(w.toUpperCase(), \"CodeMirror-hint-keyword\");\n });\n }\n\n return {list: result, from: Pos(cur.line, start), to: Pos(cur.line, end)};\n });\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar json_stable_stringify_1 = tslib_1.__importDefault(require(\"json-stable-stringify\"));\nvar vega_util_1 = require(\"vega-util\");\nvar logical_1 = require(\"./logical\");\n/**\n * Creates an object composed of the picked object properties.\n *\n * Example: (from lodash)\n *\n * var object = {'a': 1, 'b': '2', 'c': 3};\n * pick(object, ['a', 'c']);\n * // → {'a': 1, 'c': 3}\n *\n */\nfunction pick(obj, props) {\n var copy = {};\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n if (obj.hasOwnProperty(prop)) {\n copy[prop] = obj[prop];\n }\n }\n return copy;\n}\nexports.pick = pick;\n/**\n * The opposite of _.pick; this method creates an object composed of the own\n * and inherited enumerable string keyed properties of object that are not omitted.\n */\nfunction omit(obj, props) {\n var copy = tslib_1.__assign({}, obj);\n for (var _i = 0, props_2 = props; _i < props_2.length; _i++) {\n var prop = props_2[_i];\n delete copy[prop];\n }\n return copy;\n}\nexports.omit = omit;\n/**\n * Converts any object into a string representation that can be consumed by humans.\n */\nexports.stringify = json_stable_stringify_1.default;\n/**\n * Converts any object into a string of limited size, or a number.\n */\nfunction hash(a) {\n if (vega_util_1.isNumber(a)) {\n return a;\n }\n var str = vega_util_1.isString(a) ? a : json_stable_stringify_1.default(a);\n // short strings can be used as hash directly, longer strings are hashed to reduce memory usage\n if (str.length < 100) {\n return str;\n }\n // from http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\n var h = 0;\n for (var i = 0; i < str.length; i++) {\n var char = str.charCodeAt(i);\n h = ((h << 5) - h) + char;\n h = h & h; // Convert to 32bit integer\n }\n return h;\n}\nexports.hash = hash;\nfunction contains(array, item) {\n return array.indexOf(item) > -1;\n}\nexports.contains = contains;\n/** Returns the array without the elements in item */\nfunction without(array, excludedItems) {\n return array.filter(function (item) { return !contains(excludedItems, item); });\n}\nexports.without = without;\nfunction union(array, other) {\n return array.concat(without(other, array));\n}\nexports.union = union;\n/**\n * Returns true if any item returns true.\n */\nfunction some(arr, f) {\n var i = 0;\n for (var k = 0; k < arr.length; k++) {\n if (f(arr[k], k, i++)) {\n return true;\n }\n }\n return false;\n}\nexports.some = some;\n/**\n * Returns true if all items return true.\n */\nfunction every(arr, f) {\n var i = 0;\n for (var k = 0; k < arr.length; k++) {\n if (!f(arr[k], k, i++)) {\n return false;\n }\n }\n return true;\n}\nexports.every = every;\nfunction flatten(arrays) {\n return [].concat.apply([], arrays);\n}\nexports.flatten = flatten;\n/**\n * recursively merges src into dest\n */\nfunction mergeDeep(dest) {\n var src = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n src[_i - 1] = arguments[_i];\n }\n for (var _a = 0, src_1 = src; _a < src_1.length; _a++) {\n var s = src_1[_a];\n dest = deepMerge_(dest, s);\n }\n return dest;\n}\nexports.mergeDeep = mergeDeep;\n// recursively merges src into dest\nfunction deepMerge_(dest, src) {\n if (typeof src !== 'object' || src === null) {\n return dest;\n }\n for (var p in src) {\n if (!src.hasOwnProperty(p)) {\n continue;\n }\n if (src[p] === undefined) {\n continue;\n }\n if (typeof src[p] !== 'object' || vega_util_1.isArray(src[p]) || src[p] === null) {\n dest[p] = src[p];\n }\n else if (typeof dest[p] !== 'object' || dest[p] === null) {\n dest[p] = mergeDeep(vega_util_1.isArray(src[p].constructor) ? [] : {}, src[p]);\n }\n else {\n mergeDeep(dest[p], src[p]);\n }\n }\n return dest;\n}\nfunction unique(values, f) {\n var results = [];\n var u = {};\n var v;\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var val = values_1[_i];\n v = f(val);\n if (v in u) {\n continue;\n }\n u[v] = 1;\n results.push(val);\n }\n return results;\n}\nexports.unique = unique;\n/**\n * Returns true if the two dictionaries disagree. Applies only to defined values.\n */\nfunction differ(dict, other) {\n for (var key in dict) {\n if (dict.hasOwnProperty(key)) {\n if (other[key] && dict[key] && other[key] !== dict[key]) {\n return true;\n }\n }\n }\n return false;\n}\nexports.differ = differ;\nfunction hasIntersection(a, b) {\n for (var key in a) {\n if (key in b) {\n return true;\n }\n }\n return false;\n}\nexports.hasIntersection = hasIntersection;\nfunction isNumeric(num) {\n return !isNaN(num);\n}\nexports.isNumeric = isNumeric;\nfunction differArray(array, other) {\n if (array.length !== other.length) {\n return true;\n }\n array.sort();\n other.sort();\n for (var i = 0; i < array.length; i++) {\n if (other[i] !== array[i]) {\n return true;\n }\n }\n return false;\n}\nexports.differArray = differArray;\n// This is a stricter version of Object.keys but with better types. See https://github.com/Microsoft/TypeScript/pull/12253#issuecomment-263132208\nexports.keys = Object.keys;\nfunction vals(x) {\n var _vals = [];\n for (var k in x) {\n if (x.hasOwnProperty(k)) {\n _vals.push(x[k]);\n }\n }\n return _vals;\n}\nexports.vals = vals;\nfunction flagKeys(f) {\n return exports.keys(f);\n}\nexports.flagKeys = flagKeys;\nfunction duplicate(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nexports.duplicate = duplicate;\nfunction isBoolean(b) {\n return b === true || b === false;\n}\nexports.isBoolean = isBoolean;\n/**\n * Convert a string into a valid variable name\n */\nfunction varName(s) {\n // Replace non-alphanumeric characters (anything besides a-zA-Z0-9_) with _\n var alphanumericS = s.replace(/\\W/g, '_');\n // Add _ if the string has leading numbers.\n return (s.match(/^\\d+/) ? '_' : '') + alphanumericS;\n}\nexports.varName = varName;\nfunction logicalExpr(op, cb) {\n if (logical_1.isLogicalNot(op)) {\n return '!(' + logicalExpr(op.not, cb) + ')';\n }\n else if (logical_1.isLogicalAnd(op)) {\n return '(' + op.and.map(function (and) { return logicalExpr(and, cb); }).join(') && (') + ')';\n }\n else if (logical_1.isLogicalOr(op)) {\n return '(' + op.or.map(function (or) { return logicalExpr(or, cb); }).join(') || (') + ')';\n }\n else {\n return cb(op);\n }\n}\nexports.logicalExpr = logicalExpr;\n/**\n * Delete nested property of an object, and delete the ancestors of the property if they become empty.\n */\nfunction deleteNestedProperty(obj, orderedProps) {\n if (orderedProps.length === 0) {\n return true;\n }\n var prop = orderedProps.shift();\n if (deleteNestedProperty(obj[prop], orderedProps)) {\n delete obj[prop];\n }\n return Object.keys(obj).length === 0;\n}\nexports.deleteNestedProperty = deleteNestedProperty;\nfunction titlecase(s) {\n return s.charAt(0).toUpperCase() + s.substr(1);\n}\nexports.titlecase = titlecase;\n/**\n * Converts a path to an access path with datum.\n * @param path The field name.\n * @param datum The string to use for `datum`.\n */\nfunction accessPathWithDatum(path, datum) {\n if (datum === void 0) { datum = 'datum'; }\n var pieces = vega_util_1.splitAccessPath(path);\n var prefixes = [];\n for (var i = 1; i <= pieces.length; i++) {\n var prefix = \"[\" + pieces.slice(0, i).map(vega_util_1.stringValue).join('][') + \"]\";\n prefixes.push(\"\" + datum + prefix);\n }\n return prefixes.join(' && ');\n}\nexports.accessPathWithDatum = accessPathWithDatum;\n/**\n * Return access with datum to the falttened field.\n * @param path The field name.\n * @param datum The string to use for `datum`.\n */\nfunction flatAccessWithDatum(path, datum) {\n if (datum === void 0) { datum = 'datum'; }\n return datum + \"[\" + vega_util_1.stringValue(vega_util_1.splitAccessPath(path).join('.')) + \"]\";\n}\nexports.flatAccessWithDatum = flatAccessWithDatum;\n/**\n * Replaces path accesses with access to non-nested field.\n * For example, `foo[\"bar\"].baz` becomes `foo\\\\.bar\\\\.baz`.\n */\nfunction replacePathInField(path) {\n return \"\" + vega_util_1.splitAccessPath(path).map(function (p) { return p.replace('.', '\\\\.'); }).join('\\\\.');\n}\nexports.replacePathInField = replacePathInField;\n/**\n * Remove path accesses with access from field.\n * For example, `foo[\"bar\"].baz` becomes `foo.bar.baz`.\n */\nfunction removePathFromField(path) {\n return \"\" + vega_util_1.splitAccessPath(path).join('.');\n}\nexports.removePathFromField = removePathFromField;\n/**\n * Count the depth of the path. Returns 1 for fields that are not nested.\n */\nfunction accessPathDepth(path) {\n if (!path) {\n return 0;\n }\n return vega_util_1.splitAccessPath(path).length;\n}\nexports.accessPathDepth = accessPathDepth;\n//# sourceMappingURL=util.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar data_1 = require(\"../../data\");\nvar log = tslib_1.__importStar(require(\"../../log\"));\nvar transform_1 = require(\"../../transform\");\nvar util_1 = require(\"../../util\");\nvar model_1 = require(\"../model\");\nvar selection_1 = require(\"../selection/selection\");\nvar aggregate_1 = require(\"./aggregate\");\nvar bin_1 = require(\"./bin\");\nvar calculate_1 = require(\"./calculate\");\nvar dataflow_1 = require(\"./dataflow\");\nvar facet_1 = require(\"./facet\");\nvar filter_1 = require(\"./filter\");\nvar filterinvalid_1 = require(\"./filterinvalid\");\nvar formatparse_1 = require(\"./formatparse\");\nvar geojson_1 = require(\"./geojson\");\nvar geopoint_1 = require(\"./geopoint\");\nvar identifier_1 = require(\"./identifier\");\nvar index_1 = require(\"./index\");\nvar lookup_1 = require(\"./lookup\");\nvar source_1 = require(\"./source\");\nvar stack_1 = require(\"./stack\");\nvar timeunit_1 = require(\"./timeunit\");\nvar window_1 = require(\"./window\");\nfunction parseRoot(model, sources) {\n if (model.data || !model.parent) {\n // if the model defines a data source or is the root, create a source node\n var source = new source_1.SourceNode(model.data);\n var hash = source.hash();\n if (hash in sources) {\n // use a reference if we already have a source\n return sources[hash];\n }\n else {\n // otherwise add a new one\n sources[hash] = source;\n return source;\n }\n }\n else {\n // If we don't have a source defined (overriding parent's data), use the parent's facet root or main.\n return model.parent.component.data.facetRoot ? model.parent.component.data.facetRoot : model.parent.component.data.main;\n }\n}\n/**\n * Parses a transforms array into a chain of connected dataflow nodes.\n */\nfunction parseTransformArray(head, model, ancestorParse) {\n var lookupCounter = 0;\n model.transforms.forEach(function (t) {\n if (transform_1.isCalculate(t)) {\n head = new calculate_1.CalculateNode(head, t);\n ancestorParse.set(t.as, 'derived', false);\n }\n else if (transform_1.isFilter(t)) {\n head = formatparse_1.ParseNode.makeImplicitFromFilterTransform(head, t, ancestorParse) || head;\n head = new filter_1.FilterNode(head, model, t.filter);\n }\n else if (transform_1.isBin(t)) {\n var bin = head = bin_1.BinNode.makeFromTransform(head, t, model);\n for (var _i = 0, _a = util_1.keys(bin.producedFields()); _i < _a.length; _i++) {\n var field = _a[_i];\n ancestorParse.set(field, 'number', false);\n }\n }\n else if (transform_1.isTimeUnit(t)) {\n head = timeunit_1.TimeUnitNode.makeFromTransform(head, t);\n ancestorParse.set(t.as, 'date', false);\n }\n else if (transform_1.isAggregate(t)) {\n var agg = head = aggregate_1.AggregateNode.makeFromTransform(head, t);\n if (selection_1.requiresSelectionId(model)) {\n head = new identifier_1.IdentifierNode(head);\n }\n for (var _b = 0, _c = util_1.keys(agg.producedFields()); _b < _c.length; _b++) {\n var field = _c[_b];\n ancestorParse.set(field, 'derived', false);\n }\n }\n else if (transform_1.isLookup(t)) {\n var lookup = head = lookup_1.LookupNode.make(head, model, t, lookupCounter++);\n for (var _d = 0, _e = util_1.keys(lookup.producedFields()); _d < _e.length; _d++) {\n var field = _e[_d];\n ancestorParse.set(field, 'derived', false);\n }\n }\n else if (transform_1.isWindow(t)) {\n var window_2 = head = new window_1.WindowTransformNode(head, t);\n for (var _f = 0, _g = util_1.keys(window_2.producedFields()); _f < _g.length; _f++) {\n var field = _g[_f];\n ancestorParse.set(field, 'derived', false);\n }\n }\n else if (transform_1.isStack(t)) {\n var stack = head = stack_1.StackNode.makeFromTransform(head, t);\n for (var _h = 0, _j = util_1.keys(stack.producedFields()); _h < _j.length; _h++) {\n var field = _j[_h];\n ancestorParse.set(field, 'derived', false);\n }\n }\n else {\n log.warn(log.message.invalidTransformIgnored(t));\n return;\n }\n });\n return head;\n}\nexports.parseTransformArray = parseTransformArray;\n/*\nDescription of the dataflow (http://asciiflow.com/):\n +--------+\n | Source |\n +---+----+\n |\n v\n FormatParse\n (explicit)\n |\n v\n Transforms\n(Filter, Calculate, Binning, TimeUnit, Aggregate, Window, ...)\n |\n v\n FormatParse\n (implicit)\n |\n v\n Binning (in `encoding`)\n |\n v\n Timeunit (in `encoding`)\n |\n v\nFormula From Sort Array\n |\n v\n +--+--+\n | Raw |\n +-----+\n |\n v\n Aggregate (in `encoding`)\n |\n v\n Stack (in `encoding`)\n |\n v\n Invalid Filter\n |\n v\n +----------+\n | Main |\n +----------+\n |\n v\n +-------+\n | Facet |----> \"column\", \"column-layout\", and \"row\"\n +-------+\n |\n v\n ...Child data...\n*/\nfunction parseData(model) {\n var head = parseRoot(model, model.component.data.sources);\n var _a = model.component.data, outputNodes = _a.outputNodes, outputNodeRefCounts = _a.outputNodeRefCounts;\n var ancestorParse = model.parent ? model.parent.component.data.ancestorParse.clone() : new index_1.AncestorParse();\n // format.parse: null means disable parsing\n if (model.data && model.data.format && model.data.format.parse === null) {\n ancestorParse.parseNothing = true;\n }\n head = formatparse_1.ParseNode.makeExplicit(head, model, ancestorParse) || head;\n // Default discrete selections require an identifier transform to\n // uniquely identify data points as the _id field is volatile. Add\n // this transform at the head of our pipeline such that the identifier\n // field is available for all subsequent datasets. Additional identifier\n // transforms will be necessary when new tuples are constructed\n // (e.g., post-aggregation).\n if (selection_1.requiresSelectionId(model) && (model_1.isUnitModel(model) || model_1.isLayerModel(model))) {\n head = new identifier_1.IdentifierNode(head);\n }\n // HACK: This is equivalent for merging bin extent for union scale.\n // FIXME(https://github.com/vega/vega-lite/issues/2270): Correctly merge extent / bin node for shared bin scale\n var parentIsLayer = model.parent && model_1.isLayerModel(model.parent);\n if (model_1.isUnitModel(model) || model_1.isFacetModel(model)) {\n if (parentIsLayer) {\n head = bin_1.BinNode.makeFromEncoding(head, model) || head;\n }\n }\n if (model.transforms.length > 0) {\n head = parseTransformArray(head, model, ancestorParse);\n }\n head = formatparse_1.ParseNode.makeImplicitFromEncoding(head, model, ancestorParse) || head;\n if (model_1.isUnitModel(model)) {\n head = geojson_1.GeoJSONNode.parseAll(head, model);\n head = geopoint_1.GeoPointNode.parseAll(head, model);\n }\n if (model_1.isUnitModel(model) || model_1.isFacetModel(model)) {\n if (!parentIsLayer) {\n head = bin_1.BinNode.makeFromEncoding(head, model) || head;\n }\n head = timeunit_1.TimeUnitNode.makeFromEncoding(head, model) || head;\n head = calculate_1.CalculateNode.parseAllForSortIndex(head, model);\n }\n // add an output node pre aggregation\n var rawName = model.getName(data_1.RAW);\n var raw = new dataflow_1.OutputNode(head, rawName, data_1.RAW, outputNodeRefCounts);\n outputNodes[rawName] = raw;\n head = raw;\n if (model_1.isUnitModel(model)) {\n var agg = aggregate_1.AggregateNode.makeFromEncoding(head, model);\n if (agg) {\n head = agg;\n if (selection_1.requiresSelectionId(model)) {\n head = new identifier_1.IdentifierNode(head);\n }\n }\n head = stack_1.StackNode.makeFromEncoding(head, model) || head;\n }\n if (model_1.isUnitModel(model)) {\n head = filterinvalid_1.FilterInvalidNode.make(head, model) || head;\n }\n // output node for marks\n var mainName = model.getName(data_1.MAIN);\n var main = new dataflow_1.OutputNode(head, mainName, data_1.MAIN, outputNodeRefCounts);\n outputNodes[mainName] = main;\n head = main;\n // add facet marker\n var facetRoot = null;\n if (model_1.isFacetModel(model)) {\n var facetName = model.getName('facet');\n // Derive new sort index field for facet's sort array\n head = calculate_1.CalculateNode.parseAllForSortIndex(head, model);\n // Derive new aggregate (via window) for facet's sort field\n // TODO: use JoinAggregate once we have it\n // augment data source with new fields for crossed facet\n head = window_1.WindowTransformNode.makeFromFacet(head, model.facet) || head;\n facetRoot = new facet_1.FacetNode(head, model, facetName, main.getSource());\n outputNodes[facetName] = facetRoot;\n head = facetRoot;\n }\n return tslib_1.__assign({}, model.component.data, { outputNodes: outputNodes,\n outputNodeRefCounts: outputNodeRefCounts,\n raw: raw,\n main: main,\n facetRoot: facetRoot,\n ancestorParse: ancestorParse });\n}\nexports.parseData = parseData;\n//# sourceMappingURL=parse.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar data_1 = require(\"../../data\");\nvar util_1 = require(\"../../util\");\nvar aggregate_1 = require(\"./aggregate\");\nvar dataflow_1 = require(\"./dataflow\");\nvar facet_1 = require(\"./facet\");\nvar filterinvalid_1 = require(\"./filterinvalid\");\nvar optimizers = tslib_1.__importStar(require(\"./optimizers\"));\nvar stack_1 = require(\"./stack\");\nexports.FACET_SCALE_PREFIX = 'scale_';\n/**\n * Clones the subtree and ignores output nodes except for the leafs, which are renamed.\n */\nfunction cloneSubtree(facet) {\n function clone(node) {\n if (!(node instanceof facet_1.FacetNode)) {\n var copy_1 = node.clone();\n if (copy_1 instanceof dataflow_1.OutputNode) {\n var newName = exports.FACET_SCALE_PREFIX + copy_1.getSource();\n copy_1.setSource(newName);\n facet.model.component.data.outputNodes[newName] = copy_1;\n }\n else if (copy_1 instanceof aggregate_1.AggregateNode || copy_1 instanceof stack_1.StackNode) {\n copy_1.addDimensions(facet.fields);\n }\n util_1.flatten(node.children.map(clone)).forEach(function (n) { return n.parent = copy_1; });\n return [copy_1];\n }\n return util_1.flatten(node.children.map(clone));\n }\n return clone;\n}\n/**\n * Move facet nodes down to the next fork or output node. Also pull the main output with the facet node.\n * After moving down the facet node, make a copy of the subtree and make it a child of the main output.\n */\nfunction moveFacetDown(node) {\n if (node instanceof facet_1.FacetNode) {\n if (node.numChildren() === 1 && !(node.children[0] instanceof dataflow_1.OutputNode)) {\n // move down until we hit a fork or output node\n var child = node.children[0];\n if (child instanceof aggregate_1.AggregateNode || child instanceof stack_1.StackNode) {\n child.addDimensions(node.fields);\n }\n child.swapWithParent();\n moveFacetDown(node);\n }\n else {\n // move main to facet\n moveMainDownToFacet(node.model.component.data.main);\n // replicate the subtree and place it before the facet's main node\n var copy = util_1.flatten(node.children.map(cloneSubtree(node)));\n copy.forEach(function (c) { return c.parent = node.model.component.data.main; });\n }\n }\n else {\n node.children.forEach(moveFacetDown);\n }\n}\nfunction moveMainDownToFacet(node) {\n if (node instanceof dataflow_1.OutputNode && node.type === data_1.MAIN) {\n if (node.numChildren() === 1) {\n var child = node.children[0];\n if (!(child instanceof facet_1.FacetNode)) {\n child.swapWithParent();\n moveMainDownToFacet(node);\n }\n }\n }\n}\n/**\n * Remove nodes that are not required starting from a root.\n */\nfunction removeUnnecessaryNodes(node) {\n // remove empty null filter nodes\n if (node instanceof filterinvalid_1.FilterInvalidNode && util_1.every(util_1.vals(node.filter), function (f) { return f === null; })) {\n node.remove();\n }\n // remove output nodes that are not required\n if (node instanceof dataflow_1.OutputNode && !node.isRequired()) {\n node.remove();\n }\n node.children.forEach(removeUnnecessaryNodes);\n}\n/**\n * Return all leaf nodes.\n */\nfunction getLeaves(roots) {\n var leaves = [];\n function append(node) {\n if (node.numChildren() === 0) {\n leaves.push(node);\n }\n else {\n node.children.forEach(append);\n }\n }\n roots.forEach(append);\n return leaves;\n}\n/**\n * Optimizes the dataflow of the passed in data component.\n */\nfunction optimizeDataflow(dataComponent) {\n var roots = util_1.vals(dataComponent.sources);\n roots.forEach(removeUnnecessaryNodes);\n // remove source nodes that don't have any children because they also don't have output nodes\n roots = roots.filter(function (r) { return r.numChildren() > 0; });\n getLeaves(roots).forEach(optimizers.iterateFromLeaves(optimizers.removeUnusedSubtrees));\n roots = roots.filter(function (r) { return r.numChildren() > 0; });\n getLeaves(roots).forEach(optimizers.iterateFromLeaves(optimizers.moveParseUp));\n getLeaves(roots).forEach(optimizers.removeDuplicateTimeUnits);\n roots.forEach(moveFacetDown);\n util_1.keys(dataComponent.sources).forEach(function (s) {\n if (dataComponent.sources[s].numChildren() === 0) {\n delete dataComponent.sources[s];\n }\n });\n}\nexports.optimizeDataflow = optimizeDataflow;\n//# sourceMappingURL=optimize.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar data_1 = require(\"../../data\");\nvar util_1 = require(\"../../util\");\nvar aggregate_1 = require(\"./aggregate\");\nvar bin_1 = require(\"./bin\");\nvar calculate_1 = require(\"./calculate\");\nvar dataflow_1 = require(\"./dataflow\");\nvar facet_1 = require(\"./facet\");\nvar filter_1 = require(\"./filter\");\nvar filterinvalid_1 = require(\"./filterinvalid\");\nvar formatparse_1 = require(\"./formatparse\");\nvar geojson_1 = require(\"./geojson\");\nvar geopoint_1 = require(\"./geopoint\");\nvar identifier_1 = require(\"./identifier\");\nvar lookup_1 = require(\"./lookup\");\nvar source_1 = require(\"./source\");\nvar stack_1 = require(\"./stack\");\nvar timeunit_1 = require(\"./timeunit\");\nvar window_1 = require(\"./window\");\n/**\n * Print debug information for dataflow tree.\n */\n// tslint:disable-next-line\nfunction debug(node) {\n console.log(\"\" + node.constructor.name + (node.debugName ? \" (\" + node.debugName + \")\" : '') + \" -> \" + (node.children.map(function (c) {\n return \"\" + c.constructor.name + (c.debugName ? \" (\" + c.debugName + \")\" : '');\n })));\n console.log(node);\n node.children.forEach(debug);\n}\nfunction makeWalkTree(data) {\n // to name datasources\n var datasetIndex = 0;\n /**\n * Recursively walk down the tree.\n */\n function walkTree(node, dataSource) {\n if (node instanceof source_1.SourceNode) {\n // If the source is a named data source or a data source with values, we need\n // to put it in a different data source. Otherwise, Vega may override the data.\n if (!data_1.isUrlData(node.data)) {\n data.push(dataSource);\n var newData = {\n name: null,\n source: dataSource.name,\n transform: []\n };\n dataSource = newData;\n }\n }\n if (node instanceof formatparse_1.ParseNode) {\n if (node.parent instanceof source_1.SourceNode && !dataSource.source) {\n // If node's parent is a root source and the data source does not refer to another data source, use normal format parse\n dataSource.format = tslib_1.__assign({}, dataSource.format || {}, { parse: node.assembleFormatParse() });\n // add calculates for all nested fields\n dataSource.transform = dataSource.transform.concat(node.assembleTransforms(true));\n }\n else {\n // Otherwise use Vega expression to parse\n dataSource.transform = dataSource.transform.concat(node.assembleTransforms());\n }\n }\n if (node instanceof facet_1.FacetNode) {\n if (!dataSource.name) {\n dataSource.name = \"data_\" + datasetIndex++;\n }\n if (!dataSource.source || dataSource.transform.length > 0) {\n data.push(dataSource);\n node.data = dataSource.name;\n }\n else {\n node.data = dataSource.source;\n }\n node.assemble().forEach(function (d) { return data.push(d); });\n // break here because the rest of the tree has to be taken care of by the facet.\n return;\n }\n if (node instanceof filter_1.FilterNode ||\n node instanceof calculate_1.CalculateNode ||\n node instanceof geopoint_1.GeoPointNode ||\n node instanceof geojson_1.GeoJSONNode ||\n node instanceof aggregate_1.AggregateNode ||\n node instanceof lookup_1.LookupNode ||\n node instanceof window_1.WindowTransformNode ||\n node instanceof identifier_1.IdentifierNode) {\n dataSource.transform.push(node.assemble());\n }\n if (node instanceof filterinvalid_1.FilterInvalidNode ||\n node instanceof bin_1.BinNode ||\n node instanceof timeunit_1.TimeUnitNode ||\n node instanceof stack_1.StackNode) {\n dataSource.transform = dataSource.transform.concat(node.assemble());\n }\n if (node instanceof aggregate_1.AggregateNode) {\n if (!dataSource.name) {\n dataSource.name = \"data_\" + datasetIndex++;\n }\n }\n if (node instanceof dataflow_1.OutputNode) {\n if (dataSource.source && dataSource.transform.length === 0) {\n node.setSource(dataSource.source);\n }\n else if (node.parent instanceof dataflow_1.OutputNode) {\n // Note that an output node may be required but we still do not assemble a\n // separate data source for it.\n node.setSource(dataSource.name);\n }\n else {\n if (!dataSource.name) {\n dataSource.name = \"data_\" + datasetIndex++;\n }\n // Here we set the name of the datasource we generated. From now on\n // other assemblers can use it.\n node.setSource(dataSource.name);\n // if this node has more than one child, we will add a datasource automatically\n if (node.numChildren() === 1) {\n data.push(dataSource);\n var newData = {\n name: null,\n source: dataSource.name,\n transform: []\n };\n dataSource = newData;\n }\n }\n }\n switch (node.numChildren()) {\n case 0:\n // done\n if (node instanceof dataflow_1.OutputNode && (!dataSource.source || dataSource.transform.length > 0)) {\n // do not push empty datasources that are simply references\n data.push(dataSource);\n }\n break;\n case 1:\n walkTree(node.children[0], dataSource);\n break;\n default:\n if (!dataSource.name) {\n dataSource.name = \"data_\" + datasetIndex++;\n }\n var source_2 = dataSource.name;\n if (!dataSource.source || dataSource.transform.length > 0) {\n data.push(dataSource);\n }\n else {\n source_2 = dataSource.source;\n }\n node.children.forEach(function (child) {\n var newData = {\n name: null,\n source: source_2,\n transform: []\n };\n walkTree(child, newData);\n });\n break;\n }\n }\n return walkTree;\n}\n/**\n * Assemble data sources that are derived from faceted data.\n */\nfunction assembleFacetData(root) {\n var data = [];\n var walkTree = makeWalkTree(data);\n root.children.forEach(function (child) { return walkTree(child, {\n source: root.name,\n name: null,\n transform: []\n }); });\n return data;\n}\nexports.assembleFacetData = assembleFacetData;\n/**\n * Create Vega Data array from a given compiled model and append all of them to the given array\n *\n * @param model\n * @param data array\n * @return modified data array\n */\nfunction assembleRootData(dataComponent, datasets) {\n var roots = util_1.vals(dataComponent.sources);\n var data = [];\n // roots.forEach(debug);\n var walkTree = makeWalkTree(data);\n var sourceIndex = 0;\n roots.forEach(function (root) {\n // assign a name if the source does not have a name yet\n if (!root.hasName()) {\n root.dataName = \"source_\" + sourceIndex++;\n }\n var newData = root.assemble();\n walkTree(root, newData);\n });\n // remove empty transform arrays for cleaner output\n data.forEach(function (d) {\n if (d.transform.length === 0) {\n delete d.transform;\n }\n });\n // move sources without transforms (the ones that are potentially used in lookups) to the beginning\n var whereTo = 0;\n for (var i = 0; i < data.length; i++) {\n var d = data[i];\n if ((d.transform || []).length === 0 && !d.source) {\n data.splice(whereTo++, 0, data.splice(i, 1)[0]);\n }\n }\n // now fix the from references in lookup transforms\n for (var _i = 0, data_2 = data; _i < data_2.length; _i++) {\n var d = data_2[_i];\n for (var _a = 0, _b = d.transform || []; _a < _b.length; _a++) {\n var t = _b[_a];\n if (t.type === 'lookup') {\n t.from = dataComponent.outputNodes[t.from].getSource();\n }\n }\n }\n // inline values for datasets that are in the datastore\n for (var _c = 0, data_3 = data; _c < data_3.length; _c++) {\n var d = data_3[_c];\n if (d.name in datasets) {\n d.values = datasets[d.name];\n }\n }\n return data;\n}\nexports.assembleRootData = assembleRootData;\n//# sourceMappingURL=assemble.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=facet.js.map","exports.parse = require('./lib/parse');\nexports.stringify = require('./lib/stringify');\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SELECTION_ID = '_vgsid_';\nexports.defaultConfig = {\n single: {\n on: 'click',\n fields: [exports.SELECTION_ID],\n resolve: 'global',\n empty: 'all'\n },\n multi: {\n on: 'click',\n fields: [exports.SELECTION_ID],\n toggle: 'event.shiftKey',\n resolve: 'global',\n empty: 'all'\n },\n interval: {\n on: '[mousedown, window:mouseup] > window:mousemove!',\n encodings: ['x', 'y'],\n translate: '[mousedown, window:mouseup] > window:mousemove!',\n zoom: 'wheel!',\n mark: { fill: '#333', fillOpacity: 0.125, stroke: 'white' },\n resolve: 'global'\n }\n};\n//# sourceMappingURL=selection.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar log = tslib_1.__importStar(require(\"../log\"));\nvar baseconcat_1 = require(\"./baseconcat\");\nvar buildmodel_1 = require(\"./buildmodel\");\nvar parse_1 = require(\"./layoutsize/parse\");\nvar RepeatModel = /** @class */ (function (_super) {\n tslib_1.__extends(RepeatModel, _super);\n function RepeatModel(spec, parent, parentGivenName, repeatValues, config) {\n var _this = _super.call(this, spec, parent, parentGivenName, config, repeatValues, spec.resolve) || this;\n _this.type = 'repeat';\n if (spec.resolve && spec.resolve.axis && (spec.resolve.axis.x === 'shared' || spec.resolve.axis.y === 'shared')) {\n log.warn(log.message.REPEAT_CANNOT_SHARE_AXIS);\n }\n _this.repeat = spec.repeat;\n _this.children = _this._initChildren(spec, _this.repeat, repeatValues, config);\n return _this;\n }\n RepeatModel.prototype._initChildren = function (spec, repeat, repeater, config) {\n var children = [];\n var row = repeat.row || [repeater ? repeater.row : null];\n var column = repeat.column || [repeater ? repeater.column : null];\n // cross product\n for (var _i = 0, row_1 = row; _i < row_1.length; _i++) {\n var rowField = row_1[_i];\n for (var _a = 0, column_1 = column; _a < column_1.length; _a++) {\n var columnField = column_1[_a];\n var name_1 = (rowField ? '_' + rowField : '') + (columnField ? '_' + columnField : '');\n var childRepeat = {\n row: rowField,\n column: columnField\n };\n children.push(buildmodel_1.buildModel(spec.spec, this, this.getName('child' + name_1), undefined, childRepeat, config, false));\n }\n }\n return children;\n };\n RepeatModel.prototype.parseLayoutSize = function () {\n parse_1.parseRepeatLayoutSize(this);\n };\n RepeatModel.prototype.assembleDefaultLayout = function () {\n return {\n columns: this.repeat && this.repeat.column ? this.repeat.column.length : 1,\n bounds: 'full',\n align: 'all'\n };\n };\n return RepeatModel;\n}(baseconcat_1.BaseConcatModel));\nexports.RepeatModel = RepeatModel;\n//# sourceMappingURL=repeat.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"../../util\");\nvar vega_schema_1 = require(\"../../vega.schema\");\nvar model_1 = require(\"../model\");\nfunction assembleProjections(model) {\n if (model_1.isLayerModel(model) || model_1.isConcatModel(model) || model_1.isRepeatModel(model)) {\n return assembleProjectionsForModelAndChildren(model);\n }\n else {\n return assembleProjectionForModel(model);\n }\n}\nexports.assembleProjections = assembleProjections;\nfunction assembleProjectionsForModelAndChildren(model) {\n return model.children.reduce(function (projections, child) {\n return projections.concat(child.assembleProjections());\n }, assembleProjectionForModel(model));\n}\nexports.assembleProjectionsForModelAndChildren = assembleProjectionsForModelAndChildren;\nfunction assembleProjectionForModel(model) {\n var component = model.component.projection;\n if (!component || component.merged) {\n return [];\n }\n var projection = component.combine();\n var name = projection.name, rest = tslib_1.__rest(projection, [\"name\"]); // we need to extract name so that it is always present in the output and pass TS type validation\n var size = {\n signal: \"[\" + component.size.map(function (ref) { return ref.signal; }).join(', ') + \"]\"\n };\n var fit = component.data.reduce(function (sources, data) {\n var source = vega_schema_1.isVgSignalRef(data) ? data.signal : \"data('\" + model.lookupDataSource(data) + \"')\";\n if (!util_1.contains(sources, source)) {\n // build a unique list of sources\n sources.push(source);\n }\n return sources;\n }, []);\n if (fit.length <= 0) {\n throw new Error(\"Projection's fit didn't find any data sources\");\n }\n return [tslib_1.__assign({ name: name,\n size: size, fit: {\n signal: fit.length > 1 ? \"[\" + fit.join(', ') + \"]\" : fit[0]\n } }, rest)];\n}\nexports.assembleProjectionForModel = assembleProjectionForModel;\n//# sourceMappingURL=assemble.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"../../util\");\nvar parse_1 = require(\"./parse\");\nfunction assembleLegends(model) {\n var legendComponentIndex = model.component.legends;\n var legendByDomain = {};\n for (var _i = 0, _a = util_1.keys(legendComponentIndex); _i < _a.length; _i++) {\n var channel = _a[_i];\n var scaleComponent = model.getScaleComponent(channel);\n var domainHash = util_1.stringify(scaleComponent.domains);\n if (legendByDomain[domainHash]) {\n for (var _b = 0, _c = legendByDomain[domainHash]; _b < _c.length; _b++) {\n var mergedLegendComponent = _c[_b];\n var merged = parse_1.mergeLegendComponent(mergedLegendComponent, legendComponentIndex[channel]);\n if (!merged) {\n // If cannot merge, need to add this legend separately\n legendByDomain[domainHash].push(legendComponentIndex[channel]);\n }\n }\n }\n else {\n legendByDomain[domainHash] = [legendComponentIndex[channel].clone()];\n }\n }\n return util_1.flatten(util_1.vals(legendByDomain)).map(function (legendCmpt) { return legendCmpt.combine(); });\n}\nexports.assembleLegends = assembleLegends;\n//# sourceMappingURL=assemble.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction isUrlData(data) {\n return !!data['url'];\n}\nexports.isUrlData = isUrlData;\nfunction isInlineData(data) {\n return !!data['values'];\n}\nexports.isInlineData = isInlineData;\nfunction isNamedData(data) {\n return !!data['name'] && !isUrlData(data) && !isInlineData(data);\n}\nexports.isNamedData = isNamedData;\nexports.MAIN = 'main';\nexports.RAW = 'raw';\n//# sourceMappingURL=data.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar bin_1 = require(\"../../bin\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar util_1 = require(\"../../util\");\nvar common_1 = require(\"../common\");\nvar model_1 = require(\"../model\");\nvar dataflow_1 = require(\"./dataflow\");\nfunction rangeFormula(model, fieldDef, channel, config) {\n if (common_1.binRequiresRange(fieldDef, channel)) {\n // read format from axis or legend, if there is no format then use config.numberFormat\n var guide = model_1.isUnitModel(model) ? (model.axis(channel) || model.legend(channel) || {}) : {};\n var startField = fielddef_1.vgField(fieldDef, { expr: 'datum', });\n var endField = fielddef_1.vgField(fieldDef, { expr: 'datum', binSuffix: 'end' });\n return {\n formulaAs: fielddef_1.vgField(fieldDef, { binSuffix: 'range' }),\n formula: common_1.binFormatExpression(startField, endField, guide.format, config)\n };\n }\n return {};\n}\nfunction binKey(bin, field) {\n return bin_1.binToString(bin) + \"_\" + field;\n}\nfunction getSignalsFromModel(model, key) {\n return {\n signal: model.getName(key + \"_bins\"),\n extentSignal: model.getName(key + \"_extent\")\n };\n}\nfunction isBinTransform(t) {\n return 'as' in t;\n}\nfunction createBinComponent(t, model) {\n var as;\n if (isBinTransform(t)) {\n as = vega_util_1.isString(t.as) ? [t.as, t.as + \"_end\"] : [t.as[0], t.as[1]];\n }\n else {\n as = [fielddef_1.vgField(t, {}), fielddef_1.vgField(t, { binSuffix: 'end' })];\n }\n var bin = fielddef_1.normalizeBin(t.bin, undefined) || {};\n var key = binKey(bin, t.field);\n var _a = getSignalsFromModel(model, key), signal = _a.signal, extentSignal = _a.extentSignal;\n var binComponent = tslib_1.__assign({ bin: bin, field: t.field, as: as }, signal ? { signal: signal } : {}, extentSignal ? { extentSignal: extentSignal } : {});\n return { key: key, binComponent: binComponent };\n}\nvar BinNode = /** @class */ (function (_super) {\n tslib_1.__extends(BinNode, _super);\n function BinNode(parent, bins) {\n var _this = _super.call(this, parent) || this;\n _this.bins = bins;\n return _this;\n }\n BinNode.prototype.clone = function () {\n return new BinNode(null, util_1.duplicate(this.bins));\n };\n BinNode.makeFromEncoding = function (parent, model) {\n var bins = model.reduceFieldDef(function (binComponentIndex, fieldDef, channel) {\n if (fieldDef.bin) {\n var _a = createBinComponent(fieldDef, model), key = _a.key, binComponent = _a.binComponent;\n binComponentIndex[key] = tslib_1.__assign({}, binComponent, binComponentIndex[key], rangeFormula(model, fieldDef, channel, model.config));\n }\n return binComponentIndex;\n }, {});\n if (util_1.keys(bins).length === 0) {\n return null;\n }\n return new BinNode(parent, bins);\n };\n /**\n * Creates a bin node from BinTransform.\n * The optional parameter should provide\n */\n BinNode.makeFromTransform = function (parent, t, model) {\n var _a;\n var _b = createBinComponent(t, model), key = _b.key, binComponent = _b.binComponent;\n return new BinNode(parent, (_a = {},\n _a[key] = binComponent,\n _a));\n };\n BinNode.prototype.merge = function (other) {\n this.bins = tslib_1.__assign({}, this.bins, other.bins);\n other.remove();\n };\n BinNode.prototype.producedFields = function () {\n var out = {};\n util_1.vals(this.bins).forEach(function (c) {\n c.as.forEach(function (f) { return out[f] = true; });\n });\n return out;\n };\n BinNode.prototype.dependentFields = function () {\n var out = {};\n util_1.vals(this.bins).forEach(function (c) {\n out[c.field] = true;\n });\n return out;\n };\n BinNode.prototype.assemble = function () {\n return util_1.flatten(util_1.vals(this.bins).map(function (bin) {\n var transform = [];\n var binTrans = tslib_1.__assign({ type: 'bin', field: bin.field, as: bin.as, signal: bin.signal }, bin.bin);\n if (!bin.bin.extent && bin.extentSignal) {\n transform.push({\n type: 'extent',\n field: bin.field,\n signal: bin.extentSignal\n });\n binTrans.extent = { signal: bin.extentSignal };\n }\n transform.push(binTrans);\n if (bin.formula) {\n transform.push({\n type: 'formula',\n expr: bin.formula,\n as: bin.formulaAs\n });\n }\n return transform;\n }));\n };\n return BinNode;\n}(dataflow_1.DataFlowNode));\nexports.BinNode = BinNode;\n//# sourceMappingURL=bin.js.map","exports = module.exports = SemVer\n\nvar debug\n/* istanbul ignore next */\nif (typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)) {\n debug = function () {\n var args = Array.prototype.slice.call(arguments, 0)\n args.unshift('SEMVER')\n console.log.apply(console, args)\n }\n} else {\n debug = function () {}\n}\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0'\n\nvar MAX_LENGTH = 256\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nvar MAX_SAFE_COMPONENT_LENGTH = 16\n\n// The actual regexps go on exports.re\nvar re = exports.re = []\nvar src = exports.src = []\nvar R = 0\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\nvar NUMERICIDENTIFIER = R++\nsrc[NUMERICIDENTIFIER] = '0|[1-9]\\\\d*'\nvar NUMERICIDENTIFIERLOOSE = R++\nsrc[NUMERICIDENTIFIERLOOSE] = '[0-9]+'\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\nvar NONNUMERICIDENTIFIER = R++\nsrc[NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*'\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\nvar MAINVERSION = R++\nsrc[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')'\n\nvar MAINVERSIONLOOSE = R++\nsrc[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')'\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\nvar PRERELEASEIDENTIFIER = R++\nsrc[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\nvar PRERELEASEIDENTIFIERLOOSE = R++\nsrc[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\nvar PRERELEASE = R++\nsrc[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIER] + ')*))'\n\nvar PRERELEASELOOSE = R++\nsrc[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\nvar BUILDIDENTIFIER = R++\nsrc[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\nvar BUILD = R++\nsrc[BUILD] = '(?:\\\\+(' + src[BUILDIDENTIFIER] +\n '(?:\\\\.' + src[BUILDIDENTIFIER] + ')*))'\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\nvar FULL = R++\nvar FULLPLAIN = 'v?' + src[MAINVERSION] +\n src[PRERELEASE] + '?' +\n src[BUILD] + '?'\n\nsrc[FULL] = '^' + FULLPLAIN + '$'\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\nvar LOOSEPLAIN = '[v=\\\\s]*' + src[MAINVERSIONLOOSE] +\n src[PRERELEASELOOSE] + '?' +\n src[BUILD] + '?'\n\nvar LOOSE = R++\nsrc[LOOSE] = '^' + LOOSEPLAIN + '$'\n\nvar GTLT = R++\nsrc[GTLT] = '((?:<|>)?=?)'\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\nvar XRANGEIDENTIFIERLOOSE = R++\nsrc[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*'\nvar XRANGEIDENTIFIER = R++\nsrc[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\\\*'\n\nvar XRANGEPLAIN = R++\nsrc[XRANGEPLAIN] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:' + src[PRERELEASE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGEPLAINLOOSE = R++\nsrc[XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:' + src[PRERELEASELOOSE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGE = R++\nsrc[XRANGE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAIN] + '$'\nvar XRANGELOOSE = R++\nsrc[XRANGELOOSE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAINLOOSE] + '$'\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\nvar COERCE = R++\nsrc[COERCE] = '(?:^|[^\\\\d])' +\n '(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:$|[^\\\\d])'\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\nvar LONETILDE = R++\nsrc[LONETILDE] = '(?:~>?)'\n\nvar TILDETRIM = R++\nsrc[TILDETRIM] = '(\\\\s*)' + src[LONETILDE] + '\\\\s+'\nre[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')\nvar tildeTrimReplace = '$1~'\n\nvar TILDE = R++\nsrc[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'\nvar TILDELOOSE = R++\nsrc[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\nvar LONECARET = R++\nsrc[LONECARET] = '(?:\\\\^)'\n\nvar CARETTRIM = R++\nsrc[CARETTRIM] = '(\\\\s*)' + src[LONECARET] + '\\\\s+'\nre[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')\nvar caretTrimReplace = '$1^'\n\nvar CARET = R++\nsrc[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'\nvar CARETLOOSE = R++\nsrc[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\nvar COMPARATORLOOSE = R++\nsrc[COMPARATORLOOSE] = '^' + src[GTLT] + '\\\\s*(' + LOOSEPLAIN + ')$|^$'\nvar COMPARATOR = R++\nsrc[COMPARATOR] = '^' + src[GTLT] + '\\\\s*(' + FULLPLAIN + ')$|^$'\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\nvar COMPARATORTRIM = R++\nsrc[COMPARATORTRIM] = '(\\\\s*)' + src[GTLT] +\n '\\\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'\n\n// this one has to use the /g flag\nre[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')\nvar comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\nvar HYPHENRANGE = R++\nsrc[HYPHENRANGE] = '^\\\\s*(' + src[XRANGEPLAIN] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAIN] + ')' +\n '\\\\s*$'\n\nvar HYPHENRANGELOOSE = R++\nsrc[HYPHENRANGELOOSE] = '^\\\\s*(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s*$'\n\n// Star ranges basically just allow anything at all.\nvar STAR = R++\nsrc[STAR] = '(<|>)?=?\\\\s*\\\\*'\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n debug(i, src[i])\n if (!re[i]) {\n re[i] = new RegExp(src[i])\n }\n}\n\nexports.parse = parse\nfunction parse (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n if (version.length > MAX_LENGTH) {\n return null\n }\n\n var r = options.loose ? re[LOOSE] : re[FULL]\n if (!r.test(version)) {\n return null\n }\n\n try {\n return new SemVer(version, options)\n } catch (er) {\n return null\n }\n}\n\nexports.valid = valid\nfunction valid (version, options) {\n var v = parse(version, options)\n return v ? v.version : null\n}\n\nexports.clean = clean\nfunction clean (version, options) {\n var s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\n\nexports.SemVer = SemVer\n\nfunction SemVer (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n if (version instanceof SemVer) {\n if (version.loose === options.loose) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n }\n\n if (!(this instanceof SemVer)) {\n return new SemVer(version, options)\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n\n var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])\n\n if (!m) {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map(function (id) {\n if (/^[0-9]+$/.test(id)) {\n var num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n}\n\nSemVer.prototype.format = function () {\n this.version = this.major + '.' + this.minor + '.' + this.patch\n if (this.prerelease.length) {\n this.version += '-' + this.prerelease.join('.')\n }\n return this.version\n}\n\nSemVer.prototype.toString = function () {\n return this.version\n}\n\nSemVer.prototype.compare = function (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return this.compareMain(other) || this.comparePre(other)\n}\n\nSemVer.prototype.compareMain = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n}\n\nSemVer.prototype.comparePre = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n var i = 0\n do {\n var a = this.prerelease[i]\n var b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n}\n\n// preminor will bump the version up to the next minor release, and immediately\n// down to pre-release. premajor and prepatch work the same way.\nSemVer.prototype.inc = function (release, identifier) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier)\n this.inc('pre', identifier)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier)\n }\n this.inc('pre', identifier)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 \"pre\" would become 1.0.0-0 which is the wrong direction.\n case 'pre':\n if (this.prerelease.length === 0) {\n this.prerelease = [0]\n } else {\n var i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n this.prerelease.push(0)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n if (this.prerelease[0] === identifier) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = [identifier, 0]\n }\n } else {\n this.prerelease = [identifier, 0]\n }\n }\n break\n\n default:\n throw new Error('invalid increment argument: ' + release)\n }\n this.format()\n this.raw = this.version\n return this\n}\n\nexports.inc = inc\nfunction inc (version, release, loose, identifier) {\n if (typeof (loose) === 'string') {\n identifier = loose\n loose = undefined\n }\n\n try {\n return new SemVer(version, loose).inc(release, identifier).version\n } catch (er) {\n return null\n }\n}\n\nexports.diff = diff\nfunction diff (version1, version2) {\n if (eq(version1, version2)) {\n return null\n } else {\n var v1 = parse(version1)\n var v2 = parse(version2)\n var prefix = ''\n if (v1.prerelease.length || v2.prerelease.length) {\n prefix = 'pre'\n var defaultResult = 'prerelease'\n }\n for (var key in v1) {\n if (key === 'major' || key === 'minor' || key === 'patch') {\n if (v1[key] !== v2[key]) {\n return prefix + key\n }\n }\n }\n return defaultResult // may be undefined\n }\n}\n\nexports.compareIdentifiers = compareIdentifiers\n\nvar numeric = /^[0-9]+$/\nfunction compareIdentifiers (a, b) {\n var anum = numeric.test(a)\n var bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nexports.rcompareIdentifiers = rcompareIdentifiers\nfunction rcompareIdentifiers (a, b) {\n return compareIdentifiers(b, a)\n}\n\nexports.major = major\nfunction major (a, loose) {\n return new SemVer(a, loose).major\n}\n\nexports.minor = minor\nfunction minor (a, loose) {\n return new SemVer(a, loose).minor\n}\n\nexports.patch = patch\nfunction patch (a, loose) {\n return new SemVer(a, loose).patch\n}\n\nexports.compare = compare\nfunction compare (a, b, loose) {\n return new SemVer(a, loose).compare(new SemVer(b, loose))\n}\n\nexports.compareLoose = compareLoose\nfunction compareLoose (a, b) {\n return compare(a, b, true)\n}\n\nexports.rcompare = rcompare\nfunction rcompare (a, b, loose) {\n return compare(b, a, loose)\n}\n\nexports.sort = sort\nfunction sort (list, loose) {\n return list.sort(function (a, b) {\n return exports.compare(a, b, loose)\n })\n}\n\nexports.rsort = rsort\nfunction rsort (list, loose) {\n return list.sort(function (a, b) {\n return exports.rcompare(a, b, loose)\n })\n}\n\nexports.gt = gt\nfunction gt (a, b, loose) {\n return compare(a, b, loose) > 0\n}\n\nexports.lt = lt\nfunction lt (a, b, loose) {\n return compare(a, b, loose) < 0\n}\n\nexports.eq = eq\nfunction eq (a, b, loose) {\n return compare(a, b, loose) === 0\n}\n\nexports.neq = neq\nfunction neq (a, b, loose) {\n return compare(a, b, loose) !== 0\n}\n\nexports.gte = gte\nfunction gte (a, b, loose) {\n return compare(a, b, loose) >= 0\n}\n\nexports.lte = lte\nfunction lte (a, b, loose) {\n return compare(a, b, loose) <= 0\n}\n\nexports.cmp = cmp\nfunction cmp (a, op, b, loose) {\n switch (op) {\n case '===':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a === b\n\n case '!==':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError('Invalid operator: ' + op)\n }\n}\n\nexports.Comparator = Comparator\nfunction Comparator (comp, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n if (!(this instanceof Comparator)) {\n return new Comparator(comp, options)\n }\n\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n}\n\nvar ANY = {}\nComparator.prototype.parse = function (comp) {\n var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var m = comp.match(r)\n\n if (!m) {\n throw new TypeError('Invalid comparator: ' + comp)\n }\n\n this.operator = m[1]\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n}\n\nComparator.prototype.toString = function () {\n return this.value\n}\n\nComparator.prototype.test = function (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n}\n\nComparator.prototype.intersects = function (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n var rangeTmp\n\n if (this.operator === '') {\n rangeTmp = new Range(comp.value, options)\n return satisfies(this.value, rangeTmp, options)\n } else if (comp.operator === '') {\n rangeTmp = new Range(this.value, options)\n return satisfies(comp.semver, rangeTmp, options)\n }\n\n var sameDirectionIncreasing =\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '>=' || comp.operator === '>')\n var sameDirectionDecreasing =\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '<=' || comp.operator === '<')\n var sameSemVer = this.semver.version === comp.semver.version\n var differentDirectionsInclusive =\n (this.operator === '>=' || this.operator === '<=') &&\n (comp.operator === '>=' || comp.operator === '<=')\n var oppositeDirectionsLessThan =\n cmp(this.semver, '<', comp.semver, options) &&\n ((this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '<=' || comp.operator === '<'))\n var oppositeDirectionsGreaterThan =\n cmp(this.semver, '>', comp.semver, options) &&\n ((this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '>=' || comp.operator === '>'))\n\n return sameDirectionIncreasing || sameDirectionDecreasing ||\n (sameSemVer && differentDirectionsInclusive) ||\n oppositeDirectionsLessThan || oppositeDirectionsGreaterThan\n}\n\nexports.Range = Range\nfunction Range (range, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (range instanceof Range) {\n if (range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n return new Range(range.value, options)\n }\n\n if (!(this instanceof Range)) {\n return new Range(range, options)\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First, split based on boolean or ||\n this.raw = range\n this.set = range.split(/\\s*\\|\\|\\s*/).map(function (range) {\n return this.parseRange(range.trim())\n }, this).filter(function (c) {\n // throw out any that are not relevant for whatever reason\n return c.length\n })\n\n if (!this.set.length) {\n throw new TypeError('Invalid SemVer Range: ' + range)\n }\n\n this.format()\n}\n\nRange.prototype.format = function () {\n this.range = this.set.map(function (comps) {\n return comps.join(' ').trim()\n }).join('||').trim()\n return this.range\n}\n\nRange.prototype.toString = function () {\n return this.range\n}\n\nRange.prototype.parseRange = function (range) {\n var loose = this.options.loose\n range = range.trim()\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]\n range = range.replace(hr, hyphenReplace)\n debug('hyphen replace', range)\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range, re[COMPARATORTRIM])\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[TILDETRIM], tildeTrimReplace)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[CARETTRIM], caretTrimReplace)\n\n // normalize spaces\n range = range.split(/\\s+/).join(' ')\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var set = range.split(' ').map(function (comp) {\n return parseComparator(comp, this.options)\n }, this).join(' ').split(/\\s+/)\n if (this.options.loose) {\n // in loose mode, throw out any that are not valid comparators\n set = set.filter(function (comp) {\n return !!comp.match(compRe)\n })\n }\n set = set.map(function (comp) {\n return new Comparator(comp, this.options)\n }, this)\n\n return set\n}\n\nRange.prototype.intersects = function (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some(function (thisComparators) {\n return thisComparators.every(function (thisComparator) {\n return range.set.some(function (rangeComparators) {\n return rangeComparators.every(function (rangeComparator) {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n })\n })\n}\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators\nfunction toComparators (range, options) {\n return new Range(range, options).set.map(function (comp) {\n return comp.map(function (c) {\n return c.value\n }).join(' ').trim().split(' ')\n })\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nfunction parseComparator (comp, options) {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nfunction isX (id) {\n return !id || id.toLowerCase() === 'x' || id === '*'\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceTilde(comp, options)\n }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n var r = options.loose ? re[TILDELOOSE] : re[TILDE]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('tilde', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceCaret(comp, options)\n }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n debug('caret', comp, options)\n var r = options.loose ? re[CARETLOOSE] : re[CARET]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('caret', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n if (M === '0') {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else {\n ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + (+M + 1) + '.0.0'\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + (+M + 1) + '.0.0'\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nfunction replaceXRanges (comp, options) {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map(function (comp) {\n return replaceXRange(comp, options)\n }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n comp = comp.trim()\n var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]\n return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n var xM = isX(M)\n var xm = xM || isX(m)\n var xp = xm || isX(p)\n var anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n // >1.2.3 => >= 1.2.4\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n ret = gtlt + M + '.' + m + '.' + p\n } else if (xm) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (xp) {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nfunction replaceStars (comp, options) {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(re[STAR], '')\n}\n\n// This function is passed to string.replace(re[HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = '>=' + fM + '.0.0'\n } else if (isX(fp)) {\n from = '>=' + fM + '.' + fm + '.0'\n } else {\n from = '>=' + from\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = '<' + (+tM + 1) + '.0.0'\n } else if (isX(tp)) {\n to = '<' + tM + '.' + (+tm + 1) + '.0'\n } else if (tpr) {\n to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n } else {\n to = '<=' + to\n }\n\n return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n for (var i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n}\n\nfunction testSet (set, version, options) {\n for (var i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n var allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n\nexports.satisfies = satisfies\nfunction satisfies (version, range, options) {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n var max = null\n var maxSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n var min = null\n var minSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n range = new Range(range, loose)\n\n var minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n comparators.forEach(function (comparator) {\n // Clone to avoid manipulating the comparator's semver object.\n var compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!minver || gt(minver, compver)) {\n minver = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error('Unexpected operation: ' + comparator.operator)\n }\n })\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\n\nexports.validRange = validRange\nfunction validRange (range, options) {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n var gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisifes the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n var high = null\n var low = null\n\n comparators.forEach(function (comparator) {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n var parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version) {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n var match = version.match(re[COERCE])\n\n if (match == null) {\n return null\n }\n\n return parse(match[1] +\n '.' + (match[2] || '0') +\n '.' + (match[3] || '0'))\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar util_1 = require(\"../../util\");\nvar common_1 = require(\"../common\");\nvar dataflow_1 = require(\"./dataflow\");\nfunction getStackByFields(model) {\n return model.stack.stackBy.reduce(function (fields, by) {\n var fieldDef = by.fieldDef;\n var _field = fielddef_1.vgField(fieldDef);\n if (_field) {\n fields.push(_field);\n }\n return fields;\n }, []);\n}\nfunction isValidAsArray(as) {\n return vega_util_1.isArray(as) && as.every(function (s) { return vega_util_1.isString(s); }) && as.length > 1;\n}\nvar StackNode = /** @class */ (function (_super) {\n tslib_1.__extends(StackNode, _super);\n function StackNode(parent, stack) {\n var _this = _super.call(this, parent) || this;\n _this._stack = stack;\n return _this;\n }\n StackNode.prototype.clone = function () {\n return new StackNode(null, util_1.duplicate(this._stack));\n };\n StackNode.makeFromTransform = function (parent, stackTransform) {\n var stack = stackTransform.stack, groupby = stackTransform.groupby, as = stackTransform.as, _a = stackTransform.offset, offset = _a === void 0 ? 'zero' : _a;\n var sortFields = [];\n var sortOrder = [];\n if (stackTransform.sort !== undefined) {\n for (var _i = 0, _b = stackTransform.sort; _i < _b.length; _i++) {\n var sortField = _b[_i];\n sortFields.push(sortField.field);\n sortOrder.push(sortField.order === undefined ? 'ascending' : sortField.order);\n }\n }\n var sort = {\n field: sortFields,\n order: sortOrder,\n };\n var normalizedAs;\n if (isValidAsArray(as)) {\n normalizedAs = as;\n }\n else if (vega_util_1.isString(as)) {\n normalizedAs = [as, as + '_end'];\n }\n else {\n normalizedAs = [stackTransform.stack + '_start', stackTransform.stack + '_end'];\n }\n return new StackNode(parent, {\n stackField: stack,\n groupby: groupby,\n offset: offset,\n sort: sort,\n facetby: [],\n as: normalizedAs\n });\n };\n StackNode.makeFromEncoding = function (parent, model) {\n var stackProperties = model.stack;\n if (!stackProperties) {\n return null;\n }\n var dimensionFieldDef;\n if (stackProperties.groupbyChannel) {\n dimensionFieldDef = model.fieldDef(stackProperties.groupbyChannel);\n }\n var stackby = getStackByFields(model);\n var orderDef = model.encoding.order;\n var sort;\n if (vega_util_1.isArray(orderDef) || fielddef_1.isFieldDef(orderDef)) {\n sort = common_1.sortParams(orderDef);\n }\n else {\n // default = descending by stackFields\n // FIXME is the default here correct for binned fields?\n sort = stackby.reduce(function (s, field) {\n s.field.push(field);\n s.order.push('descending');\n return s;\n }, { field: [], order: [] });\n }\n // Refactored to add \"as\" in the make phase so that we can get producedFields\n // from the as property\n var field = model.vgField(stackProperties.fieldChannel);\n return new StackNode(parent, {\n dimensionFieldDef: dimensionFieldDef,\n stackField: field,\n facetby: [],\n stackby: stackby,\n sort: sort,\n offset: stackProperties.offset,\n impute: stackProperties.impute,\n as: [field + '_start', field + '_end']\n });\n };\n Object.defineProperty(StackNode.prototype, \"stack\", {\n get: function () {\n return this._stack;\n },\n enumerable: true,\n configurable: true\n });\n StackNode.prototype.addDimensions = function (fields) {\n this._stack.facetby = this._stack.facetby.concat(fields);\n };\n StackNode.prototype.dependentFields = function () {\n var out = {};\n out[this._stack.stackField] = true;\n this.getGroupbyFields().forEach(function (f) { return out[f] = true; });\n this._stack.facetby.forEach(function (f) { return out[f] = true; });\n var field = this._stack.sort.field;\n vega_util_1.isArray(field) ? field.forEach(function (f) { return out[f] = true; }) : out[field] = true;\n return out;\n };\n StackNode.prototype.producedFields = function () {\n return this._stack.as.reduce(function (result, item) {\n result[item] = true;\n return result;\n }, {});\n };\n StackNode.prototype.getGroupbyFields = function () {\n var _a = this._stack, dimensionFieldDef = _a.dimensionFieldDef, impute = _a.impute, groupby = _a.groupby;\n if (dimensionFieldDef) {\n if (dimensionFieldDef.bin) {\n if (impute) {\n // For binned group by field with impute, we calculate bin_mid\n // as we cannot impute two fields simultaneously\n return [fielddef_1.vgField(dimensionFieldDef, { binSuffix: 'mid' })];\n }\n return [\n // For binned group by field without impute, we need both bin (start) and bin_end\n fielddef_1.vgField(dimensionFieldDef, {}),\n fielddef_1.vgField(dimensionFieldDef, { binSuffix: 'end' })\n ];\n }\n return [fielddef_1.vgField(dimensionFieldDef)];\n }\n return groupby || [];\n };\n StackNode.prototype.assemble = function () {\n var transform = [];\n var _a = this._stack, facetby = _a.facetby, dimensionFieldDef = _a.dimensionFieldDef, field = _a.stackField, stackby = _a.stackby, sort = _a.sort, offset = _a.offset, impute = _a.impute, as = _a.as;\n // Impute\n if (impute && dimensionFieldDef) {\n var dimensionField = dimensionFieldDef ? fielddef_1.vgField(dimensionFieldDef, { binSuffix: 'mid' }) : undefined;\n if (dimensionFieldDef.bin) {\n // As we can only impute one field at a time, we need to calculate\n // mid point for a binned field\n transform.push({\n type: 'formula',\n expr: '(' +\n fielddef_1.vgField(dimensionFieldDef, { expr: 'datum' }) +\n '+' +\n fielddef_1.vgField(dimensionFieldDef, { expr: 'datum', binSuffix: 'end' }) +\n ')/2',\n as: dimensionField\n });\n }\n transform.push({\n type: 'impute',\n field: field,\n groupby: stackby,\n key: dimensionField,\n method: 'value',\n value: 0\n });\n }\n // Stack\n transform.push({\n type: 'stack',\n groupby: this.getGroupbyFields().concat(facetby),\n field: field,\n sort: sort,\n as: as,\n offset: offset\n });\n return transform;\n };\n return StackNode;\n}(dataflow_1.DataFlowNode));\nexports.StackNode = StackNode;\n//# sourceMappingURL=stack.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction isLogicalOr(op) {\n return !!op.or;\n}\nexports.isLogicalOr = isLogicalOr;\nfunction isLogicalAnd(op) {\n return !!op.and;\n}\nexports.isLogicalAnd = isLogicalAnd;\nfunction isLogicalNot(op) {\n return !!op.not;\n}\nexports.isLogicalNot = isLogicalNot;\nfunction forEachLeaf(op, fn) {\n if (isLogicalNot(op)) {\n forEachLeaf(op.not, fn);\n }\n else if (isLogicalAnd(op)) {\n for (var _i = 0, _a = op.and; _i < _a.length; _i++) {\n var subop = _a[_i];\n forEachLeaf(subop, fn);\n }\n }\n else if (isLogicalOr(op)) {\n for (var _b = 0, _c = op.or; _b < _c.length; _b++) {\n var subop = _c[_b];\n forEachLeaf(subop, fn);\n }\n }\n else {\n fn(op);\n }\n}\nexports.forEachLeaf = forEachLeaf;\nfunction normalizeLogicalOperand(op, normalizer) {\n if (isLogicalNot(op)) {\n return { not: normalizeLogicalOperand(op.not, normalizer) };\n }\n else if (isLogicalAnd(op)) {\n return { and: op.and.map(function (o) { return normalizeLogicalOperand(o, normalizer); }) };\n }\n else if (isLogicalOr(op)) {\n return { or: op.or.map(function (o) { return normalizeLogicalOperand(o, normalizer); }) };\n }\n else {\n return normalizer(op);\n }\n}\nexports.normalizeLogicalOperand = normalizeLogicalOperand;\n//# sourceMappingURL=logical.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar channel_1 = require(\"../channel\");\nvar log = tslib_1.__importStar(require(\"../log\"));\nvar util_1 = require(\"../util\");\nvar model_1 = require(\"./model\");\nfunction defaultScaleResolve(channel, model) {\n if (model_1.isLayerModel(model) || model_1.isFacetModel(model)) {\n return 'shared';\n }\n else if (model_1.isConcatModel(model) || model_1.isRepeatModel(model)) {\n return util_1.contains(channel_1.POSITION_SCALE_CHANNELS, channel) ? 'independent' : 'shared';\n }\n /* istanbul ignore next: should never reach here. */\n throw new Error('invalid model type for resolve');\n}\nexports.defaultScaleResolve = defaultScaleResolve;\nfunction parseGuideResolve(resolve, channel) {\n var channelScaleResolve = resolve.scale[channel];\n var guide = util_1.contains(channel_1.POSITION_SCALE_CHANNELS, channel) ? 'axis' : 'legend';\n if (channelScaleResolve === 'independent') {\n if (resolve[guide][channel] === 'shared') {\n log.warn(log.message.independentScaleMeansIndependentGuide(channel));\n }\n return 'independent';\n }\n return resolve[guide][channel] || 'shared';\n}\nexports.parseGuideResolve = parseGuideResolve;\n//# sourceMappingURL=resolve.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar common_1 = require(\"../common\");\nvar mixins = tslib_1.__importStar(require(\"./mixins\"));\nvar ref = tslib_1.__importStar(require(\"./valueref\"));\nfunction encodeEntry(model, fixedShape) {\n var config = model.config, width = model.width, height = model.height;\n return tslib_1.__assign({}, mixins.baseEncodeEntry(model, { size: 'include', orient: 'ignore' }), mixins.pointPosition('x', model, ref.mid(width)), mixins.pointPosition('y', model, ref.mid(height)), mixins.nonPosition('size', model), shapeMixins(model, config, fixedShape));\n}\nfunction shapeMixins(model, config, fixedShape) {\n if (fixedShape) {\n return { shape: { value: fixedShape } };\n }\n return mixins.nonPosition('shape', model, { defaultValue: common_1.getMarkConfig('shape', model.markDef, config) });\n}\nexports.shapeMixins = shapeMixins;\nexports.point = {\n vgMark: 'symbol',\n encodeEntry: function (model) {\n return encodeEntry(model);\n }\n};\nexports.circle = {\n vgMark: 'symbol',\n encodeEntry: function (model) {\n return encodeEntry(model, 'circle');\n }\n};\nexports.square = {\n vgMark: 'symbol',\n encodeEntry: function (model) {\n return encodeEntry(model, 'square');\n }\n};\n//# sourceMappingURL=point.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar channel_1 = require(\"../channel\");\nvar vlEncoding = tslib_1.__importStar(require(\"../encoding\"));\nvar encoding_1 = require(\"../encoding\");\nvar fielddef_1 = require(\"../fielddef\");\nvar mark_1 = require(\"../mark\");\nvar stack_1 = require(\"../stack\");\nvar util_1 = require(\"../util\");\nvar parse_1 = require(\"./axis/parse\");\nvar parse_2 = require(\"./data/parse\");\nvar assemble_1 = require(\"./layoutsize/assemble\");\nvar parse_3 = require(\"./layoutsize/parse\");\nvar init_1 = require(\"./mark/init\");\nvar mark_2 = require(\"./mark/mark\");\nvar model_1 = require(\"./model\");\nvar repeater_1 = require(\"./repeater\");\nvar selection_1 = require(\"./selection/selection\");\n/**\n * Internal model of Vega-Lite specification for the compiler.\n */\nvar UnitModel = /** @class */ (function (_super) {\n tslib_1.__extends(UnitModel, _super);\n function UnitModel(spec, parent, parentGivenName, parentGivenSize, repeater, config, fit) {\n if (parentGivenSize === void 0) { parentGivenSize = {}; }\n var _this = _super.call(this, spec, parent, parentGivenName, config, repeater, undefined) || this;\n _this.fit = fit;\n _this.type = 'unit';\n _this.specifiedScales = {};\n _this.specifiedAxes = {};\n _this.specifiedLegends = {};\n _this.specifiedProjection = {};\n _this.selection = {};\n _this.children = [];\n _this.initSize(tslib_1.__assign({}, parentGivenSize, (spec.width ? { width: spec.width } : {}), (spec.height ? { height: spec.height } : {})));\n var mark = mark_1.isMarkDef(spec.mark) ? spec.mark.type : spec.mark;\n var encoding = _this.encoding = encoding_1.normalizeEncoding(repeater_1.replaceRepeaterInEncoding(spec.encoding || {}, repeater), mark);\n _this.markDef = init_1.normalizeMarkDef(spec.mark, encoding, config);\n // calculate stack properties\n _this.stack = stack_1.stack(mark, encoding, _this.config.stack);\n _this.specifiedScales = _this.initScales(mark, encoding);\n _this.specifiedAxes = _this.initAxes(encoding);\n _this.specifiedLegends = _this.initLegend(encoding);\n _this.specifiedProjection = spec.projection;\n // Selections will be initialized upon parse.\n _this.selection = spec.selection;\n return _this;\n }\n Object.defineProperty(UnitModel.prototype, \"hasProjection\", {\n get: function () {\n var encoding = this.encoding;\n var isGeoShapeMark = this.mark === mark_1.GEOSHAPE;\n var hasGeoPosition = encoding && channel_1.GEOPOSITION_CHANNELS.some(function (channel) { return fielddef_1.isFieldDef(encoding[channel]); });\n return isGeoShapeMark || hasGeoPosition;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return specified Vega-lite scale domain for a particular channel\n * @param channel\n */\n UnitModel.prototype.scaleDomain = function (channel) {\n var scale = this.specifiedScales[channel];\n return scale ? scale.domain : undefined;\n };\n UnitModel.prototype.axis = function (channel) {\n return this.specifiedAxes[channel];\n };\n UnitModel.prototype.legend = function (channel) {\n return this.specifiedLegends[channel];\n };\n UnitModel.prototype.initScales = function (mark, encoding) {\n return channel_1.SCALE_CHANNELS.reduce(function (scales, channel) {\n var fieldDef;\n var specifiedScale;\n var channelDef = encoding[channel];\n if (fielddef_1.isFieldDef(channelDef)) {\n fieldDef = channelDef;\n specifiedScale = channelDef.scale;\n }\n else if (fielddef_1.hasConditionalFieldDef(channelDef)) {\n fieldDef = channelDef.condition;\n specifiedScale = channelDef.condition['scale'];\n }\n else if (channel === 'x') {\n fieldDef = fielddef_1.getFieldDef(encoding.x2);\n }\n else if (channel === 'y') {\n fieldDef = fielddef_1.getFieldDef(encoding.y2);\n }\n if (fieldDef) {\n scales[channel] = specifiedScale || {};\n }\n return scales;\n }, {});\n };\n UnitModel.prototype.initAxes = function (encoding) {\n return [channel_1.X, channel_1.Y].reduce(function (_axis, channel) {\n // Position Axis\n // TODO: handle ConditionFieldDef\n var channelDef = encoding[channel];\n if (fielddef_1.isFieldDef(channelDef) ||\n (channel === channel_1.X && fielddef_1.isFieldDef(encoding.x2)) ||\n (channel === channel_1.Y && fielddef_1.isFieldDef(encoding.y2))) {\n var axisSpec = fielddef_1.isFieldDef(channelDef) ? channelDef.axis : null;\n // We no longer support false in the schema, but we keep false here for backward compatibility.\n if (axisSpec !== null && axisSpec !== false) {\n _axis[channel] = tslib_1.__assign({}, axisSpec);\n }\n }\n return _axis;\n }, {});\n };\n UnitModel.prototype.initLegend = function (encoding) {\n return channel_1.NONPOSITION_SCALE_CHANNELS.reduce(function (_legend, channel) {\n var channelDef = encoding[channel];\n if (channelDef) {\n var legend = fielddef_1.isFieldDef(channelDef) ? channelDef.legend :\n (fielddef_1.hasConditionalFieldDef(channelDef)) ? channelDef.condition['legend'] : null;\n if (legend !== null && legend !== false) {\n _legend[channel] = tslib_1.__assign({}, legend);\n }\n }\n return _legend;\n }, {});\n };\n UnitModel.prototype.parseData = function () {\n this.component.data = parse_2.parseData(this);\n };\n UnitModel.prototype.parseLayoutSize = function () {\n parse_3.parseUnitLayoutSize(this);\n };\n UnitModel.prototype.parseSelection = function () {\n this.component.selection = selection_1.parseUnitSelection(this, this.selection);\n };\n UnitModel.prototype.parseMarkGroup = function () {\n this.component.mark = mark_2.parseMarkGroup(this);\n };\n UnitModel.prototype.parseAxisAndHeader = function () {\n this.component.axes = parse_1.parseUnitAxis(this);\n };\n UnitModel.prototype.assembleSelectionTopLevelSignals = function (signals) {\n return selection_1.assembleTopLevelSignals(this, signals);\n };\n UnitModel.prototype.assembleSelectionSignals = function () {\n return selection_1.assembleUnitSelectionSignals(this, []);\n };\n UnitModel.prototype.assembleSelectionData = function (data) {\n return selection_1.assembleUnitSelectionData(this, data);\n };\n UnitModel.prototype.assembleLayout = function () {\n return null;\n };\n UnitModel.prototype.assembleLayoutSignals = function () {\n return assemble_1.assembleLayoutSignals(this);\n };\n UnitModel.prototype.assembleMarks = function () {\n var marks = this.component.mark || [];\n // If this unit is part of a layer, selections should augment\n // all in concert rather than each unit individually. This\n // ensures correct interleaving of clipping and brushed marks.\n if (!this.parent || !model_1.isLayerModel(this.parent)) {\n marks = selection_1.assembleUnitSelectionMarks(this, marks);\n }\n return marks.map(this.correctDataNames);\n };\n UnitModel.prototype.assembleLayoutSize = function () {\n return {\n width: this.getSizeSignalRef('width'),\n height: this.getSizeSignalRef('height')\n };\n };\n UnitModel.prototype.getMapping = function () {\n return this.encoding;\n };\n UnitModel.prototype.toSpec = function (excludeConfig, excludeData) {\n var encoding = util_1.duplicate(this.encoding);\n var spec;\n spec = {\n mark: this.markDef,\n encoding: encoding\n };\n if (!excludeConfig) {\n spec.config = util_1.duplicate(this.config);\n }\n if (!excludeData) {\n spec.data = util_1.duplicate(this.data);\n }\n // remove defaults\n return spec;\n };\n Object.defineProperty(UnitModel.prototype, \"mark\", {\n get: function () {\n return this.markDef.type;\n },\n enumerable: true,\n configurable: true\n });\n UnitModel.prototype.channelHasField = function (channel) {\n return vlEncoding.channelHasField(this.encoding, channel);\n };\n UnitModel.prototype.fieldDef = function (channel) {\n var channelDef = this.encoding[channel];\n return fielddef_1.getFieldDef(channelDef);\n };\n return UnitModel;\n}(model_1.ModelWithField));\nexports.UnitModel = UnitModel;\n//# sourceMappingURL=unit.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar inputs_1 = tslib_1.__importDefault(require(\"./inputs\"));\nvar nearest_1 = tslib_1.__importDefault(require(\"./nearest\"));\nvar project_1 = tslib_1.__importDefault(require(\"./project\"));\nvar scales_1 = tslib_1.__importDefault(require(\"./scales\"));\nvar toggle_1 = tslib_1.__importDefault(require(\"./toggle\"));\nvar translate_1 = tslib_1.__importDefault(require(\"./translate\"));\nvar zoom_1 = tslib_1.__importDefault(require(\"./zoom\"));\nvar compilers = { project: project_1.default, toggle: toggle_1.default, scales: scales_1.default,\n translate: translate_1.default, zoom: zoom_1.default, inputs: inputs_1.default, nearest: nearest_1.default };\nfunction forEachTransform(selCmpt, cb) {\n for (var t in compilers) {\n if (compilers[t].has(selCmpt)) {\n cb(compilers[t]);\n }\n }\n}\nexports.forEachTransform = forEachTransform;\n//# sourceMappingURL=transforms.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar mixins = tslib_1.__importStar(require(\"./mixins\"));\nvar ref = tslib_1.__importStar(require(\"./valueref\"));\nexports.rule = {\n vgMark: 'rule',\n encodeEntry: function (model) {\n var _config = model.config, markDef = model.markDef, width = model.width, height = model.height;\n var orient = markDef.orient;\n if (!model.encoding.x && !model.encoding.y && !model.encoding.latitude && !model.encoding.longitude) {\n // Show nothing if we have none of x, y, lat, and long.\n return {};\n }\n return tslib_1.__assign({}, mixins.baseEncodeEntry(model, { size: 'ignore', orient: 'ignore' }), mixins.pointPosition('x', model, orient === 'horizontal' ? 'zeroOrMin' : ref.mid(width)), mixins.pointPosition('y', model, orient === 'vertical' ? 'zeroOrMin' : ref.mid(height)), (orient !== 'vertical' ? mixins.pointPosition2(model, 'zeroOrMax', 'x2') : {}), (orient !== 'horizontal' ? mixins.pointPosition2(model, 'zeroOrMax', 'y2') : {}), mixins.nonPosition('size', model, {\n vgChannel: 'strokeWidth',\n defaultValue: markDef.size\n }));\n }\n};\n//# sourceMappingURL=rule.js.map","\"use strict\";\n/*\n * Constants and utilities for encoding channels (Visual variables)\n * such as 'x', 'y', 'color'.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"./util\");\nvar Channel;\n(function (Channel) {\n // Facet\n Channel.ROW = 'row';\n Channel.COLUMN = 'column';\n // Position\n Channel.X = 'x';\n Channel.Y = 'y';\n Channel.X2 = 'x2';\n Channel.Y2 = 'y2';\n // Geo Position\n Channel.LATITUDE = 'latitude';\n Channel.LONGITUDE = 'longitude';\n Channel.LATITUDE2 = 'latitude2';\n Channel.LONGITUDE2 = 'longitude2';\n // Mark property with scale\n Channel.COLOR = 'color';\n Channel.FILL = 'fill';\n Channel.STROKE = 'stroke';\n Channel.SHAPE = 'shape';\n Channel.SIZE = 'size';\n Channel.OPACITY = 'opacity';\n // Non-scale channel\n Channel.TEXT = 'text';\n Channel.ORDER = 'order';\n Channel.DETAIL = 'detail';\n Channel.KEY = 'key';\n Channel.TOOLTIP = 'tooltip';\n Channel.HREF = 'href';\n})(Channel = exports.Channel || (exports.Channel = {}));\nexports.X = Channel.X;\nexports.Y = Channel.Y;\nexports.X2 = Channel.X2;\nexports.Y2 = Channel.Y2;\nexports.LATITUDE = Channel.LATITUDE;\nexports.LATITUDE2 = Channel.LATITUDE2;\nexports.LONGITUDE = Channel.LONGITUDE;\nexports.LONGITUDE2 = Channel.LONGITUDE2;\nexports.ROW = Channel.ROW;\nexports.COLUMN = Channel.COLUMN;\nexports.SHAPE = Channel.SHAPE;\nexports.SIZE = Channel.SIZE;\nexports.COLOR = Channel.COLOR;\nexports.FILL = Channel.FILL;\nexports.STROKE = Channel.STROKE;\nexports.TEXT = Channel.TEXT;\nexports.DETAIL = Channel.DETAIL;\nexports.KEY = Channel.KEY;\nexports.ORDER = Channel.ORDER;\nexports.OPACITY = Channel.OPACITY;\nexports.TOOLTIP = Channel.TOOLTIP;\nexports.HREF = Channel.HREF;\nexports.GEOPOSITION_CHANNEL_INDEX = {\n longitude: 1,\n longitude2: 1,\n latitude: 1,\n latitude2: 1,\n};\nexports.GEOPOSITION_CHANNELS = util_1.flagKeys(exports.GEOPOSITION_CHANNEL_INDEX);\nvar UNIT_CHANNEL_INDEX = tslib_1.__assign({ \n // position\n x: 1, y: 1, x2: 1, y2: 1 }, exports.GEOPOSITION_CHANNEL_INDEX, { \n // color\n color: 1, fill: 1, stroke: 1, \n // other non-position with scale\n opacity: 1, size: 1, shape: 1, \n // channels without scales\n order: 1, text: 1, detail: 1, key: 1, tooltip: 1, href: 1 });\nfunction isColorChannel(channel) {\n return channel === 'color' || channel === 'fill' || channel === 'stroke';\n}\nexports.isColorChannel = isColorChannel;\nvar FACET_CHANNEL_INDEX = {\n row: 1,\n column: 1\n};\nvar CHANNEL_INDEX = tslib_1.__assign({}, UNIT_CHANNEL_INDEX, FACET_CHANNEL_INDEX);\nexports.CHANNELS = util_1.flagKeys(CHANNEL_INDEX);\nvar _o = CHANNEL_INDEX.order, _d = CHANNEL_INDEX.detail, SINGLE_DEF_CHANNEL_INDEX = tslib_1.__rest(CHANNEL_INDEX, [\"order\", \"detail\"]);\n/**\n * Channels that cannot have an array of channelDef.\n * model.fieldDef, getFieldDef only work for these channels.\n *\n * (The only two channels that can have an array of channelDefs are \"detail\" and \"order\".\n * Since there can be multiple fieldDefs for detail and order, getFieldDef/model.fieldDef\n * are not applicable for them. Similarly, selection projection won't work with \"detail\" and \"order\".)\n */\nexports.SINGLE_DEF_CHANNELS = util_1.flagKeys(SINGLE_DEF_CHANNEL_INDEX);\nfunction isChannel(str) {\n return !!CHANNEL_INDEX[str];\n}\nexports.isChannel = isChannel;\n// CHANNELS without COLUMN, ROW\nexports.UNIT_CHANNELS = util_1.flagKeys(UNIT_CHANNEL_INDEX);\n// NONPOSITION_CHANNELS = UNIT_CHANNELS without X, Y, X2, Y2;\nvar _x = UNIT_CHANNEL_INDEX.x, _y = UNIT_CHANNEL_INDEX.y, \n// x2 and y2 share the same scale as x and y\n_x2 = UNIT_CHANNEL_INDEX.x2, _y2 = UNIT_CHANNEL_INDEX.y2, _latitude = UNIT_CHANNEL_INDEX.latitude, _longitude = UNIT_CHANNEL_INDEX.longitude, _latitude2 = UNIT_CHANNEL_INDEX.latitude2, _longitude2 = UNIT_CHANNEL_INDEX.longitude2, \n// The rest of unit channels then have scale\nNONPOSITION_CHANNEL_INDEX = tslib_1.__rest(UNIT_CHANNEL_INDEX, [\"x\", \"y\", \"x2\", \"y2\", \"latitude\", \"longitude\", \"latitude2\", \"longitude2\"]);\nexports.NONPOSITION_CHANNELS = util_1.flagKeys(NONPOSITION_CHANNEL_INDEX);\n// POSITION_SCALE_CHANNELS = X and Y;\nvar POSITION_SCALE_CHANNEL_INDEX = { x: 1, y: 1 };\nexports.POSITION_SCALE_CHANNELS = util_1.flagKeys(POSITION_SCALE_CHANNEL_INDEX);\n// NON_POSITION_SCALE_CHANNEL = SCALE_CHANNELS without X, Y\nvar \n// x2 and y2 share the same scale as x and y\n// text and tooltip have format instead of scale,\n// href has neither format, nor scale\n_t = NONPOSITION_CHANNEL_INDEX.text, _tt = NONPOSITION_CHANNEL_INDEX.tooltip, _hr = NONPOSITION_CHANNEL_INDEX.href, \n// detail and order have no scale\n_dd = NONPOSITION_CHANNEL_INDEX.detail, _k = NONPOSITION_CHANNEL_INDEX.key, _oo = NONPOSITION_CHANNEL_INDEX.order, NONPOSITION_SCALE_CHANNEL_INDEX = tslib_1.__rest(NONPOSITION_CHANNEL_INDEX, [\"text\", \"tooltip\", \"href\", \"detail\", \"key\", \"order\"]);\nexports.NONPOSITION_SCALE_CHANNELS = util_1.flagKeys(NONPOSITION_SCALE_CHANNEL_INDEX);\n// Declare SCALE_CHANNEL_INDEX\nvar SCALE_CHANNEL_INDEX = tslib_1.__assign({}, POSITION_SCALE_CHANNEL_INDEX, NONPOSITION_SCALE_CHANNEL_INDEX);\n/** List of channels with scales */\nexports.SCALE_CHANNELS = util_1.flagKeys(SCALE_CHANNEL_INDEX);\nfunction isScaleChannel(channel) {\n return !!SCALE_CHANNEL_INDEX[channel];\n}\nexports.isScaleChannel = isScaleChannel;\n/**\n * Return whether a channel supports a particular mark type.\n * @param channel channel name\n * @param mark the mark type\n * @return whether the mark supports the channel\n */\nfunction supportMark(channel, mark) {\n return mark in getSupportedMark(channel);\n}\nexports.supportMark = supportMark;\n/**\n * Return a dictionary showing whether a channel supports mark type.\n * @param channel\n * @return A dictionary mapping mark types to boolean values.\n */\nfunction getSupportedMark(channel) {\n switch (channel) {\n case exports.COLOR:\n case exports.FILL:\n case exports.STROKE:\n case exports.DETAIL:\n case exports.KEY:\n case exports.TOOLTIP:\n case exports.HREF:\n case exports.ORDER: // TODO: revise (order might not support rect, which is not stackable?)\n case exports.OPACITY:\n case exports.ROW:\n case exports.COLUMN:\n return {\n point: true, tick: true, rule: true, circle: true, square: true,\n bar: true, rect: true, line: true, trail: true, area: true, text: true, geoshape: true\n };\n case exports.X:\n case exports.Y:\n case exports.LATITUDE:\n case exports.LONGITUDE:\n return {\n point: true, tick: true, rule: true, circle: true, square: true,\n bar: true, rect: true, line: true, trail: true, area: true, text: true\n };\n case exports.X2:\n case exports.Y2:\n case exports.LATITUDE2:\n case exports.LONGITUDE2:\n return {\n rule: true, bar: true, rect: true, area: true\n };\n case exports.SIZE:\n return {\n point: true, tick: true, rule: true, circle: true, square: true,\n bar: true, text: true, line: true, trail: true\n };\n case exports.SHAPE:\n return { point: true, geoshape: true };\n case exports.TEXT:\n return { text: true };\n }\n}\nexports.getSupportedMark = getSupportedMark;\nfunction rangeType(channel) {\n switch (channel) {\n case exports.X:\n case exports.Y:\n case exports.SIZE:\n case exports.OPACITY:\n // X2 and Y2 use X and Y scales, so they similarly have continuous range.\n case exports.X2:\n case exports.Y2:\n return 'continuous';\n case exports.ROW:\n case exports.COLUMN:\n case exports.SHAPE:\n // TEXT, TOOLTIP, and HREF have no scale but have discrete output\n case exports.TEXT:\n case exports.TOOLTIP:\n case exports.HREF:\n return 'discrete';\n // Color can be either continuous or discrete, depending on scale type.\n case exports.COLOR:\n case exports.FILL:\n case exports.STROKE:\n return 'flexible';\n // No scale, no range type.\n case exports.LATITUDE:\n case exports.LONGITUDE:\n case exports.LATITUDE2:\n case exports.LONGITUDE2:\n case exports.DETAIL:\n case exports.KEY:\n case exports.ORDER:\n return undefined;\n }\n /* istanbul ignore next: should never reach here. */\n throw new Error('rangeType not implemented for ' + channel);\n}\nexports.rangeType = rangeType;\n//# sourceMappingURL=channel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar vega_util_1 = require(\"vega-util\");\nvar multi_1 = require(\"./multi\");\nvar selection_1 = require(\"./selection\");\nvar single = {\n predicate: 'vlSingle',\n scaleDomain: 'vlSingleDomain',\n signals: multi_1.signals,\n topLevelSignals: function (model, selCmpt, signals) {\n var hasSignal = signals.filter(function (s) { return s.name === selCmpt.name; });\n var data = \"data(\" + vega_util_1.stringValue(selCmpt.name + selection_1.STORE) + \")\";\n var values = data + \"[0].values\";\n return hasSignal.length ? signals : signals.concat({\n name: selCmpt.name,\n update: data + \".length && {\" +\n selCmpt.project.map(function (p, i) { return p.field + \": \" + values + \"[\" + i + \"]\"; }).join(', ') + '}'\n });\n },\n modifyExpr: function (model, selCmpt) {\n var tpl = selCmpt.name + selection_1.TUPLE;\n return tpl + ', ' +\n (selCmpt.resolve === 'global' ? 'true' : \"{unit: \" + selection_1.unitName(model) + \"}\");\n }\n};\nexports.default = single;\n//# sourceMappingURL=single.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar split_1 = require(\"../split\");\n/**\n * Class to track interesting properties (see https://15721.courses.cs.cmu.edu/spring2016/papers/graefe-ieee1995.pdf)\n * about how fields have been parsed or whether they have been derived in a transforms. We use this to not parse the\n * same field again (or differently).\n */\nvar AncestorParse = /** @class */ (function (_super) {\n tslib_1.__extends(AncestorParse, _super);\n function AncestorParse(explicit, implicit, parseNothing) {\n if (explicit === void 0) { explicit = {}; }\n if (implicit === void 0) { implicit = {}; }\n if (parseNothing === void 0) { parseNothing = false; }\n var _this = _super.call(this, explicit, implicit) || this;\n _this.explicit = explicit;\n _this.implicit = implicit;\n _this.parseNothing = parseNothing;\n return _this;\n }\n AncestorParse.prototype.clone = function () {\n var clone = _super.prototype.clone.call(this);\n clone.parseNothing = this.parseNothing;\n return clone;\n };\n return AncestorParse;\n}(split_1.Split));\nexports.AncestorParse = AncestorParse;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar log = tslib_1.__importStar(require(\"../../../log\"));\nvar mark_1 = require(\"../../../mark\");\nvar selection_1 = require(\"../selection\");\nvar VORONOI = 'voronoi';\nvar nearest = {\n has: function (selCmpt) {\n return selCmpt.type !== 'interval' && selCmpt.nearest;\n },\n marks: function (model, selCmpt, marks) {\n var _a = selection_1.positionalProjections(selCmpt), x = _a.x, y = _a.y;\n var markType = model.mark;\n if (mark_1.isPathMark(markType)) {\n log.warn(log.message.nearestNotSupportForContinuous(markType));\n return marks;\n }\n var cellDef = {\n name: model.getName(VORONOI),\n type: 'path',\n from: { data: model.getName('marks') },\n encode: {\n enter: {\n fill: { value: 'transparent' },\n strokeWidth: { value: 0.35 },\n stroke: { value: 'transparent' },\n isVoronoi: { value: true }\n }\n },\n transform: [{\n type: 'voronoi',\n x: { expr: (x || (!x && !y)) ? 'datum.datum.x || 0' : '0' },\n y: { expr: (y || (!x && !y)) ? 'datum.datum.y || 0' : '0' },\n size: [model.getSizeSignalRef('width'), model.getSizeSignalRef('height')]\n }]\n };\n var index = 0;\n var exists = false;\n marks.forEach(function (mark, i) {\n var name = mark.name || '';\n if (name === model.component.mark[0].name) {\n index = i;\n }\n else if (name.indexOf(VORONOI) >= 0) {\n exists = true;\n }\n });\n if (!exists) {\n marks.splice(index + 1, 0, cellDef);\n }\n return marks;\n }\n};\nexports.default = nearest;\n//# sourceMappingURL=nearest.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.bytesToBase64 = bytesToBase64;\nexports.base64ToBytes = base64ToBytes;\nexports.base64encode = base64encode;\nexports.base64decode = base64decode;\n\n/*\r\nMIT License\r\n\r\nCopyright (c) 2020 Egor Nepomnyaschih\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n*/\n\n/*\r\n// This constant can also be computed with the following algorithm:\r\nconst base64abc = [],\r\n A = \"A\".charCodeAt(0),\r\n a = \"a\".charCodeAt(0),\r\n n = \"0\".charCodeAt(0);\r\nfor (let i = 0; i < 26; ++i) {\r\n base64abc.push(String.fromCharCode(A + i));\r\n}\r\nfor (let i = 0; i < 26; ++i) {\r\n base64abc.push(String.fromCharCode(a + i));\r\n}\r\nfor (let i = 0; i < 10; ++i) {\r\n base64abc.push(String.fromCharCode(n + i));\r\n}\r\nbase64abc.push(\"+\");\r\nbase64abc.push(\"/\");\r\n*/\nvar base64abc = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"+\", \"/\"];\n/*\r\n// This constant can also be computed with the following algorithm:\r\nconst l = 256, base64codes = new Uint8Array(l);\r\nfor (let i = 0; i < l; ++i) {\r\n base64codes[i] = 255; // invalid character\r\n}\r\nbase64abc.forEach((char, index) => {\r\n base64codes[char.charCodeAt(0)] = index;\r\n});\r\nbase64codes[\"=\".charCodeAt(0)] = 0; // ignored anyway, so we just need to prevent an error\r\n*/\n\nvar base64codes = [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 0, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51];\n\nfunction getBase64Code(charCode) {\n if (charCode >= base64codes.length) {\n throw new Error(\"Unable to parse base64 string.\");\n }\n\n var code = base64codes[charCode];\n\n if (code === 255) {\n throw new Error(\"Unable to parse base64 string.\");\n }\n\n return code;\n}\n\nfunction bytesToBase64(bytes) {\n var result = '',\n i,\n l = bytes.length;\n\n for (i = 2; i < l; i += 3) {\n result += base64abc[bytes[i - 2] >> 2];\n result += base64abc[(bytes[i - 2] & 0x03) << 4 | bytes[i - 1] >> 4];\n result += base64abc[(bytes[i - 1] & 0x0F) << 2 | bytes[i] >> 6];\n result += base64abc[bytes[i] & 0x3F];\n }\n\n if (i === l + 1) {\n // 1 octet yet to write\n result += base64abc[bytes[i - 2] >> 2];\n result += base64abc[(bytes[i - 2] & 0x03) << 4];\n result += \"==\";\n }\n\n if (i === l) {\n // 2 octets yet to write\n result += base64abc[bytes[i - 2] >> 2];\n result += base64abc[(bytes[i - 2] & 0x03) << 4 | bytes[i - 1] >> 4];\n result += base64abc[(bytes[i - 1] & 0x0F) << 2];\n result += \"=\";\n }\n\n return result;\n}\n\nfunction base64ToBytes(str) {\n if (str.length % 4 !== 0) {\n throw new Error(\"Unable to parse base64 string.\");\n }\n\n var index = str.indexOf(\"=\");\n\n if (index !== -1 && index < str.length - 2) {\n throw new Error(\"Unable to parse base64 string.\");\n }\n\n var missingOctets = str.endsWith(\"==\") ? 2 : str.endsWith(\"=\") ? 1 : 0,\n n = str.length,\n result = new Uint8Array(3 * (n / 4)),\n buffer;\n\n for (var i = 0, j = 0; i < n; i += 4, j += 3) {\n buffer = getBase64Code(str.charCodeAt(i)) << 18 | getBase64Code(str.charCodeAt(i + 1)) << 12 | getBase64Code(str.charCodeAt(i + 2)) << 6 | getBase64Code(str.charCodeAt(i + 3));\n result[j] = buffer >> 16;\n result[j + 1] = buffer >> 8 & 0xFF;\n result[j + 2] = buffer & 0xFF;\n }\n\n return result.subarray(0, result.length - missingOctets);\n}\n\nfunction base64encode(str) {\n var encoder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new TextEncoder();\n return bytesToBase64(encoder.encode(str));\n}\n\nfunction base64decode(str) {\n var decoder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new TextDecoder();\n return decoder.decode(base64ToBytes(str));\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQXBDLEdBQ0EsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFKLENBQWUsQ0FBQyxHQUFHLENBQW5CLENBQUQsQ0FBYixJQUF3QyxFQUR4QyxHQUVBLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBSixDQUFlLENBQUMsR0FBRyxDQUFuQixDQUFELENBQWIsSUFBd0MsQ0FGeEMsR0FHQSxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQUosQ0FBZSxDQUFDLEdBQUcsQ0FBbkIsQ0FBRCxDQUpkO0FBS0EsSUFBQSxNQUFNLENBQUMsQ0FBRCxDQUFOLEdBQVksTUFBTSxJQUFJLEVBQXRCO0FBQ0EsSUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUwsQ0FBTixHQUFpQixNQUFNLElBQUksQ0FBWCxHQUFnQixJQUFoQztBQUNBLElBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFMLENBQU4sR0FBZ0IsTUFBTSxHQUFHLElBQXpCO0FBQ0E7O0FBQ0QsU0FBTyxNQUFNLENBQUMsUUFBUCxDQUFnQixDQUFoQixFQUFtQixNQUFNLENBQUMsTUFBUCxHQUFnQixhQUFuQyxDQUFQO0FBQ0E7O0FBRUssU0FBVSxZQUFWLENBQXVCLEdBQXZCLEVBQW1IO0FBQUEsTUFBL0UsT0FBK0UsdUVBQWpCLElBQUksV0FBSixFQUFpQjtBQUN4SCxTQUFPLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBUixDQUFlLEdBQWYsQ0FBRCxDQUFwQjtBQUNBOztBQUVLLFNBQVUsWUFBVixDQUF1QixHQUF2QixFQUEwRztBQUFBLE1BQXRFLE9BQXNFLHVFQUFqQixJQUFJLFdBQUosRUFBaUI7QUFDL0csU0FBTyxPQUFPLENBQUMsTUFBUixDQUFlLGFBQWEsQ0FBQyxHQUFELENBQTVCLENBQVA7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5NSVQgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpIDIwMjAgRWdvciBOZXBvbW55YXNjaGloXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS5cbiovXG5cbi8qXG4vLyBUaGlzIGNvbnN0YW50IGNhbiBhbHNvIGJlIGNvbXB1dGVkIHdpdGggdGhlIGZvbGxvd2luZyBhbGdvcml0aG06XG5jb25zdCBiYXNlNjRhYmMgPSBbXSxcblx0QSA9IFwiQVwiLmNoYXJDb2RlQXQoMCksXG5cdGEgPSBcImFcIi5jaGFyQ29kZUF0KDApLFxuXHRuID0gXCIwXCIuY2hhckNvZGVBdCgwKTtcbmZvciAobGV0IGkgPSAwOyBpIDwgMjY7ICsraSkge1xuXHRiYXNlNjRhYmMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKEEgKyBpKSk7XG59XG5mb3IgKGxldCBpID0gMDsgaSA8IDI2OyArK2kpIHtcblx0YmFzZTY0YWJjLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhICsgaSkpO1xufVxuZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgKytpKSB7XG5cdGJhc2U2NGFiYy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobiArIGkpKTtcbn1cbmJhc2U2NGFiYy5wdXNoKFwiK1wiKTtcbmJhc2U2NGFiYy5wdXNoKFwiL1wiKTtcbiovXG5jb25zdCBiYXNlNjRhYmMgPSBbXG5cdFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiLCBcIkVcIiwgXCJGXCIsIFwiR1wiLCBcIkhcIiwgXCJJXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLFxuXHRcIk5cIiwgXCJPXCIsIFwiUFwiLCBcIlFcIiwgXCJSXCIsIFwiU1wiLCBcIlRcIiwgXCJVXCIsIFwiVlwiLCBcIldcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIixcblx0XCJhXCIsIFwiYlwiLCBcImNcIiwgXCJkXCIsIFwiZVwiLCBcImZcIiwgXCJnXCIsIFwiaFwiLCBcImlcIiwgXCJqXCIsIFwia1wiLCBcImxcIiwgXCJtXCIsXG5cdFwiblwiLCBcIm9cIiwgXCJwXCIsIFwicVwiLCBcInJcIiwgXCJzXCIsIFwidFwiLCBcInVcIiwgXCJ2XCIsIFwid1wiLCBcInhcIiwgXCJ5XCIsIFwielwiLFxuXHRcIjBcIiwgXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIiwgXCIrXCIsIFwiL1wiXG5dO1xuXG4vKlxuLy8gVGhpcyBjb25zdGFudCBjYW4gYWxzbyBiZSBjb21wdXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOlxuY29uc3QgbCA9IDI1NiwgYmFzZTY0Y29kZXMgPSBuZXcgVWludDhBcnJheShsKTtcbmZvciAobGV0IGkgPSAwOyBpIDwgbDsgKytpKSB7XG5cdGJhc2U2NGNvZGVzW2ldID0gMjU1OyAvLyBpbnZhbGlkIGNoYXJhY3RlclxufVxuYmFzZTY0YWJjLmZvckVhY2goKGNoYXIsIGluZGV4KSA9PiB7XG5cdGJhc2U2NGNvZGVzW2NoYXIuY2hhckNvZGVBdCgwKV0gPSBpbmRleDtcbn0pO1xuYmFzZTY0Y29kZXNbXCI9XCIuY2hhckNvZGVBdCgwKV0gPSAwOyAvLyBpZ25vcmVkIGFueXdheSwgc28gd2UganVzdCBuZWVkIHRvIHByZXZlbnQgYW4gZXJyb3JcbiovXG5jb25zdCBiYXNlNjRjb2RlcyA9IFtcblx0MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LFxuXHQyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsXG5cdDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCA2MiwgMjU1LCAyNTUsIDI1NSwgNjMsXG5cdDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCAyNTUsIDI1NSwgMjU1LCAwLCAyNTUsIDI1NSxcblx0MjU1LCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsXG5cdDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsXG5cdDI1NSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCxcblx0NDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxXG5dO1xuXG5mdW5jdGlvbiBnZXRCYXNlNjRDb2RlKGNoYXJDb2RlOiBudW1iZXIpIHtcblx0aWYgKGNoYXJDb2RlID49IGJhc2U2NGNvZGVzLmxlbmd0aCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBiYXNlNjQgc3RyaW5nLlwiKTtcblx0fVxuXHRjb25zdCBjb2RlID0gYmFzZTY0Y29kZXNbY2hhckNvZGVdO1xuXHRpZiAoY29kZSA9PT0gMjU1KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHBhcnNlIGJhc2U2NCBzdHJpbmcuXCIpO1xuXHR9XG5cdHJldHVybiBjb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnl0ZXNUb0Jhc2U2NChieXRlczogbnVtYmVyW10gfCBVaW50OEFycmF5KSB7XG5cdGxldCByZXN1bHQgPSAnJywgaSwgbCA9IGJ5dGVzLmxlbmd0aDtcblx0Zm9yIChpID0gMjsgaSA8IGw7IGkgKz0gMykge1xuXHRcdHJlc3VsdCArPSBiYXNlNjRhYmNbYnl0ZXNbaSAtIDJdID4+IDJdO1xuXHRcdHJlc3VsdCArPSBiYXNlNjRhYmNbKChieXRlc1tpIC0gMl0gJiAweDAzKSA8PCA0KSB8IChieXRlc1tpIC0gMV0gPj4gNCldO1xuXHRcdHJlc3VsdCArPSBiYXNlNjRhYmNbKChieXRlc1tpIC0gMV0gJiAweDBGKSA8PCAyKSB8IChieXRlc1tpXSA+PiA2KV07XG5cdFx0cmVzdWx0ICs9IGJhc2U2NGFiY1tieXRlc1tpXSAmIDB4M0ZdO1xuXHR9XG5cdGlmIChpID09PSBsICsgMSkgeyAvLyAxIG9jdGV0IHlldCB0byB3cml0ZVxuXHRcdHJlc3VsdCArPSBiYXNlNjRhYmNbYnl0ZXNbaSAtIDJdID4+IDJdO1xuXHRcdHJlc3VsdCArPSBiYXNlNjRhYmNbKGJ5dGVzW2kgLSAyXSAmIDB4MDMpIDw8IDRdO1xuXHRcdHJlc3VsdCArPSBcIj09XCI7XG5cdH1cblx0aWYgKGkgPT09IGwpIHsgLy8gMiBvY3RldHMgeWV0IHRvIHdyaXRlXG5cdFx0cmVzdWx0ICs9IGJhc2U2NGFiY1tieXRlc1tpIC0gMl0gPj4gMl07XG5cdFx0cmVzdWx0ICs9IGJhc2U2NGFiY1soKGJ5dGVzW2kgLSAyXSAmIDB4MDMpIDw8IDQpIHwgKGJ5dGVzW2kgLSAxXSA+PiA0KV07XG5cdFx0cmVzdWx0ICs9IGJhc2U2NGFiY1soYnl0ZXNbaSAtIDFdICYgMHgwRikgPDwgMl07XG5cdFx0cmVzdWx0ICs9IFwiPVwiO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlNjRUb0J5dGVzKHN0cjogc3RyaW5nKSB7XG5cdGlmIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBiYXNlNjQgc3RyaW5nLlwiKTtcblx0fVxuXHRjb25zdCBpbmRleCA9IHN0ci5pbmRleE9mKFwiPVwiKTtcblx0aWYgKGluZGV4ICE9PSAtMSAmJiBpbmRleCA8IHN0ci5sZW5ndGggLSAyKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHBhcnNlIGJhc2U2NCBzdHJpbmcuXCIpO1xuXHR9XG5cdGxldCBtaXNzaW5nT2N0ZXRzID0gc3RyLmVuZHNXaXRoKFwiPT1cIikgPyAyIDogc3RyLmVuZHNXaXRoKFwiPVwiKSA/IDEgOiAwLFxuXHRcdG4gPSBzdHIubGVuZ3RoLFxuXHRcdHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KDMgKiAobiAvIDQpKSxcblx0XHRidWZmZXI6IG51bWJlcjtcblx0Zm9yIChsZXQgaSA9IDAsIGogPSAwOyBpIDwgbjsgaSArPSA0LCBqICs9IDMpIHtcblx0XHRidWZmZXIgPVxuXHRcdFx0Z2V0QmFzZTY0Q29kZShzdHIuY2hhckNvZGVBdChpKSkgPDwgMTggfFxuXHRcdFx0Z2V0QmFzZTY0Q29kZShzdHIuY2hhckNvZGVBdChpICsgMSkpIDw8IDEyIHxcblx0XHRcdGdldEJhc2U2NENvZGUoc3RyLmNoYXJDb2RlQXQoaSArIDIpKSA8PCA2IHxcblx0XHRcdGdldEJhc2U2NENvZGUoc3RyLmNoYXJDb2RlQXQoaSArIDMpKTtcblx0XHRyZXN1bHRbal0gPSBidWZmZXIgPj4gMTY7XG5cdFx0cmVzdWx0W2ogKyAxXSA9IChidWZmZXIgPj4gOCkgJiAweEZGO1xuXHRcdHJlc3VsdFtqICsgMl0gPSBidWZmZXIgJiAweEZGO1xuXHR9XG5cdHJldHVybiByZXN1bHQuc3ViYXJyYXkoMCwgcmVzdWx0Lmxlbmd0aCAtIG1pc3NpbmdPY3RldHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0ZW5jb2RlKHN0cjogc3RyaW5nLCBlbmNvZGVyOiB7IGVuY29kZTogKHN0cjogc3RyaW5nKSA9PiBVaW50OEFycmF5IHwgbnVtYmVyW10gfSA9IG5ldyBUZXh0RW5jb2RlcigpKSB7XG5cdHJldHVybiBieXRlc1RvQmFzZTY0KGVuY29kZXIuZW5jb2RlKHN0cikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0ZGVjb2RlKHN0cjogc3RyaW5nLCBkZWNvZGVyOiB7IGRlY29kZTogKGJ5dGVzOiBVaW50OEFycmF5KSA9PiBzdHJpbmcgfSA9IG5ldyBUZXh0RGVjb2RlcigpKSB7XG5cdHJldHVybiBkZWNvZGVyLmRlY29kZShiYXNlNjRUb0J5dGVzKHN0cikpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar util_1 = require(\"../../../util\");\nvar selection_1 = require(\"../selection\");\nvar nearest_1 = tslib_1.__importDefault(require(\"./nearest\"));\nvar inputBindings = {\n has: function (selCmpt) {\n return selCmpt.type === 'single' && selCmpt.resolve === 'global' &&\n selCmpt.bind && selCmpt.bind !== 'scales';\n },\n topLevelSignals: function (model, selCmpt, signals) {\n var name = selCmpt.name;\n var proj = selCmpt.project;\n var bind = selCmpt.bind;\n var datum = nearest_1.default.has(selCmpt) ?\n '(item().isVoronoi ? datum.datum : datum)' : 'datum';\n proj.forEach(function (p) {\n var sgname = util_1.varName(name + \"_\" + p.field);\n var hasSignal = signals.filter(function (s) { return s.name === sgname; });\n if (!hasSignal.length) {\n signals.unshift({\n name: sgname,\n value: '',\n on: [{\n events: selCmpt.events,\n update: \"datum && item().mark.marktype !== 'group' ? \" + util_1.accessPathWithDatum(p.field, datum) + \" : null\"\n }],\n bind: bind[p.field] || bind[p.channel] || bind\n });\n }\n });\n return signals;\n },\n signals: function (model, selCmpt, signals) {\n var name = selCmpt.name;\n var proj = selCmpt.project;\n var signal = signals.filter(function (s) { return s.name === name + selection_1.TUPLE; })[0];\n var fields = proj.map(function (p) { return vega_util_1.stringValue(p.field); }).join(', ');\n var values = proj.map(function (p) { return util_1.varName(name + \"_\" + p.field); });\n if (values.length) {\n signal.update = values.join(' && ') + \" ? {fields: [\" + fields + \"], values: [\" + values.join(', ') + \"]} : null\";\n }\n delete signal.value;\n delete signal.on;\n return signals;\n }\n};\nexports.default = inputBindings;\n//# sourceMappingURL=inputs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar log = tslib_1.__importStar(require(\"../log\"));\nvar util_1 = require(\"../util\");\n/**\n * Generic class for storing properties that are explicitly specified\n * and implicitly determined by the compiler.\n * This is important for scale/axis/legend merging as\n * we want to prioritize properties that users explicitly specified.\n */\nvar Split = /** @class */ (function () {\n function Split(explicit, implicit) {\n if (explicit === void 0) { explicit = {}; }\n if (implicit === void 0) { implicit = {}; }\n this.explicit = explicit;\n this.implicit = implicit;\n }\n Split.prototype.clone = function () {\n return new Split(util_1.duplicate(this.explicit), util_1.duplicate(this.implicit));\n };\n Split.prototype.combine = function () {\n // FIXME remove \"as any\".\n // Add \"as any\" to avoid an error \"Spread types may only be created from object types\".\n return tslib_1.__assign({}, this.explicit, this.implicit);\n };\n Split.prototype.get = function (key) {\n // Explicit has higher precedence\n return this.explicit[key] !== undefined ? this.explicit[key] : this.implicit[key];\n };\n Split.prototype.getWithExplicit = function (key) {\n // Explicit has higher precedence\n if (this.explicit[key] !== undefined) {\n return { explicit: true, value: this.explicit[key] };\n }\n else if (this.implicit[key] !== undefined) {\n return { explicit: false, value: this.implicit[key] };\n }\n return { explicit: false, value: undefined };\n };\n Split.prototype.setWithExplicit = function (key, value) {\n if (value.value !== undefined) {\n this.set(key, value.value, value.explicit);\n }\n };\n Split.prototype.set = function (key, value, explicit) {\n delete this[explicit ? 'implicit' : 'explicit'][key];\n this[explicit ? 'explicit' : 'implicit'][key] = value;\n return this;\n };\n Split.prototype.copyKeyFromSplit = function (key, s) {\n // Explicit has higher precedence\n if (s.explicit[key] !== undefined) {\n this.set(key, s.explicit[key], true);\n }\n else if (s.implicit[key] !== undefined) {\n this.set(key, s.implicit[key], false);\n }\n };\n Split.prototype.copyKeyFromObject = function (key, s) {\n // Explicit has higher precedence\n if (s[key] !== undefined) {\n this.set(key, s[key], true);\n }\n };\n /**\n * Merge split object into this split object. Properties from the other split\n * overwrite properties from this split.\n */\n Split.prototype.copyAll = function (other) {\n for (var _i = 0, _a = util_1.keys(other.combine()); _i < _a.length; _i++) {\n var key = _a[_i];\n var val = other.getWithExplicit(key);\n this.setWithExplicit(key, val);\n }\n };\n return Split;\n}());\nexports.Split = Split;\nfunction makeExplicit(value) {\n return {\n explicit: true,\n value: value\n };\n}\nexports.makeExplicit = makeExplicit;\nfunction makeImplicit(value) {\n return {\n explicit: false,\n value: value\n };\n}\nexports.makeImplicit = makeImplicit;\nfunction tieBreakByComparing(compare) {\n return function (v1, v2, property, propertyOf) {\n var diff = compare(v1.value, v2.value);\n if (diff > 0) {\n return v1;\n }\n else if (diff < 0) {\n return v2;\n }\n return defaultTieBreaker(v1, v2, property, propertyOf);\n };\n}\nexports.tieBreakByComparing = tieBreakByComparing;\nfunction defaultTieBreaker(v1, v2, property, propertyOf) {\n if (v1.explicit && v2.explicit) {\n log.warn(log.message.mergeConflictingProperty(property, propertyOf, v1.value, v2.value));\n }\n // If equal score, prefer v1.\n return v1;\n}\nexports.defaultTieBreaker = defaultTieBreaker;\nfunction mergeValuesWithExplicit(v1, v2, property, propertyOf, tieBreaker) {\n if (tieBreaker === void 0) { tieBreaker = defaultTieBreaker; }\n if (v1 === undefined || v1.value === undefined) {\n // For first run\n return v2;\n }\n if (v1.explicit && !v2.explicit) {\n return v1;\n }\n else if (v2.explicit && !v1.explicit) {\n return v2;\n }\n else if (util_1.stringify(v1.value) === util_1.stringify(v2.value)) {\n return v1;\n }\n else {\n return tieBreaker(v1, v2, property, propertyOf);\n }\n}\nexports.mergeValuesWithExplicit = mergeValuesWithExplicit;\n//# sourceMappingURL=split.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar datetime_1 = require(\"./datetime\");\nvar log = tslib_1.__importStar(require(\"./log\"));\nvar util_1 = require(\"./util\");\nvar TimeUnit;\n(function (TimeUnit) {\n TimeUnit.YEAR = 'year';\n TimeUnit.MONTH = 'month';\n TimeUnit.DAY = 'day';\n TimeUnit.DATE = 'date';\n TimeUnit.HOURS = 'hours';\n TimeUnit.MINUTES = 'minutes';\n TimeUnit.SECONDS = 'seconds';\n TimeUnit.MILLISECONDS = 'milliseconds';\n TimeUnit.YEARMONTH = 'yearmonth';\n TimeUnit.YEARMONTHDATE = 'yearmonthdate';\n TimeUnit.YEARMONTHDATEHOURS = 'yearmonthdatehours';\n TimeUnit.YEARMONTHDATEHOURSMINUTES = 'yearmonthdatehoursminutes';\n TimeUnit.YEARMONTHDATEHOURSMINUTESSECONDS = 'yearmonthdatehoursminutesseconds';\n // MONTHDATE always include 29 February since we use year 0th (which is a leap year);\n TimeUnit.MONTHDATE = 'monthdate';\n TimeUnit.HOURSMINUTES = 'hoursminutes';\n TimeUnit.HOURSMINUTESSECONDS = 'hoursminutesseconds';\n TimeUnit.MINUTESSECONDS = 'minutesseconds';\n TimeUnit.SECONDSMILLISECONDS = 'secondsmilliseconds';\n TimeUnit.QUARTER = 'quarter';\n TimeUnit.YEARQUARTER = 'yearquarter';\n TimeUnit.QUARTERMONTH = 'quartermonth';\n TimeUnit.YEARQUARTERMONTH = 'yearquartermonth';\n TimeUnit.UTCYEAR = 'utcyear';\n TimeUnit.UTCMONTH = 'utcmonth';\n TimeUnit.UTCDAY = 'utcday';\n TimeUnit.UTCDATE = 'utcdate';\n TimeUnit.UTCHOURS = 'utchours';\n TimeUnit.UTCMINUTES = 'utcminutes';\n TimeUnit.UTCSECONDS = 'utcseconds';\n TimeUnit.UTCMILLISECONDS = 'utcmilliseconds';\n TimeUnit.UTCYEARMONTH = 'utcyearmonth';\n TimeUnit.UTCYEARMONTHDATE = 'utcyearmonthdate';\n TimeUnit.UTCYEARMONTHDATEHOURS = 'utcyearmonthdatehours';\n TimeUnit.UTCYEARMONTHDATEHOURSMINUTES = 'utcyearmonthdatehoursminutes';\n TimeUnit.UTCYEARMONTHDATEHOURSMINUTESSECONDS = 'utcyearmonthdatehoursminutesseconds';\n // MONTHDATE always include 29 February since we use year 0th (which is a leap year);\n TimeUnit.UTCMONTHDATE = 'utcmonthdate';\n TimeUnit.UTCHOURSMINUTES = 'utchoursminutes';\n TimeUnit.UTCHOURSMINUTESSECONDS = 'utchoursminutesseconds';\n TimeUnit.UTCMINUTESSECONDS = 'utcminutesseconds';\n TimeUnit.UTCSECONDSMILLISECONDS = 'utcsecondsmilliseconds';\n TimeUnit.UTCQUARTER = 'utcquarter';\n TimeUnit.UTCYEARQUARTER = 'utcyearquarter';\n TimeUnit.UTCQUARTERMONTH = 'utcquartermonth';\n TimeUnit.UTCYEARQUARTERMONTH = 'utcyearquartermonth';\n})(TimeUnit = exports.TimeUnit || (exports.TimeUnit = {}));\n/** Time Unit that only corresponds to only one part of Date objects. */\nvar LOCAL_SINGLE_TIMEUNIT_INDEX = {\n year: 1,\n quarter: 1,\n month: 1,\n day: 1,\n date: 1,\n hours: 1,\n minutes: 1,\n seconds: 1,\n milliseconds: 1\n};\nexports.TIMEUNIT_PARTS = util_1.flagKeys(LOCAL_SINGLE_TIMEUNIT_INDEX);\nfunction isLocalSingleTimeUnit(timeUnit) {\n return !!LOCAL_SINGLE_TIMEUNIT_INDEX[timeUnit];\n}\nexports.isLocalSingleTimeUnit = isLocalSingleTimeUnit;\nvar UTC_SINGLE_TIMEUNIT_INDEX = {\n utcyear: 1,\n utcquarter: 1,\n utcmonth: 1,\n utcday: 1,\n utcdate: 1,\n utchours: 1,\n utcminutes: 1,\n utcseconds: 1,\n utcmilliseconds: 1\n};\nfunction isUtcSingleTimeUnit(timeUnit) {\n return !!UTC_SINGLE_TIMEUNIT_INDEX[timeUnit];\n}\nexports.isUtcSingleTimeUnit = isUtcSingleTimeUnit;\nvar LOCAL_MULTI_TIMEUNIT_INDEX = {\n yearquarter: 1,\n yearquartermonth: 1,\n yearmonth: 1,\n yearmonthdate: 1,\n yearmonthdatehours: 1,\n yearmonthdatehoursminutes: 1,\n yearmonthdatehoursminutesseconds: 1,\n quartermonth: 1,\n monthdate: 1,\n hoursminutes: 1,\n hoursminutesseconds: 1,\n minutesseconds: 1,\n secondsmilliseconds: 1\n};\nvar UTC_MULTI_TIMEUNIT_INDEX = {\n utcyearquarter: 1,\n utcyearquartermonth: 1,\n utcyearmonth: 1,\n utcyearmonthdate: 1,\n utcyearmonthdatehours: 1,\n utcyearmonthdatehoursminutes: 1,\n utcyearmonthdatehoursminutesseconds: 1,\n utcquartermonth: 1,\n utcmonthdate: 1,\n utchoursminutes: 1,\n utchoursminutesseconds: 1,\n utcminutesseconds: 1,\n utcsecondsmilliseconds: 1\n};\nvar UTC_TIMEUNIT_INDEX = tslib_1.__assign({}, UTC_SINGLE_TIMEUNIT_INDEX, UTC_MULTI_TIMEUNIT_INDEX);\nfunction isUTCTimeUnit(t) {\n return !!UTC_TIMEUNIT_INDEX[t];\n}\nexports.isUTCTimeUnit = isUTCTimeUnit;\nfunction getLocalTimeUnit(t) {\n return t.substr(3);\n}\nexports.getLocalTimeUnit = getLocalTimeUnit;\nvar TIMEUNIT_INDEX = tslib_1.__assign({}, LOCAL_SINGLE_TIMEUNIT_INDEX, UTC_SINGLE_TIMEUNIT_INDEX, LOCAL_MULTI_TIMEUNIT_INDEX, UTC_MULTI_TIMEUNIT_INDEX);\nexports.TIMEUNITS = util_1.flagKeys(TIMEUNIT_INDEX);\nfunction isTimeUnit(t) {\n return !!TIMEUNIT_INDEX[t];\n}\nexports.isTimeUnit = isTimeUnit;\nvar SET_DATE_METHOD = {\n year: 'setFullYear',\n month: 'setMonth',\n date: 'setDate',\n hours: 'setHours',\n minutes: 'setMinutes',\n seconds: 'setSeconds',\n milliseconds: 'setMilliseconds',\n // Day and quarter have their own special cases\n quarter: null,\n day: null,\n};\n/**\n * Converts a date to only have the measurements relevant to the specified unit\n * i.e. ('yearmonth', '2000-12-04 07:58:14') -> '2000-12-01 00:00:00'\n * Note: the base date is Jan 01 1900 00:00:00\n */\nfunction convert(unit, date) {\n var isUTC = isUTCTimeUnit(unit);\n var result = isUTC ?\n // start with uniform date\n new Date(Date.UTC(0, 0, 1, 0, 0, 0, 0)) :\n new Date(0, 0, 1, 0, 0, 0, 0);\n for (var _i = 0, TIMEUNIT_PARTS_1 = exports.TIMEUNIT_PARTS; _i < TIMEUNIT_PARTS_1.length; _i++) {\n var timeUnitPart = TIMEUNIT_PARTS_1[_i];\n if (containsTimeUnit(unit, timeUnitPart)) {\n switch (timeUnitPart) {\n case TimeUnit.DAY:\n throw new Error('Cannot convert to TimeUnits containing \\'day\\'');\n case TimeUnit.QUARTER: {\n var _a = dateMethods('month', isUTC), getDateMethod_1 = _a.getDateMethod, setDateMethod_1 = _a.setDateMethod;\n // indicate quarter by setting month to be the first of the quarter i.e. may (4) -> april (3)\n result[setDateMethod_1]((Math.floor(date[getDateMethod_1]() / 3)) * 3);\n break;\n }\n default:\n var _b = dateMethods(timeUnitPart, isUTC), getDateMethod = _b.getDateMethod, setDateMethod = _b.setDateMethod;\n result[setDateMethod](date[getDateMethod]());\n }\n }\n }\n return result;\n}\nexports.convert = convert;\nfunction dateMethods(singleUnit, isUtc) {\n var rawSetDateMethod = SET_DATE_METHOD[singleUnit];\n var setDateMethod = isUtc ? 'setUTC' + rawSetDateMethod.substr(3) : rawSetDateMethod;\n var getDateMethod = 'get' + (isUtc ? 'UTC' : '') + rawSetDateMethod.substr(3);\n return { setDateMethod: setDateMethod, getDateMethod: getDateMethod };\n}\nfunction getTimeUnitParts(timeUnit) {\n return exports.TIMEUNIT_PARTS.reduce(function (parts, part) {\n if (containsTimeUnit(timeUnit, part)) {\n return parts.concat(part);\n }\n return parts;\n }, []);\n}\nexports.getTimeUnitParts = getTimeUnitParts;\n/** Returns true if fullTimeUnit contains the timeUnit, false otherwise. */\nfunction containsTimeUnit(fullTimeUnit, timeUnit) {\n var index = fullTimeUnit.indexOf(timeUnit);\n return index > -1 &&\n (timeUnit !== TimeUnit.SECONDS ||\n index === 0 ||\n fullTimeUnit.charAt(index - 1) !== 'i' // exclude milliseconds\n );\n}\nexports.containsTimeUnit = containsTimeUnit;\n/**\n * Returns Vega expresssion for a given timeUnit and fieldRef\n */\nfunction fieldExpr(fullTimeUnit, field) {\n var fieldRef = util_1.accessPathWithDatum(field);\n var utc = isUTCTimeUnit(fullTimeUnit) ? 'utc' : '';\n function func(timeUnit) {\n if (timeUnit === TimeUnit.QUARTER) {\n // quarter starting at 0 (0,3,6,9).\n return \"(\" + utc + \"quarter(\" + fieldRef + \")-1)\";\n }\n else {\n return \"\" + utc + timeUnit + \"(\" + fieldRef + \")\";\n }\n }\n var d = exports.TIMEUNIT_PARTS.reduce(function (dateExpr, tu) {\n if (containsTimeUnit(fullTimeUnit, tu)) {\n dateExpr[tu] = func(tu);\n }\n return dateExpr;\n }, {});\n return datetime_1.dateTimeExpr(d);\n}\nexports.fieldExpr = fieldExpr;\n/**\n * returns the signal expression used for axis labels for a time unit\n */\nfunction formatExpression(timeUnit, field, shortTimeLabels, isUTCScale) {\n if (!timeUnit) {\n return undefined;\n }\n var dateComponents = [];\n var expression = '';\n var hasYear = containsTimeUnit(timeUnit, TimeUnit.YEAR);\n if (containsTimeUnit(timeUnit, TimeUnit.QUARTER)) {\n // special expression for quarter as prefix\n expression = \"'Q' + quarter(\" + field + \")\";\n }\n if (containsTimeUnit(timeUnit, TimeUnit.MONTH)) {\n // By default use short month name\n dateComponents.push(shortTimeLabels !== false ? '%b' : '%B');\n }\n if (containsTimeUnit(timeUnit, TimeUnit.DAY)) {\n dateComponents.push(shortTimeLabels ? '%a' : '%A');\n }\n else if (containsTimeUnit(timeUnit, TimeUnit.DATE)) {\n dateComponents.push('%d' + (hasYear ? ',' : '')); // add comma if there is year\n }\n if (hasYear) {\n dateComponents.push(shortTimeLabels ? '%y' : '%Y');\n }\n var timeComponents = [];\n if (containsTimeUnit(timeUnit, TimeUnit.HOURS)) {\n timeComponents.push('%H');\n }\n if (containsTimeUnit(timeUnit, TimeUnit.MINUTES)) {\n timeComponents.push('%M');\n }\n if (containsTimeUnit(timeUnit, TimeUnit.SECONDS)) {\n timeComponents.push('%S');\n }\n if (containsTimeUnit(timeUnit, TimeUnit.MILLISECONDS)) {\n timeComponents.push('%L');\n }\n var dateTimeComponents = [];\n if (dateComponents.length > 0) {\n dateTimeComponents.push(dateComponents.join(' '));\n }\n if (timeComponents.length > 0) {\n dateTimeComponents.push(timeComponents.join(':'));\n }\n if (dateTimeComponents.length > 0) {\n if (expression) {\n // Add space between quarter and main time format\n expression += \" + ' ' + \";\n }\n // We only use utcFormat for utc scale\n // For utc time units, the data is already converted as a part of timeUnit transform.\n // Thus, utc time units should use timeFormat to avoid shifting the time twice.\n if (isUTCScale) {\n expression += \"utcFormat(\" + field + \", '\" + dateTimeComponents.join(' ') + \"')\";\n }\n else {\n expression += \"timeFormat(\" + field + \", '\" + dateTimeComponents.join(' ') + \"')\";\n }\n }\n // If expression is still an empty string, return undefined instead.\n return expression || undefined;\n}\nexports.formatExpression = formatExpression;\nfunction normalizeTimeUnit(timeUnit) {\n if (timeUnit !== 'day' && timeUnit.indexOf('day') >= 0) {\n log.warn(log.message.dayReplacedWithDate(timeUnit));\n return timeUnit.replace('day', 'date');\n }\n return timeUnit;\n}\nexports.normalizeTimeUnit = normalizeTimeUnit;\n//# sourceMappingURL=timeunit.js.map","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n var ie_lt8 = /MSIE \\d/.test(navigator.userAgent) &&\n (document.documentMode == null || document.documentMode < 8);\n\n var Pos = CodeMirror.Pos;\n\n var matching = {\"(\": \")>\", \")\": \"(<\", \"[\": \"]>\", \"]\": \"[<\", \"{\": \"}>\", \"}\": \"{<\", \"<\": \">>\", \">\": \"<<\"};\n\n function bracketRegex(config) {\n return config && config.bracketRegex || /[(){}[\\]]/\n }\n\n function findMatchingBracket(cm, where, config) {\n var line = cm.getLineHandle(where.line), pos = where.ch - 1;\n var afterCursor = config && config.afterCursor\n if (afterCursor == null)\n afterCursor = /(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className)\n var re = bracketRegex(config)\n\n // A cursor is defined as between two characters, but in in vim command mode\n // (i.e. not insert mode), the cursor is visually represented as a\n // highlighted box on top of the 2nd character. Otherwise, we allow matches\n // from before or after the cursor.\n var match = (!afterCursor && pos >= 0 && re.test(line.text.charAt(pos)) && matching[line.text.charAt(pos)]) ||\n re.test(line.text.charAt(pos + 1)) && matching[line.text.charAt(++pos)];\n if (!match) return null;\n var dir = match.charAt(1) == \">\" ? 1 : -1;\n if (config && config.strict && (dir > 0) != (pos == where.ch)) return null;\n var style = cm.getTokenTypeAt(Pos(where.line, pos + 1));\n\n var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style, config);\n if (found == null) return null;\n return {from: Pos(where.line, pos), to: found && found.pos,\n match: found && found.ch == match.charAt(0), forward: dir > 0};\n }\n\n // bracketRegex is used to specify which type of bracket to scan\n // should be a regexp, e.g. /[[\\]]/\n //\n // Note: If \"where\" is on an open bracket, then this bracket is ignored.\n //\n // Returns false when no bracket was found, null when it reached\n // maxScanLines and gave up\n function scanForBracket(cm, where, dir, style, config) {\n var maxScanLen = (config && config.maxScanLineLength) || 10000;\n var maxScanLines = (config && config.maxScanLines) || 1000;\n\n var stack = [];\n var re = bracketRegex(config)\n var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1)\n : Math.max(cm.firstLine() - 1, where.line - maxScanLines);\n for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) {\n var line = cm.getLine(lineNo);\n if (!line) continue;\n var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1;\n if (line.length > maxScanLen) continue;\n if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0);\n for (; pos != end; pos += dir) {\n var ch = line.charAt(pos);\n if (re.test(ch) && (style === undefined ||\n (cm.getTokenTypeAt(Pos(lineNo, pos + 1)) || \"\") == (style || \"\"))) {\n var match = matching[ch];\n if (match && (match.charAt(1) == \">\") == (dir > 0)) stack.push(ch);\n else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch};\n else stack.pop();\n }\n }\n }\n return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null;\n }\n\n function matchBrackets(cm, autoclear, config) {\n // Disable brace matching in long lines, since it'll cause hugely slow updates\n var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000,\n highlightNonMatching = config && config.highlightNonMatching;\n var marks = [], ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++) {\n var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, config);\n if (match && (match.match || highlightNonMatching !== false) && cm.getLine(match.from.line).length <= maxHighlightLen) {\n var style = match.match ? \"CodeMirror-matchingbracket\" : \"CodeMirror-nonmatchingbracket\";\n marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style}));\n if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen)\n marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style}));\n }\n }\n\n if (marks.length) {\n // Kludge to work around the IE bug from issue #1193, where text\n // input stops going to the textarea whenever this fires.\n if (ie_lt8 && cm.state.focused) cm.focus();\n\n var clear = function() {\n cm.operation(function() {\n for (var i = 0; i < marks.length; i++) marks[i].clear();\n });\n };\n if (autoclear) setTimeout(clear, 800);\n else return clear;\n }\n }\n\n function doMatchBrackets(cm) {\n cm.operation(function() {\n if (cm.state.matchBrackets.currentlyHighlighted) {\n cm.state.matchBrackets.currentlyHighlighted();\n cm.state.matchBrackets.currentlyHighlighted = null;\n }\n cm.state.matchBrackets.currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets);\n });\n }\n\n function clearHighlighted(cm) {\n if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) {\n cm.state.matchBrackets.currentlyHighlighted();\n cm.state.matchBrackets.currentlyHighlighted = null;\n }\n }\n\n CodeMirror.defineOption(\"matchBrackets\", false, function(cm, val, old) {\n if (old && old != CodeMirror.Init) {\n cm.off(\"cursorActivity\", doMatchBrackets);\n cm.off(\"focus\", doMatchBrackets)\n cm.off(\"blur\", clearHighlighted)\n clearHighlighted(cm);\n }\n if (val) {\n cm.state.matchBrackets = typeof val == \"object\" ? val : {};\n cm.on(\"cursorActivity\", doMatchBrackets);\n cm.on(\"focus\", doMatchBrackets)\n cm.on(\"blur\", clearHighlighted)\n }\n });\n\n CodeMirror.defineExtension(\"matchBrackets\", function() {matchBrackets(this, true);});\n CodeMirror.defineExtension(\"findMatchingBracket\", function(pos, config, oldConfig){\n // Backwards-compatibility kludge\n if (oldConfig || typeof config == \"boolean\") {\n if (!oldConfig) {\n config = config ? {strict: true} : null\n } else {\n oldConfig.strict = config\n config = oldConfig\n }\n }\n return findMatchingBracket(this, pos, config)\n });\n CodeMirror.defineExtension(\"scanForBracket\", function(pos, dir, style, config){\n return scanForBracket(this, pos, dir, style, config);\n });\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar channel_1 = require(\"../../channel\");\nvar data_1 = require(\"../../data\");\nvar projection_1 = require(\"../../projection\");\nvar type_1 = require(\"../../type\");\nvar util_1 = require(\"../../util\");\nvar model_1 = require(\"../model\");\nvar component_1 = require(\"./component\");\nfunction parseProjection(model) {\n if (model_1.isUnitModel(model)) {\n model.component.projection = parseUnitProjection(model);\n }\n else {\n // because parse happens from leaves up (unit specs before layer spec),\n // we can be sure that the above if statement has already occurred\n // and therefore we have access to child.component.projection\n // for each of model's children\n model.component.projection = parseNonUnitProjections(model);\n }\n}\nexports.parseProjection = parseProjection;\nfunction parseUnitProjection(model) {\n var specifiedProjection = model.specifiedProjection, config = model.config, hasProjection = model.hasProjection;\n if (hasProjection) {\n var data_2 = [];\n [[channel_1.LONGITUDE, channel_1.LATITUDE], [channel_1.LONGITUDE2, channel_1.LATITUDE2]].forEach(function (posssiblePair) {\n if (model.channelHasField(posssiblePair[0]) || model.channelHasField(posssiblePair[1])) {\n data_2.push({\n signal: model.getName(\"geojson_\" + data_2.length)\n });\n }\n });\n if (model.channelHasField(channel_1.SHAPE) && model.fieldDef(channel_1.SHAPE).type === type_1.GEOJSON) {\n data_2.push({\n signal: model.getName(\"geojson_\" + data_2.length)\n });\n }\n if (data_2.length === 0) {\n // main source is geojson, so we can just use that\n data_2.push(model.requestDataName(data_1.MAIN));\n }\n return new component_1.ProjectionComponent(model.projectionName(true), tslib_1.__assign({}, (config.projection || {}), (specifiedProjection || {})), [model.getSizeSignalRef('width'), model.getSizeSignalRef('height')], data_2);\n }\n return undefined;\n}\nfunction mergeIfNoConflict(first, second) {\n var allPropertiesShared = util_1.every(projection_1.PROJECTION_PROPERTIES, function (prop) {\n // neither has the poperty\n if (!first.explicit.hasOwnProperty(prop) &&\n !second.explicit.hasOwnProperty(prop)) {\n return true;\n }\n // both have property and an equal value for property\n if (first.explicit.hasOwnProperty(prop) &&\n second.explicit.hasOwnProperty(prop) &&\n // some properties might be signals or objects and require hashing for comparison\n util_1.stringify(first.get(prop)) === util_1.stringify(second.get(prop))) {\n return true;\n }\n return false;\n });\n var size = util_1.stringify(first.size) === util_1.stringify(second.size);\n if (size) {\n if (allPropertiesShared) {\n return first;\n }\n else if (util_1.stringify(first.explicit) === util_1.stringify({})) {\n return second;\n }\n else if (util_1.stringify(second.explicit) === util_1.stringify({})) {\n return first;\n }\n }\n // if all properties don't match, let each unit spec have its own projection\n return null;\n}\nfunction parseNonUnitProjections(model) {\n if (model.children.length === 0) {\n return undefined;\n }\n var nonUnitProjection;\n var mergable = util_1.every(model.children, function (child) {\n parseProjection(child);\n var projection = child.component.projection;\n if (!projection) {\n // child layer does not use a projection\n return true;\n }\n else if (!nonUnitProjection) {\n // cached 'projection' is null, cache this one\n nonUnitProjection = projection;\n return true;\n }\n else {\n var merge = mergeIfNoConflict(nonUnitProjection, projection);\n if (merge) {\n nonUnitProjection = merge;\n }\n return !!merge;\n }\n });\n // it cached one and all other children share the same projection,\n if (nonUnitProjection && mergable) {\n // so we can elevate it to the layer level\n var name_1 = model.projectionName(true);\n var modelProjection_1 = new component_1.ProjectionComponent(name_1, nonUnitProjection.specifiedProjection, nonUnitProjection.size, util_1.duplicate(nonUnitProjection.data));\n // rename and assign all others as merged\n model.children.forEach(function (child) {\n if (child.component.projection) {\n modelProjection_1.data = modelProjection_1.data.concat(child.component.projection.data);\n child.renameProjection(child.component.projection.get('name'), name_1);\n child.component.projection.merged = true;\n }\n });\n return modelProjection_1;\n }\n return undefined;\n}\n//# sourceMappingURL=parse.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar vega_util_1 = require(\"vega-util\");\nvar channel_1 = require(\"./channel\");\nvar fielddef_1 = require(\"./fielddef\");\nvar log = tslib_1.__importStar(require(\"./log\"));\nvar type_1 = require(\"./type\");\nvar util_1 = require(\"./util\");\nfunction channelHasField(encoding, channel) {\n var channelDef = encoding && encoding[channel];\n if (channelDef) {\n if (vega_util_1.isArray(channelDef)) {\n return util_1.some(channelDef, function (fieldDef) { return !!fieldDef.field; });\n }\n else {\n return fielddef_1.isFieldDef(channelDef) || fielddef_1.hasConditionalFieldDef(channelDef);\n }\n }\n return false;\n}\nexports.channelHasField = channelHasField;\nfunction isAggregate(encoding) {\n return util_1.some(channel_1.CHANNELS, function (channel) {\n if (channelHasField(encoding, channel)) {\n var channelDef = encoding[channel];\n if (vega_util_1.isArray(channelDef)) {\n return util_1.some(channelDef, function (fieldDef) { return !!fieldDef.aggregate; });\n }\n else {\n var fieldDef = fielddef_1.getFieldDef(channelDef);\n return fieldDef && !!fieldDef.aggregate;\n }\n }\n return false;\n });\n}\nexports.isAggregate = isAggregate;\nfunction normalizeEncoding(encoding, mark) {\n return util_1.keys(encoding).reduce(function (normalizedEncoding, channel) {\n var _a;\n if (!channel_1.isChannel(channel)) {\n // Drop invalid channel\n log.warn(log.message.invalidEncodingChannel(channel));\n return normalizedEncoding;\n }\n if (!channel_1.supportMark(channel, mark)) {\n // Drop unsupported channel\n log.warn(log.message.incompatibleChannel(channel, mark));\n return normalizedEncoding;\n }\n // Drop line's size if the field is aggregated.\n if (channel === 'size' && mark === 'line') {\n var fieldDef = fielddef_1.getFieldDef(encoding[channel]);\n if (fieldDef && fieldDef.aggregate) {\n log.warn(log.message.LINE_WITH_VARYING_SIZE);\n return normalizedEncoding;\n }\n }\n // Drop color if either fill or stroke is specified\n if (channel === 'color' && ('fill' in encoding || 'stroke' in encoding)) {\n log.warn(log.message.droppingColor('encoding', { fill: 'fill' in encoding, stroke: 'stroke' in encoding }));\n return normalizedEncoding;\n }\n var channelDef = encoding[channel];\n if (channel === 'detail' ||\n (channel === 'order' && !vega_util_1.isArray(channelDef) && !fielddef_1.isValueDef(channelDef)) ||\n (channel === 'tooltip' && vega_util_1.isArray(channelDef))) {\n if (channelDef) {\n // Array of fieldDefs for detail channel (or production rule)\n normalizedEncoding[channel] = (vega_util_1.isArray(channelDef) ? channelDef : [channelDef])\n .reduce(function (defs, fieldDef) {\n if (!fielddef_1.isFieldDef(fieldDef)) {\n log.warn(log.message.emptyFieldDef(fieldDef, channel));\n }\n else {\n defs.push(fielddef_1.normalizeFieldDef(fieldDef, channel));\n }\n return defs;\n }, []);\n }\n }\n else {\n var fieldDef = fielddef_1.getFieldDef(encoding[channel]);\n if (fieldDef && util_1.contains([type_1.Type.LATITUDE, type_1.Type.LONGITUDE], fieldDef.type)) {\n var _b = channel, _ = normalizedEncoding[_b], newEncoding = tslib_1.__rest(normalizedEncoding, [typeof _b === \"symbol\" ? _b : _b + \"\"]);\n var newChannel = channel === 'x' ? 'longitude' :\n channel === 'y' ? 'latitude' :\n channel === 'x2' ? 'longitude2' :\n channel === 'y2' ? 'latitude2' : undefined;\n log.warn(log.message.latLongDeprecated(channel, fieldDef.type, newChannel));\n return tslib_1.__assign({}, newEncoding, (_a = {}, _a[newChannel] = tslib_1.__assign({}, fielddef_1.normalize(fieldDef, channel), { type: 'quantitative' }), _a));\n }\n if (!fielddef_1.isFieldDef(channelDef) && !fielddef_1.isValueDef(channelDef) && !fielddef_1.isConditionalDef(channelDef)) {\n log.warn(log.message.emptyFieldDef(channelDef, channel));\n return normalizedEncoding;\n }\n normalizedEncoding[channel] = fielddef_1.normalize(channelDef, channel);\n }\n return normalizedEncoding;\n }, {});\n}\nexports.normalizeEncoding = normalizeEncoding;\nfunction isRanged(encoding) {\n return encoding && ((!!encoding.x && !!encoding.x2) || (!!encoding.y && !!encoding.y2));\n}\nexports.isRanged = isRanged;\nfunction fieldDefs(encoding) {\n var arr = [];\n channel_1.CHANNELS.forEach(function (channel) {\n if (channelHasField(encoding, channel)) {\n var channelDef = encoding[channel];\n (vega_util_1.isArray(channelDef) ? channelDef : [channelDef]).forEach(function (def) {\n if (fielddef_1.isFieldDef(def)) {\n arr.push(def);\n }\n else if (fielddef_1.hasConditionalFieldDef(def)) {\n arr.push(def.condition);\n }\n });\n }\n });\n return arr;\n}\nexports.fieldDefs = fieldDefs;\nfunction forEach(mapping, f, thisArg) {\n if (!mapping) {\n return;\n }\n var _loop_1 = function (channel) {\n if (vega_util_1.isArray(mapping[channel])) {\n mapping[channel].forEach(function (channelDef) {\n f.call(thisArg, channelDef, channel);\n });\n }\n else {\n f.call(thisArg, mapping[channel], channel);\n }\n };\n for (var _i = 0, _a = util_1.keys(mapping); _i < _a.length; _i++) {\n var channel = _a[_i];\n _loop_1(channel);\n }\n}\nexports.forEach = forEach;\nfunction reduce(mapping, f, init, thisArg) {\n if (!mapping) {\n return init;\n }\n return util_1.keys(mapping).reduce(function (r, channel) {\n var map = mapping[channel];\n if (vega_util_1.isArray(map)) {\n return map.reduce(function (r1, channelDef) {\n return f.call(thisArg, r1, channelDef, channel);\n }, r);\n }\n else {\n return f.call(thisArg, r, map, channel);\n }\n }, init);\n}\nexports.reduce = reduce;\n//# sourceMappingURL=encoding.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar mixins = tslib_1.__importStar(require(\"./mixins\"));\nvar fielddef_1 = require(\"../../fielddef\");\nvar type_1 = require(\"../../type\");\nexports.geoshape = {\n vgMark: 'shape',\n encodeEntry: function (model) {\n return tslib_1.__assign({}, mixins.baseEncodeEntry(model, { size: 'ignore', orient: 'ignore' }));\n },\n postEncodingTransform: function (model) {\n var encoding = model.encoding;\n var shapeDef = encoding.shape;\n var transform = tslib_1.__assign({ type: 'geoshape', projection: model.projectionName() }, (shapeDef && fielddef_1.isFieldDef(shapeDef) && shapeDef.type === type_1.GEOJSON ? { field: fielddef_1.vgField(shapeDef, { expr: 'datum' }) } : {}));\n return [transform];\n }\n};\n//# sourceMappingURL=geoshape.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\n/**\n * Utility for generating row / column headers\n */\nvar vega_util_1 = require(\"vega-util\");\nvar fielddef_1 = require(\"../../fielddef\");\nvar header_1 = require(\"../../header\");\nvar sort_1 = require(\"../../sort\");\nvar util_1 = require(\"../../util\");\nvar common_1 = require(\"../common\");\nvar calculate_1 = require(\"../data/calculate\");\nexports.HEADER_CHANNELS = ['row', 'column'];\nexports.HEADER_TYPES = ['header', 'footer'];\nfunction getHeaderType(orient) {\n if (orient === 'top' || orient === 'left') {\n return 'header';\n }\n return 'footer';\n}\nexports.getHeaderType = getHeaderType;\nfunction getTitleGroup(model, channel) {\n var title = model.component.layoutHeaders[channel].title;\n var textOrient = channel === 'row' ? 'left' : undefined;\n var config = model.config ? model.config : undefined;\n var facetFieldDef = model.component.layoutHeaders[channel].facetFieldDef ? model.component.layoutHeaders[channel].facetFieldDef : undefined;\n return {\n name: channel + \"-title\",\n type: 'group',\n role: channel + \"-title\",\n title: tslib_1.__assign({ text: title, offset: 10, orient: textOrient, style: 'guide-title' }, getHeaderProperties(config, facetFieldDef, header_1.HEADER_TITLE_PROPERTIES, header_1.HEADER_TITLE_PROPERTIES_MAP))\n };\n}\nexports.getTitleGroup = getTitleGroup;\nfunction getHeaderGroups(model, channel) {\n var layoutHeader = model.component.layoutHeaders[channel];\n var groups = [];\n for (var _i = 0, HEADER_TYPES_1 = exports.HEADER_TYPES; _i < HEADER_TYPES_1.length; _i++) {\n var headerType = HEADER_TYPES_1[_i];\n if (layoutHeader[headerType]) {\n for (var _a = 0, _b = layoutHeader[headerType]; _a < _b.length; _a++) {\n var headerCmpt = _b[_a];\n groups.push(getHeaderGroup(model, channel, headerType, layoutHeader, headerCmpt));\n }\n }\n }\n return groups;\n}\nexports.getHeaderGroups = getHeaderGroups;\n// 0, (0,90), 90, (90, 180), 180, (180, 270), 270, (270, 0)\nfunction labelAlign(angle) {\n // to keep angle in [0, 360)\n angle = ((angle % 360) + 360) % 360;\n if ((angle + 90) % 180 === 0) { // for 90 and 270\n return {}; // default center\n }\n else if (angle < 90 || 270 < angle) {\n return { align: { value: 'right' } };\n }\n else if (135 <= angle && angle < 225) {\n return { align: { value: 'left' } };\n }\n return {};\n}\nexports.labelAlign = labelAlign;\nfunction labelBaseline(angle) {\n // to keep angle in [0, 360)\n angle = ((angle % 360) + 360) % 360;\n if (45 <= angle && angle <= 135) {\n return { baseline: 'top' };\n }\n return { baseline: 'middle' };\n}\nexports.labelBaseline = labelBaseline;\nfunction getSort(facetFieldDef, channel) {\n var sort = facetFieldDef.sort;\n if (sort_1.isSortField(sort)) {\n return {\n field: fielddef_1.vgField(sort, { expr: 'datum' }),\n order: sort.order || 'ascending'\n };\n }\n else if (vega_util_1.isArray(sort)) {\n return {\n field: calculate_1.sortArrayIndexField(facetFieldDef, channel, 'datum'),\n order: 'ascending'\n };\n }\n else {\n return {\n field: fielddef_1.vgField(facetFieldDef, { expr: 'datum' }),\n order: sort || 'ascending'\n };\n }\n}\nfunction getHeaderGroup(model, channel, headerType, layoutHeader, headerCmpt) {\n var _a;\n if (headerCmpt) {\n var title = null;\n var facetFieldDef = layoutHeader.facetFieldDef;\n if (facetFieldDef && headerCmpt.labels) {\n var _b = facetFieldDef.header, header = _b === void 0 ? {} : _b;\n var format = header.format, labelAngle = header.labelAngle;\n var config = model.config ? model.config : undefined;\n var update = tslib_1.__assign({}, labelAlign(labelAngle));\n title = tslib_1.__assign({ text: common_1.formatSignalRef(facetFieldDef, format, 'parent', model.config), offset: 10, orient: channel === 'row' ? 'left' : 'top', style: 'guide-label' }, getHeaderProperties(config, facetFieldDef, header_1.HEADER_LABEL_PROPERTIES, header_1.HEADER_LABEL_PROPERTIES_MAP), (util_1.keys(update).length > 0 ? { encode: { update: update } } : {}));\n }\n var axes = headerCmpt.axes;\n var hasAxes = axes && axes.length > 0;\n if (title || hasAxes) {\n var sizeChannel = channel === 'row' ? 'height' : 'width';\n return tslib_1.__assign({ name: model.getName(channel + \"_\" + headerType), type: 'group', role: channel + \"-\" + headerType }, (layoutHeader.facetFieldDef ? {\n from: { data: model.getName(channel + '_domain') },\n sort: getSort(facetFieldDef, channel)\n } : {}), (title ? { title: title } : {}), (headerCmpt.sizeSignal ? {\n encode: {\n update: (_a = {},\n _a[sizeChannel] = headerCmpt.sizeSignal,\n _a)\n }\n } : {}), (hasAxes ? { axes: axes } : {}));\n }\n }\n return null;\n}\nexports.getHeaderGroup = getHeaderGroup;\nfunction getHeaderProperties(config, facetFieldDef, properties, propertiesMap) {\n var props = {};\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n if (config && config.header) {\n if (config.header[prop]) {\n props[propertiesMap[prop]] = config.header[prop];\n }\n }\n if (facetFieldDef && facetFieldDef.header) {\n if (facetFieldDef.header[prop]) {\n props[propertiesMap[prop]] = facetFieldDef.header[prop];\n }\n }\n }\n return props;\n}\nexports.getHeaderProperties = getHeaderProperties;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/** Constants and utilities for data type */\n/** Data type based on level of measurement */\nvar Type;\n(function (Type) {\n Type.QUANTITATIVE = 'quantitative';\n Type.ORDINAL = 'ordinal';\n Type.TEMPORAL = 'temporal';\n Type.NOMINAL = 'nominal';\n Type.LATITUDE = 'latitude';\n Type.LONGITUDE = 'longitude';\n Type.GEOJSON = 'geojson';\n})(Type = exports.Type || (exports.Type = {}));\nexports.TYPE_INDEX = {\n quantitative: 1,\n ordinal: 1,\n temporal: 1,\n nominal: 1,\n latitude: 1,\n longitude: 1,\n geojson: 1\n};\nfunction isType(t) {\n return !!exports.TYPE_INDEX[t];\n}\nexports.isType = isType;\nexports.QUANTITATIVE = Type.QUANTITATIVE;\nexports.ORDINAL = Type.ORDINAL;\nexports.TEMPORAL = Type.TEMPORAL;\nexports.NOMINAL = Type.NOMINAL;\nexports.GEOJSON = Type.GEOJSON;\n/**\n * Get full, lowercase type name for a given type.\n * @param type\n * @return Full type name.\n */\nfunction getFullName(type) {\n if (type) {\n type = type.toLowerCase();\n switch (type) {\n case 'q':\n case exports.QUANTITATIVE:\n return 'quantitative';\n case 't':\n case exports.TEMPORAL:\n return 'temporal';\n case 'o':\n case exports.ORDINAL:\n return 'ordinal';\n case 'n':\n case exports.NOMINAL:\n return 'nominal';\n case Type.LATITUDE:\n return 'latitude';\n case Type.LONGITUDE:\n return 'longitude';\n case exports.GEOJSON:\n return 'geojson';\n }\n }\n // If we get invalid input, return undefined type.\n return undefined;\n}\nexports.getFullName = getFullName;\n//# sourceMappingURL=type.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar mixins = tslib_1.__importStar(require(\"./mixins\"));\nvar ref = tslib_1.__importStar(require(\"./valueref\"));\nexports.line = {\n vgMark: 'line',\n encodeEntry: function (model) {\n var width = model.width, height = model.height;\n return tslib_1.__assign({}, mixins.baseEncodeEntry(model, { size: 'ignore', orient: 'ignore' }), mixins.pointPosition('x', model, ref.mid(width)), mixins.pointPosition('y', model, ref.mid(height)), mixins.nonPosition('size', model, {\n vgChannel: 'strokeWidth' // VL's line size is strokeWidth\n }), mixins.defined(model));\n }\n};\nexports.trail = {\n vgMark: 'trail',\n encodeEntry: function (model) {\n var width = model.width, height = model.height;\n return tslib_1.__assign({}, mixins.baseEncodeEntry(model, { size: 'include', orient: 'ignore' }), mixins.pointPosition('x', model, ref.mid(width)), mixins.pointPosition('y', model, ref.mid(height)), mixins.nonPosition('size', model), mixins.defined(model));\n }\n};\n//# sourceMappingURL=line.js.map"],"names":["Object","defineProperty","exports","value","tslib_1","data_1","util_1","SourceNode","_super","data","_this","call","this","name","isInlineData","_data","values","isUrlData","url","format","type","defaultExtension","exec","contains","isNamedData","_name","_a","parse","__rest","__extends","prototype","get","enumerable","configurable","hasName","set","parent","Error","remove","hash","_hash","assemble","__assign","transform","DataFlowNode","getMarkSpecificConfigMixins","markSpecificConfig","channel","undefined","vega_event_selector_1","channel_1","interval_1","selection_1","scales_1","__importStar","ANCHOR","DELTA","translate","has","selCmpt","signals","model","hasScales","default","anchor","positionalProjections","x","y","events","selector","map","e","between","markname","BRUSH","push","on","update","domain","X","channelSignalName","Y","onDelta","size","signal","filter","s","delta","sizeSg","getSizeSignalRef","scaleCmpt","getScaleComponent","scaleType","sign","extent","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","create","assign","t","i","n","arguments","length","apply","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","__generator","body","f","g","_","label","sent","trys","ops","verb","Symbol","iterator","v","op","TypeError","pop","__createBinding","o","m","k","k2","__exportStar","__values","__read","ar","error","__spread","concat","__spreadArrays","il","a","j","jl","__await","__asyncGenerator","asyncIterator","q","resume","fulfill","settle","shift","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","raw","mod","__esModule","__importDefault","__classPrivateFieldGet","receiver","privateMap","__classPrivateFieldSet","IdentifierNode","clone","producedFields","SELECTION_ID","as","vega_util_1","fielddef_1","log","sort_1","replaceRepeat","repeater","isRepeatRef","field","repeat","warn","message","noSuchRepeatedValue","replaceRepeaterInFieldDef","fieldDef","sort","isSortField","replaceRepeaterInChannelDef","channelDef","isFieldDef","fd","isConditionalDef","condition","hasConditionalFieldDef","replaceRepeater","mapping","out","isArray","cd","replaceRepeaterInFacet","facet","replaceRepeaterInEncoding","encoding","timeunit_1","isSelectionPredicate","predicate","isFieldEqualPredicate","equal","isFieldLTPredicate","lt","isFieldLTEPredicate","lte","isFieldGTPredicate","gt","isFieldGTEPredicate","gte","isFieldRangePredicate","range","isFieldOneOfPredicate","oneOf","in","isFieldPredicate","predicateValueExpr","timeUnit","valueExpr","time","fieldFilterExpression","useInRange","fieldExpr","vgField","expr","upper","lower","vals","predicateValuesExpr","join","exprs","JSON","stringify","expression","filterOp","node","logicalExpr","isString","selectionPredicate","selection","normalizePredicate","normalizeTimeUnit","axis_1","assembleAxis","axisCmpt","kind","config","opt","header","combine","orient","scale","title","zindex","axis","keys","forEach","propType","AXIS_PROPERTY_TYPE","grid","encode","labels","maxExtent","minExtent","ticks","mainExtracted","_i","AXIS_PARTS_1","AXIS_PARTS","part","hasAxisPart","titleString","assembleTitle","assembleAxes","axisComponents","_b","isVgSignalRef","isVgRangeStep","isDataRefUnionedDomain","isFieldRefUnionDomain","isDataRefDomain","isSignalRefDomain","VG_MARK_CONFIGS","flagKeys","opacity","fill","fillOpacity","stroke","strokeCap","strokeWidth","strokeOpacity","strokeDash","strokeDashOffset","strokeJoin","strokeMiterLimit","shape","interpolate","tension","align","baseline","text","dir","dx","dy","ellipsis","limit","radius","theta","angle","font","fontSize","fontWeight","fontStyle","cursor","href","tooltip","cornerRadius","zoom","sx","stringValue","scaleName","sy","force","base","scale_1","vega_schema_1","model_1","sizeSignals","sizeType","component","layoutSize","scaleComponent","hasDiscreteDomain","isFacetModel","stepSignal","sizeExpr","cardinality","padding","paddingOuter","paddingInner","assembleLayoutSignals","encoding_1","spec_1","title_1","toplevelprops_1","transform_1","assemble_1","index_1","assemble_2","assemble_3","parse_1","assemble_4","parse_2","assemble_5","domain_1","parse_3","split_1","NameMap","nameMap","rename","oldName","newName","isUnitModel","isRepeatModel","isConcatModel","isLayerModel","Model","spec","parentGivenName","children","correctDataNames","mark","from","lookupDataSource","scaleNameMap","projectionNameMap","layoutSizeNameMap","description","transforms","normalizeTransform","layout","isUnitSpec","isLayerSpec","extractCompositionLayout","sources","outputNodes","outputNodeRefCounts","isFaceted","isFacetSpec","Split","layoutHeaders","row","column","legend","scales","projection","axes","legends","initSize","width","height","parseScale","parseLayoutSize","renameTopLevelLayoutSize","parseSelection","parseProjection","parseData","parseAxisAndHeader","parseLegend","parseMarkGroup","getName","renameLayoutSize","assembleGroupStyle","assembleLayoutSize","assembleLayout","bounds","center","spacing","isNumber","assembleDefaultLayout","assembleHeaderMarks","headerMarks","HEADER_CHANNELS_1","HEADER_CHANNELS","getTitleGroup","HEADER_CHANNELS_2","getHeaderGroups","assembleLegends","assembleProjections","extractTitleConfig","nonMark","cannotSetTitleAnchor","assembleGroup","group","assembleSelectionSignals","marks","assembleMarks","assembleScales","hasDescendantWithFieldOnChannel","child","channelHasField","varName","requestDataName","fullName","refCounts","merged","assembleDomain","getFieldFromDomain","fieldRef","aggregate","getSource","getSizeName","oldSizeName","renameScale","renameProjection","originalScaleName","isChannel","isScaleChannel","projectionName","localScaleComponent","getSelectionComponent","variableName","origName","sel","selectionNotFound","ModelWithField","reduceFieldDef","init","reduce","getMapping","acc","getFieldDef","forEachFieldDef","common_1","mixins","ref","vgMark","encodeEntry","markDef","baseEncodeEntry","pointPosition","mid","nonPosition","defaultValue","vgChannel","valueIfDefined","getMarkConfig","mark_1","type_1","resolve_1","component_1","properties_1","range_1","type_2","parseScaleCore","SCALE_CHANNELS","scaleComponents","specifiedScale","GEOSHAPE","SHAPE","GEOJSON","x2","y2","specifiedScaleType","sType","ScaleComponent","explicit","parseUnitScaleCore","scaleTypeWithExplicitIndex","_loop_1","defaultScaleResolve","explicitScaleType","childScaleType","getWithExplicit","scaleCompatible","mergeValuesWithExplicit","scaleTypeTieBreaker","typeWithExplicit","childScale","parseNonUnitScaleCore","parseScaleDomain","NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES_1","NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES","prop","parseScaleProperty","parseScaleRange","tieBreakByComparing","st1","st2","scaleTypePrecedence","CodeMirror","ACTIVE_HINT_ELEMENT_CLASS","Completion","cm","options","widget","debounce","tick","startPos","getCursor","startLen","getLine","line","getSelection","updateOnCursorActivity","self","activityFunc","cursorActivity","showHint","getHints","async","newOpts","hint","defineExtension","pos","editor","hintOptions","defaultOptions","parseOptions","selections","listSelections","somethingSelected","supportsSelection","head","state","completionActive","close","completion","requestAnimationFrame","window","fn","setTimeout","cancelAnimationFrame","clearTimeout","getText","getHintElement","hintsElement","el","nodeName","toUpperCase","parentNode","Widget","id","Math","floor","random","picked","ownerDocument","getInputField","parentWindow","defaultView","hints","createElement","setAttribute","theme","className","selectedHint","completions","list","elt","appendChild","cur","render","createTextNode","displayText","hintId","container","cursorCoords","alignWithWord","left","top","bottom","below","offsetLeft","offsetTop","offsetParent","getComputedStyle","position","offsetParentPosition","getBoundingClientRect","bodyPosition","scrollLeft","scrollTop","style","winW","innerWidth","max","offsetWidth","documentElement","winH","innerHeight","offsetHeight","startScroll","box","moveOnOverlap","DOMRect","scrolls","paddingForScrollbar","scrollHeight","clientHeight","getScrollInfo","ch","closingOnBlur","overlapX","right","display","nativeBarWidth","firstChild","nextSibling","paddingRight","addKeyMap","keyMap","handle","baseMap","Up","moveFocus","Down","PageUp","menuSize","PageDown","Home","setFocus","End","Enter","pick","Tab","Esc","test","navigator","platform","custom","customKeys","ourMap","addBinding","val","bound","extra","extraKeys","buildKeyMap","avoidWrap","changeActive","screenAmount","closeOnUnfocus","onBlur","onFocus","onScroll","curScroll","getWrapperElement","newTop","point","pageYOffset","srcElement","completeOnSingleClick","focus","selectedHintRange","getSelectedHintRange","to","scrollToActive","childNodes","fetchHints","callback","active","off","operation","replaceRange","scrollIntoView","closeOnPick","identStart","closeCharacters","charAt","disable","first","myTick","finishUpdate","completeSingle","removeChild","removeKeyMap","input","removeAttribute","replace","node1","node2","firstNode","margin","scrollMargin","min","registerHelper","words","helpers","getHelpers","resolved","app","applicableHelpers","run","getHelper","fromList","anyword","term","token","getTokenAt","Pos","start","string","substr","found","word","slice","commands","autocomplete","auto","defineOption","log_1","multi_1","single_1","transforms_1","assembleUnitSelectionMarks","forEachSelection","selCompiler","forEachTransform","txCompiler","cb","name_3","compiler","getFacetModel","STORE","TUPLE","MODIFY","SELECTION_DOMAIN","parseUnitSelection","selDefs","selCmpts","selectionConfig","name_1","selDef","cfg","fields","encodings","assembleUnitSelectionSignals","modifyExpr","facetModel","name_2","unshift","assembleTopLevelSignals","needsUnit","topLevelSignals","assembleUnitSelectionData","assembleLayerSelectionMarks","dfnode","stores","predicateStr","vname","store","tunode","insertAsParentOf","empty","isRawSelectionDomain","domainRaw","selectionScaleDomain","selDomain","project","scaleDomain","unitName","accessPathWithDatum","requiresSelectionId","identifier","some","proj","sgNames","_signalNames","basename","counter","xi","yi","defaultTags","script","attrRegexpCache","getAttrValue","attr","match","RegExp","getAttrRegexp","getTagRegexp","tagName","anchored","addTags","tag","dest","source","defineMode","parserConfig","htmlMode","getMode","multilineTagIndentFactor","multilineTagIndentPastTag","allowMissingTagName","tags","configTags","configScript","scriptTypes","matches","mode","html","stream","htmlState","current","toLowerCase","inTag","modeSpec","tagInfo","tagText","findMatchingMode","endTagA","endTag","localState","localMode","pat","search","backUp","maybeBackup","startState","indent","eol","copyState","local","textAfter","Pass","innerMode","defineMIME","GeoJSONNode","geojson","duplicate","parseAll","geoJsonCounter","LONGITUDE","LATITUDE","LONGITUDE2","LATITUDE2","coordinates","pair","mixins_1","getStyles","styles_1","styleConfig","numberFormat","specifiedFormat","QUANTITATIVE","formatExpr","numberFormatExpr","binFormatExpression","startField","endField","timeFormatExpression","shortTimeLabels","timeFormatConfig","isUTCScale","alwaysReturn","formatExpression","mergeTitleFieldDefs","f1","f2","fdToMerge","merged_1","fieldDef1","mergeTitle","title1","title2","applyConfig","propsList","propsList_1","property","applyMarkConfig","propsList_2","formatSignalRef","bin","binSuffix","isTimeFieldDef","isScaleFieldDef","ScaleType","UTC","timeFormat","getSpecifiedOrDefaultValue","specifiedValue","sortParams","orderDef","fieldRefOption","orderChannelDef","order","mergeTitleComponent","v1","v2","binRequiresRange","console","guideEncodeEntry","valueDef","wrapCondition","PROJECTION_PROPERTIES","legend_1","properties","parseLegendForChannel","legendCmpt","LegendComponent","COLOR","filled","FILL","STROKE","SIZE","OPACITY","getLegendDefWithScale","LEGEND_PROPERTIES","specifiedLegend","specifiedTitle","getProperty","legendEncoding","legendEncode","legendEncodingPart","mergeLegendComponent","mergedLegend","childLegend","mergedOrient","childOrient","typeMerged","_loop_2","mergedValueWithExplicit","makeImplicit","defaultTieBreaker","setWithExplicit","VG_LEGEND_PROPERTIES_1","VG_LEGEND_PROPERTIES","implicit","gradient","deleteNestedProperty","legendComponent","def","parseUnitLegend","parseGuideResolve","parseNonUnitLegend","WORD","curLine","end","curWord","seen","re","endLine","firstLine","lastLine","lastIndexOf","VL_ONLY_GUIDE_CONFIG","binToString","isBoolean","isBinParams","autoMaxBins","ROW","COLUMN","boxplot_1","errorbar_1","boxplot","normalizerRegistry","add","normalizer","COMPOSITE_MARK_STYLES","BOXPLOT_STYLES","VL_ONLY_COMPOSITE_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX","VL_ONLY_BOXPLOT_CONFIG_PROPERTY_INDEX","BOXPLOT","normalizeBoxPlot","ERRORBAR","normalizeErrorBar","normalize","isMarkDef","isDateTime","year","quarter","month","date","day","hours","minutes","seconds","milliseconds","MONTHS","SHORT_MONTHS","DAYS","SHORT_DAYS","dateTimeExpr","units","droppedDay","lowerM","monthIndex","shortM","shortMonthIndex","invalidTimeUnit","normalizeMonth","normalizeQuarter","lowerD","dayIndex","shortD","shortDayIndex","normalizeDay","utc","getAxisConfig","configTypes_1","configType","compositemark_1","guide_1","defaultViewConfig","defaultConfig","countTitle","invalidValues","view","defaultMarkConfig","area","bar","defaultBarConfig","circle","geoshape","rect","rule","color","square","defaultTickConfig","trail","boxWhisker","boxMid","defaultScaleConfig","axisX","axisY","axisLeft","axisRight","axisTop","axisBottom","axisBand","defaultLegendConfig","initConfig","mergeDeep","MARK_STYLES","PRIMITIVE_MARKS","VL_ONLY_CONFIG_PROPERTIES","VL_ONLY_ALL_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX","VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX","redirectConfig","toProp","propConfig","stripAndRedirectConfig","VL_ONLY_CONFIG_PROPERTIES_1","VL_ONLY_GUIDE_CONFIG_1","VL_ONLY_GUIDE_CONFIG_2","_c","VL_ONLY_MARK_CONFIG_PROPERTIES_1","VL_ONLY_MARK_CONFIG_PROPERTIES","_d","MARK_STYLES_1","markType","_e","VL_ONLY_MARK_CONFIG_PROPERTIES_2","vlOnlyMarkSpecificConfigs","_f","vlOnlyMarkSpecificConfigs_1","isObject","json","module","obj","opts","cmp","space","cycles","replacer","aobj","bobj","level","colonSeparator","toJSON","item","objectKeys","keyValue","splice","toString","pointPosition2","defined","accessor","fname","accessorName","accessorFields","getter","path","get1","getN","len","splitAccessPath","substring","identity","zero","one","truthy","falsy","log$1","method","args","None","Error$1","Warn","Info","Debug","logger","handler","info","debug","isLegalKey","mergeConfig","configs","mergeNamed","writeConfig","output","recurse","peek","array","toNumber","exp","symlog","log1p","abs","symexp","expm1","pow","exponent","pan","lift","ground","d0","d1","dd","panLinear","panLog","panPow","panSymlog","constant","da","zoomLinear","zoomLog","zoomPow","zoomSymlog","Date","getMonth","utcquarter","getUTCMonth","clampRange","span","lo","hi","isFunction","DESCENDING","compare","orders","ord","fmap","gen","comparator","ascending","u","compare1","compareN","delay","tid","extend","extentIndex","hop","object","NULL","fastmap","has$1","clear","clean","flush","threshold","l","inherits","members","proto","writable","inrange","r0","r1","isDate","isIterable","isRegExp","flat","lerp","frac","DEFAULT_MAX_SIZE","lruCache","maxsize","curr","prev","merge","array0","array1","n0","n1","i0","i1","str","reps","pad","padchar","ceil","$","toBoolean","defaultParser","toDate","parser","toSet","truncate","visitArray","visitor","channels","timeUnits","tuField","cannotProjectOnChannelWithoutField","TimeUnitNode","parseLayerLayoutSize","parseChildrenLayoutSize","layoutSizeCmpt","parseNonUnitLayoutSizeForChannel","mergedSize","childSize","scaleResolve","defaultUnitSize","hasProjection","textXRangeStep","rangeStep","parseRepeatLayoutSize","parseConcatLayoutSize","sizeTypeToMerge","isVConcat","parseUnitLayoutSize","layoutSizeComponent","library","version","aggregate_1","datetime_1","logical_1","predicate_1","ParseNode","_parse","makeExplicit","ancestorParse","makeWithAncestors","makeImplicitFromFilterTransform","forEachLeaf","makeImplicitFromEncoding","isNumberFieldDef","isCountingAggregateOp","accessPathDepth","parsedAs","differentParse","copyAll","parseNothing","other","assembleFormatParse","formatParse","dependentFields","assembleTransforms","onlyNested","unrecognizedParse","parseExpression","removePathFromField","LINEAR","BIN_LINEAR","LOG","POW","SQRT","TIME","SEQUENTIAL","QUANTILE","QUANTIZE","THRESHOLD","ORDINAL","BIN_ORDINAL","POINT","BAND","SCALE_CATEGORY_INDEX","linear","sqrt","sequential","ordinal","band","SCALE_TYPES","scaleType1","scaleType2","scaleCategory1","scaleCategory2","SCALE_PRECEDENCE_INDEX","CONTINUOUS_TO_CONTINUOUS_SCALES","CONTINUOUS_TO_CONTINUOUS_INDEX","CONTINUOUS_DOMAIN_SCALES","CONTINUOUS_DOMAIN_INDEX","DISCRETE_DOMAIN_SCALES","DISCRETE_DOMAIN_INDEX","BIN_SCALES_INDEX","hasContinuousDomain","isContinuousToContinuous","TIME_SCALE_TYPES","isBinScale","pointPadding","bandPaddingInner","facetSpacing","minBandSize","minFontSize","maxFontSize","minOpacity","maxOpacity","minSize","minStrokeWidth","maxStrokeWidth","isExtendedScheme","scheme","isSelectionDomain","SCALE_PROPERTY_INDEX","reverse","round","clamp","nice","SCALE_PROPERTIES","NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTY_INDEX","scaleTypeSupportDataType","specifiedType","fieldDefType","Type","NOMINAL","TEMPORAL","channelSupportScaleType","Channel","generateScaleTypeIndexKey","SCALE_TYPE_INDEX","index","CHANNELS_1","CHANNELS","TYPE_INDEX","SCALE_TYPES_1","generateScaleTypeIndex","scaleTypeSupportProperty","propName","channelScalePropertyIncompatability","isColorChannel","cannotUseScalePropertyWithNonColor","getSupportedScaleType","config_1","parseUnitAxis","POSITION_SCALE_CHANNELS","parseAxis","OPPOSITE_ORIENT","mergeAxisComponents","mergedAxisCmpts","childAxisCmpts","axisComponent","length_1","mergeAxisComponent","VG_AXIS_PROPERTIES_1","VG_AXIS_PROPERTIES","getFieldDefTitle","channel2","fieldDef2","AxisComponent","specifiedAxis","gridScale","labelFlush","labelOverlap","tickCount","fieldDefTitle","toFieldDefBase","isAxisProperty","labelAngle","configValue","axisEncoding","axisEncode","axisEncodingPart","parseLayerAxis","axisCount","_g","_h","_j","_k","_l","oppositeOrient","bin_1","isValueDef","isDiscrete","invalidFieldType","isContinuous","isCount","verbalTitleFormatter","getTimeUnitParts","titlecase","functionalTitleFormatter","isConditionalSelection","hasConditionalValueDef","isStringFieldDef","prefix","suffix","nofn","isOpFieldDef","String","flatAccessWithDatum","replacePathInField","defaultTitleFormatter","fieldTitle","titleFormatter","setTitleFormatter","formatter","defaultType","rangeType","normalizeFieldDef","isAggregateOp","fieldDefWithoutAggregate","invalidAggregate","normalizeBin","fullType","getFullName","invalidFieldTypeForCountAggregate","newType","emptyOrInvalidFieldType","channelCompatibility","compatible","warning","maxbins","resetTitleFormatter","primitiveType","primitiveChannelDef","COMPATIBLE","facetChannelShouldBeDiscrete","undefinedIfExprNotRequired","isLocalSingleTimeUnit","isUtcSingleTimeUnit","getLocalTimeUnit","valueArray","TOGGLE","toggle","tpl","getMaxValue","getConditionValue","conditionalDef","getFirstConditionValue","reducer","symbols","symbolsSpec","FILL_STROKE_CONFIG","BAR","TICK","TEXT","CIRCLE","SQUARE","LINE","AREA","gradientSpec","labelsSpec","buildmodel_1","calculate_1","repeater_1","facetSortFieldName","FacetModel","buildModel","initFacet","normalizedFacet","emptyFieldDef","incompatibleChannel","parseHeader","mergeChildAxis","facetFieldDef","makeHeaderComponent","sizeSignal","headerChannel","layoutHeader","headerType","getHeaderType","mainAxis","assembleSelectionTopLevelSignals","assembleSelectionData","getHeaderLayoutMixins","layoutMixins","layoutHeaderComponent","headerComponent","bandType","offset","columns","columnDistinctSignal","getCardinalityAggregateForChild","childScaleComponent","assembleFacet","facetRoot","groupby","outputName","sortArrayIndexField","cross","headerSortFields","headerSortOrder","assembleFacetData","layoutSizeEncodeEntry","concat_1","facet_1","layer_1","repeat_1","unit_1","unitSize","fit","LayerModel","UnitModel","isRepeatSpec","RepeatModel","isConcatSpec","ConcatModel","INVALID_SPEC","BaseConcatModel","sg","db","midPoint","stack","defaultRef","impute","binMidSignal","fieldChannel","position2","aFieldDef","a2fieldDef","getOffset","markDefOffsetValue","side","bandRef","textDef","sizeRef","mult","getDefaultRef","nonZeroScaleUsedWithLengthMark","domains","domainDefinitelyIncludeZero","zeroFalse","assembleScalesForModel","otherScaleProps","assembleScaleRange","scaleRange","nearest_1","datum","bins","multi","htmlConfig","autoSelfClosers","implicitlyClosed","contextGrabbers","doNotIndent","allowUnquoted","allowMissing","caseFold","xmlConfig","editorConf","config_","setStyle","indentUnit","defaults","inText","chain","tokenize","eat","inBlock","eatWhile","doctype","quote","closure","baseState","tagStart","isInAttribute","stringStartCol","terminator","depth","Context","startOfLine","context","indented","noIndent","popContext","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","attrState","matchClosing","closeState","closeStateErr","_stream","attrEqState","attrValueState","attrContinuedState","isInText","baseIndent","sol","indentation","eatSpace","fullLine","alignCDATA","tagAfter","grabbers","electricInput","blockCommentStart","blockCommentEnd","configuration","helperType","skipAttribute","xmlCurrentTag","xmlCurrentContext","cx","mimeModes","HEADER_TITLE_PROPERTIES_MAP","titleAnchor","titleAngle","titleBaseline","titleColor","titleFont","titleFontSize","titleFontWeight","titleLimit","HEADER_LABEL_PROPERTIES_MAP","labelColor","labelFont","labelFontSize","labelLimit","HEADER_TITLE_PROPERTIES","HEADER_LABEL_PROPERTIES","scaleBindings","bind","SCALE_BINDINGS_CONTINUOUS","gridChannel","INVALID_CHANNEL_FOR_AXIS","maxLength","VIEW","LBRACK","RBRACK","LBRACE","RBRACE","COLON","COMMA","NAME","GT","ILLEGAL","DEFAULT_MARKS","arc","image","symbol","DEFAULT_SOURCE","MARKS","eventSelector","parseMerge","trim","parseSelector","find","endChar","pushChar","popChar","count","parseBetween","throttle","split","parseThrottle","marktype","consume","parseStream","isSortArray","defaultSizeRef","discreteBandSize","continuousBandSize","BAR_WITH_POINT_SCALE_AND_RANGESTEP_NULL","sizeDef","xDef","x2Def","xScaleName","xScale","xScaleType","binnedPosition","binSpacing","bandPosition","centeredBandPosition","yDef","y2Def","yScaleName","yScale","yScaleType","defaultSize","bandSize","vgSizeChannel","vgThicknessChannel","thickness","vlFieldDef","optimize_1","compile","inputSpec","autosize","normalizeAutoSize","optimizeDataflow","topLevelProperties","vgConfig","assembleRootData","datasets","projections","layoutSignals","$schema","assembleTopLevelModel","topLevelSpec","extractTopLevelProperties","getTopLevelProperties","reset","WindowTransformNode","makeFromFacet","newParent","frame","windowFieldDef","getDefaultName","params","window_1","param","sortFields","sortOrder","sortField","ignorePeers","ProjectionComponent","specifiedProjection","parentGivenSize","layer","flatten","COMMON_LEGEND_PROPERTY_INDEX","entryPadding","VG_LEGEND_PROPERTY_INDEX","AGGREGATE_OP_INDEX","argmax","argmin","average","distinct","mean","median","missing","q1","q3","ci0","ci1","stderr","stdev","stdevp","sum","valid","variance","variancep","AGGREGATE_OPS","COUNTING_OPS","SUM_OPS","SHARED_DOMAIN_OPS","SHARED_DOMAIN_OP_INDEX","dataflow_1","source_1","LookupNode","secondary","make","fromSource","fromOutputName","fromOutputNode","OutputNode","foreign","asName","NO_FIELDS_NEEDS_AS","lookup","at","escapee","number","isFinite","hex","uffff","parseInt","fromCharCode","white","reviver","walk","holder","normalizeMarkDef","specifiedOrient","RECT","yIsRange","xIsRange","RULE","xIsContinuous","yIsContinuous","xIsTemporal","yIsTemporal","orientOverridden","isAggregate","filledConfig","outerSpec","encodingWithoutSize","encodingWithoutX2Y2","encodingWithoutX_X2_Y_Y2","SCALE_TRIGGER","interval","intervals","tupleTriggers","scaleTriggers","filterExpr_1","evt","filters","cs","dname","scaleStr","coord","channelSignals","toNum","vgStroke","clip","enter","none","querySelector","EnterNode","namespaceURI","_next","_parent","__data__","bindIndex","exit","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","NaN","insertBefore","querySelectorAll","xhtml","svg","xlink","xml","xmlns","namespaces","attrRemove","attrRemoveNS","fullname","removeAttributeNS","attrConstant","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","document","styleRemove","removeProperty","styleConstant","priority","setProperty","styleFunction","propertyRemove","propertyConstant","propertyFunction","classArray","classList","ClassList","_node","_names","getAttribute","classedAdd","names","classedRemove","classedTrue","classedFalse","classedFunction","textRemove","textContent","textConstant","textFunction","htmlRemove","innerHTML","htmlConstant","htmlFunction","raise","previousSibling","creatorInherit","uri","createElementNS","creatorFixed","namespace","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","filterEvents","filterContextListener","listener","contextListener","event","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","__on","removeEventListener","capture","onAdd","wrap","addEventListener","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","mouseenter","mouseleave","root","Selection","groups","parents","_groups","_parents","select","subgroups","subnode","subgroup","selectAll","selectorAll","matcher","each","enterGroup","updateGroup","previous","_enter","_exit","sparse","onenter","onupdate","onexit","append","groups0","groups1","m0","m1","merges","group0","group1","compareNode","sortgroups","sortgroup","nodes","getAttributeNS","getPropertyValue","styleValue","classed","creator","insert","before","deep","typenames","parseTypenames","dispatch","UniqueList","idFunc","ids","idx","TUPLE_ID_KEY","TUPLE_ID","isTuple","tupleid","setid","ingest","derive","rederive","isChangeSet","changeset","rem","remp","modp","reflow","modify","tuple","pulse","tuples","modifies","CACHE","Parameters","modified","OP_ID","NO_PARAMS","Operator","react","stamp","rank","qrank","flags","_update","parameters","flag","bit","targets","_targets","skip","initonly","argval","_argval","argops","_argops","deps","marshall","evaluate","StopPropagation","rv","STREAM_ID","EventStream","receive","_filter","_apply","_consume","trg","preventDefault","stopPropagation","pause","now","df","dataflow","protocol_re","fileProtocol","sanitize","load","file","http","loader","localFile","accept","isFile","hasProtocol","loadFile","baseURL","startsWith","fs","defaultProtocol","fetch","request","response","ok","status","statusText","filename","readFile","query","typeParsers","boolean","integer","unknown","typeTests","isNaN","typeList","inferType","inferTypes","types","EOL","EOF","objectConverter","Function","inferColumns","rows","columnSet","delimiter","reFormat","DELIMITER","charCodeAt","parseRows","N","I","eof","preformatBody","formatValue","formatRow","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","formatYear","getUTCFullYear","getUTCDate","formatDate","convert","customConverter","formatBody","formatRows","delimitedFormat","delim","dsv","Buffer","isBuffer","parseJSON","topology","objects","features","geometries","bbox","geometry","transformPoint","x0","y0","kx","ky","arcs","points","ring","polygon","stitchedArcs","fragmentByStart","fragmentByEnd","fragments","emptyIndex","p1","p0","dp","ends","fg","gf","meshArcs","geom","geomsByArc","extract0","extract1","extract2","extract3","geoms","extractArcs","stitch","csv","tsv","topojson","feature","mesh","formats","reader","t0","t1","newInterval","floori","offseti","stop","setTime","every","durationSecond","durationMinute","durationHour","durationDay","durationWeek","utcWeekday","setUTCDate","getUTCDay","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcDay","weekday","setDate","getDate","getDay","setHours","getTimezoneOffset","sunday","monday","tuesday","wednesday","thursday","friday","saturday","setMonth","setFullYear","getFullYear","utcYear","setUTCMonth","setUTCFullYear","localDate","H","M","S","L","utcDate","newDate","locale","timeParse","utcFormat","utcParse","pads","numberRe","percentRe","requoteRe","requote","formatRe","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","getHours","formatHour12","formatDayOfYear","formatMilliseconds","getMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","getMinutes","formatSeconds","getSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","dISO","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYearISO","formatFullYear","formatFullYearISO","formatZone","z","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","UTCdISO","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCYearISO","formatUTCFullYear","formatUTCFullYearISO","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","defaultLocale","definition","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","utcFormats","parses","parseSpecifier","newFormat","specifier","newParse","week","formatLocale","schema","dateParse","parsers","parts","pattern","onStream","func","touch","onOperator","Pulse","addFilter","materialize","visit","MultiPulse","pulses","changed","ADD","REM","MOD","changes","ADD_REM","ADD_MOD","ALL","REFLOW","SOURCE","NO_SOURCE","NO_FIELDS","fork","addAll","src","addF","remF","modF","srcF","runAfter","invokeCallback","err","NO_OPT","Heap","siftdown","pidx","siftup","ridx","cidx","Dataflow","_log","logLevel","_clock","_rank","_loader","_touched","_pulses","_pulse","_heap","_postrun","last","retval","pushpop","logMethod","Transform","cleanThreshold","connect","targetRank","rerank","queue","_enqueue","read","pending","_pending","requests","loadPending","catch","send","dt","_getPulse","_onrun","postrun","runAsync","enqueue","Definition","groupkey","measureName","AggregateOps","measure","req","ValidAggregateOps","createMeasure","compareIndex","compileMeasures","agg","all","collect","helper","ctr","valueof","compareDefined","sd","swap","Float64Array","value0","subarray","quantiles","quantileSorted","quartiles","estimateBandwidth","deviation","h","maxb","logb","div","divide","minstep","steps","precision","eps","setRandom","bootstrapCI","samples","alpha","mu","dotbin","smooth","thresh","smoothing","lcg","seed","dist","sample","pdf","cdf","icdf","SQRT2PI","PI","SQRT2","nextSample","sampleNormal","rds","densityNormal","cumulativeNormal","quantileNormal","Number","Infinity","erfinv","gaussian","sigma","kde","support","bandwidth","kernel","sampleLogNormal","densityLogNormal","cumulativeLogNormal","quantileLogNormal","lognormal","mixture","dists","weights","distributions","sampleUniform","densityUniform","cumulativeUniform","quantileUniform","uniform","ols","uX","uY","uXY","uX2","slope","xv","yv","ux","uy","visitPoints","rSquared","predict","SSE","SST","sse","sst","XY","X2","coef","ly","xy","YL","XYL","X2Y","c0","c1","YS","lx","quad","X3","X4","X2X2","poly","lhs","rhs","matrix","gaussianElimination","uncenter","maxiters","epsilon","loess","bw","yhat","residuals","robustWeights","iter","edge","denom","xk","yk","tricube","xkw","updateInterval","medianResidual","arg","cnt","MIN_RADIANS","sampleCurve","minSteps","maxSteps","minX","maxX","ymin","ymax","scaleY","pm","angleDelta","a0","atan2","a1","TupleStore","_key","Aggregate","_adds","_mods","_alen","_mlen","_drop","_cross","_dims","_dnames","_measures","_countOnly","_counts","_prev","_inputs","_outputs","_add","_rem","_ext","_get","_q","quartile","q2","ci","_ci","Bin","aggr","drop","dims","cells","generate","cell","inputs","outputs","inputMap","inputVisit","cellkey","mname","outname","num","newcell","newtuple","measures","celltuple","counts","adds","mods","resort","Collect","Compare","CountPattern","_bins","b0","b1","SortedList","Cross","process","tokens","tcase","case","_parameterCheck","_match","_stop","_finish","stopwords","_tuples","Distributions","normal","FUNCTION","Density","Expression","Extent","Subflow","distribution","Facet","_keys","Field","Filter","fieldNames","Flatten","Fold","Formula","Generate","activate","flow","subflow","flows","sf","_group","cache","rekey","delete","k0","k1","isMod","revisit","arrays","maxlen","fnames","Methods","Empty","Impute","JoinAggregate","gVals","kVal","getValue","getField","fName","kName","gNames","keyvals","gKey","kMap","gMap","partition","_impute","Key","Load","Lookup","MultiExtent","ext","extents","MultiValues","Params","Pivot","PreFacet","Project","Proxy","Relay","Sample","Sequence","Sieve","TupleIndex","Values","_transform","pivotKeys","aggregateParams","lut","res","cap","WindowOps","row_number","dense_rank","drank","percent_rank","cume_dist","cume","ntile","lag","lead","first_value","last_value","nth_value","nth","ValidWindowOps","WindowState","windows","countOnly","visitInputs","WindowOp","ascendingComparator","Window","wind","processPartition","bisector","setWindow","adjustRange","bisect","Top","Left","Right","Bottom","Group","AxisRole","LegendRole","RowHeader","RowFooter","RowTitle","ColHeader","ColFooter","ColTitle","All","Each","Column","Row","Bounds","union","x1","MAX_VALUE","y1","expand","rotate","cos","sin","cy","intersect","encloses","alignsWith","intersects","gradient_id","stops","Item","GroupItem","items","domCanvas","getContext","domImage","Image","ResourceLoader","customLoader","increment","decrement","that","_context","bezierCurveTo","_x0","_x1","_y0","_y1","Basis","BasisClosed","BasisOpen","Bundle","beta","_basis","_beta","sanitizeURL","loadImage","img","onload","loaded","onerror","ready","poll","areaStart","_line","areaEnd","lineStart","_point","lineEnd","lineTo","closePath","moveTo","noop","_x2","_x3","_x4","_y2","_y3","_y4","_x","_y","bundle","Cardinal","cardinal","CardinalOpen","CardinalClosed","_x5","_y5","pi","halfPi","tau","asin","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","x23","y23","catmullRom","CatmullRomClosed","CatmullRomOpen","Linear","LinearClosed","slope3","h0","h1","s0","s1","slope2","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","Step","_t","_t0","px","py","curve","horizontal","vertical","curves","orientation","entry","cmdlen","regexp","pathstr","chunks","parsed","cmd","segmentCache","bezierCache","bezier","th0","th1","rx","ry","sin_th","cos_th","a00","a01","a10","a11","cos_th0","sin_th0","cos_th1","sin_th1","th_half","sin_th_h2","x3","y3","temp","tempX","tempY","tempControlX","tempControlY","controlX","controlY","beginPath","quadraticCurveTo","drawArc","coords","seg","large","sweep","rotateX","ox","oy","th","pl","sfactor_sq","sfactor","xc","yc","th_arc","segs","th2","th3","segments","bez","halfSqrt3","builtins","draw","customSymbol","tauEpsilon","Path","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","tan","acos","t01","t21","ccw","cw","rectangleX","rectangleY","rectangleWidth","rectangleHeight","rectangle","buffer","cr","w2","r2","ud","defined0","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","x11","y11","x10","y10","x00","y00","d2","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","arcShape","padRadius","da0","da1","ap","rp","rc0","rc1","oc","x32","y32","ax","ay","bx","by","kc","lc","centroid","areavShape","areahShape","lineShape","rectShape","symbolShape","trailShape","circleThreshold","linearGradient","createLinearGradient","addColorStop","globalAlpha","fillStyle","sa","ea","xmin","xmax","lw","strokeStyle","lineWidth","lineCap","lineJoin","miterLimit","setLineDash","lineDashOffset","zorder","scene","zdirty","zitems","pickVisit","hit","drawAll","drawPath","drawOne","trueFunc","gx","gy","pixelRatio","hitPath","isPointInStroke","isPointInPath","pickPath","nested","emit","translateItem","boundStroke","markItemPath","tip","markMultiItemPath","interp","clip_id","resetSVGClipId","renderer","defs","_defs","clipping","backgroundPath","hitBackground","noBound","save","restore","interactive","pickMark","background","foreground","getImage","imageXOffset","imageYOffset","aspect","ar0","ar1","drawImage","xOffset","yOffset","pathCache","currFontHeight","textMetrics","measureWidth","estimateWidth","canvas","useCanvas","estimate","textValue","measureText","use","rtl","fontFamily","fontVariant","textAlign","tempBounds","noRotate","fillText","strokeText","ix","iy","DUMMY","hasItems","boundItem","sceneToJSON","sceneFromJSON","initialize","boundMark","Scenegraph","createMark","role","domCreate","doc","ns","domFind","domChild","domClear","cssClass","clientX","clientLeft","clientY","clientTop","customTooltip","_active","_handlers","_tooltip","defaultTooltip","element","markdef","Renderer","_el","_bgcolor","origin","_obj","_origin","_scene","_handlerIndex","handlers","eventName","handleHref","MouseEvent","handleTooltip","show","mdef","resolveItem","getItemBoundingClientRect","itemBounds","scaleFactor","resize","bgcolor","_width","_height","_scale","dirty","_call","_render","renderAsync","_ready","_load","redraw","TooltipShowEvent","TooltipHideEvent","HrefEvent","CanvasHandler","_down","_touch","_first","move","moveEvent","overEvent","outEvent","pickEvent","fire","inactive","_canvas","DOMMouseScroll","mousemove","dragover","mouseout","dragleave","mousedown","click","touchstart","changedTouches","touchmove","touchend","vegaType","devicePixelRatio","CanvasRenderer","_redraw","_dirty","SVGHandler","_hrefHandler","_tooltipHandler","inDOM","HTMLElement","ratio","setTransform","clipToBounds","ctx","clearRect","fillRect","openTag","closeTag","_svg","styles","styleProperties","SVGRenderer","_dirtyID","_root","updateGradient","grad","updateClipping","mask","dirtyParents","sibling","__values__","bg","ownerSVGElement","hasSiblings","class","viewBox","_dirtyCheck","_dirtyAll","_resetDefs","updateDefs","isDirty","isGroup","lastChild","mark_extras","SVGStringRenderer","_text","foot","loc","location","prefixed","applyStyles","buildDefs","attributes","_hrefs","markGroup","Canvas","RenderType","PNG","SVG","modules","renderModule","headless","clipBounds","TOLERANCE","sceneEqual","pathEqual","ka","kb","objectEqual","Bound","rebound","markBounds","boundClip","COUNTER_NAME","Identifier","Mark","Overlap","_signals","getCounter","scenegraph","Init","methods","parity","greedy","hasOverlap","hasBounds","Render","bboxFlush","bboxFull","boundFlush","boundFull","offsetValue","headers","ncols","isX","bf","stride","back","layoutTitle","boundScale","boundTolerance","tolerance","boundTest","boundOrient","ViewLayout","isYAxis","axisLayout","indices","axisIndices","titlePadding","axisTitleLayout","legendPreprocess","legendGroupLayout","legendLayout","xBounds","yBounds","axisBounds","entries","widths","leftWidth","views","rowheaders","rowfooters","colheaders","colfooters","rowtitle","coltitle","extractGroups","alignCol","alignRow","padCol","padRow","nrows","xExtent","xMax","yExtent","yMax","headerBand","footerBand","titleBand","gridLayout","viewBounds","legendMargin","titleLayout","viewWidth","viewHeight","_autosize","_resizeView","viewSizeLayout","layoutGroup","Log","Pow","Sqrt","Point","Ordinal","Quantile","Quantize","Threshold","BinOrdinal","Sequential","ascendingBisect","bisectRight","bisectLeft","e10","e5","e2","tickIncrement","power","LN10","step0","step1","Map","sortValues","rollup","nest","sortKeys","createResult","setResult","valuesByKey","sortKey","createObject","setObject","createMap","setMap","Set","copy","factory","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","rgbn","Rgb","rgba","hsla","rgbConvert","rgb_formatHex","rgb_formatRgb","Hsl","hslConvert","hsl","hsl2rgb","m2","v0","v3","t2","t3","hue","nogamma","displayable","formatHsl","rgbGamma","exponential","gamma","rgbSpline","spline","colors","rgbBasis","rgbBasisClosed","isNumberArray","ArrayBuffer","isView","DataView","numberArray","genericArray","nb","na","reA","reB","am","bm","bs","bi","lastIndex","valueOf","unit","clamper","bimap","polymap","untransform","piecewise","rescale","invert","rangeRound","continuous","prefixExponent","formatSpecifier","FormatSpecifier","comma","formatDecimalParts","toExponential","coefficient","toFixed","toLocaleString","toPrecision","formatRounded","formatPrefix","prefixes","grouping","thousands","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","formatTypes","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatTrim","tickFormat","precisionPrefix","precisionRound","precisionFixed","transformLog","transformExp","transformLogn","transformExpn","pow10","reflect","transformPow","transformSqrt","transformSquare","hour","minute","second","millisecond","durationYear","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","tickIntervals","tickInterval","utcMonth","utcHour","setUTCMinutes","utcMinute","setUTCSeconds","ordinalRange","bandSpace","invertRange","invertExtent","invertRangeExtent","logs","pows","E","log10","log2","logp","powp","quantile","thresholds","quantize","interpolator","binLinear","setDomain","binOrdinal","cssNode","cssRoot","cssView","svgNode","translateX","translateY","skewX","scaleX","atan","interpolateTransform","pxComma","pxParen","degParen","xa","ya","xb","yb","interpolateTransformCss","decompose","interpolateTransformSvg","baseVal","consolidate","rho","rho2","rho4","epsilon2","cosh","ux0","uy0","w0","ux1","uy1","w1","coshr0","tanh","sinh","duration","hslLong","deg2rad","rad2deg","Xn","Yn","Zn","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hcl","hclConvert","hclLong","A","B","C","ED","EB","BC_DA","Cubehelix","bl","cubehelixConvert","cubehelix","cubehelixGamma","cubehelixLong","interpolateRange","scaleFraction","category20","category20b","category20c","tableau10","tableau20","blueOrange","ramp","magma","inferno","plasma","warm","cool","ts","pi_1_3","pi_2_3","discretized","blueorange","schemes","category10","accent","dark2","paired","pastel1","pastel2","set1","set2","set3","viridis","rainbow","sinebow","schemeDiscretized","schemeArray","timeInterval","utcInterval","validTicks","endpoints","tickValues","sourceFormat","targetFormat","decimalChar","dec","rightmostDigit","trimZeroes","variablePrecision","AxisTicks","DataJoin","defaultItemCreate","isExit","Encode","encoders","reenter","LegendEntries","fraction","labelValues","formatRange","formatDiscrete","formatPoint","labelFormat","perc","adjust","labelFraction","perc2","Paths","sr","ta","tr","tx","ty","sc","ss","tc","mr","sourceX","sourceY","targetX","targetY","LinkPath","rr","Pie","INCLUDE_ZERO","INCLUDE_PAD","Scale","domainCheck","adjustScheme","flip","SortItems","outer","inner","configureRangeStep","discrete","schemeExtent","schemeCount","configureScheme","interpolateGamma","configureRange","rawDomain","padDomain","domainMin","domainMax","domainMid","domainImplicit","configureDomain","Zero","Center","Normalize","DefOutput","Stack","stackCenter","stackNormalize","stackZero","lastPos","lastNeg","LN2","hole","ringContains","pj","xj","yj","segmentContains","collinear","cases","smoothLinear","contours","tz","contour","polygons","holes","startIndex","endIndex","isorings","xt","yt","_0","_1","blurX","blurY","defaultX","defaultY","defaultWeight","CONTOUR_PARAMS","DENSITY_PARAMS","Contour","weight","density","values0","Float32Array","values1","wi","transformPolygon","transformRing","cellSize","ex","FeatureCollection","GeoJSON","_features","_points","lon","lat","streamGeometry","streamGeometryType","streamObjectType","Feature","Sphere","sphere","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","closed","coordinate","polygonStart","polygonEnd","Adder","_partials","_n","quarterPi","hypot","areaSum","areaRingSum","areaStream","areaRingStart","areaRingEnd","areaPointFirst","areaPoint","boundsStream","X0","Y0","Z0","X1","Y1","Z1","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","_radius","pointRadius","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","PathString","_string","projectionStream","contextStream","lines","rejoin","Intersection","compareIntersection","startInside","subject","segment","pointEqual","isSubject","spherical","cartesian","lambda","phi","cosPhi","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","longitude","pointVisible","clipLine","sink","ringBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","sinPhi","winding","point0","lambda0","phi0","sinPhi0","cosPhi0","lambda1","sinPhi1","cosPhi1","point1","phi1","absDelta","antimeridian","intersection","phiArc","polygonContains","pointLine","ringSegments","validSegment","_circle","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","direction","circleRadius","cosRadius","clipMax","clipMin","clipRectangle","visible","corner","comparePoint","ca","x__","y__","v__","x_","y_","v_","activeStream","bufferStream","clipStream","linePoint","polygonInside","cleanInside","compose","rotationIdentity","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","TransformStream","fitBounds","clipExtent","fitExtent","fitSize","fitWidth","fitHeight","cosMinDistance","delta2","resampleLineTo","phi2","lambda2","dx2","dy2","dz","lambda00","b00","c00","resampleStream","ringPoint","resampleNone","transformRadians","scaleTranslateRotate","scaleTranslate","cosAlpha","sinAlpha","ai","fi","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","cacheStream","preclip","postclip","recenter","resample","transformRotate","clipAngle","smallRadius","notHemisphere","two","n2","n2n2","n1n2","determinant","c2","n1xn2","uu","polar","code","v00","point2","sinRadius","circleStream","reflectX","reflectY","conicProjection","parallels","conicEqualAreaRaw","sy0","forward","cylindricalEqualAreaRaw","r0y","conicEqualArea","azimuthalRaw","azimuthalInvert","cc","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","mercatorRaw","mercatorProjection","reclip","tany","conicConformalRaw","fy","equirectangularRaw","conicEquidistantRaw","nx","A1","A2","A3","A4","equalEarthRaw","l2","l6","gnomonicRaw","naturalEarth1Raw","phi4","orthographicRaw","stereographicRaw","transverseMercatorRaw","adder","bv","av","sqrt2","SQRT1_2","mollweideBromleyTheta","cp","cpsinPhi","mollweideRaw","mollweideBromleyRaw","defaultPath","projectionProperties","getProjectionPath","albers","albersusa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","albersUsa","streams","azimuthalequalarea","azimuthalequidistant","conicconformal","conicequalarea","conicequidistant","equalEarth","equirectangular","gnomonic","mercator","mollweide","naturalEarth1","orthographic","stereographic","transversemercator","GeoPath","GeoPoint","GeoShape","graticuleX","graticuleY","Graticule","DX","DY","graticule","outline","extentMajor","extentMinor","stepMajor","stepMinor","Projection","tree","xm","ym","xp","yp","leaf","quadtree","Quadtree","leaf_copy","initPath","shapeGenerator","treeProto","vx","vy","nodeById","nodeId","cover","xz","yz","quads","retainer","removeAll","visitAfter","Dispatch","T","taskHead","taskTail","timeout","clockLast","clockNow","clockSkew","clock","performance","setFrame","clearNow","Timer","_time","timer","restart","wake","timerFlush","sleep","nap","poke","clearInterval","setInterval","initialAngle","ForceMap","collide","radii","strength","iterations","ri","ri2","prepare","rj","jiggle","nbody","strengths","distanceMin2","distanceMax2","theta2","accumulate","distanceMin","distanceMax","link","links","distances","bias","distance","initializeStrength","initializeDistance","Forces","ForceParams","ForceConfig","ForceOutput","Force","setup","sim","forces","getForce","numForces","setForceParam","hierarchy","childs","Node","valued","defaultChildren","eachBefore","computeHeight","copyData","Nest","HierarchyLayout","defaultSeparation","change","iters","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","stepper","fx","initializeNodes","initializeForce","closest","stopped","static","finish","eachAfter","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","descendants","leaves","setParams","separation","setFields","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","enclosesWeak","encloseBasis","r21","r3","a2","a3","b2","b3","c3","d3","ab","place","score","packEnclose","circles","aa","sj","sk","pack","shuffle","enclose","required","constantZero","defaultRadius","radiusLeaf","packChildren","translateChild","Output","Pack","Partition","positionNode","preroot","ambiguous","defaultId","defaultParentId","parentId","stratify","nodeKey","nodeByKey","Stratify","nextLeft","nextRight","moveSubtree","wm","wp","nextAncestor","vim","TreeNode","meanXReduce","maxYReduce","parentKey","Layouts","tidy","nodeSize","treeRoot","firstWalk","secondWalk","sizeNode","siblings","executeShifts","midpoint","vip","vop","vom","sip","sop","som","apportion","cluster","previousNode","meanX","maxY","leafLeft","leafRight","Tree","TreeLinks","squarifyRatio","nodeValue","sumValue","minValue","maxValue","newRatio","minRatio","dice","squarify","resquarify","_squarify","Tiles","binary","sums","valueOffset","valueTarget","valueLeft","valueRight","slicedice","Treemap","RedBlackTree","RedBlackNode","R","RedBlackRotateLeft","RedBlackRotateRight","RedBlackFirst","tile","paddingStack","paddingTop","paddingBottom","paddingLeft","treemap","after","grandpa","uncle","createEdge","edges","setEdgeEnd","halfedges","createBorderEdge","vertex","clipEdge","connectEdge","fm","fb","cellHalfedgeAngle","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","Circle","attachCircle","lArc","rArc","lSite","cSite","rSite","ha","hc","detachCircle","beachPool","Beach","createBeach","beach","detachBeach","beaches","removeBeach","disappearing","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","lexicographic","Diagram","sites","sortCellHalfedges","clipEdges","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","dc","v01","v11","v10","clipCells","Voronoi","triangles","e1","_found","defaultExtent","diagram","voronoi","cloudRadians","cloudSprite","contextAndRatio","di","sprite","w32","maxh","wcr","wsr","hcr","hsr","xoff","yoff","hasText","pixels","getImageData","seenRow","cloudCollide","board","sw","msx","cloudBounds","archimedeanSpiral","functor","spirals","archimedean","rectangular","Wordcloud","spiral","cloud","dxdy","maxDelta","zeroArray","array8","Uint8Array","array16","Uint16Array","array32","Uint32Array","added","dim","SortedIndex","oldv","oldi","addv","addi","index0","value1","index1","reindex","CrossFilter","lengthen","_index","Bitmaps","_indices","fontSizeRange","fsize","sizeScale","ResolveFilter","reinit","eval","Dimension","remMap","modMap","bits","indexMap","incrementOne","incrementAll","old","lo1","hi1","lo0","hi0","ignore","bitmap","pass","Default","dataref","_runtime","dataset","_viewWidth","_viewHeight","NO_TRAP","trap","itemFilter","markTarget","invoke","vega","elements","checked","option","valuesEqual","selected","selectedIndex","_background","_scenegraph","OUTER","OUTER_INVALID","outerError","scope","addSignal","ASTNode","TokenName","lookahead","callee","consequent","alternate","argument","TokenBooleanLiteral","TokenEOF","TokenIdentifier","TokenKeyword","TokenNullLiteral","TokenNumericLiteral","TokenPunctuator","TokenStringLiteral","SyntaxArrayExpression","SyntaxBinaryExpression","SyntaxCallExpression","SyntaxConditionalExpression","SyntaxIdentifier","SyntaxLiteral","SyntaxLogicalExpression","SyntaxMemberExpression","SyntaxObjectExpression","SyntaxProperty","SyntaxUnaryExpression","MessageUnexpectedToken","MessageUnexpectedNumber","MessageUnexpectedString","MessageUnexpectedIdentifier","MessageUnexpectedReserved","MessageUnexpectedEOS","MessageInvalidRegExp","MessageUnterminatedRegExp","MessageStrictOctalLiteral","MessageStrictDuplicateProperty","DISABLED","RegexNonAsciiIdentifierStart","RegexNonAsciiIdentifierPart","assert","isDecimalDigit","isHexDigit","isOctalDigit","isWhiteSpace","isLineTerminator","isIdentifierStart","isIdentifierPart","keywords","skipComment","scanHexEscape","throwError","scanUnicodeCodePointEscape","cu1","cu2","getEscapedIdentifier","scanPunctuator","code2","ch2","ch3","ch4","ch1","scanNumericLiteral","scanHexLiteral","octal","scanOctalLiteral","parseFloat","advance","getIdentifier","scanStringLiteral","lex","finishBinaryExpression","operator","finishIdentifier","finishLiteral","regex","finishMemberExpression","computed","member","finishProperty","messageFormat","msg","whole","throwUnexpected","expect","matchKeyword","keyword","parseObjectPropertyKey","parseObjectProperty","parseConditionalExpression","legalKeywords","parsePrimaryExpression","parseGroupExpression","finishArrayExpression","parseArrayInitialiser","finishObjectExpression","parseObjectInitialiser","classMarker","terminated","literal","scanRegExpBody","scanRegExpFlags","tmp","$0","$1","exception","testRegExp","scanRegExp","parseArguments","parseComputedMember","parsePostfixExpression","isIdentifierName","parseLeftHandSideExpressionAllowCall","parseUnaryExpression","finishUnaryExpression","binaryPrecedence","prec","marker","markers","parseBinaryExpression","finishConditionalExpression","LOG2E","LOG10E","MIN_VALUE","codegen","cast","fncall","DATE","STRING","REGEXP","datetime","timezoneoffset","utcdate","utcday","utcyear","utcmonth","utchours","utcminutes","utcseconds","utcmilliseconds","indexof","lastindexof","if","formatCache","dateObj","_window","scalePrefix","getScale","addScaleDependency","scaleRef","scaleVisitor","phi00","areaRing","dLambda","sdLambda","adLambda","ranges","W0","W1","z0","deltaSum","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","inflection","phii","lambdai","rangeCompare","rangeContains","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cz","geoMethod","methodName","globalMethod","geoArea","geoBounds","deltaMax","geoCentroid","dataVisitor","dataName","getData","tuplesRef","EMPTY","treeNodes","equalArray","removePredicate","props","INTERSECT","UNIT_INDEX","testPoint","dval","vlSelectionVisitor","indexName","indataRef","BIN","testInterval","ivals","vlSelection","miss","unitIdx","vlPoint","vlMultiVisitor","vlPointDomain","continuousDomain","discreteDomain","intersectInterval","unionInterval","functionContext","sequence","monthFormat","monthAbbrevFormat","dayFormat","dayAbbrevFormat","inScope","pinchDistance","touches","pinchAngle","screen","containerSize","clientWidth","windowSize","bandspace","setdata","pathShape","_trigger","eventFunctions","thisPrefix","astVisitors","expressionFunction","codeGenerator","functions","Gradient","resUnit","codegenParams","blacklist","whitelist","fieldvar","globalvar","constants","visitors","outputGlobal","globals","memberDepth","ast","Generators","Literal","MemberExpression","stripQuotes","CallExpression","ArrayExpression","BinaryExpression","UnaryExpression","ConditionalExpression","LogicalExpression","ObjectExpression","Property","signalPrefix","preamble","signalName","getSignal","signalRef","$expr","$fields","$params","Entry","$ref","refs","tupleidRef","$tupleid","$field","$name","keyFieldRef","compareRef","$compare","$order","aggrField","Scope","View","isSignal","hasSignal","specValue","deref","mergeStream","nestedStream","eventStream","streamParameters","addStream","markrole","FIELD_REF_ID","allTypes","discreteTypes","continuousTypes","ordinalTypes","isOrdinal","isDiscretizing","isQuantile","parseLiteral","parseScaleInterpolate","parseScaleNice","dataLookupError","explicitDomain","multipleDomain","singularDomain","valuesRef","parseSort","domainRef","extentRef","dom","coll","$ingest","addDataPipeline","ordinalMultipleDomain","quantileMultipleDomain","numericMultipleDomain","countsRef","sortRef","multidomain","parseArray","parseParameter","Vertical","Index","Label","Offset","Perc","Perc2","Size","Value","GuideLabelStyle","GuideTitleStyle","GroupTitleStyle","LegendScales","Skip","Swap","enc","hasBandwidth","rules","parseEncode","$output","MarkRole","AxisDomainRole","AxisGridRole","AxisLabelRole","AxisTickRole","AxisTitleRole","LegendBandRole","LegendEntryRole","LegendGradientRole","LegendLabelRole","LegendSymbolRole","LegendTitleRole","encoder","addEncode","extendEncode","$encode","defaultEncode","applyDefaults","dataRef","extras","isVertical","configVal","gradientLength","gradientWidth","gradientThickness","gradientHeight","entryColumns","symbolDirection","getEncoding","GroupMark","RectMark","RuleMark","SymbolMark","TextMark","userEncode","gradientDirection","vv","alignExpr","baselineExpr","overlap","gradientLabelLimit","labelOffset","gradientLabelOffset","symbolOffset","valueRef","xSignal","yEncode","symbolBaseFillColor","symbolBaseStrokeColor","parseParameters","proxy","pdef","lookupRef","parseIndexParameter","parseSubParameter","parseSubParameters","projectionRef","parameterValue","isExpr","isField","isCompare","exprRef","outerField","isData","getDataRef","DataScope","fromEntries","fieldKey","addSortField","ds","optype","trigger","sieve","joinRef","markRef","encodeRef","layoutRef","boundRef","keyRef","$context","markpath","generates","objectProperty","operators","pushState","subscope","addData","$subflow","toRuntime","popState","tol","parseOverlap","anchorExpr","startValue","endValue","centerValue","multExpr","flushExpr","preprocessed","addProjection","addScale","initScale","upstream","$format","$load","$request","analyze","isSubscope","addUpdate","streamSource","ticksRef","or","tickPos","vscale","tickSize","isXAxis","flushOffset","flushOn","labelAlign","labelBaseline","u2","titlePos","entryEncode","entryLayout","entryRef","scaleCount","legendType","buildLegendEncode","legendSymbolLayout","getStyle","getFontSize","sizeExpression","opp","buildTitle","parseLambdas","bindings","lambdas","updates","eventConfig","_id","_subid","_nextsub","_encode","_lookup","_markpath","Subscope","propertyLambda","arrayLambda","objectLambda","vref","annotate","stable","check","sig","$key","$flat","addScaleProj","projectionType","dataScope","defaultFont","defaultSymbolSize","defaultStrokeWidth","defaultColor","lightGray","parseView","allow","domainWidth","domainColor","gridWidth","gridColor","labelPadding","tickColor","tickOffset","tickRound","tickWidth","titleAlign","gridAlign","columnPadding","rowPadding","gradientStrokeColor","gradientStrokeWidth","symbolType","symbolSize","symbolStrokeWidth","category","heatmap","diverging","eventExpression","encodeExpression","PARSERS","parameterExpression","subctx","canonicalType","operatorExpression","parseOperatorParameters","srcid","handlerExpression","ContextFork","subcontext","unresolved","getState","setState","substate","Width","Height","dataTest","signalTest","formatArray","formatTooltip","_renderType","_renderer","_handler","_preventDefault","_timers","_eventListeners","_resizeListeners","runtime","_bind","_eventConfig","prevent","initializeEventConfig","_resize","resetSize","_resizeWidth","_resizeHeight","resizePadding","initializeResize","user","setCursor","lookupSignal","findOperatorHandler","addOperatorListener","removeOperatorListener","_resetRenderer","rerun","addResizeListener","removeResizeListener","addSignalListener","removeSignalListener","addDataListener","removeDataListener","total","elapsed","timestamp","itemGroup","extension","finalize","timers","listeners","hover","hoverSet","leaveSet","elBind","Handler","prevHandler","binding","toImageURL","blob","Blob","URL","createObjectURL","toDataURL","toCanvas","toSVG","lightColor","darkTheme","subtitleColor","markColor$7","excelTheme","gridOpacity","tickExtra","markColor$6","axisColor$2","backgroundColor$2","blackTitle","fiveThirtyEightTheme","markColor$5","ggplot2Theme","labelFont$1","markColor$4","colorSchemes$1","latimesTheme","labelFontWeight","titleX","titleY","markColor$3","axisColor$1","quartzTheme","markColor$2","voxTheme","gridDash","markColor$1","axisColor","colorSchemes","urbanInstituteTheme","markColor","googlechartsTheme","ptToPx","fontSmallPx","legendFontPx","fontLargePx","fontStandard","fontTitle","firstLevelElementColor","secondLevelElementColor","backgroundColor","paletteColor1","divergentColorMin","divergentPalette","powerbiTheme","axisQuantitative","EL_ID","DEFAULT_OPTIONS","offsetX","offsetY","styleId","disableDefaultStyle","escapeHTML","maxDepth","elementId","tooltip_handler","getElementById","createDefaultStyle","valueToHtml","content","rest","keys_1","tooltipBox","calculatePosition","src_1","deepMerge_","vl","NAMES","VERSION","PREPROCESSOR","vgjson","vljson","SVG_CIRCLES","viewSource","sourceHeader","sourceFooter","footer","win","open","write","actions","ID","vgSpec","wrapper","ctrl","editorUrl_1","export","png","compiled","defaultStyle","innerText","getElementsByTagName","providedMode","satisfies","guessMode","onBeforeParse","editorUrl","listen","postMessage","post","adopt","specifiedLabelsSpec","noOptions","nonWS","cmpPos","firstNonWS","useInnerComments","getModeAt","toggleComment","minLine","uncomment","lineComment","getTokenTypeAt","commentString","blankLines","commentBlankLines","baseString","whitespace","cut","fullLines","blockComment","startString","endString","lastLineHasText","blockCommentLead","atCursor","setSelection","didSomething","lineString","endPos","startLine","insideStart","insideEnd","getRange","lastStart","firstEnd","almostLastStart","openEnd","foundEnd","GeoPointNode","area_1","bar_1","geoshape_1","line_1","point_1","rect_1","rule_1","text_1","tick_1","markCompiler","TRAIL","details","pathGroupingFields","pathMarks","getMarkGroups","fromPrefix","FACETED_PATH_PREFIX","MAIN","parsePathMark","getSort","isPathMark","dimensionChannelDef","scaleClip","postEncodingTransform","formula","makeFromEncoding","timeUnitComponent","makeFromTransform","_normalizeAutoSize","topLevelAutosize","configAutosize","isUnitOrLayer","FIT_NON_SINGLE","TOP_LEVEL_PROPERTIES","util","parseDomainForChannel","scaleConfig","canUseUnaggregatedDomain","reason","useUnaggregatedDomain","normalizeUnaggregatedDomain","specifiedScales","parseSingleChannelDomain","mapDomainToDataSignal","domainSort","RAW","unaggregatedDomainWithLogScale","unaggregateDomainWithNonSharedDomainOp","unaggregateDomainHasNoEffectForRawField","mergeDomains","uniqueDomains","unique","sorts","sort_2","MORE_THAN_ONE_SORT","simpleSorts","domainSortDropped","allData","localScaleComponents","specifiedDomain","localScaleCmpt","facetParent","domains_1","FACET_SCALE_PREFIX","parseUnitScaleDomain","childComponent","parseNonUnitScaleDomain","nonUnionDomain","COMMON_AXIS_PROPERTIES_INDEX","labelBound","AXIS_PROPERTIES_INDEX","titleMaxLength","VG_AXIS_PROPERTIES_INDEX","AXIS_PROPERTIES","isFilter","isLookup","isWindow","isCalculate","isBin","isTimeUnit","isStack","normalizeLogicalOperand","encoding_2","isBoxPlotDef","supportedChannels","filterUnsupportedChannels","newEncoding","kIQRScalar","boxOrient","continuousAxisChannelDef","continuousAxis","continuousAxisWithoutAggregate","boxContinousAxis","isMinMax","postAggregateCalculates","calculate","encodingWithoutContinuousAxis","transformedField","boxParams","encodingWithoutSizeColorAndContinuousAxis","sizeMixins","continuousAxisScaleAndAxis","main","LocalLogger","warns","infos","debugs","newLogger","CANNOT_FIX_RANGE_STEP_WITH_FIT","nearestNotSupportForContinuous","CONCAT_CANNOT_SHARE_AXIS","REPEAT_CANNOT_SHARE_AXIS","invalidTransformIgnored","encodingOverridden","projectionOverridden","parentProjection","droppingColor","latLongDeprecated","newChannel","LINE_WITH_VARYING_SIZE","markOrFacet","when","invalidEncodingChannel","discreteChannelCannotEncode","lineWithRange","hasX2","hasY2","original","actual","CANNOT_UNION_CUSTOM_DOMAIN_WITH_FIELD_DOMAIN","cannotApplySizeToNonOrientedMark","rangeStepDropped","scaleTypeNotWorkWithChannel","defaultScaleType","scaleTypeNotWorkWithFieldDef","scalePropertyNotWorkWithScaleType","scaleTypeNotWorkWithMark","mergeConflictingProperty","propertyOf","independentScaleMeansIndependentGuide","UNABLE_TO_MERGE_DOMAINS","cannotStackRangedMark","cannotStackNonLinearScale","stackNonSummativeAggregate","dayReplacedWithDate","fullTimeUnit","keySet","inline","propertyKeywords","resolveMode","override","tokenHooks","documentTypes","mediaTypes","mediaFeatures","mediaValueKeywords","nonStandardPropertyKeywords","fontProperties","counterDescriptors","colorKeywords","valueKeywords","allowNested","supportsAtComponent","highlightNonStandardPropertyKeywords","ret","tp","tokenBase","tokenString","tokenParenthesized","escaped","pushContext","states","popAndPass","wordAsValue","stateArg","atBlock","electricChars","blockCommentContinue","fold","documentTypes_","mediaTypes_","mediaFeatures_","mediaValueKeywords_","propertyKeywords_","nonStandardPropertyKeywords_","colorKeywords_","valueKeywords_","allWords","tokenCComment","maybeEnd","skipToEnd","FilterNode","STACK_OFFSET_INDEX","isStackOffset","STACKABLE_MARKS","STACK_BY_DEFAULT_MARKS","stackConfig","potentialStackedChannel","stackedFieldDef","stackedField","dimensionChannel","dimensionDef","dimensionField","stackBy","NONPOSITION_CHANNELS","cDef","groupbyChannel","gap","rep","escapable","meta","partial","mind","FacetNode","sortIndexField","childModel","getChildIndependentFieldsWithStep","childIndependentFieldsWithStep","assembleRowColumnData","crossedDataName","childChannel","AggregateNode","dimensions","meas","addDimension","differ","parentMeasures","childMeasures","mergeMeasures","addDimensions","mergedScaleCmpt","supportedByScaleType","channelIncompatability","copyKeyFromObject","getDefaultValue","parseUnitScaleProperty","parseNonUnitScaleProperty","scalePadding","scalePaddingInner","valueWithExplicit","childValueWithExplicit","barConfig","continuousPadding","paddingValue","paddingInnerValue","bandPaddingOuter","formatparse_1","iterateFromLeaves","optimizeNextFromLeaves","moveParseUp","numChildren","hasIntersection","swapWithParent","removeUnusedSubtrees","removeDuplicateTimeUnits","pfields","mark_2","DEFAULT_REQUIRED_CHANNEL_MAP","DEFAULT_SUPPORTED_CHANNEL_TYPE","getEncodingMappingError","requiredChannelMap","supportedChannelMap","requiredChannels","baseconcat_1","isVConcatSpec","vconcat","hconcat","parseAxisGroup","valueOnly","transparentIfNeeded","colorVgChannel","fillStrokeMarkDefAndConfig","validPredicate","vgRef","refFn","vgConditions","conditionValueRef","textCommon","latitude","markDefProperties","sizeChannel","centeredBandPositionMixins","defaultPosRef","centerChannel","baseChannel","debugName","_children","addChild","oldChild","_source","cloneObj","isRequired","setSource","MARK_INDEX","isMark","PRIMITIVE_MARK_INDEX","isPrimitiveMark","STROKE_CONFIG","FILL_CONFIG","stringOrChar","addMargin","_stringify","currentIndent","reserved","prettified","prettify","delimiters","nextIndent","keyPart","scale_2","parseRangeForChannel","sizeSpecified","xyRangeSteps","noRangeStep","RANGE_PROPERTIES_1","RANGE_PROPERTIES","parseScheme","defaultRange","rangeMin","sizeRangeMin","rangeMax","maxBandSize","minXYRangeStep","maxSize","pointStep","sizeRangeMax","xRange","yRange","getXYRangeStep","rangeWithExplicit","parseUnitScaleRange","compositeMark","vlEncoding","stack_1","isHConcatSpec","mergeEncoding","parentEncoding","overriden","mergeProjection","normalizeLayer","mergedEncoding","mergedProjection","subspec","normalizeNonFacetUnit","isNonFacetUnitSpecWithPrimitiveMark","isRanged","hasX","hasY","normalizedSpec","normalizeRangedUnit","pointOverlay","markConfig","getPointOverlay","lineOverlay","getLineOverlay","dropLineAndPoint","omit","stackProps","overlayEncoding","stackFieldChannel","normalizePathOverlay","dict","pureFieldDef","fieldDefIndex","fieldDefs","normalizeFacet","normalizeRepeat","normalizeVConcat","normalizeHConcat","hasRow","hasColumn","normalizeFacetedUnit","isStacked","titleConfig","titleMarkConfig","CalculateNode","parseAllForSortIndex","field_1","timeUnit_1","sortValue","compile_1","validate","FilterInvalidNode","aggregator","vegaFilters","tables","defaultTable","identifierQuote","CONS","wrapTable","getTable","shallowClone","sub","addMatches","wordlist","cleanName","nameParts","insertIdentifierQuotes","eachWord","lineText","findTableByAlias","alias","fullQuery","aliasUpperCase","previousWord","table","separator","validRange","getLineHandle","indexOfSeparator","posFromIndex","prevItem","wordUpperCase","parseTables","defaultTableName","disableKeywords","modeOption","getKeywords","getIdentifierQuote","useIdentifierQuotes","cont","aliasTable","oldTable","tableInsert","nameCompletion","objectOrClass","json_stable_stringify_1","without","excludedItems","props_1","props_2","arr","results","values_1","isNumeric","differArray","_vals","alphanumericS","isLogicalNot","not","isLogicalAnd","and","isLogicalOr","orderedProps","pieces","filter_1","filterinvalid_1","geojson_1","geopoint_1","identifier_1","lookup_1","parseTransformArray","lookupCounter","BinNode","window_2","StackNode","parseRoot","AncestorParse","parentIsLayer","rawName","mainName","facetName","optimizers","moveFacetDown","moveMainDownToFacet","copy_1","removeUnnecessaryNodes","getLeaves","roots","dataComponent","makeWalkTree","datasetIndex","walkTree","dataSource","source_2","sourceIndex","newData","whereTo","data_2","data_3","single","repeatValues","_initChildren","row_1","rowField","column_1","columnField","childRepeat","assembleProjectionsForModelAndChildren","assembleProjectionForModel","legendComponentIndex","legendByDomain","domainHash","mergedLegendComponent","createBinComponent","isBinTransform","binKey","extentSignal","getSignalsFromModel","binComponent","binComponentIndex","guide","formulaAs","rangeFormula","binTrans","SemVer","env","NODE_DEBUG","SEMVER_SPEC_VERSION","MAX_LENGTH","MAX_SAFE_INTEGER","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","MAINVERSION","MAINVERSIONLOOSE","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","PRERELEASE","PRERELEASELOOSE","BUILDIDENTIFIER","BUILD","FULL","FULLPLAIN","LOOSEPLAIN","LOOSE","GTLT","XRANGEIDENTIFIERLOOSE","XRANGEIDENTIFIER","XRANGEPLAIN","XRANGEPLAINLOOSE","XRANGE","XRANGELOOSE","COERCE","LONETILDE","TILDETRIM","TILDE","TILDELOOSE","LONECARET","CARETTRIM","CARET","CARETLOOSE","COMPARATORLOOSE","COMPARATOR","COMPARATORTRIM","HYPHENRANGE","HYPHENRANGELOOSE","STAR","loose","includePrerelease","er","major","minor","patch","prerelease","build","compareMain","comparePre","compareIdentifiers","inc","release","diff","version1","version2","eq","defaultResult","numeric","anum","bnum","neq","Comparator","comp","semver","ANY","rcompareIdentifiers","compareLoose","rcompare","rsort","Range","parseRange","hyphenReplace","fM","fp","fpr","tM","tm","tpr","tb","testSet","allowed","outside","hilo","gtfn","ltefn","ltfn","ecomp","comparators","high","low","rangeTmp","sameDirectionIncreasing","sameDirectionDecreasing","sameSemVer","differentDirectionsInclusive","oppositeDirectionsLessThan","oppositeDirectionsGreaterThan","comps","hr","compRe","pr","replaceCaret","replaceCarets","replaceTilde","replaceTildes","gtlt","xM","replaceXRange","replaceXRanges","replaceStars","parseComparator","thisComparators","thisComparator","rangeComparators","rangeComparator","toComparators","maxSatisfying","versions","maxSV","rangeObj","minSatisfying","minSV","minVersion","minver","compver","ltr","gtr","coerce","_stack","stackTransform","normalizedAs","isValidAsArray","stackField","facetby","dimensionFieldDef","stackProperties","stackby","_field","getStackByFields","getGroupbyFields","channelScaleResolve","fixedShape","shapeMixins","init_1","specifiedAxes","specifiedLegends","normalizeEncoding","initScales","initAxes","initLegend","isGeoShapeMark","hasGeoPosition","GEOPOSITION_CHANNELS","_axis","axisSpec","NONPOSITION_SCALE_CHANNELS","_legend","toSpec","excludeConfig","excludeData","inputs_1","project_1","toggle_1","translate_1","zoom_1","compilers","nearest","ORDER","DETAIL","KEY","TOOLTIP","HREF","GEOPOSITION_CHANNEL_INDEX","longitude2","latitude2","UNIT_CHANNEL_INDEX","CHANNEL_INDEX","SINGLE_DEF_CHANNEL_INDEX","SINGLE_DEF_CHANNELS","UNIT_CHANNELS","NONPOSITION_CHANNEL_INDEX","POSITION_SCALE_CHANNEL_INDEX","NONPOSITION_SCALE_CHANNEL_INDEX","SCALE_CHANNEL_INDEX","getSupportedMark","supportMark","VORONOI","cellDef","isVoronoi","exists","bytes","base64abc","bytesToBase64","TextEncoder","inputBindings","sgname","copyKeyFromSplit","tieBreaker","TimeUnit","YEAR","MONTH","DAY","HOURS","MINUTES","SECONDS","MILLISECONDS","YEARMONTH","YEARMONTHDATE","YEARMONTHDATEHOURS","YEARMONTHDATEHOURSMINUTES","YEARMONTHDATEHOURSMINUTESSECONDS","MONTHDATE","HOURSMINUTES","HOURSMINUTESSECONDS","MINUTESSECONDS","SECONDSMILLISECONDS","QUARTER","YEARQUARTER","QUARTERMONTH","YEARQUARTERMONTH","UTCYEAR","UTCMONTH","UTCDAY","UTCDATE","UTCHOURS","UTCMINUTES","UTCSECONDS","UTCMILLISECONDS","UTCYEARMONTH","UTCYEARMONTHDATE","UTCYEARMONTHDATEHOURS","UTCYEARMONTHDATEHOURSMINUTES","UTCYEARMONTHDATEHOURSMINUTESSECONDS","UTCMONTHDATE","UTCHOURSMINUTES","UTCHOURSMINUTESSECONDS","UTCMINUTESSECONDS","UTCSECONDSMILLISECONDS","UTCQUARTER","UTCYEARQUARTER","UTCQUARTERMONTH","UTCYEARQUARTERMONTH","LOCAL_SINGLE_TIMEUNIT_INDEX","TIMEUNIT_PARTS","UTC_SINGLE_TIMEUNIT_INDEX","UTC_MULTI_TIMEUNIT_INDEX","utcyearquarter","utcyearquartermonth","utcyearmonth","utcyearmonthdate","utcyearmonthdatehours","utcyearmonthdatehoursminutes","utcyearmonthdatehoursminutesseconds","utcquartermonth","utcmonthdate","utchoursminutes","utchoursminutesseconds","utcminutesseconds","utcsecondsmilliseconds","UTC_TIMEUNIT_INDEX","isUTCTimeUnit","TIMEUNIT_INDEX","yearquarter","yearquartermonth","yearmonth","yearmonthdate","yearmonthdatehours","yearmonthdatehoursminutes","yearmonthdatehoursminutesseconds","quartermonth","monthdate","hoursminutes","hoursminutesseconds","minutesseconds","secondsmilliseconds","TIMEUNITS","SET_DATE_METHOD","dateMethods","singleUnit","isUtc","rawSetDateMethod","setDateMethod","getDateMethod","containsTimeUnit","isUTC","TIMEUNIT_PARTS_1","timeUnitPart","getDateMethod_1","dateExpr","tu","dateComponents","hasYear","timeComponents","dateTimeComponents","ie_lt8","userAgent","documentMode","matching","bracketRegex","findMatchingBracket","where","afterCursor","strict","scanForBracket","maxScanLen","maxScanLineLength","maxScanLines","lineNo","matchBrackets","autoclear","maxHighlightLen","maxHighlightLineLength","highlightNonMatching","markText","focused","doMatchBrackets","currentlyHighlighted","clearHighlighted","oldConfig","projection_1","posssiblePair","parseUnitProjection","nonUnitProjection","mergable","allPropertiesShared","mergeIfNoConflict","modelProjection_1","parseNonUnitProjections","normalizedEncoding","shapeDef","header_1","getHeaderGroup","headerCmpt","getHeaderProperties","hasAxes","propertiesMap","HEADER_TYPES","textOrient","HEADER_TYPES_1","quantitative","temporal","nominal","isType"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/625.120987bdd5293ae3.js.map.gz b/_static/625.120987bdd5293ae3.js.map.gz new file mode 100644 index 0000000..7886eaf Binary files /dev/null and b/_static/625.120987bdd5293ae3.js.map.gz differ diff --git a/_static/640.cbc8d3a34deb8837.js b/_static/640.cbc8d3a34deb8837.js new file mode 100644 index 0000000..1b72d13 --- /dev/null +++ b/_static/640.cbc8d3a34deb8837.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[640],{45640:(e,n,o)=>{o.r(n),o(29389);var s=o(30998),t=o.n(s);window.WaveSkin=t(),$(document).on("runestone:login-complete",window.WaveDrom.ProcessAll)}}]); +//# sourceMappingURL=640.cbc8d3a34deb8837.js.map \ No newline at end of file diff --git a/_static/640.cbc8d3a34deb8837.js.map b/_static/640.cbc8d3a34deb8837.js.map new file mode 100644 index 0000000..05b1cbf --- /dev/null +++ b/_static/640.cbc8d3a34deb8837.js.map @@ -0,0 +1 @@ +{"version":3,"file":"640.cbc8d3a34deb8837.js","mappings":"sJAaAA,OAAOC,SAAW,IAGlBC,EAAEC,UAAUC,GAAG,2BAA4BJ,OAAOK,SAASC,W","sources":["webpack://WebComponents/./runestone/wavedrom/js/wavedrom.js"],"sourcesContent":["// ***********************************************\n// |docname| - JavaScript for the WaveDrom library\n// ***********************************************\n\"use strict\";\n\n// This took a fair amount of experimenting to figure out how to make this work with NPM and Webpack. Sigh. Here's the working result.\n//\n// This has already been packaged for the web with browserify, so we can just import it for the side effects (it defines ``window.WaveDrom``. Importing from the ``lib/`` folder produces a lot of unsatisfied imports when using webpack.\nimport \"wavedrom/wavedrom.min.js\";\n\n// WaveSkin isn't defined globally, so import the default export to get access to it. It defines a single variable, assuming that the variable will be assigned to the ``window``. Here, it's not. So...\nimport WaveSkin from \"wavedrom/skins/default.js\";\n// ...make the required WaveSkin (needed by WaveDrom) available globally.\nwindow.WaveSkin = WaveSkin;\n\n// Run the render after the dynamic load is done.\n$(document).on(\"runestone:login-complete\", window.WaveDrom.ProcessAll);\n"],"names":["window","WaveSkin","$","document","on","WaveDrom","ProcessAll"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/640.cbc8d3a34deb8837.js.map.gz b/_static/640.cbc8d3a34deb8837.js.map.gz new file mode 100644 index 0000000..0e11a99 Binary files /dev/null and b/_static/640.cbc8d3a34deb8837.js.map.gz differ diff --git a/_static/662.1bb5065279414751.js b/_static/662.1bb5065279414751.js new file mode 100644 index 0000000..5fcf219 --- /dev/null +++ b/_static/662.1bb5065279414751.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[662],{10662:(e,t,i)=>{i.r(t),i.d(t,{default:()=>n});var s=i(98098),o=i(78673);class n extends o.A{constructor(e){super(e),this.origOpts=e,this.questions=$(e.orig).data("questionlist"),this.proficiency=$(e.orig).data("proficiency"),this.minDifficulty=$(e.orig).data("minDifficulty"),this.maxDifficulty=$(e.orig).data("maxDifficulty"),this.points=$(e.orig).data("points"),this.autogradable=$(e.orig).data("autogradable"),this.not_seen_ever=$(e.orig).data("not_seen_ever"),this.selector_id=$(e.orig).first().attr("id"),this.primaryOnly=$(e.orig).data("primary"),this.ABExperiment=$(e.orig).data("ab"),this.toggleOptions=$(e.orig).data("toggleoptions"),this.toggleLabels=$(e.orig).data("togglelabels"),this.limitBaseCourse=$(e.orig).data("limit-basecourse"),e.orig.id=this.selector_id}async initialize(){let e=this,t={selector_id:this.selector_id};this.questions?t.questions=this.questions:this.proficiency&&(t.proficiency=this.proficiency),this.minDifficulty&&(t.minDifficulty=this.minDifficulty),this.maxDifficulty&&(t.maxDifficulty=this.maxDifficulty),this.points&&(t.points=this.points),this.autogradable&&(t.autogradable=this.autogradable),this.not_seen_ever&&(t.not_seen_ever=this.not_seen_ever),this.primaryOnly&&(t.primary=this.primaryOnly),this.ABExperiment&&(t.AB=this.ABExperiment),this.timedWrapper&&(t.timedWrapper=this.timedWrapper),this.toggleOptions&&(t.toggleOptions=this.toggleOptions),this.toggleLabels&&(t.toggleLabels=this.toggleLabels),this.limitBaseCourse&&(t.limitBaseCourse=eBookConfig.basecourse);let i=this.origOpts,o=this.selector_id;console.log("getting question source");let n,a=new Request(`${eBookConfig.new_server_prefix}/assessment/get_question_source`,{method:"POST",headers:this.jsonHeaders,body:JSON.stringify(t)}),l=await fetch(a),r=await l.json();if(r=r.detail,r.indexOf("No preview")>=0)throw alert(`Error: Not able to find a question for ${o} based on the criteria`),new Error(`Unable to find a question for ${o}`);if(i.timed){n=(0,s.$y)(r,{timed:!0,selector_id:o,assessmentTaken:i.assessmentTaken});for(let t of i.rqa)if(t.question==e){t.question=n.question;break}e.realComponent=n.question,e.containerDiv=n.question.containerDiv,e.realComponent.selectorId=o}else{if(t.toggleOptions){var g=t.toggleLabels.replace("togglelabels:","").trim();if(g){g=g.split(",");for(var c=0;cToggle Question:
          ';var v=r.split('id="')[1];v=v.split('"')[0],r=m+r+"
          "}if(await(0,s.JK)(r,o,{selector_id:o,is_toggle:this.toggleOptions,is_select:!0,useRunestoneServices:!0}),t.toggleOptions){$("#component-preview").hide();var y=document.getElementById(o+"-toggleQuestion");for(d=0;d")+10),f=i.slice(i.indexOf(""),i.length);i=m+d+f,await this.toggleSet(e,t,i,s),$("#component-preview").hide()}}void 0===window.component_factory&&(window.component_factory={}),window.component_factory.selectquestion=function(e){return new n(e)},$(document).on("runestone:login-complete",(async function(){let e=document.querySelectorAll("[data-component=selectquestion]");for(let t of e)try{if(0==$(t).closest("[data-component=timedAssessment]").length){let e=new n({orig:t});await e.initialize()}}catch(e){console.log(`Error rendering New Exercise ${t.id}\n Details: ${e}`),console.log(e.stack)}}))}}]); +//# sourceMappingURL=662.1bb5065279414751.js.map \ No newline at end of file diff --git a/_static/662.1bb5065279414751.js.gz b/_static/662.1bb5065279414751.js.gz new file mode 100644 index 0000000..fb68451 Binary files /dev/null and b/_static/662.1bb5065279414751.js.gz differ diff --git a/_static/662.1bb5065279414751.js.map b/_static/662.1bb5065279414751.js.map new file mode 100644 index 0000000..66fd5e9 --- /dev/null +++ b/_static/662.1bb5065279414751.js.map @@ -0,0 +1 @@ +{"version":3,"file":"662.1bb5065279414751.js","mappings":"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","sources":["webpack://WebComponents/./runestone/selectquestion/js/selectone.js"],"sourcesContent":["/**\n * *******************************\n * |docname| - SelectOne Component\n * *******************************\n */\nimport {\n renderRunestoneComponent,\n createTimedComponent,\n} from \"../../common/js/renderComponent.js\";\nimport RunestoneBase from \"../../common/js/runestonebase.js\";\nimport \"../css/selectquestion.css\";\n\nexport default class SelectOne extends RunestoneBase {\n /**\n * constructor --\n * Making an instance of a selectone is a bit more complicated because it is\n * a kind of meta directive. That is, go to the server and randomly select\n * a question to display in this spot. Or, if a student has already seen this question\n * in the context of an exam retrieve the question they saw in the first place.\n * Making an API call and waiting for the response is handled asynchronously.\n * But lots of code is not written with that assumption. So we do the initialization in\n * two parts.\n * 1. Create the object with the usual constructor\n * 2. call initialize, which returns a promise. When that promise is resolved\n * the \"replacement\" component will replace the original selectone component in the DOM.\n *\n * @param {} opts\n */\n constructor(opts) {\n super(opts);\n this.origOpts = opts;\n this.questions = $(opts.orig).data(\"questionlist\");\n this.proficiency = $(opts.orig).data(\"proficiency\");\n this.minDifficulty = $(opts.orig).data(\"minDifficulty\");\n this.maxDifficulty = $(opts.orig).data(\"maxDifficulty\");\n this.points = $(opts.orig).data(\"points\");\n this.autogradable = $(opts.orig).data(\"autogradable\");\n this.not_seen_ever = $(opts.orig).data(\"not_seen_ever\");\n this.selector_id = $(opts.orig).first().attr(\"id\");\n this.primaryOnly = $(opts.orig).data(\"primary\");\n this.ABExperiment = $(opts.orig).data(\"ab\");\n this.toggleOptions = $(opts.orig).data(\"toggleoptions\");\n this.toggleLabels = $(opts.orig).data(\"togglelabels\");\n this.limitBaseCourse = $(opts.orig).data(\"limit-basecourse\");\n opts.orig.id = this.selector_id;\n }\n /**\n * initialize --\n * initialize is used so that the constructor does not have to be async.\n * Constructors should definitely not return promises that would seriously\n * mess things up.\n * @return {Promise} Will resolve after component from DB is reified\n */\n async initialize() {\n let self = this;\n let data = { selector_id: this.selector_id };\n if (this.questions) {\n data.questions = this.questions;\n } else if (this.proficiency) {\n data.proficiency = this.proficiency;\n }\n if (this.minDifficulty) {\n data.minDifficulty = this.minDifficulty;\n }\n if (this.maxDifficulty) {\n data.maxDifficulty = this.maxDifficulty;\n }\n if (this.points) {\n data.points = this.points;\n }\n if (this.autogradable) {\n data.autogradable = this.autogradable;\n }\n if (this.not_seen_ever) {\n data.not_seen_ever = this.not_seen_ever;\n }\n if (this.primaryOnly) {\n data.primary = this.primaryOnly;\n }\n if (this.ABExperiment) {\n data.AB = this.ABExperiment;\n }\n if (this.timedWrapper) {\n data.timedWrapper = this.timedWrapper;\n }\n if (this.toggleOptions) {\n data.toggleOptions = this.toggleOptions;\n }\n if (this.toggleLabels) {\n data.toggleLabels = this.toggleLabels;\n }\n if (this.limitBaseCourse) {\n data.limitBaseCourse = eBookConfig.basecourse;\n }\n let opts = this.origOpts;\n let selectorId = this.selector_id;\n console.log(\"getting question source\");\n let request = new Request(\n `${eBookConfig.new_server_prefix}/assessment/get_question_source`,\n {\n method: \"POST\",\n headers: this.jsonHeaders,\n body: JSON.stringify(data),\n }\n );\n let response = await fetch(request);\n let htmlsrc = await response.json();\n htmlsrc = htmlsrc.detail;\n if (htmlsrc.indexOf(\"No preview\") >= 0) {\n alert(\n `Error: Not able to find a question for ${selectorId} based on the criteria`\n );\n throw new Error(`Unable to find a question for ${selectorId}`);\n }\n let res;\n if (opts.timed) {\n // timed components are not rendered immediately, only when the student\n // starts the assessment and visits this particular entry.\n res = createTimedComponent(htmlsrc, {\n timed: true,\n selector_id: selectorId,\n assessmentTaken: opts.assessmentTaken,\n });\n // replace the entry in the timed assessment's list of components\n // with the component created by createTimedComponent\n for (let component of opts.rqa) {\n if (component.question == self) {\n component.question = res.question;\n break;\n }\n }\n self.realComponent = res.question;\n self.containerDiv = res.question.containerDiv;\n self.realComponent.selectorId = selectorId;\n } else {\n if (data.toggleOptions) {\n var toggleLabels = data.toggleLabels\n .replace(\"togglelabels:\", \"\")\n .trim();\n if (toggleLabels) {\n toggleLabels = toggleLabels.split(\",\");\n for (var t = 0; t < toggleLabels.length; t++) {\n toggleLabels[t] = toggleLabels[t].trim();\n }\n }\n var toggleQuestions = this.questions.split(\", \");\n var toggleUI = \"\";\n // check so that only the first toggle select question on the assignments page has a preview panel created, then all toggle select previews use this same panel\n if (!document.getElementById(\"component-preview\")) {\n toggleUI +=\n '
          ' +\n '
          ' +\n '
          ' +\n \"
          \";\n }\n // dropdown menu containing the question options\n toggleUI +=\n '
          ';\n var toggleFirstID = htmlsrc.split('id=\"')[1];\n toggleFirstID = toggleFirstID.split('\"')[0];\n htmlsrc = toggleUI + htmlsrc + \"
          \";\n }\n // just render this component on the page in its usual place\n await renderRunestoneComponent(htmlsrc, selectorId, {\n selector_id: selectorId,\n is_toggle: this.toggleOptions,\n is_select: true,\n useRunestoneServices: true,\n });\n if (data.toggleOptions) {\n $(\"#component-preview\").hide();\n var toggleQuestionSelect = document.getElementById(\n selectorId + \"-toggleQuestion\"\n );\n for (i = 0; i < toggleQuestionSelect.options.length; i++) {\n if (\n toggleQuestionSelect.options[i].value == toggleFirstID\n ) {\n toggleQuestionSelect.value = toggleFirstID;\n $(\"#\" + selectorId).data(\n \"toggle_current\",\n toggleFirstID\n );\n $(\"#\" + selectorId).data(\n \"toggle_current_type\",\n toggleQuestionTypes[0]\n );\n break;\n }\n }\n toggleQuestionSelect.addEventListener(\n \"change\",\n async function () {\n await this.togglePreview(\n toggleQuestionSelect.parentElement.id,\n data.toggleOptions,\n toggleQuestionTypes\n );\n this.logBookEvent({\n event: \"view_toggle\",\n act: toggleQuestionSelect.value,\n div_id: toggleQuestionSelect.parentElement.id,\n });\n }.bind(this)\n );\n }\n }\n return response;\n }\n\n // retrieve html source of a question, for use in various toggle functionalities\n async getToggleSrc(toggleQuestionID) {\n let request = new Request(\n `${eBookConfig.new_server_prefix}/assessment/htmlsrc?acid=${toggleQuestionID}`,\n {\n method: \"GET\",\n }\n );\n let response = await fetch(request);\n let data = await response.json();\n let htmlsrc = data.detail;\n return htmlsrc;\n }\n\n // on changing the value of toggle select dropdown, render selected question in preview panel, add appropriate buttons, then make preview panel visible\n async togglePreview(parentID, toggleOptions, toggleQuestionTypes) {\n $(\"#toggle-buttons\").html(\"\");\n var parentDiv = document.getElementById(parentID);\n var toggleQuestionSelect = parentDiv.getElementsByTagName(\"select\")[0];\n var selectedQuestion =\n toggleQuestionSelect.options[toggleQuestionSelect.selectedIndex]\n .value;\n var htmlsrc = await this.getToggleSrc(selectedQuestion);\n renderRunestoneComponent(htmlsrc, \"toggle-preview\", {\n selector_id: \"toggle-preview\",\n is_toggle: this.toggleOptions,\n is_select: true,\n useRunestoneServices: true,\n });\n\n // add \"Close Preview\" button to the preview panel\n let closeButton = document.createElement(\"button\");\n $(closeButton).text(\"Close Preview\");\n $(closeButton).addClass(\"btn btn-default\");\n closeButton.addEventListener(\"click\",\n function () {\n $(\"#toggle-preview\").html(\"\");\n toggleQuestionSelect.value = $(\"#\" + parentID).data(\n \"toggle_current\"\n );\n $(\"#component-preview\").hide();\n this.logBookEvent({\n event: \"close_toggle\",\n act: toggleQuestionSelect.value,\n div_id: toggleQuestionSelect.parentElement.id\n });\n }.bind(this)\n );\n $(\"#toggle-buttons\").append(closeButton);\n\n // if \"lock\" is not in toggle options, then allow adding more buttons to the preview panel\n if (!toggleOptions.includes(\"lock\")) {\n let setButton = document.createElement(\"button\");\n $(setButton).text(\"Select this Problem\");\n $(setButton).addClass(\"btn btn-primary\");\n $(setButton).click(\n async function () {\n await this.toggleSet(\n parentID,\n selectedQuestion,\n htmlsrc,\n toggleQuestionTypes\n );\n $(\"#component-preview\").hide();\n this.logBookEvent({\n event: \"select_toggle\",\n act: selectedQuestion,\n div_id: parentID,\n });\n }.bind(this)\n );\n $(\"#toggle-buttons\").append(setButton);\n\n // if \"transfer\" in toggle options, and if current question type is Parsons and selected question type is active code, then add \"Transfer\" button to preview panel\n if (toggleOptions.includes(\"transfer\")) {\n var currentType = $(\"#\" + parentID).data(\"toggle_current_type\");\n var selectedType =\n toggleQuestionTypes[toggleQuestionSelect.selectedIndex];\n if (\n currentType == \"Parsons Mixed-Up Code\" &&\n selectedType == \"Active Write Code\"\n ) {\n let transferButton = document.createElement(\"button\");\n $(transferButton).text(\"Transfer Response\");\n $(transferButton).addClass(\"btn btn-primary\");\n $(transferButton).click(\n async function () {\n await this.toggleTransfer(\n parentID,\n selectedQuestion,\n htmlsrc,\n toggleQuestionTypes\n );\n }.bind(this)\n );\n $(\"#toggle-buttons\").append(transferButton);\n }\n }\n }\n\n $(\"#component-preview\").show();\n }\n\n // on clicking \"Select this Problem\" button, close preview panel, replace current question in assignments page with selected question, and send request to update grading database\n // _ `toggleSet`\n async toggleSet(parentID, selectedQuestion, htmlsrc, toggleQuestionTypes) {\n var selectorId = parentID + \"-toggleSelectedQuestion\";\n var toggleQuestionSelect = document\n .getElementById(parentID)\n .getElementsByTagName(\"select\")[0];\n document.getElementById(selectorId).innerHTML = \"\"; // need to check whether this is even necessary\n await renderRunestoneComponent(htmlsrc, selectorId, {\n selector_id: selectorId,\n is_toggle: this.toggleOptions,\n is_select: true,\n useRunestoneServices: true,\n });\n let request = new Request(\n `${eBookConfig.new_server_prefix}/assessment/set_selected_question?metaid=${parentID}&selected=${selectedQuestion}`,\n {}\n );\n await fetch(request);\n $(\"#toggle-preview\").html(\"\");\n $(\"#\" + parentID).data(\"toggle_current\", selectedQuestion);\n $(\"#\" + parentID).data(\n \"toggle_current_type\",\n toggleQuestionTypes[toggleQuestionSelect.selectedIndex]\n );\n }\n\n // on clicking \"Transfer\" button, extract the current text and indentation of the Parsons blocks in the answer space, then paste that into the selected active code question\n async toggleTransfer(\n parentID,\n selectedQuestion,\n htmlsrc,\n toggleQuestionTypes\n ) {\n // retrieve all Parsons lines within the answer space and loop through this list\n var currentParsons = document\n .getElementById(parentID + \"-toggleSelectedQuestion\")\n .querySelectorAll(\"div[class^='answer']\")[0]\n .getElementsByClassName(\"prettyprint lang-py\");\n var currentParsonsClass;\n var currentBlockIndent;\n var indentCount;\n var indent;\n var parsonsLine;\n var parsonsLines = ``;\n var count;\n for (var p = 0; p < currentParsons.length; p++) {\n indentCount = 0;\n indent = \"\";\n // for Parsons blocks that have built-in indentation in their lines\n currentParsonsClass = currentParsons[p].classList[2];\n if (currentParsonsClass) {\n if (currentParsonsClass.includes(\"indent\")) {\n indentCount =\n parseInt(indentCount) +\n parseInt(\n currentParsonsClass.slice(\n 6,\n currentParsonsClass.length\n )\n );\n }\n }\n // for Parsons answer spaces with vertical lines that allow student to define their own line indentation\n currentBlockIndent =\n currentParsons[p].parentElement.parentElement.style.left;\n if (currentBlockIndent) {\n indentCount =\n parseInt(indentCount) +\n parseInt(\n currentBlockIndent.slice(\n 0,\n currentBlockIndent.indexOf(\"px\")\n ) / 30\n );\n }\n for (var d = 0; d < indentCount; d++) {\n indent += \" \";\n }\n // retrieve each text snippet of each Parsons line and loop through this list\n parsonsLine = currentParsons[p].getElementsByTagName(\"span\");\n count = 0;\n for (var l = 0; l < parsonsLine.length; l++) {\n if (parsonsLine[l].childNodes[0].nodeName == \"#text\") {\n // Parsons blocks have differing amounts of hierarchy levels (spans within spans)\n if (p == 0 && count == 0) {\n // need different check than l == 0 because the l numbering doesn't align with location within line due to inconsistent span heirarchy\n parsonsLines += indent + parsonsLine[l].innerHTML;\n count++;\n } else if (count != 0) {\n parsonsLines += parsonsLine[l].innerHTML;\n count++;\n } else {\n parsonsLines =\n parsonsLines +\n `\n ` +\n indent +\n parsonsLine[l].innerHTML;\n parsonsLines = parsonsLines.replace(\n \" \",\n \"\"\n );\n count++;\n }\n }\n }\n }\n // replace all existing code within selected active code question with extracted Parsons text\n var htmlsrcFormer = htmlsrc.slice(\n 0,\n htmlsrc.indexOf(\"\") +\n 10\n );\n var htmlsrcLatter = htmlsrc.slice(\n htmlsrc.indexOf(\"\"),\n htmlsrc.length\n );\n htmlsrc = htmlsrcFormer + parsonsLines + htmlsrcLatter;\n\n await this.toggleSet(\n parentID,\n selectedQuestion,\n htmlsrc,\n toggleQuestionTypes\n );\n $(\"#component-preview\").hide();\n }\n}\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\n\nwindow.component_factory.selectquestion = function (opts) {\n return new SelectOne(opts);\n};\n\n/*\n * When the page is loaded and the login checks are complete find and render\n * each selectquestion component that is not part of a timedAssessment.\n **/\n$(document).on(\"runestone:login-complete\", async function () {\n let selQuestions = document.querySelectorAll(\n \"[data-component=selectquestion]\"\n );\n for (let cq of selQuestions) {\n try {\n if ($(cq).closest(\"[data-component=timedAssessment]\").length == 0) {\n // If this element exists within a timed component, don't render it here\n let tmp = new SelectOne({ orig: cq });\n await tmp.initialize();\n }\n } catch (err) {\n console.log(`Error rendering New Exercise ${cq.id}\n Details: ${err}`);\n console.log(err.stack);\n }\n }\n});\n"],"names":["SelectOne","constructor","opts","super","this","origOpts","questions","$","orig","data","proficiency","minDifficulty","maxDifficulty","points","autogradable","not_seen_ever","selector_id","first","attr","primaryOnly","ABExperiment","toggleOptions","toggleLabels","limitBaseCourse","id","initialize","self","primary","AB","timedWrapper","eBookConfig","basecourse","selectorId","console","log","res","request","Request","new_server_prefix","method","headers","jsonHeaders","body","JSON","stringify","response","fetch","htmlsrc","json","detail","indexOf","alert","Error","timed","assessmentTaken","component","rqa","question","realComponent","containerDiv","replace","trim","split","t","length","i","toggleQuestionSubstring","toggleQuestionType","toggleQuestions","toggleUI","document","getElementById","toggleQuestionTypes","getToggleSrc","slice","includes","toggleFirstID","is_toggle","is_select","useRunestoneServices","hide","toggleQuestionSelect","options","value","addEventListener","async","togglePreview","parentElement","logBookEvent","event","act","div_id","bind","toggleQuestionID","parentID","html","getElementsByTagName","selectedQuestion","selectedIndex","closeButton","createElement","text","addClass","append","setButton","click","toggleSet","currentType","selectedType","transferButton","toggleTransfer","show","innerHTML","currentParsonsClass","currentBlockIndent","indentCount","indent","parsonsLine","count","currentParsons","querySelectorAll","getElementsByClassName","parsonsLines","p","classList","parseInt","style","left","d","l","childNodes","nodeName","htmlsrcFormer","htmlsrcLatter","window","component_factory","selectquestion","on","selQuestions","cq","closest","tmp","err","stack"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/662.1bb5065279414751.js.map.gz b/_static/662.1bb5065279414751.js.map.gz new file mode 100644 index 0000000..34a9b9d Binary files /dev/null and b/_static/662.1bb5065279414751.js.map.gz differ diff --git a/_static/669.05a3639d12541567.js b/_static/669.05a3639d12541567.js new file mode 100644 index 0000000..b4eeaf4 --- /dev/null +++ b/_static/669.05a3639d12541567.js @@ -0,0 +1,3 @@ +/*! For license information please see 669.05a3639d12541567.js.LICENSE.txt */ +(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[669],{38416:e=>{var t={exports:{}};function n(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((function(t){var r=e[t];"object"!=typeof r||Object.isFrozen(r)||n(r)})),e}t.exports=n,t.exports.default=n;class r{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function o(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t];return t.forEach((function(e){for(const t in e)n[t]=e[t]})),n}const a=e=>!!e.scope||e.sublanguage&&e.language;class s{constructor(e,t){this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=o(e)}openNode(e){if(!a(e))return;let t="";t=e.sublanguage?`language-${e.language}`:((e,{prefix:t})=>{if(e.includes(".")){const n=e.split(".");return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ")}return`${t}${e}`})(e.scope,{prefix:this.classPrefix}),this.span(t)}closeNode(e){a(e)&&(this.buffer+="")}value(){return this.buffer}span(e){this.buffer+=``}}const l=(e={})=>{const t={children:[]};return Object.assign(t,e),t};class c{constructor(){this.rootNode=l(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const t=l({scope:e});this.add(t),this.stack.push(t)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{c._collapse(e)})))}}class d extends c{constructor(e){super(),this.options=e}addKeyword(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,t){const n=e.root;n.sublanguage=!0,n.language=t,this.add(n)}toHTML(){return new s(this,this.options).value()}finalize(){return!0}}function u(e){return e?"string"==typeof e?e:e.source:null}function h(e){return f("(?=",e,")")}function g(e){return f("(?:",e,")*")}function p(e){return f("(?:",e,")?")}function f(...e){return e.map((e=>u(e))).join("")}function m(...e){const t=function(e){const t=e[e.length-1];return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}(e);return"("+(t.capture?"":"?:")+e.map((e=>u(e))).join("|")+")"}function b(e){return new RegExp(e.toString()+"|").exec("").length-1}const v=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function _(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n;let r=u(e),o="";for(;r.length>0;){const e=v.exec(r);if(!e){o+=r;break}o+=r.substring(0,e.index),r=r.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?o+="\\"+String(Number(e[1])+t):(o+=e[0],"("===e[0]&&n++)}return o})).map((e=>`(${e})`)).join(t)}const y="[a-zA-Z]\\w*",E="[a-zA-Z_]\\w*",w="\\b\\d+(\\.\\d+)?",x="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",S="\\b(0b[01]+)",A={begin:"\\\\[\\s\\S]",relevance:0},N={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[A]},k={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[A]},O=function(e,t,n={}){const r=i({scope:"comment",begin:e,end:t,contains:[]},n);r.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const o=m("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return r.contains.push({begin:f(/[ ]+/,"(",o,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),r},C=O("//","$"),T=O("/\\*","\\*/"),D=O("#","$"),M={scope:"number",begin:w,relevance:0},I={scope:"number",begin:x,relevance:0},R={scope:"number",begin:S,relevance:0},B={begin:/(?=\/[^/\n]*\/)/,contains:[{scope:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[A,{begin:/\[/,end:/\]/,relevance:0,contains:[A]}]}]},L={scope:"title",begin:y,relevance:0},P={scope:"title",begin:E,relevance:0},j={begin:"\\.\\s*"+E,relevance:0};var $=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:y,UNDERSCORE_IDENT_RE:E,NUMBER_RE:w,C_NUMBER_RE:x,BINARY_NUMBER_RE:S,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const t=/^#![ ]*\//;return e.binary&&(e.begin=f(t,/.*\b/,e.binary,/\b.*/)),i({scope:"meta",begin:t,end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},BACKSLASH_ESCAPE:A,APOS_STRING_MODE:N,QUOTE_STRING_MODE:k,PHRASAL_WORDS_MODE:{begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},COMMENT:O,C_LINE_COMMENT_MODE:C,C_BLOCK_COMMENT_MODE:T,HASH_COMMENT_MODE:D,NUMBER_MODE:M,C_NUMBER_MODE:I,BINARY_NUMBER_MODE:R,REGEXP_MODE:B,TITLE_MODE:L,UNDERSCORE_TITLE_MODE:P,METHOD_GUARD:j,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}})}});function z(e,t){"."===e.input[e.index-1]&&t.ignoreMatch()}function F(e,t){void 0!==e.className&&(e.scope=e.className,delete e.className)}function H(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=z,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function X(e,t){Array.isArray(e.illegal)&&(e.illegal=m(...e.illegal))}function U(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function Y(e,t){void 0===e.relevance&&(e.relevance=1)}const K=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]})),e.keywords=n.keywords,e.begin=f(n.beforeMatch,h(n.begin)),e.starts={relevance:0,contains:[Object.assign(n,{endsParent:!0})]},e.relevance=0,delete n.beforeMatch},W=["of","and","for","in","not","or","if","then","parent","list","value"];function G(e,t,n="keyword"){const r=Object.create(null);return"string"==typeof e?o(n,e.split(" ")):Array.isArray(e)?o(n,e):Object.keys(e).forEach((function(n){Object.assign(r,G(e[n],t,n))})),r;function o(e,n){t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((function(t){const n=t.split("|");r[n[0]]=[e,Z(n[0],n[1])]}))}}function Z(e,t){return t?Number(t):function(e){return W.includes(e.toLowerCase())}(e)?0:1}const q={},V=e=>{console.error(e)},J=(e,...t)=>{console.log(`WARN: ${e}`,...t)},Q=(e,t)=>{q[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),q[`${e}/${t}`]=!0)},ee=new Error;function te(e,t,{key:n}){let r=0;const o=e[n],i={},a={};for(let e=1;e<=t.length;e++)a[e+r]=o[e],i[e+r]=!0,r+=b(t[e-1]);e[n]=a,e[n]._emit=i,e[n]._multi=!0}function ne(e){!function(e){e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,delete e.scope)}(e),"string"==typeof e.beginScope&&(e.beginScope={_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope}),function(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw V("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),ee;if("object"!=typeof e.beginScope||null===e.beginScope)throw V("beginScope must be object"),ee;te(e,e.begin,{key:"beginScope"}),e.begin=_(e.begin,{joinWith:""})}}(e),function(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw V("skip, excludeEnd, returnEnd not compatible with endScope: {}"),ee;if("object"!=typeof e.endScope||null===e.endScope)throw V("endScope must be object"),ee;te(e,e.end,{key:"endScope"}),e.end=_(e.end,{joinWith:""})}}(e)}function re(e){function t(t,n){return new RegExp(u(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":""))}class n{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=b(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map((e=>e[1]));this.matcherRe=t(_(e,{joinWith:"|"}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e);if(!t)return null;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),r=this.matchIndexes[n];return t.splice(0,n),Object.assign(t,r)}}class r{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&this.considerAll()),n}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=i(e.classNameAliases||{}),function n(o,a){const s=o;if(o.isCompiled)return s;[F,U,ne,K].forEach((e=>e(o,a))),e.compilerExtensions.forEach((e=>e(o,a))),o.__beforeBegin=null,[H,X,Y].forEach((e=>e(o,a))),o.isCompiled=!0;let l=null;return"object"==typeof o.keywords&&o.keywords.$pattern&&(o.keywords=Object.assign({},o.keywords),l=o.keywords.$pattern,delete o.keywords.$pattern),l=l||/\w+/,o.keywords&&(o.keywords=G(o.keywords,e.case_insensitive)),s.keywordPatternRe=t(l,!0),a&&(o.begin||(o.begin=/\B|\b/),s.beginRe=t(s.begin),o.end||o.endsWithParent||(o.end=/\B|\b/),o.end&&(s.endRe=t(s.end)),s.terminatorEnd=u(s.end)||"",o.endsWithParent&&a.terminatorEnd&&(s.terminatorEnd+=(o.end?"|":"")+a.terminatorEnd)),o.illegal&&(s.illegalRe=t(o.illegal)),o.contains||(o.contains=[]),o.contains=[].concat(...o.contains.map((function(e){return function(e){return e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(t){return i(e,{variants:null},t)}))),e.cachedVariants?e.cachedVariants:oe(e)?i(e,{starts:e.starts?i(e.starts):null}):Object.isFrozen(e)?i(e):e}("self"===e?o:e)}))),o.contains.forEach((function(e){n(e,s)})),o.starts&&n(o.starts,a),s.matcher=function(e){const t=new r;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t}(s),s}(e)}function oe(e){return!!e&&(e.endsWithParent||oe(e.starts))}class ie extends Error{constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}}const ae=o,se=i,le=Symbol("nomatch");var ce=function(e){const n=Object.create(null),o=Object.create(null),i=[];let a=!0;const s="Could not find the language '{}', did you forget to load/include a language module?",l={disableAutodetect:!0,name:"Plain text",contains:[]};let c={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:d};function u(e){return c.noHighlightRe.test(e)}function b(e,t,n){let r="",o="";"object"==typeof t?(r=e,n=t.ignoreIllegals,o=t.language):(Q("10.7.0","highlight(lang, code, ...args) has been deprecated."),Q("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),o=e,r=t),void 0===n&&(n=!0);const i={code:r,language:o};N("before:highlight",i);const a=i.result?i.result:v(i.language,i.code,n);return a.code=i.code,N("after:highlight",a),a}function v(e,t,o,i){const l=Object.create(null);function d(){if(!A.keywords)return void k.addText(O);let e=0;A.keywordPatternRe.lastIndex=0;let t=A.keywordPatternRe.exec(O),n="";for(;t;){n+=O.substring(e,t.index);const o=E.case_insensitive?t[0].toLowerCase():t[0],i=(r=o,A.keywords[r]);if(i){const[e,r]=i;if(k.addText(n),n="",l[o]=(l[o]||0)+1,l[o]<=7&&(C+=r),e.startsWith("_"))n+=t[0];else{const n=E.classNameAliases[e]||e;k.addKeyword(t[0],n)}}else n+=t[0];e=A.keywordPatternRe.lastIndex,t=A.keywordPatternRe.exec(O)}var r;n+=O.substring(e),k.addText(n)}function u(){null!=A.subLanguage?function(){if(""===O)return;let e=null;if("string"==typeof A.subLanguage){if(!n[A.subLanguage])return void k.addText(O);e=v(A.subLanguage,O,!0,N[A.subLanguage]),N[A.subLanguage]=e._top}else e=_(O,A.subLanguage.length?A.subLanguage:null);A.relevance>0&&(C+=e.relevance),k.addSublanguage(e._emitter,e.language)}():d(),O=""}function h(e,t){let n=1;const r=t.length-1;for(;n<=r;){if(!e._emit[n]){n++;continue}const r=E.classNameAliases[e[n]]||e[n],o=t[n];r?k.addKeyword(o,r):(O=o,d(),O=""),n++}}function g(e,t){return e.scope&&"string"==typeof e.scope&&k.openNode(E.classNameAliases[e.scope]||e.scope),e.beginScope&&(e.beginScope._wrap?(k.addKeyword(O,E.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),O=""):e.beginScope._multi&&(h(e.beginScope,t),O="")),A=Object.create(e,{parent:{value:A}}),A}function p(e,t,n){let o=function(e,t){const n=e&&e.exec(t);return n&&0===n.index}(e.endRe,n);if(o){if(e["on:end"]){const n=new r(e);e["on:end"](t,n),n.isMatchIgnored&&(o=!1)}if(o){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return p(e.parent,t,n)}function f(e){return 0===A.matcher.regexIndex?(O+=e[0],1):(M=!0,0)}function m(e){const n=e[0],r=t.substring(e.index),o=p(A,e,r);if(!o)return le;const i=A;A.endScope&&A.endScope._wrap?(u(),k.addKeyword(n,A.endScope._wrap)):A.endScope&&A.endScope._multi?(u(),h(A.endScope,e)):i.skip?O+=n:(i.returnEnd||i.excludeEnd||(O+=n),u(),i.excludeEnd&&(O=n));do{A.scope&&k.closeNode(),A.skip||A.subLanguage||(C+=A.relevance),A=A.parent}while(A!==o.parent);return o.starts&&g(o.starts,e),i.returnEnd?0:n.length}let b={};function y(n,i){const s=i&&i[0];if(O+=n,null==s)return u(),0;if("begin"===b.type&&"end"===i.type&&b.index===i.index&&""===s){if(O+=t.slice(i.index,i.index+1),!a){const t=new Error(`0 width match regex (${e})`);throw t.languageName=e,t.badRule=b.rule,t}return 1}if(b=i,"begin"===i.type)return function(e){const t=e[0],n=e.rule,o=new r(n),i=[n.__beforeBegin,n["on:begin"]];for(const n of i)if(n&&(n(e,o),o.isMatchIgnored))return f(t);return n.skip?O+=t:(n.excludeBegin&&(O+=t),u(),n.returnBegin||n.excludeBegin||(O=t)),g(n,e),n.returnBegin?0:t.length}(i);if("illegal"===i.type&&!o){const e=new Error('Illegal lexeme "'+s+'" for mode "'+(A.scope||"")+'"');throw e.mode=A,e}if("end"===i.type){const e=m(i);if(e!==le)return e}if("illegal"===i.type&&""===s)return 1;if(D>1e5&&D>3*i.index)throw new Error("potential infinite loop, way more iterations than matches");return O+=s,s.length}const E=x(e);if(!E)throw V(s.replace("{}",e)),new Error('Unknown language: "'+e+'"');const w=re(E);let S="",A=i||w;const N={},k=new c.__emitter(c);!function(){const e=[];for(let t=A;t!==E;t=t.parent)t.scope&&e.unshift(t.scope);e.forEach((e=>k.openNode(e)))}();let O="",C=0,T=0,D=0,M=!1;try{for(A.matcher.considerAll();;){D++,M?M=!1:A.matcher.considerAll(),A.matcher.lastIndex=T;const e=A.matcher.exec(t);if(!e)break;const n=y(t.substring(T,e.index),e);T=e.index+n}return y(t.substring(T)),k.closeAllNodes(),k.finalize(),S=k.toHTML(),{language:e,value:S,relevance:C,illegal:!1,_emitter:k,_top:A}}catch(n){if(n.message&&n.message.includes("Illegal"))return{language:e,value:ae(t),illegal:!0,relevance:0,_illegalBy:{message:n.message,index:T,context:t.slice(T-100,T+100),mode:n.mode,resultSoFar:S},_emitter:k};if(a)return{language:e,value:ae(t),illegal:!1,relevance:0,errorRaised:n,_emitter:k,_top:A};throw n}}function _(e,t){t=t||c.languages||Object.keys(n);const r=function(e){const t={value:ae(e),illegal:!1,relevance:0,_top:l,_emitter:new c.__emitter(c)};return t._emitter.addText(e),t}(e),o=t.filter(x).filter(A).map((t=>v(t,e,!1)));o.unshift(r);const i=o.sort(((e,t)=>{if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(x(e.language).supersetOf===t.language)return 1;if(x(t.language).supersetOf===e.language)return-1}return 0})),[a,s]=i,d=a;return d.secondBest=s,d}function y(e){let t=null;const n=function(e){let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"";const n=c.languageDetectRe.exec(t);if(n){const t=x(n[1]);return t||(J(s.replace("{}",n[1])),J("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}return t.split(/\s+/).find((e=>u(e)||x(e)))}(e);if(u(n))return;if(N("before:highlightElement",{el:e,language:n}),e.children.length>0&&(c.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(e)),c.throwUnescapedHTML))throw new ie("One of your code blocks includes unescaped HTML.",e.innerHTML);t=e;const r=t.textContent,i=n?b(r,{language:n,ignoreIllegals:!0}):_(r);e.innerHTML=i.value,function(e,t,n){const r=t&&o[t]||n;e.classList.add("hljs"),e.classList.add(`language-${r}`)}(e,n,i.language),e.result={language:i.language,re:i.relevance,relevance:i.relevance},i.secondBest&&(e.secondBest={language:i.secondBest.language,relevance:i.secondBest.relevance}),N("after:highlightElement",{el:e,result:i,text:r})}let E=!1;function w(){"loading"!==document.readyState?document.querySelectorAll(c.cssSelector).forEach(y):E=!0}function x(e){return e=(e||"").toLowerCase(),n[e]||n[o[e]]}function S(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{o[e.toLowerCase()]=t}))}function A(e){const t=x(e);return t&&!t.disableAutodetect}function N(e,t){const n=e;i.forEach((function(e){e[n]&&e[n](t)}))}"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(function(){E&&w()}),!1),Object.assign(e,{highlight:b,highlightAuto:_,highlightAll:w,highlightElement:y,highlightBlock:function(e){return Q("10.7.0","highlightBlock will be removed entirely in v12.0"),Q("10.7.0","Please use highlightElement now."),y(e)},configure:function(e){c=se(c,e)},initHighlighting:()=>{w(),Q("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},initHighlightingOnLoad:function(){w(),Q("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")},registerLanguage:function(t,r){let o=null;try{o=r(e)}catch(e){if(V("Language definition for '{}' could not be registered.".replace("{}",t)),!a)throw e;V(e),o=l}o.name||(o.name=t),n[t]=o,o.rawDefinition=r.bind(null,e),o.aliases&&S(o.aliases,{languageName:t})},unregisterLanguage:function(e){delete n[e];for(const t of Object.keys(o))o[t]===e&&delete o[t]},listLanguages:function(){return Object.keys(n)},getLanguage:x,registerAliases:S,autoDetection:A,inherit:se,addPlugin:function(e){!function(e){e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{e["before:highlightBlock"](Object.assign({block:t.el},t))}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{e["after:highlightBlock"](Object.assign({block:t.el},t))})}(e),i.push(e)}}),e.debugMode=function(){a=!1},e.safeMode=function(){a=!0},e.versionString="11.7.0",e.regex={concat:f,lookahead:h,either:m,optional:p,anyNumberOfTimes:g};for(const e in $)"object"==typeof $[e]&&t.exports($[e]);return Object.assign(e,$),e}({});e.exports=ce,ce.HighlightJS=ce,ce.default=ce},70669:(e,t,n)=>{"use strict";function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;txt});var c=l(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),d=l(/Edge/i),u=l(/firefox/i),h=l(/safari/i)&&!l(/chrome/i)&&!l(/android/i),g=l(/iP(ad|od|hone)/i),p=l(/chrome/i)&&l(/android/i),f={capture:!1,passive:!1};function m(e,t,n){e.addEventListener(t,n,!c&&f)}function b(e,t,n){e.removeEventListener(t,n,!c&&f)}function v(e,t){if(t){if(">"===t[0]&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch(e){return!1}return!1}}function _(e){return e.host&&e!==document&&e.host.nodeType?e.host:e.parentNode}function y(e,t,n,r){if(e){n=n||document;do{if(null!=t&&(">"===t[0]?e.parentNode===n&&v(e,t):v(e,t))||r&&e===n)return e;if(e===n)break}while(e=_(e))}return null}var E,w=/\s+/g;function x(e,t,n){if(e&&t)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(w," ").replace(" "+t+" "," ");e.className=(r+(n?" "+t:"")).replace(w," ")}}function S(e,t,n){var r=e&&e.style;if(r){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(e,""):e.currentStyle&&(n=e.currentStyle),void 0===t?n:n[t];t in r||-1!==t.indexOf("webkit")||(t="-webkit-"+t),r[t]=n+("string"==typeof n?"":"px")}}function A(e,t){var n="";if("string"==typeof e)n=e;else do{var r=S(e,"transform");r&&"none"!==r&&(n=r+" "+n)}while(!t&&(e=e.parentNode));var o=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return o&&new o(n)}function N(e,t,n){if(e){var r=e.getElementsByTagName(t),o=0,i=r.length;if(n)for(;o=i:o<=i))return r;if(r===k())break;r=R(r,!1)}return!1}function T(e,t,n,r){for(var o=0,i=0,a=e.children;i2&&void 0!==arguments[2]?arguments[2]:{},r=n.evt,i=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(n,X);H.pluginEvent.bind(Le)(e,t,o({dragEl:K,parentEl:W,ghostEl:G,rootEl:Z,nextEl:q,lastDownEl:V,cloneEl:J,cloneHidden:Q,dragStarted:he,putSortable:ie,activeSortable:Le.active,originalEvent:r,oldIndex:ee,oldDraggableIndex:ne,newIndex:te,newDraggableIndex:re,hideGhostForTarget:Me,unhideGhostForTarget:Ie,cloneNowHidden:function(){Q=!0},cloneNowShown:function(){Q=!1},dispatchSortableEvent:function(e){Y({sortable:t,name:e,originalEvent:r})}},i))};function Y(e){!function(e){var t=e.sortable,n=e.rootEl,r=e.name,i=e.targetEl,a=e.cloneEl,s=e.toEl,l=e.fromEl,u=e.oldIndex,h=e.newIndex,g=e.oldDraggableIndex,p=e.newDraggableIndex,f=e.originalEvent,m=e.putSortable,b=e.extraEventProperties;if(t=t||n&&n[$]){var v,_=t.options,y="on"+r.charAt(0).toUpperCase()+r.substr(1);!window.CustomEvent||c||d?(v=document.createEvent("Event")).initEvent(r,!0,!0):v=new CustomEvent(r,{bubbles:!0,cancelable:!0}),v.to=s||n,v.from=l||n,v.item=i||n,v.clone=a,v.oldIndex=u,v.newIndex=h,v.oldDraggableIndex=g,v.newDraggableIndex=p,v.originalEvent=f,v.pullMode=m?m.lastPutMode:void 0;var E=o(o({},b),H.getEventProperties(r,t));for(var w in E)v[w]=E[w];n&&n.dispatchEvent(v),_[y]&&_[y].call(t,v)}}(o({putSortable:ie,cloneEl:J,targetEl:K,rootEl:Z,oldIndex:ee,oldDraggableIndex:ne,newIndex:te,newDraggableIndex:re},e))}var K,W,G,Z,q,V,J,Q,ee,te,ne,re,oe,ie,ae,se,le,ce,de,ue,he,ge,pe,fe,me,be=!1,ve=!1,_e=[],ye=!1,Ee=!1,we=[],xe=!1,Se=[],Ae="undefined"!=typeof document,Ne=g,ke=d||c?"cssFloat":"float",Oe=Ae&&!p&&!g&&"draggable"in document.createElement("div"),Ce=function(){if(Ae){if(c)return!1;var e=document.createElement("x");return e.style.cssText="pointer-events:auto","auto"===e.style.pointerEvents}}(),Te=function(e,t){var n=S(e),r=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),o=T(e,0,t),i=T(e,1,t),a=o&&S(o),s=i&&S(i),l=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+O(o).width,c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+O(i).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(o&&a.float&&"none"!==a.float){var d="left"===a.float?"left":"right";return!i||"both"!==s.clear&&s.clear!==d?"horizontal":"vertical"}return o&&("block"===a.display||"flex"===a.display||"table"===a.display||"grid"===a.display||l>=r&&"none"===n[ke]||i&&"none"===n[ke]&&l+c>r)?"vertical":"horizontal"},De=function(e){function t(e,n){return function(r,o,i,a){var s=r.options.group.name&&o.options.group.name&&r.options.group.name===o.options.group.name;if(null==e&&(n||s))return!0;if(null==e||!1===e)return!1;if(n&&"clone"===e)return e;if("function"==typeof e)return t(e(r,o,i,a),n)(r,o,i,a);var l=(n?r:o).options.group.name;return!0===e||"string"==typeof e&&e===l||e.join&&e.indexOf(l)>-1}}var n={},r=e.group;r&&"object"==i(r)||(r={name:r}),n.name=r.name,n.checkPull=t(r.pull,!0),n.checkPut=t(r.put),n.revertClone=r.revertClone,e.group=n},Me=function(){!Ce&&G&&S(G,"display","none")},Ie=function(){!Ce&&G&&S(G,"display","")};Ae&&!p&&document.addEventListener("click",(function(e){if(ve)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),ve=!1,!1}),!0);var Re=function(e){if(K){var t=(o=(e=e.touches?e.touches[0]:e).clientX,i=e.clientY,_e.some((function(e){var t=e[$].options.emptyInsertThreshold;if(t&&!D(e)){var n=O(e),r=o>=n.left-t&&o<=n.right+t,s=i>=n.top-t&&i<=n.bottom+t;return r&&s?a=e:void 0}})),a);if(t){var n={};for(var r in e)e.hasOwnProperty(r)&&(n[r]=e[r]);n.target=n.rootEl=t,n.preventDefault=void 0,n.stopPropagation=void 0,t[$]._onDragOver(n)}}var o,i,a},Be=function(e){K&&K.parentNode[$]._isOutsideThisEl(e.target)};function Le(e,t){if(!e||!e.nodeType||1!==e.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(e));this.el=e,this.options=t=s({},t),e[$]=this;var n,r,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(e.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Te(e,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(e,t){e.setData("Text",t.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Le.supportPointer&&"PointerEvent"in window&&!h,emptyInsertThreshold:5};for(var a in H.initializePlugins(this,e,i),i)!(a in t)&&(t[a]=i[a]);for(var l in De(t),this)"_"===l.charAt(0)&&"function"==typeof this[l]&&(this[l]=this[l].bind(this));this.nativeDraggable=!t.forceFallback&&Oe,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?m(e,"pointerdown",this._onTapStart):(m(e,"mousedown",this._onTapStart),m(e,"touchstart",this._onTapStart)),this.nativeDraggable&&(m(e,"dragover",this),m(e,"dragenter",this)),_e.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),s(this,(r=[],{captureAnimationState:function(){r=[],this.options.animation&&[].slice.call(this.el.children).forEach((function(e){if("none"!==S(e,"display")&&e!==Le.ghost){r.push({target:e,rect:O(e)});var t=o({},r[r.length-1].rect);if(e.thisAnimationDuration){var n=A(e,!0);n&&(t.top-=n.f,t.left-=n.e)}e.fromRect=t}}))},addAnimationState:function(e){r.push(e)},removeAnimationState:function(e){r.splice(function(e,t){for(var n in e)if(e.hasOwnProperty(n))for(var r in t)if(t.hasOwnProperty(r)&&t[r]===e[n][r])return Number(n);return-1}(r,{target:e}),1)},animateAll:function(e){var t=this;if(!this.options.animation)return clearTimeout(n),void("function"==typeof e&&e());var o=!1,i=0;r.forEach((function(e){var n=0,r=e.target,a=r.fromRect,s=O(r),l=r.prevFromRect,c=r.prevToRect,d=e.rect,u=A(r,!0);u&&(s.top-=u.f,s.left-=u.e),r.toRect=s,r.thisAnimationDuration&&B(l,s)&&!B(a,s)&&(d.top-s.top)/(d.left-s.left)==(a.top-s.top)/(a.left-s.left)&&(n=function(e,t,n,r){return Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))/Math.sqrt(Math.pow(t.top-n.top,2)+Math.pow(t.left-n.left,2))*r.animation}(d,l,c,t.options)),B(s,a)||(r.prevFromRect=a,r.prevToRect=s,n||(n=t.options.animation),t.animate(r,d,s,n)),n&&(o=!0,i=Math.max(i,n),clearTimeout(r.animationResetTimer),r.animationResetTimer=setTimeout((function(){r.animationTime=0,r.prevFromRect=null,r.fromRect=null,r.prevToRect=null,r.thisAnimationDuration=null}),n),r.thisAnimationDuration=n)})),clearTimeout(n),o?n=setTimeout((function(){"function"==typeof e&&e()}),i):"function"==typeof e&&e(),r=[]},animate:function(e,t,n,r){if(r){S(e,"transition",""),S(e,"transform","");var o=A(this.el),i=o&&o.a,a=o&&o.d,s=(t.left-n.left)/(i||1),l=(t.top-n.top)/(a||1);e.animatingX=!!s,e.animatingY=!!l,S(e,"transform","translate3d("+s+"px,"+l+"px,0)"),this.forRepaintDummy=function(e){return e.offsetWidth}(e),S(e,"transition","transform "+r+"ms"+(this.options.easing?" "+this.options.easing:"")),S(e,"transform","translate3d(0,0,0)"),"number"==typeof e.animated&&clearTimeout(e.animated),e.animated=setTimeout((function(){S(e,"transition",""),S(e,"transform",""),e.animated=!1,e.animatingX=!1,e.animatingY=!1}),r)}}}))}function Pe(e,t,n,r,o,i,a,s){var l,u,h=e[$],g=h.options.onMove;return!window.CustomEvent||c||d?(l=document.createEvent("Event")).initEvent("move",!0,!0):l=new CustomEvent("move",{bubbles:!0,cancelable:!0}),l.to=t,l.from=e,l.dragged=n,l.draggedRect=r,l.related=o||t,l.relatedRect=i||O(t),l.willInsertAfter=s,l.originalEvent=a,e.dispatchEvent(l),g&&(u=g.call(h,l,a)),u}function je(e){e.draggable=!1}function $e(){xe=!1}function ze(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,n=t.length,r=0;n--;)r+=t.charCodeAt(n);return r.toString(36)}function Fe(e){return setTimeout(e,0)}function He(e){return clearTimeout(e)}Le.prototype={constructor:Le,_isOutsideThisEl:function(e){this.el.contains(e)||e===this.el||(ge=null)},_getDirection:function(e,t){return"function"==typeof this.options.direction?this.options.direction.call(this,e,t,K):this.options.direction},_onTapStart:function(e){if(e.cancelable){var t=this,n=this.el,r=this.options,o=r.preventOnFilter,i=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,s=(a||e).target,l=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||s,c=r.filter;if(function(e){Se.length=0;for(var t=e.getElementsByTagName("input"),n=t.length;n--;){var r=t[n];r.checked&&Se.push(r)}}(n),!K&&!(/mousedown|pointerdown/.test(i)&&0!==e.button||r.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!h||!s||"SELECT"!==s.tagName.toUpperCase())&&!((s=y(s,r.draggable,n,!1))&&s.animated||V===s)){if(ee=M(s),ne=M(s,r.draggable),"function"==typeof c){if(c.call(this,e,s,this))return Y({sortable:t,rootEl:l,name:"filter",targetEl:s,toEl:n,fromEl:n}),U("filter",t,{evt:e}),void(o&&e.cancelable&&e.preventDefault())}else if(c&&(c=c.split(",").some((function(r){if(r=y(l,r.trim(),n,!1))return Y({sortable:t,rootEl:r,name:"filter",targetEl:s,fromEl:n,toEl:n}),U("filter",t,{evt:e}),!0}))))return void(o&&e.cancelable&&e.preventDefault());r.handle&&!y(l,r.handle,n,!1)||this._prepareDragStart(e,a,s)}}},_prepareDragStart:function(e,t,n){var r,o=this,i=o.el,a=o.options,s=i.ownerDocument;if(n&&!K&&n.parentNode===i){var l=O(n);if(Z=i,W=(K=n).parentNode,q=K.nextSibling,V=n,oe=a.group,Le.dragged=K,ae={target:K,clientX:(t||e).clientX,clientY:(t||e).clientY},de=ae.clientX-l.left,ue=ae.clientY-l.top,this._lastX=(t||e).clientX,this._lastY=(t||e).clientY,K.style["will-change"]="all",r=function(){U("delayEnded",o,{evt:e}),Le.eventCanceled?o._onDrop():(o._disableDelayedDragEvents(),!u&&o.nativeDraggable&&(K.draggable=!0),o._triggerDragStart(e,t),Y({sortable:o,name:"choose",originalEvent:e}),x(K,a.chosenClass,!0))},a.ignore.split(",").forEach((function(e){N(K,e.trim(),je)})),m(s,"dragover",Re),m(s,"mousemove",Re),m(s,"touchmove",Re),m(s,"mouseup",o._onDrop),m(s,"touchend",o._onDrop),m(s,"touchcancel",o._onDrop),u&&this.nativeDraggable&&(this.options.touchStartThreshold=4,K.draggable=!0),U("delayStart",this,{evt:e}),!a.delay||a.delayOnTouchOnly&&!t||this.nativeDraggable&&(d||c))r();else{if(Le.eventCanceled)return void this._onDrop();m(s,"mouseup",o._disableDelayedDrag),m(s,"touchend",o._disableDelayedDrag),m(s,"touchcancel",o._disableDelayedDrag),m(s,"mousemove",o._delayedDragTouchMoveHandler),m(s,"touchmove",o._delayedDragTouchMoveHandler),a.supportPointer&&m(s,"pointermove",o._delayedDragTouchMoveHandler),o._dragStartTimer=setTimeout(r,a.delay)}}},_delayedDragTouchMoveHandler:function(e){var t=e.touches?e.touches[0]:e;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){K&&je(K),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;b(e,"mouseup",this._disableDelayedDrag),b(e,"touchend",this._disableDelayedDrag),b(e,"touchcancel",this._disableDelayedDrag),b(e,"mousemove",this._delayedDragTouchMoveHandler),b(e,"touchmove",this._delayedDragTouchMoveHandler),b(e,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,t){t=t||"touch"==e.pointerType&&e,!this.nativeDraggable||t?this.options.supportPointer?m(document,"pointermove",this._onTouchMove):m(document,t?"touchmove":"mousemove",this._onTouchMove):(m(K,"dragend",this),m(Z,"dragstart",this._onDragStart));try{document.selection?Fe((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(e){}},_dragStarted:function(e,t){if(be=!1,Z&&K){U("dragStarted",this,{evt:t}),this.nativeDraggable&&m(document,"dragover",Be);var n=this.options;!e&&x(K,n.dragClass,!1),x(K,n.ghostClass,!0),Le.active=this,e&&this._appendGhost(),Y({sortable:this,name:"start",originalEvent:t})}else this._nulling()},_emulateDragOver:function(){if(se){this._lastX=se.clientX,this._lastY=se.clientY,Me();for(var e=document.elementFromPoint(se.clientX,se.clientY),t=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(se.clientX,se.clientY))!==t;)t=e;if(K.parentNode[$]._isOutsideThisEl(e),t)do{if(t[$]&&t[$]._onDragOver({clientX:se.clientX,clientY:se.clientY,target:e,rootEl:t})&&!this.options.dragoverBubble)break;e=t}while(t=t.parentNode);Ie()}},_onTouchMove:function(e){if(ae){var t=this.options,n=t.fallbackTolerance,r=t.fallbackOffset,o=e.touches?e.touches[0]:e,i=G&&A(G,!0),a=G&&i&&i.a,s=G&&i&&i.d,l=Ne&&me&&I(me),c=(o.clientX-ae.clientX+r.x)/(a||1)+(l?l[0]-we[0]:0)/(a||1),d=(o.clientY-ae.clientY+r.y)/(s||1)+(l?l[1]-we[1]:0)/(s||1);if(!Le.active&&!be){if(n&&Math.max(Math.abs(o.clientX-this._lastX),Math.abs(o.clientY-this._lastY))r.right+10||e.clientX<=r.right&&e.clientY>r.bottom&&e.clientX>=r.left:e.clientX>r.right&&e.clientY>r.top||e.clientX<=r.right&&e.clientY>r.bottom+10}(e,i,this)&&!m.animated){if(m===K)return H(!1);if(m&&a===e.target&&(s=m),s&&(n=O(s)),!1!==Pe(Z,a,K,t,s,n,e,!!s))return F(),m&&m.nextSibling?a.insertBefore(K,m.nextSibling):a.appendChild(K),W=a,X(),H(!0)}else if(m&&function(e,t,n){var r=O(T(n.el,0,n.options,!0));return t?e.clientXd+c*i/2:lu-fe)return-pe}else if(l>d+c*(1-o)/2&&lu-c*i/2)?l>d+c/2?1:-1:0}(e,s,n,i,A?1:l.swapThreshold,null==l.invertedSwapThreshold?l.swapThreshold:l.invertedSwapThreshold,Ee,ge===s),0!==v){var R=M(K);do{R-=v,E=W.children[R]}while(E&&("none"===S(E,"display")||E===G))}if(0===v||E===s)return H(!1);ge=s,pe=v;var B=s.nextElementSibling,L=!1,j=Pe(Z,a,K,t,s,n,e,L=1===v);if(!1!==j)return 1!==j&&-1!==j||(L=1===j),xe=!0,setTimeout($e,30),F(),L&&!B?a.appendChild(K):s.parentNode.insertBefore(K,L?B:s),k&&P(k,0,I-k.scrollTop),W=K.parentNode,void 0===_||Ee||(fe=Math.abs(_-O(s)[N])),X(),H(!0)}if(a.contains(K))return H(!1)}return!1}function z(l,c){U(l,p,o({evt:e,isOwner:u,axis:i?"vertical":"horizontal",revert:r,dragRect:t,targetRect:n,canSort:h,fromSortable:g,target:s,completed:H,onMove:function(n,r){return Pe(Z,a,K,t,n,O(n),e,r)},changed:X},c))}function F(){z("dragOverAnimationCapture"),p.captureAnimationState(),p!==g&&g.captureAnimationState()}function H(t){return z("dragOverCompleted",{insertion:t}),t&&(u?d._hideClone():d._showClone(p),p!==g&&(x(K,ie?ie.options.ghostClass:d.options.ghostClass,!1),x(K,l.ghostClass,!0)),ie!==p&&p!==Le.active?ie=p:p===Le.active&&ie&&(ie=null),g===p&&(p._ignoreWhileAnimating=s),p.animateAll((function(){z("dragOverAnimationComplete"),p._ignoreWhileAnimating=null})),p!==g&&(g.animateAll(),g._ignoreWhileAnimating=null)),(s===K&&!K.animated||s===a&&!s.animated)&&(ge=null),l.dragoverBubble||e.rootEl||s===document||(K.parentNode[$]._isOutsideThisEl(e.target),!t&&Re(e)),!l.dragoverBubble&&e.stopPropagation&&e.stopPropagation(),f=!0}function X(){te=M(K),re=M(K,l.draggable),Y({sortable:p,name:"change",toEl:a,newIndex:te,newDraggableIndex:re,originalEvent:e})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){b(document,"mousemove",this._onTouchMove),b(document,"touchmove",this._onTouchMove),b(document,"pointermove",this._onTouchMove),b(document,"dragover",Re),b(document,"mousemove",Re),b(document,"touchmove",Re)},_offUpEvents:function(){var e=this.el.ownerDocument;b(e,"mouseup",this._onDrop),b(e,"touchend",this._onDrop),b(e,"pointerup",this._onDrop),b(e,"touchcancel",this._onDrop),b(document,"selectstart",this)},_onDrop:function(e){var t=this.el,n=this.options;te=M(K),re=M(K,n.draggable),U("drop",this,{evt:e}),W=K&&K.parentNode,te=M(K),re=M(K,n.draggable),Le.eventCanceled||(be=!1,Ee=!1,ye=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),He(this.cloneId),He(this._dragStartId),this.nativeDraggable&&(b(document,"drop",this),b(t,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),h&&S(document.body,"user-select",""),S(K,"transform",""),e&&(he&&(e.cancelable&&e.preventDefault(),!n.dropBubble&&e.stopPropagation()),G&&G.parentNode&&G.parentNode.removeChild(G),(Z===W||ie&&"clone"!==ie.lastPutMode)&&J&&J.parentNode&&J.parentNode.removeChild(J),K&&(this.nativeDraggable&&b(K,"dragend",this),je(K),K.style["will-change"]="",he&&!be&&x(K,ie?ie.options.ghostClass:this.options.ghostClass,!1),x(K,this.options.chosenClass,!1),Y({sortable:this,name:"unchoose",toEl:W,newIndex:null,newDraggableIndex:null,originalEvent:e}),Z!==W?(te>=0&&(Y({rootEl:W,name:"add",toEl:W,fromEl:Z,originalEvent:e}),Y({sortable:this,name:"remove",toEl:W,originalEvent:e}),Y({rootEl:W,name:"sort",toEl:W,fromEl:Z,originalEvent:e}),Y({sortable:this,name:"sort",toEl:W,originalEvent:e})),ie&&ie.save()):te!==ee&&te>=0&&(Y({sortable:this,name:"update",toEl:W,originalEvent:e}),Y({sortable:this,name:"sort",toEl:W,originalEvent:e})),Le.active&&(null!=te&&-1!==te||(te=ee,re=ne),Y({sortable:this,name:"end",toEl:W,originalEvent:e}),this.save())))),this._nulling()},_nulling:function(){U("nulling",this),Z=K=W=G=q=J=V=Q=ae=se=he=te=re=ee=ne=ge=pe=ie=oe=Le.dragged=Le.ghost=Le.clone=Le.active=null,Se.forEach((function(e){e.checked=!0})),Se.length=le=ce=0},handleEvent:function(e){switch(e.type){case"drop":case"dragend":this._onDrop(e);break;case"dragenter":case"dragover":K&&(this._onDragOver(e),function(e){e.dataTransfer&&(e.dataTransfer.dropEffect="move"),e.cancelable&&e.preventDefault()}(e));break;case"selectstart":e.preventDefault()}},toArray:function(){for(var e,t=[],n=this.el.children,r=0,o=n.length,i=this.options;r{let t="";if(this._dropArea.hasChildNodes()){let n=this._dropArea.firstChild;for(t+=this._getTextFromBlock(n);n.nextSibling;)n=n.nextSibling,t+=e?" ":"",t+=this._getTextFromBlock(n);return t}return t};_getTextFromBlock=e=>{if("raw"==this.parentElement.language)return e.innerHTML;if(!e.lastChild||e.lastChild.nodeType!=Node.ELEMENT_NODE)return e.textContent||"";const t=e.lastChild.classList.contains("parsons-tooltip")&&e.lastChild.textContent?.length||0;return t>0?(e.textContent||"").slice(0,-t):e.textContent||""};shuffleArray(e){for(let t=e.length-1;t>0;t--){let n=Math.floor(Math.random()*(t+1)),r=e[t];e[t]=e[n],e[n]=r}}setSourceBlocks=(e,t)=>{this.blockOrder=[];for(let t=0;t{for(;this._dragArea.firstChild;)this._dragArea.removeChild(this._dragArea.firstChild);for(;this._dropArea.firstChild;)this._dropArea.removeChild(this._dropArea.firstChild);for(let e=0;e{this._onBlockClicked(t,e)},this.storedSourceBlockExplanations&&this.storedSourceBlockExplanations[this.blockOrder[e]]){const n=document.createElement("div");n.innerText=this.storedSourceBlockExplanations[this.blockOrder[e]],n.classList.add("parsons-tooltip"),t.appendChild(n)}}};_onBlockClicked=(e,t)=>{if(e.parentElement==this._dragArea){let n;if(this.reusable){const t=e.cloneNode(!0);t.onclick=e=>this._onBlockClicked(t,e),this._dropArea.appendChild(t),n=this._getBlockPosition(t)}else this._dropArea.appendChild(e),n=this._getBlockPosition(e);const r={type:"input",action:it.InputAction.ADD,position:[-1,n],answer:this._getTextArray()};t.isTrusted&&this.parentElement.logEvent(r)}else{const t=this._getBlockPosition(e);this.reusable?this._dropArea.removeChild(e):this._dragArea.appendChild(e);const n={type:"input",action:it.InputAction.REMOVE,position:[t,-1],answer:this._getTextArray()};this.parentElement.logEvent(n)}};_initSortable=()=>{this.reusable?(this._dragSortable=new rt(this._dragArea,{group:{name:"shared",pull:"clone",put:!1},sort:!1,direction:"horizontal",animation:150,draggable:".parsons-block",onClone:e=>{const t=e.clone;t.onclick=e=>this._onBlockClicked(t,e)}}),this._dropSortable=new rt(this._dropArea,{group:"shared",direction:"horizontal",animation:150,draggable:".parsons-block",onAdd:e=>{const t={type:"input",action:it.InputAction.ADD,position:[-1,this._getBlockPosition(e.item)],answer:this._getTextArray()};this.parentElement.logEvent(t)},onStart:e=>{this._prevPosition=this._getBlockPosition(e.item)},onEnd:e=>{let t,n=it.InputAction.MOVE;const r=this._dropArea.getBoundingClientRect().top,o=this._dropArea.getBoundingClientRect().bottom;if(e.originalEvent.clientY>o||e.originalEvent.clientY{const t={type:"input",action:it.InputAction.ADD,position:[-1,this._getBlockPosition(e.item)],answer:this._getTextArray()};this.parentElement.logEvent(t)},onStart:e=>{this._prevPosition=this._getBlockPosition(e.item)},onEnd:e=>{let t=this._getBlockPosition(e.item);const n={type:"input",action:-1==t?it.InputAction.REMOVE:it.InputAction.MOVE,position:[this._prevPosition,t],answer:this._getTextArray()};this.parentElement.logEvent(n)}}))};updateTestStatus=e=>{this._dropArea.classList.contains(e)||(this._dropArea.classList.contains("Pass")?this._dropArea.classList.remove("Pass"):this._dropArea.classList.contains("Fail")?this._dropArea.classList.remove("Fail"):this._dropArea.classList.contains("Error")&&this._dropArea.classList.remove("Error"),this._dropArea.classList.add(e))};_getBlockPosition=e=>{let t=-1;const n=this._dropArea;if(n)for(t=0;t{let e=[];if(this._dropArea.hasChildNodes()){let t=this._dropArea.firstChild;for(e.push(this._getTextFromBlock(t));t.nextSibling;)t=t.nextSibling,e.push(this._getTextFromBlock(t))}return e};removeFormat=()=>{if(this._dropArea.hasChildNodes()){let e=this._dropArea.firstChild;for(e.style.removeProperty("background-color");e.nextSibling;)e=e.nextSibling,e.style.removeProperty("background-color")}};resetInput=()=>{if(this.reusable)for(;this._dropArea.firstChild;)this._dropArea.removeChild(this._dropArea.firstChild);else this._resetInput()};restoreAnswer(e){this.resetInput();const t=/^\s+$/;for(let n=0;nEt(e,t,n-1)))}ot.registerLanguage("javascript",(function(e){const t=e.regex,n=ct,r={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,t)=>{const n=e[0].length+e.index,r=e.input[n];if("<"===r||","===r)return void t.ignoreMatch();let o;">"===r&&(((e,{after:t})=>{const n="",N={match:[/const|var|let/,/\s+/,n,/\s*/,/=\s*/,/(async\s*)?/,t.lookahead(A)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[b]};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:o,exports:{PARAMS_CONTAINS:m,CLASS_REFERENCE:_},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,u,h,g,{match:/\$\d+/},l,_,{className:"attr",begin:n+t.lookahead(":"),relevance:0},N,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[g,e.REGEXP_MODE,{className:"function",begin:A,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:o,contains:m}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:""},{match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:r.begin,"on:begin":r.isTrulyOpeningTag,end:r.end}],subLanguage:"xml",contains:[{begin:r.begin,end:r.end,skip:!0,contains:["self"]}]}]},y,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[b,e.inherit(e.TITLE_MODE,{begin:n,className:"title.function"})]},{match:/\.\.\./,relevance:0},x,{match:"\\$"+n,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[b]},E,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},v,S,{match:/\$[(.]/}]}})),ot.registerLanguage("sql",(function(e){const t=e.regex,n=e.COMMENT("--","$"),r=["true","false","unknown"],o=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],i=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],a=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],s=i,l=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!i.includes(e))),c={begin:t.concat(/\b/,t.either(...s),/\s*\(/),relevance:0,keywords:{built_in:s}};return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:function(e,{exceptions:t,when:n}={}){const r=n;return t=t||[],e.map((e=>e.match(/\|\d+$/)||t.includes(e)?e:r(e)?`${e}|0`:e))}(l,{when:e=>e.length<3}),literal:r,type:o,built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"]},contains:[{begin:t.either(...a),relevance:0,keywords:{$pattern:/[\w\.]+/,keyword:l.concat(a),literal:r,type:o}},{className:"type",begin:t.either("double precision","large object","with timezone","without timezone")},c,{className:"variable",begin:/@[a-z0-9]+/},{className:"string",variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/,contains:[{begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"operator",begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}})),ot.registerLanguage("java",(function(e){const t=e.regex,n="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",r=n+Et("(?:<"+n+"~~~(?:\\s*,\\s*"+n+"~~~)*>)?",/~~~/g,2),o={keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits"],literal:["false","true","null"],type:["char","boolean","long","float","int","byte","short","double"],built_in:["super","this"]},i={className:"meta",begin:"@"+n,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},a={className:"params",begin:/\(/,end:/\)/,keywords:o,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:o,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[e.BACKSLASH_ESCAPE]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,n],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{begin:[t.concat(/(?!else)/,n),/\s+/,n,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,n],className:{1:"keyword",3:"title.class"},contains:[a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+r+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:o,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:o,relevance:0,contains:[i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,yt,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},yt,i]}})),ot.registerLanguage("xml",(function(e){const t=e.regex,n=t.concat(/[\p{L}_]/u,t.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),r={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},o={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},i=e.inherit(o,{begin:/\(/,end:/\)/}),a=e.inherit(e.APOS_STRING_MODE,{className:"string"}),s=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),l={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[o,s,a,i,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[o,i,s,a]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},r,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[s]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:t.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:n,relevance:0,starts:l}]},{className:"tag",begin:t.concat(/<\//,t.lookahead(t.concat(n,/>/))),contains:[{className:"name",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}})),ot.registerLanguage("python",(function(e){const t=e.regex,n=/[\p{XID_Start}_]\p{XID_Continue}*/u,r=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],o={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:r,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},i={className:"meta",begin:/^(>>>|\.\.\.) /},a={className:"subst",begin:/\{/,end:/\}/,keywords:o,illegal:/#/},s={begin:/\{\{/,relevance:0},l={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,i],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,i],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,i,s,a]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,i,s,a]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,a]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,a]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},c="[0-9](_?[0-9])*",d=`(\\b(${c}))?\\.(${c})|\\b(${c})\\.`,u=`\\b|${r.join("|")}`,h={className:"number",relevance:0,variants:[{begin:`(\\b(${c})|(${d}))[eE][+-]?(${c})[jJ]?(?=${u})`},{begin:`(${d})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${u})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${u})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${u})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${u})`},{begin:`\\b(${c})[jJ](?=${u})`}]},g={className:"comment",begin:t.lookahead(/# type:/),end:/$/,keywords:o,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},p={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:o,contains:["self",i,h,l,e.HASH_COMMENT_MODE]}]};return a.contains=[l,h,i],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:o,illegal:/(<\/|->|\?)|=>/,contains:[i,h,{begin:/\bself\b/},{beginKeywords:"if",relevance:0},l,g,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,n],scope:{1:"keyword",3:"title.function"},contains:[p]},{variants:[{match:[/\bclass/,/\s+/,n,/\s*/,/\(\s*/,n,/\s*\)/]},{match:[/\bclass/,/\s+/,n]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[h,p,l]}]}}));class wt extends HTMLElement{root;_parsonsData;parsonsExplanation;hparsonsInput;inputType;static toolCount=0;toolNumber;temporaryInputEvent;language;hljsLanguage;codeBefore;codeAfter;constructor(){super(),wt.toolCount+=1,this.toolNumber=wt.toolCount,this.root=this;const e=!!this.getAttribute("reuse"),t=!!this.getAttribute("randomize");this.hparsonsInput=new lt(this,e,t),this._parsonsData=new Array,this.parsonsExplanation=null,this.inputType="parsons",this.language=this.getAttribute("language")||"none";let n=new Map(Object.entries({html:"xml",python:"python",javascript:"javascript",java:"java",sql:"sql"}));this.hljsLanguage=n.get(this.language),this.initInput(),this.temporaryInputEvent=null,this.codeBefore=null,this.codeAfter=null}set parsonsData(e){this._parsonsData=e,"parsons"==this.inputType&&this.hparsonsInput.setSourceBlocks(e,this.parsonsExplanation)}get parsonsData(){return this._parsonsData}logEvent=e=>{const t=new CustomEvent("micro-parsons",{bubbles:!0,detail:{...e}});this.dispatchEvent(t)};initInput(){this.inputType="parsons",this._parsonsData=new Array,this.parsonsExplanation=null;const e=null!=this.getAttribute("reuse"),t=null!=this.getAttribute("randomize");this.hparsonsInput=new lt(this,e,t),this.root.appendChild(this.hparsonsInput.el)}resetInput(){this.hparsonsInput.resetInput(),this.logEvent({type:"reset"})}restoreAnswer(e){this.hparsonsInput.restoreAnswer(e)}getCurrentInput(e){return this.hparsonsInput.getText(e)}getParsonsTextArray(){return this.hparsonsInput._getTextArray()}setCodeContext(e){if(e.before){let t;this.codeBefore=e.before,this.querySelector(".context.before")?t=this.querySelector(".context.before"):(t=document.createElement("pre"),t.className="context before",this.querySelector(".hparsons-input").insertBefore(t,this.querySelector(".drop-area"))),t.innerHTML=this.codeBefore,this.hljsLanguage&&(t.className="context before",t.classList.add(this.hljsLanguage),ot.highlightElement(t))}if(e.after){let t;this.codeAfter=e.after,this.querySelector(".context.after")?t=this.querySelector(".context.after"):(t=document.createElement("pre"),t.className="context after",this.querySelector(".hparsons-input").appendChild(t)),t.innerHTML=this.codeAfter,this.hljsLanguage&&(t.className="context after",t.classList.add(this.hljsLanguage),ot.highlightElement(t))}}}const xt=e=>{let t;try{t=document.querySelector(e.selector)}catch{throw"micro-parsons: init: selector error"}if(null==t||"DIV"!=t.tagName)throw"micro-parsons: element not a div";const n=-1==["javascript","sql","java","html","python","raw"].indexOf(e.language||"")?"":`language='${e.language}'`,r=e.id?`id='${e.id}'`:"",o=``;t.innerHTML=o;const i=t.firstChild;i.parsonsExplanation=e.parsonsTooltips,i.parsonsData=e.parsonsBlocks,e.context&&i.setCodeContext(e.context)};customElements.define("micro-parsons",wt)}}]); +//# sourceMappingURL=669.05a3639d12541567.js.map \ No newline at end of file diff --git a/_static/669.05a3639d12541567.js.LICENSE.txt b/_static/669.05a3639d12541567.js.LICENSE.txt new file mode 100644 index 0000000..5b40f60 --- /dev/null +++ b/_static/669.05a3639d12541567.js.LICENSE.txt @@ -0,0 +1,6 @@ +/**! + * Sortable 1.15.0 + * @author RubaXa + * @author owenm + * @license MIT + */ diff --git a/_static/669.05a3639d12541567.js.gz b/_static/669.05a3639d12541567.js.gz new file mode 100644 index 0000000..cdd8f5b Binary files /dev/null and b/_static/669.05a3639d12541567.js.gz differ diff --git a/_static/669.05a3639d12541567.js.map b/_static/669.05a3639d12541567.js.map new file mode 100644 index 0000000..91f5084 --- /dev/null +++ b/_static/669.05a3639d12541567.js.map @@ -0,0 +1 @@ +{"version":3,"file":"669.05a3639d12541567.js","mappings":"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","sources":["webpack://WebComponents/./node_modules/highlight.js/lib/core.js","webpack://WebComponents/./node_modules/sortablejs/modular/sortable.esm.js","webpack://WebComponents/./node_modules/highlight.js/es/core.js","webpack://WebComponents/./node_modules/micro-parsons/micro-parsons/micro-parsons.js"],"sourcesContent":["var deepFreezeEs6 = {exports: {}};\n\nfunction deepFreeze(obj) {\n if (obj instanceof Map) {\n obj.clear = obj.delete = obj.set = function () {\n throw new Error('map is read-only');\n };\n } else if (obj instanceof Set) {\n obj.add = obj.clear = obj.delete = function () {\n throw new Error('set is read-only');\n };\n }\n\n // Freeze self\n Object.freeze(obj);\n\n Object.getOwnPropertyNames(obj).forEach(function (name) {\n var prop = obj[name];\n\n // Freeze prop if it is an object\n if (typeof prop == 'object' && !Object.isFrozen(prop)) {\n deepFreeze(prop);\n }\n });\n\n return obj;\n}\n\ndeepFreezeEs6.exports = deepFreeze;\ndeepFreezeEs6.exports.default = deepFreeze;\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\n\nclass Response {\n /**\n * @param {CompiledMode} mode\n */\n constructor(mode) {\n // eslint-disable-next-line no-undefined\n if (mode.data === undefined) mode.data = {};\n\n this.data = mode.data;\n this.isMatchIgnored = false;\n }\n\n ignoreMatch() {\n this.isMatchIgnored = true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n return value\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record[]} objects\n * @returns {T} a single new object\n */\nfunction inherit$1(original, ...objects) {\n /** @type Record */\n const result = Object.create(null);\n\n for (const key in original) {\n result[key] = original[key];\n }\n objects.forEach(function(obj) {\n for (const key in obj) {\n result[key] = obj[key];\n }\n });\n return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '';\n\n/**\n * Determines if a node needs to be wrapped in \n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n // rarely we can have a sublanguage where language is undefined\n // TODO: track down why\n return !!node.scope || (node.sublanguage && node.language);\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n if (name.includes(\".\")) {\n const pieces = name.split(\".\");\n return [\n `${prefix}${pieces.shift()}`,\n ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n ].join(\" \");\n }\n return `${prefix}${name}`;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n /**\n * Creates a new HTMLRenderer\n *\n * @param {Tree} parseTree - the parse tree (must support `walk` API)\n * @param {{classPrefix: string}} options\n */\n constructor(parseTree, options) {\n this.buffer = \"\";\n this.classPrefix = options.classPrefix;\n parseTree.walk(this);\n }\n\n /**\n * Adds texts to the output stream\n *\n * @param {string} text */\n addText(text) {\n this.buffer += escapeHTML(text);\n }\n\n /**\n * Adds a node open to the output stream (if needed)\n *\n * @param {Node} node */\n openNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n let className = \"\";\n if (node.sublanguage) {\n className = `language-${node.language}`;\n } else {\n className = scopeToCSSClass(node.scope, { prefix: this.classPrefix });\n }\n this.span(className);\n }\n\n /**\n * Adds a node close to the output stream (if needed)\n *\n * @param {Node} node */\n closeNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n this.buffer += SPAN_CLOSE;\n }\n\n /**\n * returns the accumulated buffer\n */\n value() {\n return this.buffer;\n }\n\n // helpers\n\n /**\n * Builds a span element\n *\n * @param {string} className */\n span(className) {\n this.buffer += ``;\n }\n}\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/** */\n\n/** @returns {DataNode} */\nconst newNode = (opts = {}) => {\n /** @type DataNode */\n const result = { children: [] };\n Object.assign(result, opts);\n return result;\n};\n\nclass TokenTree {\n constructor() {\n /** @type DataNode */\n this.rootNode = newNode();\n this.stack = [this.rootNode];\n }\n\n get top() {\n return this.stack[this.stack.length - 1];\n }\n\n get root() { return this.rootNode; }\n\n /** @param {Node} node */\n add(node) {\n this.top.children.push(node);\n }\n\n /** @param {string} scope */\n openNode(scope) {\n /** @type Node */\n const node = newNode({ scope });\n this.add(node);\n this.stack.push(node);\n }\n\n closeNode() {\n if (this.stack.length > 1) {\n return this.stack.pop();\n }\n // eslint-disable-next-line no-undefined\n return undefined;\n }\n\n closeAllNodes() {\n while (this.closeNode());\n }\n\n toJSON() {\n return JSON.stringify(this.rootNode, null, 4);\n }\n\n /**\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\n * @param {Renderer} builder\n */\n walk(builder) {\n // this does not\n return this.constructor._walk(builder, this.rootNode);\n // this works\n // return TokenTree._walk(builder, this.rootNode);\n }\n\n /**\n * @param {Renderer} builder\n * @param {Node} node\n */\n static _walk(builder, node) {\n if (typeof node === \"string\") {\n builder.addText(node);\n } else if (node.children) {\n builder.openNode(node);\n node.children.forEach((child) => this._walk(builder, child));\n builder.closeNode(node);\n }\n return builder;\n }\n\n /**\n * @param {Node} node\n */\n static _collapse(node) {\n if (typeof node === \"string\") return;\n if (!node.children) return;\n\n if (node.children.every(el => typeof el === \"string\")) {\n // node.text = node.children.join(\"\");\n // delete node.children;\n node.children = [node.children.join(\"\")];\n } else {\n node.children.forEach((child) => {\n TokenTree._collapse(child);\n });\n }\n }\n}\n\n/**\n Currently this is all private API, but this is the minimal API necessary\n that an Emitter must implement to fully support the parser.\n\n Minimal interface:\n\n - addKeyword(text, scope)\n - addText(text)\n - addSublanguage(emitter, subLanguageName)\n - finalize()\n - openNode(scope)\n - closeNode()\n - closeAllNodes()\n - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n /**\n * @param {*} options\n */\n constructor(options) {\n super();\n this.options = options;\n }\n\n /**\n * @param {string} text\n * @param {string} scope\n */\n addKeyword(text, scope) {\n if (text === \"\") { return; }\n\n this.openNode(scope);\n this.addText(text);\n this.closeNode();\n }\n\n /**\n * @param {string} text\n */\n addText(text) {\n if (text === \"\") { return; }\n\n this.add(text);\n }\n\n /**\n * @param {Emitter & {root: DataNode}} emitter\n * @param {string} name\n */\n addSublanguage(emitter, name) {\n /** @type DataNode */\n const node = emitter.root;\n node.sublanguage = true;\n node.language = name;\n this.add(node);\n }\n\n toHTML() {\n const renderer = new HTMLRenderer(this, this.options);\n return renderer.value();\n }\n\n finalize() {\n return true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n if (!re) return null;\n if (typeof re === \"string\") return re;\n\n return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n return concat('(?:', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n const joined = args.map((x) => source(x)).join(\"\");\n return joined;\n}\n\n/**\n * @param { Array } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n const opts = args[args.length - 1];\n\n if (typeof opts === 'object' && opts.constructor === Object) {\n args.splice(args.length - 1, 1);\n return opts;\n } else {\n return {};\n }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n /** @type { object & {capture?: boolean} } */\n const opts = stripOptionsFromArgs(args);\n const joined = '('\n + (opts.capture ? \"\" : \"?:\")\n + args.map((x) => source(x)).join(\"|\") + \")\";\n return joined;\n}\n\n/**\n * @param {RegExp | string} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n const match = re && re.exec(lexeme);\n return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\n// an incorrect parse, it additionally matches the following:\n// - [...] elements, where the meaning of parentheses and escapes change\n// - other escape sequences, so we do not misparse escape sequences as\n// interesting elements\n// - non-matching or lookahead parentheses, which do not capture. These\n// follow the '(' with a '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// **INTERNAL** Not intended for outside usage\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n let numCaptures = 0;\n\n return regexps.map((regex) => {\n numCaptures += 1;\n const offset = numCaptures;\n let re = source(regex);\n let out = '';\n\n while (re.length > 0) {\n const match = BACKREF_RE.exec(re);\n if (!match) {\n out += re;\n break;\n }\n out += re.substring(0, match.index);\n re = re.substring(match.index + match[0].length);\n if (match[0][0] === '\\\\' && match[1]) {\n // Adjust the backreference.\n out += '\\\\' + String(Number(match[1]) + offset);\n } else {\n out += match[0];\n if (match[0] === '(') {\n numCaptures++;\n }\n }\n }\n return out;\n }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n const beginShebang = /^#![ ]*\\//;\n if (opts.binary) {\n opts.begin = concat(\n beginShebang,\n /.*\\b/,\n opts.binary,\n /\\b.*/);\n }\n return inherit$1({\n scope: 'meta',\n begin: beginShebang,\n end: /$/,\n relevance: 0,\n /** @type {ModeCallback} */\n \"on:begin\": (m, resp) => {\n if (m.index !== 0) resp.ignoreMatch();\n }\n }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n scope: 'string',\n begin: '\\'',\n end: '\\'',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n scope: 'string',\n begin: '\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n const mode = inherit$1(\n {\n scope: 'comment',\n begin,\n end,\n contains: []\n },\n modeOptions\n );\n mode.contains.push({\n scope: 'doctag',\n // hack to avoid the space from being included. the space is necessary to\n // match here to prevent the plain text rule below from gobbling up doctags\n begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n excludeBegin: true,\n relevance: 0\n });\n const ENGLISH_WORD = either(\n // list of common 1 and 2 letter words in English\n \"I\",\n \"a\",\n \"is\",\n \"so\",\n \"us\",\n \"to\",\n \"at\",\n \"if\",\n \"in\",\n \"it\",\n \"on\",\n // note: this is not an exhaustive list of contractions, just popular ones\n /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n );\n // looking like plain text, more likely to be a comment\n mode.contains.push(\n {\n // TODO: how to include \", (, ) without breaking grammars that use these for\n // comment delimiters?\n // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n // ---\n\n // this tries to find sequences of 3 english words in a row (without any\n // \"programming\" type syntax) this gives us a strong signal that we've\n // TRULY found a comment - vs perhaps scanning with the wrong language.\n // It's possible to find something that LOOKS like the start of the\n // comment - but then if there is no readable text - good chance it is a\n // false match and not a comment.\n //\n // for a visual example please see:\n // https://github.com/highlightjs/highlight.js/issues/2827\n\n begin: concat(\n /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n '(',\n ENGLISH_WORD,\n /[.]?[:]?([.][ ]|[ ])/,\n '){3}') // look for 3 words in a row\n }\n );\n return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n scope: 'number',\n begin: NUMBER_RE,\n relevance: 0\n};\nconst C_NUMBER_MODE = {\n scope: 'number',\n begin: C_NUMBER_RE,\n relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n scope: 'number',\n begin: BINARY_NUMBER_RE,\n relevance: 0\n};\nconst REGEXP_MODE = {\n // this outer rule makes sure we actually have a WHOLE regex and not simply\n // an expression such as:\n //\n // 3 / something\n //\n // (which will then blow up when regex's `illegal` sees the newline)\n begin: /(?=\\/[^/\\n]*\\/)/,\n contains: [{\n scope: 'regexp',\n begin: /\\//,\n end: /\\/[gimuy]*/,\n illegal: /\\n/,\n contains: [\n BACKSLASH_ESCAPE,\n {\n begin: /\\[/,\n end: /\\]/,\n relevance: 0,\n contains: [BACKSLASH_ESCAPE]\n }\n ]\n }]\n};\nconst TITLE_MODE = {\n scope: 'title',\n begin: IDENT_RE,\n relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n scope: 'title',\n begin: UNDERSCORE_IDENT_RE,\n relevance: 0\n};\nconst METHOD_GUARD = {\n // excludes method names from keyword processing\n begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n return Object.assign(mode,\n {\n /** @type {ModeCallback} */\n 'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n /** @type {ModeCallback} */\n 'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n __proto__: null,\n MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n IDENT_RE: IDENT_RE,\n UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n NUMBER_RE: NUMBER_RE,\n C_NUMBER_RE: C_NUMBER_RE,\n BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n RE_STARTERS_RE: RE_STARTERS_RE,\n SHEBANG: SHEBANG,\n BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n APOS_STRING_MODE: APOS_STRING_MODE,\n QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n COMMENT: COMMENT,\n C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n NUMBER_MODE: NUMBER_MODE,\n C_NUMBER_MODE: C_NUMBER_MODE,\n BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n REGEXP_MODE: REGEXP_MODE,\n TITLE_MODE: TITLE_MODE,\n UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE,\n METHOD_GUARD: METHOD_GUARD,\n END_SAME_AS_BEGIN: END_SAME_AS_BEGIN\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`. The extension then just moves `match` into\n// `begin` when it runs. Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfHasPrecedingDot(match, response) {\n const before = match.input[match.index - 1];\n if (before === \".\") {\n response.ignoreMatch();\n }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.className !== undefined) {\n mode.scope = mode.className;\n delete mode.className;\n }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n if (!parent) return;\n if (!mode.beginKeywords) return;\n\n // for languages with keywords that include non-word characters checking for\n // a word boundary is not sufficient, so instead we check for a word boundary\n // or whitespace - this does no harm in any case since our keyword engine\n // doesn't allow spaces in keywords anyways and we still check for the boundary\n // first\n mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n mode.__beforeBegin = skipIfHasPrecedingDot;\n mode.keywords = mode.keywords || mode.beginKeywords;\n delete mode.beginKeywords;\n\n // prevents double relevance, the keywords themselves provide\n // relevance, the mode doesn't need to double it\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n if (!Array.isArray(mode.illegal)) return;\n\n mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n if (!mode.match) return;\n if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n mode.begin = mode.match;\n delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n if (!mode.beforeMatch) return;\n // starts conflicts with endsParent which we need to make sure the child\n // rule is not matched multiple times\n if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n const originalMode = Object.assign({}, mode);\n Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n mode.keywords = originalMode.keywords;\n mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n mode.starts = {\n relevance: 0,\n contains: [\n Object.assign(originalMode, { endsParent: true })\n ]\n };\n mode.relevance = 0;\n\n delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n 'of',\n 'and',\n 'for',\n 'in',\n 'not',\n 'or',\n 'if',\n 'then',\n 'parent', // common variable name\n 'list', // common variable name\n 'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record | Array} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n /** @type {import(\"highlight.js/private\").KeywordDict} */\n const compiledKeywords = Object.create(null);\n\n // input can be a string of keywords, an array of keywords, or a object with\n // named keys representing scopeName (which can then point to a string or array)\n if (typeof rawKeywords === 'string') {\n compileList(scopeName, rawKeywords.split(\" \"));\n } else if (Array.isArray(rawKeywords)) {\n compileList(scopeName, rawKeywords);\n } else {\n Object.keys(rawKeywords).forEach(function(scopeName) {\n // collapse all our objects back into the parent object\n Object.assign(\n compiledKeywords,\n compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n );\n });\n }\n return compiledKeywords;\n\n // ---\n\n /**\n * Compiles an individual list of keywords\n *\n * Ex: \"for if when while|5\"\n *\n * @param {string} scopeName\n * @param {Array} keywordList\n */\n function compileList(scopeName, keywordList) {\n if (caseInsensitive) {\n keywordList = keywordList.map(x => x.toLowerCase());\n }\n keywordList.forEach(function(keyword) {\n const pair = keyword.split('|');\n compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\n });\n }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n // manual scores always win over common keywords\n // so you can force a score of 1 if you really insist\n if (providedScore) {\n return Number(providedScore);\n }\n\n return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n if (seenDeprecations[`${version}/${message}`]) return;\n\n console.log(`Deprecated as of ${version}. ${message}`);\n seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n * { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n * (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n * { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5. This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n let offset = 0;\n const scopeNames = mode[key];\n /** @type Record */\n const emit = {};\n /** @type Record */\n const positions = {};\n\n for (let i = 1; i <= regexes.length; i++) {\n positions[i + offset] = scopeNames[i];\n emit[i + offset] = true;\n offset += countMatchGroups(regexes[i - 1]);\n }\n // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n // output from inside match groups\n mode[key] = positions;\n mode[key]._emit = emit;\n mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n if (!Array.isArray(mode.begin)) return;\n\n if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n error(\"beginScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n if (!Array.isArray(mode.end)) return;\n\n if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n error(\"endScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.end, { key: \"endScope\" });\n mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n {\n match: [ /def/, /\\w+/ ]\n scope: { 1: \"keyword\" , 2: \"title\" }\n }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n mode.beginScope = mode.scope;\n delete mode.scope;\n }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n scopeSugar(mode);\n\n if (typeof mode.beginScope === \"string\") {\n mode.beginScope = { _wrap: mode.beginScope };\n }\n if (typeof mode.endScope === \"string\") {\n mode.endScope = { _wrap: mode.endScope };\n }\n\n beginMultiClass(mode);\n endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n /**\n * Builds a regex with the case sensitivity of the current language\n *\n * @param {RegExp | string} value\n * @param {boolean} [global]\n */\n function langRe(value, global) {\n return new RegExp(\n source(value),\n 'm'\n + (language.case_insensitive ? 'i' : '')\n + (language.unicodeRegex ? 'u' : '')\n + (global ? 'g' : '')\n );\n }\n\n /**\n Stores multiple regular expressions and allows you to quickly search for\n them all in a string simultaneously - returning the first match. It does\n this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n and joined by `|` - using match groups to track position. When a match is\n found checking which position in the array has content allows us to figure\n out which of the original regexes / match groups triggered the match.\n\n The match object itself (the result of `Regex.exec`) is returned but also\n enhanced by merging in any meta-data that was registered with the regex.\n This is how we keep track of which mode matched, and what type of rule\n (`illegal`, `begin`, end, etc).\n */\n class MultiRegex {\n constructor() {\n this.matchIndexes = {};\n // @ts-ignore\n this.regexes = [];\n this.matchAt = 1;\n this.position = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n opts.position = this.position++;\n // @ts-ignore\n this.matchIndexes[this.matchAt] = opts;\n this.regexes.push([opts, re]);\n this.matchAt += countMatchGroups(re) + 1;\n }\n\n compile() {\n if (this.regexes.length === 0) {\n // avoids the need to check length every time exec is called\n // @ts-ignore\n this.exec = () => null;\n }\n const terminators = this.regexes.map(el => el[1]);\n this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\n this.lastIndex = 0;\n }\n\n /** @param {string} s */\n exec(s) {\n this.matcherRe.lastIndex = this.lastIndex;\n const match = this.matcherRe.exec(s);\n if (!match) { return null; }\n\n // eslint-disable-next-line no-undefined\n const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n // @ts-ignore\n const matchData = this.matchIndexes[i];\n // trim off any earlier non-relevant match groups (ie, the other regex\n // match groups that make up the multi-matcher)\n match.splice(0, i);\n\n return Object.assign(match, matchData);\n }\n }\n\n /*\n Created to solve the key deficiently with MultiRegex - there is no way to\n test for multiple matches at a single location. Why would we need to do\n that? In the future a more dynamic engine will allow certain matches to be\n ignored. An example: if we matched say the 3rd regex in a large group but\n decided to ignore it - we'd need to started testing again at the 4th\n regex... but MultiRegex itself gives us no real way to do that.\n\n So what this class creates MultiRegexs on the fly for whatever search\n position they are needed.\n\n NOTE: These additional MultiRegex objects are created dynamically. For most\n grammars most of the time we will never actually need anything more than the\n first MultiRegex - so this shouldn't have too much overhead.\n\n Say this is our search group, and we match regex3, but wish to ignore it.\n\n regex1 | regex2 | regex3 | regex4 | regex5 ' ie, startAt = 0\n\n What we need is a new MultiRegex that only includes the remaining\n possibilities:\n\n regex4 | regex5 ' ie, startAt = 3\n\n This class wraps all that complexity up in a simple API... `startAt` decides\n where in the array of expressions to start doing the matching. It\n auto-increments, so if a match is found at position 2, then startAt will be\n set to 3. If the end is reached startAt will return to 0.\n\n MOST of the time the parser will be setting startAt manually to 0.\n */\n class ResumableMultiRegex {\n constructor() {\n // @ts-ignore\n this.rules = [];\n // @ts-ignore\n this.multiRegexes = [];\n this.count = 0;\n\n this.lastIndex = 0;\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n getMatcher(index) {\n if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n const matcher = new MultiRegex();\n this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n matcher.compile();\n this.multiRegexes[index] = matcher;\n return matcher;\n }\n\n resumingScanAtSamePosition() {\n return this.regexIndex !== 0;\n }\n\n considerAll() {\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n this.rules.push([re, opts]);\n if (opts.type === \"begin\") this.count++;\n }\n\n /** @param {string} s */\n exec(s) {\n const m = this.getMatcher(this.regexIndex);\n m.lastIndex = this.lastIndex;\n let result = m.exec(s);\n\n // The following is because we have no easy way to say \"resume scanning at the\n // existing position but also skip the current rule ONLY\". What happens is\n // all prior rules are also skipped which can result in matching the wrong\n // thing. Example of matching \"booger\":\n\n // our matcher is [string, \"booger\", number]\n //\n // ....booger....\n\n // if \"booger\" is ignored then we'd really need a regex to scan from the\n // SAME position for only: [string, number] but ignoring \"booger\" (if it\n // was the first match), a simple resume would scan ahead who knows how\n // far looking only for \"number\", ignoring potential string matches (or\n // future \"booger\" matches that might be valid.)\n\n // So what we do: We execute two matchers, one resuming at the same\n // position, but the second full matcher starting at the position after:\n\n // /--- resume first regex match here (for [number])\n // |/---- full match here for [string, \"booger\", number]\n // vv\n // ....booger....\n\n // Which ever results in a match first is then used. So this 3-4 step\n // process essentially allows us to say \"match at this position, excluding\n // a prior rule that was ignored\".\n //\n // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n // 2. Resume matching for [number]\n // 3. Match at index + 1 for [string, \"booger\", number]\n // 4. If #2 and #3 result in matches, which came first?\n if (this.resumingScanAtSamePosition()) {\n if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n const m2 = this.getMatcher(0);\n m2.lastIndex = this.lastIndex + 1;\n result = m2.exec(s);\n }\n }\n\n if (result) {\n this.regexIndex += result.position + 1;\n if (this.regexIndex === this.count) {\n // wrap-around to considering all matches again\n this.considerAll();\n }\n }\n\n return result;\n }\n }\n\n /**\n * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n * the content and find matches.\n *\n * @param {CompiledMode} mode\n * @returns {ResumableMultiRegex}\n */\n function buildModeRegex(mode) {\n const mm = new ResumableMultiRegex();\n\n mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n if (mode.terminatorEnd) {\n mm.addRule(mode.terminatorEnd, { type: \"end\" });\n }\n if (mode.illegal) {\n mm.addRule(mode.illegal, { type: \"illegal\" });\n }\n\n return mm;\n }\n\n /** skip vs abort vs ignore\n *\n * @skip - The mode is still entered and exited normally (and contains rules apply),\n * but all content is held and added to the parent buffer rather than being\n * output when the mode ends. Mostly used with `sublanguage` to build up\n * a single large buffer than can be parsed by sublanguage.\n *\n * - The mode begin ands ends normally.\n * - Content matched is added to the parent mode buffer.\n * - The parser cursor is moved forward normally.\n *\n * @abort - A hack placeholder until we have ignore. Aborts the mode (as if it\n * never matched) but DOES NOT continue to match subsequent `contains`\n * modes. Abort is bad/suboptimal because it can result in modes\n * farther down not getting applied because an earlier rule eats the\n * content but then aborts.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is added to the mode buffer.\n * - The parser cursor is moved forward accordingly.\n *\n * @ignore - Ignores the mode (as if it never matched) and continues to match any\n * subsequent `contains` modes. Ignore isn't technically possible with\n * the current parser implementation.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is ignored.\n * - The parser cursor is not moved forward.\n */\n\n /**\n * Compiles an individual mode\n *\n * This can raise an error if the mode contains certain detectable known logic\n * issues.\n * @param {Mode} mode\n * @param {CompiledMode | null} [parent]\n * @returns {CompiledMode | never}\n */\n function compileMode(mode, parent) {\n const cmode = /** @type CompiledMode */ (mode);\n if (mode.isCompiled) return cmode;\n\n [\n scopeClassName,\n // do this early so compiler extensions generally don't have to worry about\n // the distinction between match/begin\n compileMatch,\n MultiClass,\n beforeMatchExt\n ].forEach(ext => ext(mode, parent));\n\n language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n // __beforeBegin is considered private API, internal use only\n mode.__beforeBegin = null;\n\n [\n beginKeywords,\n // do this later so compiler extensions that come earlier have access to the\n // raw array if they wanted to perhaps manipulate it, etc.\n compileIllegal,\n // default to 1 relevance if not specified\n compileRelevance\n ].forEach(ext => ext(mode, parent));\n\n mode.isCompiled = true;\n\n let keywordPattern = null;\n if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n // we need a copy because keywords might be compiled multiple times\n // so we can't go deleting $pattern from the original on the first\n // pass\n mode.keywords = Object.assign({}, mode.keywords);\n keywordPattern = mode.keywords.$pattern;\n delete mode.keywords.$pattern;\n }\n keywordPattern = keywordPattern || /\\w+/;\n\n if (mode.keywords) {\n mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n }\n\n cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n if (parent) {\n if (!mode.begin) mode.begin = /\\B|\\b/;\n cmode.beginRe = langRe(cmode.begin);\n if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n if (mode.end) cmode.endRe = langRe(cmode.end);\n cmode.terminatorEnd = source(cmode.end) || '';\n if (mode.endsWithParent && parent.terminatorEnd) {\n cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n }\n }\n if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n if (!mode.contains) mode.contains = [];\n\n mode.contains = [].concat(...mode.contains.map(function(c) {\n return expandOrCloneMode(c === 'self' ? mode : c);\n }));\n mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n if (mode.starts) {\n compileMode(mode.starts, parent);\n }\n\n cmode.matcher = buildModeRegex(cmode);\n return cmode;\n }\n\n if (!language.compilerExtensions) language.compilerExtensions = [];\n\n // self is not valid at the top-level\n if (language.contains && language.contains.includes('self')) {\n throw new Error(\"ERR: contains `self` is not supported at the top-level of a language. See documentation.\");\n }\n\n // we need a null object, which inherit will guarantee\n language.classNameAliases = inherit$1(language.classNameAliases || {});\n\n return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n if (!mode) return false;\n\n return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n if (mode.variants && !mode.cachedVariants) {\n mode.cachedVariants = mode.variants.map(function(variant) {\n return inherit$1(mode, { variants: null }, variant);\n });\n }\n\n // EXPAND\n // if we have variants then essentially \"replace\" the mode with the variants\n // this happens in compileMode, where this function is called from\n if (mode.cachedVariants) {\n return mode.cachedVariants;\n }\n\n // CLONE\n // if we have dependencies on parents then we need a unique\n // instance of ourselves, so we can be reused with many\n // different parents without issue\n if (dependencyOnParent(mode)) {\n return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n }\n\n if (Object.isFrozen(mode)) {\n return inherit$1(mode);\n }\n\n // no special dependency issues, just return ourselves\n return mode;\n}\n\nvar version = \"11.7.0\";\n\nclass HTMLInjectionError extends Error {\n constructor(reason, html) {\n super(reason);\n this.name = \"HTMLInjectionError\";\n this.html = html;\n }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n // Global internal variables used within the highlight.js library.\n /** @type {Record} */\n const languages = Object.create(null);\n /** @type {Record} */\n const aliases = Object.create(null);\n /** @type {HLJSPlugin[]} */\n const plugins = [];\n\n // safe/production mode - swallows more errors, tries to keep running\n // even if a single syntax or parse hits a fatal error\n let SAFE_MODE = true;\n const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n /** @type {Language} */\n const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n // Global options used when within external APIs. This is modified when\n // calling the `hljs.configure` function.\n /** @type HLJSOptions */\n let options = {\n ignoreUnescapedHTML: false,\n throwUnescapedHTML: false,\n noHighlightRe: /^(no-?highlight)$/i,\n languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n classPrefix: 'hljs-',\n cssSelector: 'pre code',\n languages: null,\n // beta configuration options, subject to change, welcome to discuss\n // https://github.com/highlightjs/highlight.js/issues/1086\n __emitter: TokenTreeEmitter\n };\n\n /* Utility functions */\n\n /**\n * Tests a language name to see if highlighting should be skipped\n * @param {string} languageName\n */\n function shouldNotHighlight(languageName) {\n return options.noHighlightRe.test(languageName);\n }\n\n /**\n * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n */\n function blockLanguage(block) {\n let classes = block.className + ' ';\n\n classes += block.parentNode ? block.parentNode.className : '';\n\n // language-* takes precedence over non-prefixed class names.\n const match = options.languageDetectRe.exec(classes);\n if (match) {\n const language = getLanguage(match[1]);\n if (!language) {\n warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n warn(\"Falling back to no-highlight mode for this block.\", block);\n }\n return language ? match[1] : 'no-highlight';\n }\n\n return classes\n .split(/\\s+/)\n .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n }\n\n /**\n * Core highlighting function.\n *\n * OLD API\n * highlight(lang, code, ignoreIllegals, continuation)\n *\n * NEW API\n * highlight(code, {lang, ignoreIllegals})\n *\n * @param {string} codeOrLanguageName - the language to use for highlighting\n * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n *\n * @returns {HighlightResult} Result - an object that represents the result\n * @property {string} language - the language name\n * @property {number} relevance - the relevance score\n * @property {string} value - the highlighted HTML code\n * @property {string} code - the original raw code\n * @property {CompiledMode} top - top of the current mode stack\n * @property {boolean} illegal - indicates whether any illegal matches were found\n */\n function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n let code = \"\";\n let languageName = \"\";\n if (typeof optionsOrCode === \"object\") {\n code = codeOrLanguageName;\n ignoreIllegals = optionsOrCode.ignoreIllegals;\n languageName = optionsOrCode.language;\n } else {\n // old API\n deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n languageName = codeOrLanguageName;\n code = optionsOrCode;\n }\n\n // https://github.com/highlightjs/highlight.js/issues/3149\n // eslint-disable-next-line no-undefined\n if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n /** @type {BeforeHighlightContext} */\n const context = {\n code,\n language: languageName\n };\n // the plugin can change the desired language or the code to be highlighted\n // just be changing the object it was passed\n fire(\"before:highlight\", context);\n\n // a before plugin can usurp the result completely by providing it's own\n // in which case we don't even need to call highlight\n const result = context.result\n ? context.result\n : _highlight(context.language, context.code, ignoreIllegals);\n\n result.code = context.code;\n // the plugin can change anything in result to suite it\n fire(\"after:highlight\", result);\n\n return result;\n }\n\n /**\n * private highlight that's used internally and does not fire callbacks\n *\n * @param {string} languageName - the language to use for highlighting\n * @param {string} codeToHighlight - the code to highlight\n * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n * @param {CompiledMode?} [continuation] - current continuation mode, if any\n * @returns {HighlightResult} - result of the highlight operation\n */\n function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n const keywordHits = Object.create(null);\n\n /**\n * Return keyword data if a match is a keyword\n * @param {CompiledMode} mode - current mode\n * @param {string} matchText - the textual match\n * @returns {KeywordData | false}\n */\n function keywordData(mode, matchText) {\n return mode.keywords[matchText];\n }\n\n function processKeywords() {\n if (!top.keywords) {\n emitter.addText(modeBuffer);\n return;\n }\n\n let lastIndex = 0;\n top.keywordPatternRe.lastIndex = 0;\n let match = top.keywordPatternRe.exec(modeBuffer);\n let buf = \"\";\n\n while (match) {\n buf += modeBuffer.substring(lastIndex, match.index);\n const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n const data = keywordData(top, word);\n if (data) {\n const [kind, keywordRelevance] = data;\n emitter.addText(buf);\n buf = \"\";\n\n keywordHits[word] = (keywordHits[word] || 0) + 1;\n if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n if (kind.startsWith(\"_\")) {\n // _ implied for relevance only, do not highlight\n // by applying a class name\n buf += match[0];\n } else {\n const cssClass = language.classNameAliases[kind] || kind;\n emitter.addKeyword(match[0], cssClass);\n }\n } else {\n buf += match[0];\n }\n lastIndex = top.keywordPatternRe.lastIndex;\n match = top.keywordPatternRe.exec(modeBuffer);\n }\n buf += modeBuffer.substring(lastIndex);\n emitter.addText(buf);\n }\n\n function processSubLanguage() {\n if (modeBuffer === \"\") return;\n /** @type HighlightResult */\n let result = null;\n\n if (typeof top.subLanguage === 'string') {\n if (!languages[top.subLanguage]) {\n emitter.addText(modeBuffer);\n return;\n }\n result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n } else {\n result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n }\n\n // Counting embedded language score towards the host language may be disabled\n // with zeroing the containing mode relevance. Use case in point is Markdown that\n // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n // score.\n if (top.relevance > 0) {\n relevance += result.relevance;\n }\n emitter.addSublanguage(result._emitter, result.language);\n }\n\n function processBuffer() {\n if (top.subLanguage != null) {\n processSubLanguage();\n } else {\n processKeywords();\n }\n modeBuffer = '';\n }\n\n /**\n * @param {CompiledScope} scope\n * @param {RegExpMatchArray} match\n */\n function emitMultiClass(scope, match) {\n let i = 1;\n const max = match.length - 1;\n while (i <= max) {\n if (!scope._emit[i]) { i++; continue; }\n const klass = language.classNameAliases[scope[i]] || scope[i];\n const text = match[i];\n if (klass) {\n emitter.addKeyword(text, klass);\n } else {\n modeBuffer = text;\n processKeywords();\n modeBuffer = \"\";\n }\n i++;\n }\n }\n\n /**\n * @param {CompiledMode} mode - new mode to start\n * @param {RegExpMatchArray} match\n */\n function startNewMode(mode, match) {\n if (mode.scope && typeof mode.scope === \"string\") {\n emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n }\n if (mode.beginScope) {\n // beginScope just wraps the begin match itself in a scope\n if (mode.beginScope._wrap) {\n emitter.addKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n modeBuffer = \"\";\n } else if (mode.beginScope._multi) {\n // at this point modeBuffer should just be the match\n emitMultiClass(mode.beginScope, match);\n modeBuffer = \"\";\n }\n }\n\n top = Object.create(mode, { parent: { value: top } });\n return top;\n }\n\n /**\n * @param {CompiledMode } mode - the mode to potentially end\n * @param {RegExpMatchArray} match - the latest match\n * @param {string} matchPlusRemainder - match plus remainder of content\n * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n */\n function endOfMode(mode, match, matchPlusRemainder) {\n let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n if (matched) {\n if (mode[\"on:end\"]) {\n const resp = new Response(mode);\n mode[\"on:end\"](match, resp);\n if (resp.isMatchIgnored) matched = false;\n }\n\n if (matched) {\n while (mode.endsParent && mode.parent) {\n mode = mode.parent;\n }\n return mode;\n }\n }\n // even if on:end fires an `ignore` it's still possible\n // that we might trigger the end node because of a parent mode\n if (mode.endsWithParent) {\n return endOfMode(mode.parent, match, matchPlusRemainder);\n }\n }\n\n /**\n * Handle matching but then ignoring a sequence of text\n *\n * @param {string} lexeme - string containing full match text\n */\n function doIgnore(lexeme) {\n if (top.matcher.regexIndex === 0) {\n // no more regexes to potentially match here, so we move the cursor forward one\n // space\n modeBuffer += lexeme[0];\n return 1;\n } else {\n // no need to move the cursor, we still have additional regexes to try and\n // match at this very spot\n resumeScanAtSamePosition = true;\n return 0;\n }\n }\n\n /**\n * Handle the start of a new potential mode match\n *\n * @param {EnhancedMatch} match - the current match\n * @returns {number} how far to advance the parse cursor\n */\n function doBeginMatch(match) {\n const lexeme = match[0];\n const newMode = match.rule;\n\n const resp = new Response(newMode);\n // first internal before callbacks, then the public ones\n const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n for (const cb of beforeCallbacks) {\n if (!cb) continue;\n cb(match, resp);\n if (resp.isMatchIgnored) return doIgnore(lexeme);\n }\n\n if (newMode.skip) {\n modeBuffer += lexeme;\n } else {\n if (newMode.excludeBegin) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (!newMode.returnBegin && !newMode.excludeBegin) {\n modeBuffer = lexeme;\n }\n }\n startNewMode(newMode, match);\n return newMode.returnBegin ? 0 : lexeme.length;\n }\n\n /**\n * Handle the potential end of mode\n *\n * @param {RegExpMatchArray} match - the current match\n */\n function doEndMatch(match) {\n const lexeme = match[0];\n const matchPlusRemainder = codeToHighlight.substring(match.index);\n\n const endMode = endOfMode(top, match, matchPlusRemainder);\n if (!endMode) { return NO_MATCH; }\n\n const origin = top;\n if (top.endScope && top.endScope._wrap) {\n processBuffer();\n emitter.addKeyword(lexeme, top.endScope._wrap);\n } else if (top.endScope && top.endScope._multi) {\n processBuffer();\n emitMultiClass(top.endScope, match);\n } else if (origin.skip) {\n modeBuffer += lexeme;\n } else {\n if (!(origin.returnEnd || origin.excludeEnd)) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (origin.excludeEnd) {\n modeBuffer = lexeme;\n }\n }\n do {\n if (top.scope) {\n emitter.closeNode();\n }\n if (!top.skip && !top.subLanguage) {\n relevance += top.relevance;\n }\n top = top.parent;\n } while (top !== endMode.parent);\n if (endMode.starts) {\n startNewMode(endMode.starts, match);\n }\n return origin.returnEnd ? 0 : lexeme.length;\n }\n\n function processContinuations() {\n const list = [];\n for (let current = top; current !== language; current = current.parent) {\n if (current.scope) {\n list.unshift(current.scope);\n }\n }\n list.forEach(item => emitter.openNode(item));\n }\n\n /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n let lastMatch = {};\n\n /**\n * Process an individual match\n *\n * @param {string} textBeforeMatch - text preceding the match (since the last match)\n * @param {EnhancedMatch} [match] - the match itself\n */\n function processLexeme(textBeforeMatch, match) {\n const lexeme = match && match[0];\n\n // add non-matched text to the current mode buffer\n modeBuffer += textBeforeMatch;\n\n if (lexeme == null) {\n processBuffer();\n return 0;\n }\n\n // we've found a 0 width match and we're stuck, so we need to advance\n // this happens when we have badly behaved rules that have optional matchers to the degree that\n // sometimes they can end up matching nothing at all\n // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n // spit the \"skipped\" character that our regex choked on back into the output sequence\n modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n if (!SAFE_MODE) {\n /** @type {AnnotatedError} */\n const err = new Error(`0 width match regex (${languageName})`);\n err.languageName = languageName;\n err.badRule = lastMatch.rule;\n throw err;\n }\n return 1;\n }\n lastMatch = match;\n\n if (match.type === \"begin\") {\n return doBeginMatch(match);\n } else if (match.type === \"illegal\" && !ignoreIllegals) {\n // illegal match, we do not continue processing\n /** @type {AnnotatedError} */\n const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.scope || '') + '\"');\n err.mode = top;\n throw err;\n } else if (match.type === \"end\") {\n const processed = doEndMatch(match);\n if (processed !== NO_MATCH) {\n return processed;\n }\n }\n\n // edge case for when illegal matches $ (end of line) which is technically\n // a 0 width match but not a begin/end match so it's not caught by the\n // first handler (when ignoreIllegals is true)\n if (match.type === \"illegal\" && lexeme === \"\") {\n // advance so we aren't stuck in an infinite loop\n return 1;\n }\n\n // infinite loops are BAD, this is a last ditch catch all. if we have a\n // decent number of iterations yet our index (cursor position in our\n // parsing) still 3x behind our index then something is very wrong\n // so we bail\n if (iterations > 100000 && iterations > match.index * 3) {\n const err = new Error('potential infinite loop, way more iterations than matches');\n throw err;\n }\n\n /*\n Why might be find ourselves here? An potential end match that was\n triggered but could not be completed. IE, `doEndMatch` returned NO_MATCH.\n (this could be because a callback requests the match be ignored, etc)\n\n This causes no real harm other than stopping a few times too many.\n */\n\n modeBuffer += lexeme;\n return lexeme.length;\n }\n\n const language = getLanguage(languageName);\n if (!language) {\n error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n throw new Error('Unknown language: \"' + languageName + '\"');\n }\n\n const md = compileLanguage(language);\n let result = '';\n /** @type {CompiledMode} */\n let top = continuation || md;\n /** @type Record */\n const continuations = {}; // keep continuations for sub-languages\n const emitter = new options.__emitter(options);\n processContinuations();\n let modeBuffer = '';\n let relevance = 0;\n let index = 0;\n let iterations = 0;\n let resumeScanAtSamePosition = false;\n\n try {\n top.matcher.considerAll();\n\n for (;;) {\n iterations++;\n if (resumeScanAtSamePosition) {\n // only regexes not matched previously will now be\n // considered for a potential match\n resumeScanAtSamePosition = false;\n } else {\n top.matcher.considerAll();\n }\n top.matcher.lastIndex = index;\n\n const match = top.matcher.exec(codeToHighlight);\n // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n if (!match) break;\n\n const beforeMatch = codeToHighlight.substring(index, match.index);\n const processedCount = processLexeme(beforeMatch, match);\n index = match.index + processedCount;\n }\n processLexeme(codeToHighlight.substring(index));\n emitter.closeAllNodes();\n emitter.finalize();\n result = emitter.toHTML();\n\n return {\n language: languageName,\n value: result,\n relevance: relevance,\n illegal: false,\n _emitter: emitter,\n _top: top\n };\n } catch (err) {\n if (err.message && err.message.includes('Illegal')) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: true,\n relevance: 0,\n _illegalBy: {\n message: err.message,\n index: index,\n context: codeToHighlight.slice(index - 100, index + 100),\n mode: err.mode,\n resultSoFar: result\n },\n _emitter: emitter\n };\n } else if (SAFE_MODE) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: false,\n relevance: 0,\n errorRaised: err,\n _emitter: emitter,\n _top: top\n };\n } else {\n throw err;\n }\n }\n }\n\n /**\n * returns a valid highlight result, without actually doing any actual work,\n * auto highlight starts with this and it's possible for small snippets that\n * auto-detection may not find a better match\n * @param {string} code\n * @returns {HighlightResult}\n */\n function justTextHighlightResult(code) {\n const result = {\n value: escape(code),\n illegal: false,\n relevance: 0,\n _top: PLAINTEXT_LANGUAGE,\n _emitter: new options.__emitter(options)\n };\n result._emitter.addText(code);\n return result;\n }\n\n /**\n Highlighting with language detection. Accepts a string with the code to\n highlight. Returns an object with the following properties:\n\n - language (detected language)\n - relevance (int)\n - value (an HTML string with highlighting markup)\n - secondBest (object with the same structure for second-best heuristically\n detected language, may be absent)\n\n @param {string} code\n @param {Array} [languageSubset]\n @returns {AutoHighlightResult}\n */\n function highlightAuto(code, languageSubset) {\n languageSubset = languageSubset || options.languages || Object.keys(languages);\n const plaintext = justTextHighlightResult(code);\n\n const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n _highlight(name, code, false)\n );\n results.unshift(plaintext); // plaintext is always an option\n\n const sorted = results.sort((a, b) => {\n // sort base on relevance\n if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n // always award the tie to the base language\n // ie if C++ and Arduino are tied, it's more likely to be C++\n if (a.language && b.language) {\n if (getLanguage(a.language).supersetOf === b.language) {\n return 1;\n } else if (getLanguage(b.language).supersetOf === a.language) {\n return -1;\n }\n }\n\n // otherwise say they are equal, which has the effect of sorting on\n // relevance while preserving the original ordering - which is how ties\n // have historically been settled, ie the language that comes first always\n // wins in the case of a tie\n return 0;\n });\n\n const [best, secondBest] = sorted;\n\n /** @type {AutoHighlightResult} */\n const result = best;\n result.secondBest = secondBest;\n\n return result;\n }\n\n /**\n * Builds new class name for block given the language name\n *\n * @param {HTMLElement} element\n * @param {string} [currentLang]\n * @param {string} [resultLang]\n */\n function updateClassName(element, currentLang, resultLang) {\n const language = (currentLang && aliases[currentLang]) || resultLang;\n\n element.classList.add(\"hljs\");\n element.classList.add(`language-${language}`);\n }\n\n /**\n * Applies highlighting to a DOM node containing code.\n *\n * @param {HighlightedHTMLElement} element - the HTML element to highlight\n */\n function highlightElement(element) {\n /** @type HTMLElement */\n let node = null;\n const language = blockLanguage(element);\n\n if (shouldNotHighlight(language)) return;\n\n fire(\"before:highlightElement\",\n { el: element, language: language });\n\n // we should be all text, no child nodes (unescaped HTML) - this is possibly\n // an HTML injection attack - it's likely too late if this is already in\n // production (the code has likely already done its damage by the time\n // we're seeing it)... but we yell loudly about this so that hopefully it's\n // more likely to be caught in development before making it to production\n if (element.children.length > 0) {\n if (!options.ignoreUnescapedHTML) {\n console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\");\n console.warn(\"The element with unescaped HTML:\");\n console.warn(element);\n }\n if (options.throwUnescapedHTML) {\n const err = new HTMLInjectionError(\n \"One of your code blocks includes unescaped HTML.\",\n element.innerHTML\n );\n throw err;\n }\n }\n\n node = element;\n const text = node.textContent;\n const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n element.innerHTML = result.value;\n updateClassName(element, language, result.language);\n element.result = {\n language: result.language,\n // TODO: remove with version 11.0\n re: result.relevance,\n relevance: result.relevance\n };\n if (result.secondBest) {\n element.secondBest = {\n language: result.secondBest.language,\n relevance: result.secondBest.relevance\n };\n }\n\n fire(\"after:highlightElement\", { el: element, result, text });\n }\n\n /**\n * Updates highlight.js global options with the passed options\n *\n * @param {Partial} userOptions\n */\n function configure(userOptions) {\n options = inherit(options, userOptions);\n }\n\n // TODO: remove v12, deprecated\n const initHighlighting = () => {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlighting() deprecated. Use highlightAll() now.\");\n };\n\n // TODO: remove v12, deprecated\n function initHighlightingOnLoad() {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated. Use highlightAll() now.\");\n }\n\n let wantsHighlight = false;\n\n /**\n * auto-highlights all pre>code elements on the page\n */\n function highlightAll() {\n // if we are called too early in the loading process\n if (document.readyState === \"loading\") {\n wantsHighlight = true;\n return;\n }\n\n const blocks = document.querySelectorAll(options.cssSelector);\n blocks.forEach(highlightElement);\n }\n\n function boot() {\n // if a highlight was requested before DOM was loaded, do now\n if (wantsHighlight) highlightAll();\n }\n\n // make sure we are in the browser environment\n if (typeof window !== 'undefined' && window.addEventListener) {\n window.addEventListener('DOMContentLoaded', boot, false);\n }\n\n /**\n * Register a language grammar module\n *\n * @param {string} languageName\n * @param {LanguageFn} languageDefinition\n */\n function registerLanguage(languageName, languageDefinition) {\n let lang = null;\n try {\n lang = languageDefinition(hljs);\n } catch (error$1) {\n error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n // hard or soft error\n if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n // languages that have serious errors are replaced with essentially a\n // \"plaintext\" stand-in so that the code blocks will still get normal\n // css classes applied to them - and one bad language won't break the\n // entire highlighter\n lang = PLAINTEXT_LANGUAGE;\n }\n // give it a temporary name if it doesn't have one in the meta-data\n if (!lang.name) lang.name = languageName;\n languages[languageName] = lang;\n lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n if (lang.aliases) {\n registerAliases(lang.aliases, { languageName });\n }\n }\n\n /**\n * Remove a language grammar module\n *\n * @param {string} languageName\n */\n function unregisterLanguage(languageName) {\n delete languages[languageName];\n for (const alias of Object.keys(aliases)) {\n if (aliases[alias] === languageName) {\n delete aliases[alias];\n }\n }\n }\n\n /**\n * @returns {string[]} List of language internal names\n */\n function listLanguages() {\n return Object.keys(languages);\n }\n\n /**\n * @param {string} name - name of the language to retrieve\n * @returns {Language | undefined}\n */\n function getLanguage(name) {\n name = (name || '').toLowerCase();\n return languages[name] || languages[aliases[name]];\n }\n\n /**\n *\n * @param {string|string[]} aliasList - single alias or list of aliases\n * @param {{languageName: string}} opts\n */\n function registerAliases(aliasList, { languageName }) {\n if (typeof aliasList === 'string') {\n aliasList = [aliasList];\n }\n aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n }\n\n /**\n * Determines if a given language has auto-detection enabled\n * @param {string} name - name of the language\n */\n function autoDetection(name) {\n const lang = getLanguage(name);\n return lang && !lang.disableAutodetect;\n }\n\n /**\n * Upgrades the old highlightBlock plugins to the new\n * highlightElement API\n * @param {HLJSPlugin} plugin\n */\n function upgradePluginAPI(plugin) {\n // TODO: remove with v12\n if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n plugin[\"before:highlightElement\"] = (data) => {\n plugin[\"before:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n plugin[\"after:highlightElement\"] = (data) => {\n plugin[\"after:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function addPlugin(plugin) {\n upgradePluginAPI(plugin);\n plugins.push(plugin);\n }\n\n /**\n *\n * @param {PluginEvent} event\n * @param {any} args\n */\n function fire(event, args) {\n const cb = event;\n plugins.forEach(function(plugin) {\n if (plugin[cb]) {\n plugin[cb](args);\n }\n });\n }\n\n /**\n * DEPRECATED\n * @param {HighlightedHTMLElement} el\n */\n function deprecateHighlightBlock(el) {\n deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n return highlightElement(el);\n }\n\n /* Interface definition */\n Object.assign(hljs, {\n highlight,\n highlightAuto,\n highlightAll,\n highlightElement,\n // TODO: Remove with v12 API\n highlightBlock: deprecateHighlightBlock,\n configure,\n initHighlighting,\n initHighlightingOnLoad,\n registerLanguage,\n unregisterLanguage,\n listLanguages,\n getLanguage,\n registerAliases,\n autoDetection,\n inherit,\n addPlugin\n });\n\n hljs.debugMode = function() { SAFE_MODE = false; };\n hljs.safeMode = function() { SAFE_MODE = true; };\n hljs.versionString = version;\n\n hljs.regex = {\n concat: concat,\n lookahead: lookahead,\n either: either,\n optional: optional,\n anyNumberOfTimes: anyNumberOfTimes\n };\n\n for (const key in MODES) {\n // @ts-ignore\n if (typeof MODES[key] === \"object\") {\n // @ts-ignore\n deepFreezeEs6.exports(MODES[key]);\n }\n }\n\n // merge all the modes/regexes into our main object\n Object.assign(hljs, MODES);\n\n return hljs;\n};\n\n// export an \"instance\" of the highlighter\nvar highlight = HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n","/**!\n * Sortable 1.15.0\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // if there is a last element, it is the target\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n\n if (firstChild === dragEl) {\n return completed(false);\n }\n\n target = firstChild;\n targetRect = getRect(target);\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var rect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var spacer = 10;\n return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n folding = false; // Do not \"unfold\" after around dragEl if reverted\n\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","// https://nodejs.org/api/packages.html#packages_writing_dual_packages_while_avoiding_or_minimizing_hazards\nimport HighlightJS from '../lib/core.js';\nexport { HighlightJS };\nexport default HighlightJS;\n","import e from\"sortablejs\";import t from\"highlight.js/lib/core\";var n;!function(e){var t;(t=e.InputAction||(e.InputAction={})).ADD=\"add\",t.MOVE=\"move\",t.REMOVE=\"remove\"}(n||(n={}));class a{el;_dropArea;_dragArea;_dropSortable;_dragSortable;parentElement;_prevPosition;reusable;randomize;storedSourceBlocks;storedSourceBlockExplanations;blockOrder;hljsLanguage;initialized;constructor(e,t,n){this.el=document.createElement(\"div\"),this.el.classList.add(\"hparsons-input\"),this.parentElement=e,this.el.id=\"hparsonstool-\"+this.parentElement.toolNumber+\"-parsons-input\";const a=document.createElement(\"div\");a.innerText=\"Drag or click the blocks below to form your code:\",a.classList.add(\"hparsons-tip\"),this.el.append(a),this._dragArea=document.createElement(\"div\"),this.el.appendChild(this._dragArea),this._dragArea.classList.add(\"drag-area\");const r=document.createElement(\"div\");r.innerText=\"Your code (click on a block to remove it):\",r.classList.add(\"hparsons-tip\"),this.el.append(r),this._dropArea=document.createElement(\"div\"),this.el.appendChild(this._dropArea),this._dropArea.classList.add(\"drop-area\"),this._prevPosition=-1,this.storedSourceBlocks=[],this.blockOrder=[],this.storedSourceBlockExplanations=null,this.reusable=t,this.randomize=n,this._dragSortable=null,this._dropSortable=null,this._initSortable(),this.initialized=!1}getText=e=>{let t=\"\";if(this._dropArea.hasChildNodes()){let n=this._dropArea.firstChild;for(t+=this._getTextFromBlock(n);n.nextSibling;)n=n.nextSibling,t+=e?\" \":\"\",t+=this._getTextFromBlock(n);return t}return t};_getTextFromBlock=e=>{if(\"raw\"==this.parentElement.language)return e.innerHTML;if(!e.lastChild||e.lastChild.nodeType!=Node.ELEMENT_NODE)return e.textContent||\"\";const t=e.lastChild.classList.contains(\"parsons-tooltip\")&&e.lastChild.textContent?.length||0;return t>0?(e.textContent||\"\").slice(0,-t):e.textContent||\"\"};shuffleArray(e){for(let t=e.length-1;t>0;t--){let n=Math.floor(Math.random()*(t+1)),a=e[t];e[t]=e[n],e[n]=a}}setSourceBlocks=(e,t)=>{this.blockOrder=[];for(let t=0;t{for(;this._dragArea.firstChild;)this._dragArea.removeChild(this._dragArea.firstChild);for(;this._dropArea.firstChild;)this._dropArea.removeChild(this._dropArea.firstChild);for(let e=0;e{this._onBlockClicked(n,e)},this.storedSourceBlockExplanations&&this.storedSourceBlockExplanations[this.blockOrder[e]]){const t=document.createElement(\"div\");t.innerText=this.storedSourceBlockExplanations[this.blockOrder[e]],t.classList.add(\"parsons-tooltip\"),n.appendChild(t)}}};_onBlockClicked=(e,t)=>{if(e.parentElement==this._dragArea){let a;if(this.reusable){const t=e.cloneNode(!0);t.onclick=e=>this._onBlockClicked(t,e),this._dropArea.appendChild(t),a=this._getBlockPosition(t)}else this._dropArea.appendChild(e),a=this._getBlockPosition(e);const r={type:\"input\",action:n.InputAction.ADD,position:[-1,a],answer:this._getTextArray()};t.isTrusted&&this.parentElement.logEvent(r)}else{const t=this._getBlockPosition(e);this.reusable?this._dropArea.removeChild(e):this._dragArea.appendChild(e);const a={type:\"input\",action:n.InputAction.REMOVE,position:[t,-1],answer:this._getTextArray()};this.parentElement.logEvent(a)}};_initSortable=()=>{this.reusable?(this._dragSortable=new e(this._dragArea,{group:{name:\"shared\",pull:\"clone\",put:!1},sort:!1,direction:\"horizontal\",animation:150,draggable:\".parsons-block\",onClone:e=>{const t=e.clone;t.onclick=e=>this._onBlockClicked(t,e)}}),this._dropSortable=new e(this._dropArea,{group:\"shared\",direction:\"horizontal\",animation:150,draggable:\".parsons-block\",onAdd:e=>{const t={type:\"input\",action:n.InputAction.ADD,position:[-1,this._getBlockPosition(e.item)],answer:this._getTextArray()};this.parentElement.logEvent(t)},onStart:e=>{this._prevPosition=this._getBlockPosition(e.item)},onEnd:e=>{let t,a=n.InputAction.MOVE;const r=this._dropArea.getBoundingClientRect().top,s=this._dropArea.getBoundingClientRect().bottom;if(e.originalEvent.clientY>s||e.originalEvent.clientY{const t={type:\"input\",action:n.InputAction.ADD,position:[-1,this._getBlockPosition(e.item)],answer:this._getTextArray()};this.parentElement.logEvent(t)},onStart:e=>{this._prevPosition=this._getBlockPosition(e.item)},onEnd:e=>{let t=this._getBlockPosition(e.item);const a={type:\"input\",action:-1==t?n.InputAction.REMOVE:n.InputAction.MOVE,position:[this._prevPosition,t],answer:this._getTextArray()};this.parentElement.logEvent(a)}}))};updateTestStatus=e=>{this._dropArea.classList.contains(e)||(this._dropArea.classList.contains(\"Pass\")?this._dropArea.classList.remove(\"Pass\"):this._dropArea.classList.contains(\"Fail\")?this._dropArea.classList.remove(\"Fail\"):this._dropArea.classList.contains(\"Error\")&&this._dropArea.classList.remove(\"Error\"),this._dropArea.classList.add(e))};_getBlockPosition=e=>{let t=-1;const n=this._dropArea;if(n)for(t=0;t{let e=[];if(this._dropArea.hasChildNodes()){let t=this._dropArea.firstChild;for(e.push(this._getTextFromBlock(t));t.nextSibling;)t=t.nextSibling,e.push(this._getTextFromBlock(t))}return e};removeFormat=()=>{if(this._dropArea.hasChildNodes()){let e=this._dropArea.firstChild;for(e.style.removeProperty(\"background-color\");e.nextSibling;)e=e.nextSibling,e.style.removeProperty(\"background-color\")}};resetInput=()=>{if(this.reusable)for(;this._dropArea.firstChild;)this._dropArea.removeChild(this._dropArea.firstChild);else this._resetInput()};restoreAnswer(e){this.resetInput();const t=/^\\s+$/;for(let n=0;n\",p=\"\",h={begin:/<[A-Za-z0-9\\\\._:-]+/,end:/\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,isTrulyOpeningTag:(e,t)=>{const n=e[0].length+e.index,a=e.input[n];if(\"<\"===a||\",\"===a)return void t.ignoreMatch();let r;\">\"===a&&(((e,{after:t})=>{const n=\"\",D={match:[/const|var|let/,/\\s+/,n,/\\s*/,/=\\s*/,/(async\\s*)?/,t.lookahead(R)],keywords:\"async\",className:{1:\"keyword\",3:\"title.function\"},contains:[C]};return{name:\"Javascript\",aliases:[\"js\",\"jsx\",\"mjs\",\"cjs\"],keywords:u,exports:{PARAMS_CONTAINS:w,CLASS_REFERENCE:O},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:\"shebang\",binary:\"node\",relevance:5}),{label:\"use_strict\",className:\"meta\",relevance:10,begin:/^\\s*['\"]use (strict|asm)['\"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,v,E,A,k,{match:/\\$\\d+/},f,O,{className:\"attr\",begin:n+t.lookahead(\":\"),relevance:0},D,{begin:\"(\"+e.RE_STARTERS_RE+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",keywords:\"return throw case\",relevance:0,contains:[k,e.REGEXP_MODE,{className:\"function\",begin:R,returnBegin:!0,end:\"\\\\s*=>\",contains:[{className:\"params\",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\\(\\s*\\)/,skip:!0},{begin:/\\(/,end:/\\)/,excludeBegin:!0,excludeEnd:!0,keywords:u,contains:w}]}]},{begin:/,/,relevance:0},{match:/\\s+/,relevance:0},{variants:[{begin:a,end:p},{match:/<[A-Za-z0-9\\\\._:-]+\\s*\\/>/},{begin:h.begin,\"on:begin\":h.isTrulyOpeningTag,end:h.end}],subLanguage:\"xml\",contains:[{begin:h.begin,end:h.end,skip:!0,contains:[\"self\"]}]}]},T,{beginKeywords:\"while if switch catch for\"},{begin:\"\\\\b(?!function)\"+e.UNDERSCORE_IDENT_RE+\"\\\\([^()]*(\\\\([^()]*(\\\\([^()]*\\\\)[^()]*)*\\\\)[^()]*)*\\\\)\\\\s*\\\\{\",returnBegin:!0,label:\"func.def\",contains:[C,e.inherit(e.TITLE_MODE,{begin:n,className:\"title.function\"})]},{match:/\\.\\.\\./,relevance:0},L,{match:\"\\\\$\"+n,relevance:0},{match:[/\\bconstructor(?=\\s*\\()/],className:{1:\"title.function\"},contains:[C]},B,{relevance:0,match:/\\b[A-Z][A-Z_0-9]+\\b/,className:\"variable.constant\"},S,I,{match:/\\$[(.]/}]}};var h=function(e){const t=e.regex,n=/[\\p{XID_Start}_]\\p{XID_Continue}*/u,a=[\"and\",\"as\",\"assert\",\"async\",\"await\",\"break\",\"case\",\"class\",\"continue\",\"def\",\"del\",\"elif\",\"else\",\"except\",\"finally\",\"for\",\"from\",\"global\",\"if\",\"import\",\"in\",\"is\",\"lambda\",\"match\",\"nonlocal|10\",\"not\",\"or\",\"pass\",\"raise\",\"return\",\"try\",\"while\",\"with\",\"yield\"],r={$pattern:/[A-Za-z]\\w+|__\\w+__/,keyword:a,built_in:[\"__import__\",\"abs\",\"all\",\"any\",\"ascii\",\"bin\",\"bool\",\"breakpoint\",\"bytearray\",\"bytes\",\"callable\",\"chr\",\"classmethod\",\"compile\",\"complex\",\"delattr\",\"dict\",\"dir\",\"divmod\",\"enumerate\",\"eval\",\"exec\",\"filter\",\"float\",\"format\",\"frozenset\",\"getattr\",\"globals\",\"hasattr\",\"hash\",\"help\",\"hex\",\"id\",\"input\",\"int\",\"isinstance\",\"issubclass\",\"iter\",\"len\",\"list\",\"locals\",\"map\",\"max\",\"memoryview\",\"min\",\"next\",\"object\",\"oct\",\"open\",\"ord\",\"pow\",\"print\",\"property\",\"range\",\"repr\",\"reversed\",\"round\",\"set\",\"setattr\",\"slice\",\"sorted\",\"staticmethod\",\"str\",\"sum\",\"super\",\"tuple\",\"type\",\"vars\",\"zip\"],literal:[\"__debug__\",\"Ellipsis\",\"False\",\"None\",\"NotImplemented\",\"True\"],type:[\"Any\",\"Callable\",\"Coroutine\",\"Dict\",\"List\",\"Literal\",\"Generic\",\"Optional\",\"Sequence\",\"Set\",\"Tuple\",\"Type\",\"Union\"]},s={className:\"meta\",begin:/^(>>>|\\.\\.\\.) /},i={className:\"subst\",begin:/\\{/,end:/\\}/,keywords:r,illegal:/#/},o={begin:/\\{\\{/,relevance:0},l={className:\"string\",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,s],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,end:/\"\"\"/,contains:[e.BACKSLASH_ESCAPE,s],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,s,o,i]},{begin:/([fF][rR]|[rR][fF]|[fF])\"\"\"/,end:/\"\"\"/,contains:[e.BACKSLASH_ESCAPE,s,o,i]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])\"/,end:/\"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])\"/,end:/\"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,o,i]},{begin:/([fF][rR]|[rR][fF]|[fF])\"/,end:/\"/,contains:[e.BACKSLASH_ESCAPE,o,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},c=\"[0-9](_?[0-9])*\",d=`(\\\\b(${c}))?\\\\.(${c})|\\\\b(${c})\\\\.`,g=`\\\\b|${a.join(\"|\")}`,p={className:\"number\",relevance:0,variants:[{begin:`(\\\\b(${c})|(${d}))[eE][+-]?(${c})[jJ]?(?=${g})`},{begin:`(${d})[jJ]?`},{begin:`\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})`},{begin:`\\\\b0[bB](_?[01])+[lL]?(?=${g})`},{begin:`\\\\b0[oO](_?[0-7])+[lL]?(?=${g})`},{begin:`\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})`},{begin:`\\\\b(${c})[jJ](?=${g})`}]},h={className:\"comment\",begin:t.lookahead(/# type:/),end:/$/,keywords:r,contains:[{begin:/# type:/},{begin:/#/,end:/\\b\\B/,endsWithParent:!0}]},u={className:\"params\",variants:[{className:\"\",begin:/\\(\\s*\\)/,skip:!0},{begin:/\\(/,end:/\\)/,excludeBegin:!0,excludeEnd:!0,keywords:r,contains:[\"self\",s,p,l,e.HASH_COMMENT_MODE]}]};return i.contains=[l,p,s],{name:\"Python\",aliases:[\"py\",\"gyp\",\"ipython\"],unicodeRegex:!0,keywords:r,illegal:/(<\\/|->|\\?)|=>/,contains:[s,p,{begin:/\\bself\\b/},{beginKeywords:\"if\",relevance:0},l,h,e.HASH_COMMENT_MODE,{match:[/\\bdef/,/\\s+/,n],scope:{1:\"keyword\",3:\"title.function\"},contains:[u]},{variants:[{match:[/\\bclass/,/\\s+/,n,/\\s*/,/\\(\\s*/,n,/\\s*\\)/]},{match:[/\\bclass/,/\\s+/,n]}],scope:{1:\"keyword\",3:\"title.class\",6:\"title.class.inherited\"}},{className:\"meta\",begin:/^[\\t ]*@/,end:/(?=#)|$/,contains:[p,u,l]}]}},u=\"[0-9](_*[0-9])*\",b=`\\\\.(${u})`,m=\"[0-9a-fA-F](_*[0-9a-fA-F])*\",_={className:\"number\",variants:[{begin:`(\\\\b(${u})((${b})|\\\\.)?|(${b}))[eE][+-]?(${u})[fFdD]?\\\\b`},{begin:`\\\\b(${u})((${b})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)`},{begin:`(${b})[fFdD]?\\\\b`},{begin:`\\\\b(${u})[fFdD]\\\\b`},{begin:`\\\\b0[xX]((${m})\\\\.?|(${m})?\\\\.(${m}))[pP][+-]?(${u})[fFdD]?\\\\b`},{begin:\"\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b\"},{begin:`\\\\b0[xX](${m})[lL]?\\\\b`},{begin:\"\\\\b0(_*[0-7])*[lL]?\\\\b\"},{begin:\"\\\\b0[bB][01](_*[01])*[lL]?\\\\b\"}],relevance:0};function f(e,t,n){return-1===n?\"\":e.replace(t,(a=>f(e,t,n-1)))}var y=function(e){const t=e.regex,n=\"[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*\",a=n+f(\"(?:<\"+n+\"~~~(?:\\\\s*,\\\\s*\"+n+\"~~~)*>)?\",/~~~/g,2),r={keyword:[\"synchronized\",\"abstract\",\"private\",\"var\",\"static\",\"if\",\"const \",\"for\",\"while\",\"strictfp\",\"finally\",\"protected\",\"import\",\"native\",\"final\",\"void\",\"enum\",\"else\",\"break\",\"transient\",\"catch\",\"instanceof\",\"volatile\",\"case\",\"assert\",\"package\",\"default\",\"public\",\"try\",\"switch\",\"continue\",\"throws\",\"protected\",\"public\",\"private\",\"module\",\"requires\",\"exports\",\"do\",\"sealed\",\"yield\",\"permits\"],literal:[\"false\",\"true\",\"null\"],type:[\"char\",\"boolean\",\"long\",\"float\",\"int\",\"byte\",\"short\",\"double\"],built_in:[\"super\",\"this\"]},s={className:\"meta\",begin:\"@\"+n,contains:[{begin:/\\(/,end:/\\)/,contains:[\"self\"]}]},i={className:\"params\",begin:/\\(/,end:/\\)/,keywords:r,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:\"Java\",aliases:[\"jsp\"],keywords:r,illegal:/<\\/|#/,contains:[e.COMMENT(\"/\\\\*\\\\*\",\"\\\\*/\",{relevance:0,contains:[{begin:/\\w+@/,relevance:0},{className:\"doctag\",begin:\"@[A-Za-z]+\"}]}),{begin:/import java\\.[a-z]+\\./,keywords:\"import\",relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/\"\"\"/,end:/\"\"\"/,className:\"string\",contains:[e.BACKSLASH_ESCAPE]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{match:[/\\b(?:class|interface|enum|extends|implements|new)/,/\\s+/,n],className:{1:\"keyword\",3:\"title.class\"}},{match:/non-sealed/,scope:\"keyword\"},{begin:[t.concat(/(?!else)/,n),/\\s+/,n,/\\s+/,/=(?!=)/],className:{1:\"type\",3:\"variable\",5:\"operator\"}},{begin:[/record/,/\\s+/,n],className:{1:\"keyword\",3:\"title.class\"},contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:\"new throw return else\",relevance:0},{begin:[\"(?:\"+a+\"\\\\s+)\",e.UNDERSCORE_IDENT_RE,/\\s*(?=\\()/],className:{2:\"title.function\"},keywords:r,contains:[{className:\"params\",begin:/\\(/,end:/\\)/,keywords:r,relevance:0,contains:[s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,_,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},_,s]}};var v=function(e){const t=e.regex,n=e.COMMENT(\"--\",\"$\"),a=[\"true\",\"false\",\"unknown\"],r=[\"bigint\",\"binary\",\"blob\",\"boolean\",\"char\",\"character\",\"clob\",\"date\",\"dec\",\"decfloat\",\"decimal\",\"float\",\"int\",\"integer\",\"interval\",\"nchar\",\"nclob\",\"national\",\"numeric\",\"real\",\"row\",\"smallint\",\"time\",\"timestamp\",\"varchar\",\"varying\",\"varbinary\"],s=[\"abs\",\"acos\",\"array_agg\",\"asin\",\"atan\",\"avg\",\"cast\",\"ceil\",\"ceiling\",\"coalesce\",\"corr\",\"cos\",\"cosh\",\"count\",\"covar_pop\",\"covar_samp\",\"cume_dist\",\"dense_rank\",\"deref\",\"element\",\"exp\",\"extract\",\"first_value\",\"floor\",\"json_array\",\"json_arrayagg\",\"json_exists\",\"json_object\",\"json_objectagg\",\"json_query\",\"json_table\",\"json_table_primitive\",\"json_value\",\"lag\",\"last_value\",\"lead\",\"listagg\",\"ln\",\"log\",\"log10\",\"lower\",\"max\",\"min\",\"mod\",\"nth_value\",\"ntile\",\"nullif\",\"percent_rank\",\"percentile_cont\",\"percentile_disc\",\"position\",\"position_regex\",\"power\",\"rank\",\"regr_avgx\",\"regr_avgy\",\"regr_count\",\"regr_intercept\",\"regr_r2\",\"regr_slope\",\"regr_sxx\",\"regr_sxy\",\"regr_syy\",\"row_number\",\"sin\",\"sinh\",\"sqrt\",\"stddev_pop\",\"stddev_samp\",\"substring\",\"substring_regex\",\"sum\",\"tan\",\"tanh\",\"translate\",\"translate_regex\",\"treat\",\"trim\",\"trim_array\",\"unnest\",\"upper\",\"value_of\",\"var_pop\",\"var_samp\",\"width_bucket\"],i=[\"create table\",\"insert into\",\"primary key\",\"foreign key\",\"not null\",\"alter table\",\"add constraint\",\"grouping sets\",\"on overflow\",\"character set\",\"respect nulls\",\"ignore nulls\",\"nulls first\",\"nulls last\",\"depth first\",\"breadth first\"],o=s,l=[\"abs\",\"acos\",\"all\",\"allocate\",\"alter\",\"and\",\"any\",\"are\",\"array\",\"array_agg\",\"array_max_cardinality\",\"as\",\"asensitive\",\"asin\",\"asymmetric\",\"at\",\"atan\",\"atomic\",\"authorization\",\"avg\",\"begin\",\"begin_frame\",\"begin_partition\",\"between\",\"bigint\",\"binary\",\"blob\",\"boolean\",\"both\",\"by\",\"call\",\"called\",\"cardinality\",\"cascaded\",\"case\",\"cast\",\"ceil\",\"ceiling\",\"char\",\"char_length\",\"character\",\"character_length\",\"check\",\"classifier\",\"clob\",\"close\",\"coalesce\",\"collate\",\"collect\",\"column\",\"commit\",\"condition\",\"connect\",\"constraint\",\"contains\",\"convert\",\"copy\",\"corr\",\"corresponding\",\"cos\",\"cosh\",\"count\",\"covar_pop\",\"covar_samp\",\"create\",\"cross\",\"cube\",\"cume_dist\",\"current\",\"current_catalog\",\"current_date\",\"current_default_transform_group\",\"current_path\",\"current_role\",\"current_row\",\"current_schema\",\"current_time\",\"current_timestamp\",\"current_path\",\"current_role\",\"current_transform_group_for_type\",\"current_user\",\"cursor\",\"cycle\",\"date\",\"day\",\"deallocate\",\"dec\",\"decimal\",\"decfloat\",\"declare\",\"default\",\"define\",\"delete\",\"dense_rank\",\"deref\",\"describe\",\"deterministic\",\"disconnect\",\"distinct\",\"double\",\"drop\",\"dynamic\",\"each\",\"element\",\"else\",\"empty\",\"end\",\"end_frame\",\"end_partition\",\"end-exec\",\"equals\",\"escape\",\"every\",\"except\",\"exec\",\"execute\",\"exists\",\"exp\",\"external\",\"extract\",\"false\",\"fetch\",\"filter\",\"first_value\",\"float\",\"floor\",\"for\",\"foreign\",\"frame_row\",\"free\",\"from\",\"full\",\"function\",\"fusion\",\"get\",\"global\",\"grant\",\"group\",\"grouping\",\"groups\",\"having\",\"hold\",\"hour\",\"identity\",\"in\",\"indicator\",\"initial\",\"inner\",\"inout\",\"insensitive\",\"insert\",\"int\",\"integer\",\"intersect\",\"intersection\",\"interval\",\"into\",\"is\",\"join\",\"json_array\",\"json_arrayagg\",\"json_exists\",\"json_object\",\"json_objectagg\",\"json_query\",\"json_table\",\"json_table_primitive\",\"json_value\",\"lag\",\"language\",\"large\",\"last_value\",\"lateral\",\"lead\",\"leading\",\"left\",\"like\",\"like_regex\",\"listagg\",\"ln\",\"local\",\"localtime\",\"localtimestamp\",\"log\",\"log10\",\"lower\",\"match\",\"match_number\",\"match_recognize\",\"matches\",\"max\",\"member\",\"merge\",\"method\",\"min\",\"minute\",\"mod\",\"modifies\",\"module\",\"month\",\"multiset\",\"national\",\"natural\",\"nchar\",\"nclob\",\"new\",\"no\",\"none\",\"normalize\",\"not\",\"nth_value\",\"ntile\",\"null\",\"nullif\",\"numeric\",\"octet_length\",\"occurrences_regex\",\"of\",\"offset\",\"old\",\"omit\",\"on\",\"one\",\"only\",\"open\",\"or\",\"order\",\"out\",\"outer\",\"over\",\"overlaps\",\"overlay\",\"parameter\",\"partition\",\"pattern\",\"per\",\"percent\",\"percent_rank\",\"percentile_cont\",\"percentile_disc\",\"period\",\"portion\",\"position\",\"position_regex\",\"power\",\"precedes\",\"precision\",\"prepare\",\"primary\",\"procedure\",\"ptf\",\"range\",\"rank\",\"reads\",\"real\",\"recursive\",\"ref\",\"references\",\"referencing\",\"regr_avgx\",\"regr_avgy\",\"regr_count\",\"regr_intercept\",\"regr_r2\",\"regr_slope\",\"regr_sxx\",\"regr_sxy\",\"regr_syy\",\"release\",\"result\",\"return\",\"returns\",\"revoke\",\"right\",\"rollback\",\"rollup\",\"row\",\"row_number\",\"rows\",\"running\",\"savepoint\",\"scope\",\"scroll\",\"search\",\"second\",\"seek\",\"select\",\"sensitive\",\"session_user\",\"set\",\"show\",\"similar\",\"sin\",\"sinh\",\"skip\",\"smallint\",\"some\",\"specific\",\"specifictype\",\"sql\",\"sqlexception\",\"sqlstate\",\"sqlwarning\",\"sqrt\",\"start\",\"static\",\"stddev_pop\",\"stddev_samp\",\"submultiset\",\"subset\",\"substring\",\"substring_regex\",\"succeeds\",\"sum\",\"symmetric\",\"system\",\"system_time\",\"system_user\",\"table\",\"tablesample\",\"tan\",\"tanh\",\"then\",\"time\",\"timestamp\",\"timezone_hour\",\"timezone_minute\",\"to\",\"trailing\",\"translate\",\"translate_regex\",\"translation\",\"treat\",\"trigger\",\"trim\",\"trim_array\",\"true\",\"truncate\",\"uescape\",\"union\",\"unique\",\"unknown\",\"unnest\",\"update\",\"upper\",\"user\",\"using\",\"value\",\"values\",\"value_of\",\"var_pop\",\"var_samp\",\"varbinary\",\"varchar\",\"varying\",\"versioning\",\"when\",\"whenever\",\"where\",\"width_bucket\",\"window\",\"with\",\"within\",\"without\",\"year\",\"add\",\"asc\",\"collation\",\"desc\",\"final\",\"first\",\"last\",\"view\"].filter((e=>!s.includes(e))),c={begin:t.concat(/\\b/,t.either(...o),/\\s*\\(/),relevance:0,keywords:{built_in:o}};return{name:\"SQL\",case_insensitive:!0,illegal:/[{}]|<\\//,keywords:{$pattern:/\\b[\\w\\.]+/,keyword:function(e,{exceptions:t,when:n}={}){const a=n;return t=t||[],e.map((e=>e.match(/\\|\\d+$/)||t.includes(e)?e:a(e)?`${e}|0`:e))}(l,{when:e=>e.length<3}),literal:a,type:r,built_in:[\"current_catalog\",\"current_date\",\"current_default_transform_group\",\"current_path\",\"current_role\",\"current_schema\",\"current_transform_group_for_type\",\"current_user\",\"session_user\",\"system_time\",\"system_user\",\"current_time\",\"localtime\",\"current_timestamp\",\"localtimestamp\"]},contains:[{begin:t.either(...i),relevance:0,keywords:{$pattern:/[\\w\\.]+/,keyword:l.concat(i),literal:a,type:r}},{className:\"type\",begin:t.either(\"double precision\",\"large object\",\"with timezone\",\"without timezone\")},c,{className:\"variable\",begin:/@[a-z0-9]+/},{className:\"string\",variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/\"/,end:/\"/,contains:[{begin:/\"\"/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:\"operator\",begin:/[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}};var E=function(e){const t=e.regex,n=t.concat(/[\\p{L}_]/u,t.optional(/[\\p{L}0-9_.-]*:/u),/[\\p{L}0-9_.-]*/u),a={className:\"symbol\",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},r={begin:/\\s/,contains:[{className:\"keyword\",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\\n/}]},s=e.inherit(r,{begin:/\\(/,end:/\\)/}),i=e.inherit(e.APOS_STRING_MODE,{className:\"string\"}),o=e.inherit(e.QUOTE_STRING_MODE,{className:\"string\"}),l={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:\"HTML, XML\",aliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xjb\",\"xsd\",\"xsl\",\"plist\",\"wsf\",\"svg\"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:\"meta\",begin://,relevance:10,contains:[r,o,i,s,{begin:/\\[/,end:/\\]/,contains:[{className:\"meta\",begin://,contains:[r,s,o,i]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},a,{className:\"meta\",end:/\\?>/,variants:[{begin:/<\\?xml/,relevance:10,contains:[o]},{begin:/<\\?[a-z][a-z0-9]+/}]},{className:\"tag\",begin:/)/,end:/>/,keywords:{name:\"style\"},contains:[l],starts:{end:/<\\/style>/,returnEnd:!0,subLanguage:[\"css\",\"xml\"]}},{className:\"tag\",begin:/)/,end:/>/,keywords:{name:\"script\"},contains:[l],starts:{end:/<\\/script>/,returnEnd:!0,subLanguage:[\"javascript\",\"handlebars\",\"xml\"]}},{className:\"tag\",begin:/<>|<\\/>/},{className:\"tag\",begin:t.concat(//,/>/,/\\s/)))),end:/\\/?>/,contains:[{className:\"name\",begin:n,relevance:0,starts:l}]},{className:\"tag\",begin:t.concat(/<\\//,t.lookahead(t.concat(n,/>/))),contains:[{className:\"name\",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}};t.registerLanguage(\"javascript\",p),t.registerLanguage(\"sql\",v),t.registerLanguage(\"java\",y),t.registerLanguage(\"xml\",E),t.registerLanguage(\"python\",h);class A extends HTMLElement{root;_parsonsData;parsonsExplanation;hparsonsInput;inputType;static toolCount=0;toolNumber;temporaryInputEvent;language;hljsLanguage;codeBefore;codeAfter;constructor(){super(),A.toolCount+=1,this.toolNumber=A.toolCount,this.root=this;const e=!!this.getAttribute(\"reuse\"),t=!!this.getAttribute(\"randomize\");this.hparsonsInput=new a(this,e,t),this._parsonsData=new Array,this.parsonsExplanation=null,this.inputType=\"parsons\",this.language=this.getAttribute(\"language\")||\"none\";let n=new Map(Object.entries({html:\"xml\",python:\"python\",javascript:\"javascript\",java:\"java\",sql:\"sql\"}));this.hljsLanguage=n.get(this.language),this.initInput(),this.temporaryInputEvent=null,this.codeBefore=null,this.codeAfter=null}set parsonsData(e){this._parsonsData=e,\"parsons\"==this.inputType&&this.hparsonsInput.setSourceBlocks(e,this.parsonsExplanation)}get parsonsData(){return this._parsonsData}logEvent=e=>{const t=new CustomEvent(\"micro-parsons\",{bubbles:!0,detail:{...e}});this.dispatchEvent(t)};initInput(){this.inputType=\"parsons\",this._parsonsData=new Array,this.parsonsExplanation=null;const e=null!=this.getAttribute(\"reuse\"),t=null!=this.getAttribute(\"randomize\");this.hparsonsInput=new a(this,e,t),this.root.appendChild(this.hparsonsInput.el)}resetInput(){this.hparsonsInput.resetInput();this.logEvent({type:\"reset\"})}restoreAnswer(e){this.hparsonsInput.restoreAnswer(e)}getCurrentInput(e){return this.hparsonsInput.getText(e)}getParsonsTextArray(){return this.hparsonsInput._getTextArray()}setCodeContext(e){if(e.before){let n;this.codeBefore=e.before,this.querySelector(\".context.before\")?n=this.querySelector(\".context.before\"):(n=document.createElement(\"pre\"),n.className=\"context before\",this.querySelector(\".hparsons-input\").insertBefore(n,this.querySelector(\".drop-area\"))),n.innerHTML=this.codeBefore,this.hljsLanguage&&(n.className=\"context before\",n.classList.add(this.hljsLanguage),t.highlightElement(n))}if(e.after){let n;this.codeAfter=e.after,this.querySelector(\".context.after\")?n=this.querySelector(\".context.after\"):(n=document.createElement(\"pre\"),n.className=\"context after\",this.querySelector(\".hparsons-input\").appendChild(n)),n.innerHTML=this.codeAfter,this.hljsLanguage&&(n.className=\"context after\",n.classList.add(this.hljsLanguage),t.highlightElement(n))}}}const k=e=>{let t;try{t=document.querySelector(e.selector)}catch{throw\"micro-parsons: init: selector error\"}if(null==t||\"DIV\"!=t.tagName)throw\"micro-parsons: element not a div\";const n=-1==[\"javascript\",\"sql\",\"java\",\"html\",\"python\",\"raw\"].indexOf(e.language||\"\")?\"\":`language='${e.language}'`,a=e.id?`id='${e.id}'`:\"\",r=``;t.innerHTML=r;const s=t.firstChild;s.parsonsExplanation=e.parsonsTooltips,s.parsonsData=e.parsonsBlocks,e.context&&s.setCodeContext(e.context)};customElements.define(\"micro-parsons\",A);export{k as InitMicroParsons,A as MicroParsonsElement};\n//# sourceMappingURL=micro-parsons.js.map\n"],"names":["deepFreezeEs6","exports","deepFreeze","obj","Map","clear","delete","set","Error","Set","add","Object","freeze","getOwnPropertyNames","forEach","name","prop","isFrozen","default","Response","constructor","mode","undefined","data","this","isMatchIgnored","ignoreMatch","escapeHTML","value","replace","inherit$1","original","objects","result","create","key","emitsWrappingTags","node","scope","sublanguage","language","HTMLRenderer","parseTree","options","buffer","classPrefix","walk","addText","text","openNode","className","prefix","includes","pieces","split","shift","map","x","i","repeat","join","scopeToCSSClass","span","closeNode","newNode","opts","children","assign","TokenTree","rootNode","stack","top","length","root","push","pop","closeAllNodes","toJSON","JSON","stringify","builder","_walk","child","_collapse","every","el","TokenTreeEmitter","super","addKeyword","addSublanguage","emitter","toHTML","finalize","source","re","lookahead","concat","anyNumberOfTimes","optional","args","either","splice","stripOptionsFromArgs","capture","countMatchGroups","RegExp","toString","exec","BACKREF_RE","_rewriteBackreferences","regexps","joinWith","numCaptures","regex","offset","out","match","substring","index","String","Number","IDENT_RE","UNDERSCORE_IDENT_RE","NUMBER_RE","C_NUMBER_RE","BINARY_NUMBER_RE","BACKSLASH_ESCAPE","begin","relevance","APOS_STRING_MODE","end","illegal","contains","QUOTE_STRING_MODE","COMMENT","modeOptions","excludeBegin","ENGLISH_WORD","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","NUMBER_MODE","C_NUMBER_MODE","BINARY_NUMBER_MODE","REGEXP_MODE","TITLE_MODE","UNDERSCORE_TITLE_MODE","METHOD_GUARD","MODES","__proto__","MATCH_NOTHING_RE","RE_STARTERS_RE","SHEBANG","beginShebang","binary","m","resp","PHRASAL_WORDS_MODE","END_SAME_AS_BEGIN","_beginMatch","skipIfHasPrecedingDot","response","input","scopeClassName","_parent","beginKeywords","parent","__beforeBegin","keywords","compileIllegal","Array","isArray","compileMatch","compileRelevance","beforeMatchExt","beforeMatch","starts","originalMode","keys","endsParent","COMMON_KEYWORDS","compileKeywords","rawKeywords","caseInsensitive","scopeName","compiledKeywords","compileList","keywordList","toLowerCase","keyword","pair","scoreForKeyword","providedScore","commonKeyword","seenDeprecations","error","message","console","warn","log","deprecated","version","MultiClassError","remapScopeNames","regexes","scopeNames","emit","positions","_emit","_multi","MultiClass","beginScope","scopeSugar","_wrap","endScope","skip","returnBegin","beginMultiClass","excludeEnd","returnEnd","endMultiClass","compileLanguage","langRe","global","case_insensitive","unicodeRegex","MultiRegex","matchIndexes","matchAt","position","addRule","compile","terminators","matcherRe","lastIndex","s","findIndex","matchData","ResumableMultiRegex","rules","multiRegexes","count","regexIndex","getMatcher","matcher","slice","resumingScanAtSamePosition","considerAll","type","m2","compilerExtensions","classNameAliases","compileMode","cmode","isCompiled","ext","keywordPattern","$pattern","keywordPatternRe","beginRe","endsWithParent","endRe","terminatorEnd","illegalRe","c","variants","cachedVariants","variant","dependencyOnParent","expandOrCloneMode","mm","term","rule","buildModeRegex","HTMLInjectionError","reason","html","escape","inherit","NO_MATCH","Symbol","highlight","hljs","languages","aliases","plugins","SAFE_MODE","LANGUAGE_NOT_FOUND","PLAINTEXT_LANGUAGE","disableAutodetect","ignoreUnescapedHTML","throwUnescapedHTML","noHighlightRe","languageDetectRe","cssSelector","__emitter","shouldNotHighlight","languageName","test","codeOrLanguageName","optionsOrCode","ignoreIllegals","code","context","fire","_highlight","codeToHighlight","continuation","keywordHits","processKeywords","modeBuffer","buf","word","matchText","kind","keywordRelevance","startsWith","cssClass","processBuffer","subLanguage","continuations","highlightAuto","_emitter","processSubLanguage","emitMultiClass","max","klass","startNewMode","endOfMode","matchPlusRemainder","matched","lexeme","doIgnore","resumeScanAtSamePosition","doEndMatch","endMode","origin","lastMatch","processLexeme","textBeforeMatch","err","badRule","newMode","beforeCallbacks","cb","doBeginMatch","processed","iterations","getLanguage","md","list","current","unshift","item","processContinuations","processedCount","_top","_illegalBy","resultSoFar","errorRaised","languageSubset","plaintext","justTextHighlightResult","results","filter","autoDetection","sorted","sort","a","b","supersetOf","best","secondBest","highlightElement","element","block","classes","parentNode","find","_class","blockLanguage","innerHTML","textContent","currentLang","resultLang","classList","updateClassName","wantsHighlight","highlightAll","document","readyState","querySelectorAll","registerAliases","aliasList","alias","lang","event","plugin","window","addEventListener","highlightBlock","configure","userOptions","initHighlighting","initHighlightingOnLoad","registerLanguage","languageDefinition","error$1","rawDefinition","bind","unregisterLanguage","listLanguages","addPlugin","upgradePluginAPI","debugMode","safeMode","versionString","HLJS","module","HighlightJS","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","apply","_objectSpread2","target","arguments","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","iterator","prototype","configurable","writable","_extends","hasOwnProperty","call","userAgent","pattern","navigator","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","passive","on","fn","off","removeEventListener","matches","selector","msMatchesSelector","webkitMatchesSelector","_","getParentOrHost","host","nodeType","closest","ctx","includeCTX","_throttleTimeout","R_SPACE","toggleClass","state","css","val","style","defaultView","getComputedStyle","currentStyle","indexOf","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","tagName","getElementsByTagName","n","getWindowScrollingElement","scrollingElement","documentElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","getBoundingClientRect","elRect","left","bottom","right","height","width","innerHeight","innerWidth","containerRect","parseInt","elMatrix","scaleX","scaleY","d","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","display","Sortable","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","nodeName","toUpperCase","clone","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","body","isRectEqual","rect1","rect2","Math","round","throttle","callback","ms","setTimeout","scrollBy","y","Polymer","$","jQuery","Zepto","dom","cloneNode","expando","Date","getTime","defaults","initializeByDefault","PluginManager","mount","option","p","pluginName","pluginEvent","eventName","sortable","evt","_this","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","_excluded","_ref","originalEvent","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_objectWithoutProperties","dragEl","parentEl","ghostEl","rootEl","nextEl","lastDownEl","cloneEl","cloneHidden","dragStarted","moved","putSortable","activeSortable","active","oldIndex","oldDraggableIndex","newIndex","newDraggableIndex","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","targetEl","toEl","fromEl","extraEventProperties","onName","charAt","substr","CustomEvent","createEvent","initEvent","bubbles","cancelable","to","from","pullMode","lastPutMode","allEventProperties","dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","createElement","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","touchingSideChild2","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","originalGroup","checkPull","checkPut","put","revertClone","preventDefault","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","nearest","touches","clientX","clientY","some","threshold","emptyInsertThreshold","rect","insideHorizontally","insideVertically","ret","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","animationCallbackId","animationStates","disabled","store","handle","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","animation","easing","setData","dataTransfer","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","get","captureAnimationState","fromRect","thisAnimationDuration","childMatrix","f","e","addAnimationState","removeAnimationState","arr","indexOfObject","animateAll","clearTimeout","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","pow","calculateRealTime","animate","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","offsetWidth","repaint","animated","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","str","src","href","sum","charCodeAt","_nextTick","_cancelNextTick","id","_getDirection","touch","pointerType","originalTarget","shadowRoot","path","composedPath","inputs","idx","checked","_saveInputCheckedState","button","isContentEditable","criteria","trim","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","floor","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","appendChild","removeAttribute","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","_ghostIsLast","changed","_ghostIsFirst","firstChild","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","removeChild","save","handleEvent","dropEffect","_globalDragOver","toArray","order","getAttribute","useAnimation","items","destroy","utils","is","extend","dst","nextTick","cancelNextTick","detectDirection","_len","_key","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","drop","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","_ref2","_ref3","_ref4","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","t","InputAction","ADD","MOVE","REMOVE","_dropArea","_dragArea","_dropSortable","_dragSortable","parentElement","_prevPosition","reusable","randomize","storedSourceBlocks","storedSourceBlockExplanations","blockOrder","hljsLanguage","toolNumber","innerText","append","r","_initSortable","getText","hasChildNodes","_getTextFromBlock","Node","ELEMENT_NODE","shuffleArray","random","setSourceBlocks","_resetInput","onclick","_onBlockClicked","_getBlockPosition","action","answer","_getTextArray","isTrusted","logEvent","onClone","onAdd","onStart","onEnd","updateTestStatus","remove","childNodes","removeFormat","removeProperty","resetInput","restoreAnswer","click","o","l","g","u","h","isTrulyOpeningTag","literal","built_in","v","E","A","k","N","w","C","S","O","T","label","B","M","L","I","R","D","PARAMS_CONTAINS","CLASS_REFERENCE","exceptions","when","HTMLElement","_parsonsData","parsonsExplanation","hparsonsInput","inputType","static","temporaryInputEvent","codeBefore","codeAfter","toolCount","entries","python","javascript","java","sql","initInput","parsonsData","detail","getCurrentInput","getParsonsTextArray","setCodeContext","before","querySelector","reuse","parsonsTooltips","parsonsBlocks","customElements","define"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/669.05a3639d12541567.js.map.gz b/_static/669.05a3639d12541567.js.map.gz new file mode 100644 index 0000000..9d5ed7f Binary files /dev/null and b/_static/669.05a3639d12541567.js.map.gz differ diff --git a/_static/680.ec85c3ce31480628.js b/_static/680.ec85c3ce31480628.js new file mode 100644 index 0000000..a3dae1e --- /dev/null +++ b/_static/680.ec85c3ce31480628.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[680],{84680:(e,t,s)=>{s.r(t);var r=s(78673);window.wwList={};class o extends r.A{constructor(e){super(e),this.useRunestoneServices=!0,this.multipleanswers=!1,this.divid=e.orig.id,this.correct=null,this.optional=!1,this.answerList=[],this.correctList=[],this.question=null,this.caption="WebWork",this.containerDiv=e.orig,this.answers={},this.percent=0,"fakeww-ww-rs"!==this.divid&&this.checkServer("webwork",!0),window.wwList[this.divid]=this}restoreAnswers(e){e.answer||(e.answer=""),this.answers=e.answer,this.correct=e.correct,this.percent=e.percent,console.log(`about to decorate the status of WW ${this.divid} ${this.correct}`),this.decorateStatus()}checkLocalStorage(){var e;if(!this.graderactive){localStorage.length;var t=localStorage.getItem(this.localStorageKey());if(null!==t)try{e=JSON.parse(t),this.answers=e.answer,this.correct=e.correct,this.percent=e.percent,this.decorateStatus()}catch(e){return console.log(e.message),void localStorage.removeItem(this.localStorageKey())}}}setLocalStorage(e){var t=new Date,s={answer:e.answer,timestamp:t,correct:e.correct};localStorage.setItem(this.localStorageKey(),JSON.stringify(s))}processCurrentAnswers(e){let t=0,s=0,r="check:";this.answerObj={},this.lastAnswerRaw=e,this.answerObj.answers={},this.answerObj.mqAnswers={};for(let o of Object.keys(e.rh_result.answers)){let n;s+=1,1==e.rh_result.answers[o].score&&(t+=1),n=!("ww_version"in e)||e.ww_version.includes("2.16")||e.ww_version.includes("2.17")||e.ww_version.includes("2.18")?["Value (parserRadioButtons)","Value (PopUp)","Value (CheckboxList)"].includes(e.rh_result.answers[o].type)?e.rh_result.answers[o].student_value:e.rh_result.answers[o].original_student_ans:e.inputs_ref[o],this.answerObj.answers[o]=n;let i=`MaThQuIlL_${o}`;this.answerObj.mqAnswers[i]=e.inputs_ref[i],r+=`actual:${n}:expected:${e.rh_result.answers[o].correct_value}:`}let o=t/s;this.percent=o,this.actString=r+`correct:${t}:count:${s}:pct:${o}`,this.correct=1==o;let n={};n.answer=this.answerObj,n.correct=this.correct,n.percent=this.percent,this.setLocalStorage(n),this.decorateStatus()}async logCurrentAnswer(e){this.logBookEvent({event:"webwork",div_id:this.divid,act:this.actString,correct:this.correct,answer:JSON.stringify(this.answerObj)})}checkCurrentAnswer(){}}function n(e,t){if(eBookConfig.useRunestoneServices){let e=wwList[t.inputs_ref.problemUUID.replace("-ww-rs","")];e?(e.processCurrentAnswers(t),e.logCurrentAnswer()):console.log(`Error: Could not find webwork object ${t.inputs_ref.problemUUID}`)}}function i(e,t){if(eBookConfig.useRunestoneServices){let e=wwList[t.inputs_ref.problemUUID.replace("-ww-rs","")];e?e.logBookEvent({event:"webwork",div_id:t.inputs_ref.problemUUID,act:"show"}):console.log(`Error: Could not find webwork object ${t.inputs_ref.problemUUID}`)}}void 0===window.component_factory&&(window.component_factory={}),window.component_factory.webwork=function(e){return new o(e)},$((function(){$("body").on("runestone_ww_check",n),$("body").on("runestone_show_correct",i)})),$(document).on("runestone:login-complete",(function(){$("[data-component=webwork]").each((function(e){var t={orig:this,useRunestoneServices:eBookConfig.useRunestoneServices};0==$(this).closest("[data-component=timedAssessment]").length&&(window.wwList[this.id]=new o(t))}))}))}}]); +//# sourceMappingURL=680.ec85c3ce31480628.js.map \ No newline at end of file diff --git a/_static/680.ec85c3ce31480628.js.gz b/_static/680.ec85c3ce31480628.js.gz new file mode 100644 index 0000000..e3d47da Binary files /dev/null and b/_static/680.ec85c3ce31480628.js.gz differ diff --git a/_static/680.ec85c3ce31480628.js.map b/_static/680.ec85c3ce31480628.js.map new file mode 100644 index 0000000..e6e2c66 --- /dev/null +++ b/_static/680.ec85c3ce31480628.js.map @@ -0,0 +1 @@ +{"version":3,"file":"680.ec85c3ce31480628.js","mappings":"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","sources":["webpack://WebComponents/./runestone/webwork/js/webwork.js"],"sourcesContent":["import RunestoneBase from \"../../common/js/runestonebase\";\n\nwindow.wwList = {}; // Multiple Choice dictionary\n\nclass WebWork extends RunestoneBase {\n constructor(opts) {\n super(opts);\n this.useRunestoneServices = true;\n this.multipleanswers = false;\n this.divid = opts.orig.id;\n this.correct = null;\n this.optional = false;\n this.answerList = [];\n this.correctList = [];\n this.question = null;\n this.caption = \"WebWork\";\n this.containerDiv = opts.orig;\n this.answers = {};\n this.percent = 0;\n //this.addCaption(\"runestone\");\n if (this.divid !== \"fakeww-ww-rs\") {\n this.checkServer(\"webwork\", true);\n }\n window.wwList[this.divid] = this;\n }\n\n restoreAnswers(data) {\n // Restore answers from storage retrieval done in RunestoneBase\n // sometimes data.answer can be null\n if (!data.answer) {\n data.answer = \"\";\n }\n // data.answers comes from postgresql as a JSON column type so no need to parse it.\n\n this.answers = data.answer;\n this.correct = data.correct;\n this.percent = data.percent;\n console.log(\n `about to decorate the status of WW ${this.divid} ${this.correct}`\n );\n this.decorateStatus();\n }\n\n checkLocalStorage() {\n // Repopulates MCMA questions with a user's previous answers,\n // which were stored into local storage.\n var storedData;\n var answers;\n if (this.graderactive) {\n return;\n }\n var len = localStorage.length;\n var ex = localStorage.getItem(this.localStorageKey());\n\n if (ex !== null) {\n try {\n storedData = JSON.parse(ex);\n // Save the answers so that when the question is activated we can restore.\n this.answers = storedData.answer;\n this.correct = storedData.correct;\n this.percent = storedData.percent;\n // We still decorate the webwork question even if it is not active.\n this.decorateStatus();\n } catch (err) {\n // error while parsing; likely due to bad value stored in storage\n console.log(err.message);\n localStorage.removeItem(this.localStorageKey());\n return;\n }\n }\n }\n\n setLocalStorage(data) {\n var timeStamp = new Date();\n var storageObj = {\n answer: data.answer,\n timestamp: timeStamp,\n correct: data.correct,\n };\n localStorage.setItem(\n this.localStorageKey(),\n JSON.stringify(storageObj)\n );\n }\n\n // This is called when the runestone_ww_check event is triggered by the webwork problem\n // Note the webwork problem is in an iframe so we rely on this event and the data\n // compiled and passed along with the event to \"grade\" the answer.\n processCurrentAnswers(data) {\n let correctCount = 0;\n let qCount = 0;\n let actString = \"check:\";\n this.answerObj = {};\n this.lastAnswerRaw = data;\n this.answerObj.answers = {};\n this.answerObj.mqAnswers = {};\n // data.inputs_\n for (let k of Object.keys(data.rh_result.answers)) {\n qCount += 1;\n if (data.rh_result.answers[k].score == 1) {\n correctCount += 1;\n }\n // mostly grab original_student_ans, but grab student_value for MC exercises\n let student_ans;\n if (\n !(\"ww_version\" in data) ||\n data.ww_version.includes(\"2.16\") ||\n data.ww_version.includes(\"2.17\") ||\n data.ww_version.includes(\"2.18\")\n ) {\n // Mostly grab original_student_ans, but grab student_value for MC exercises\n student_ans = [\n \"Value (parserRadioButtons)\",\n \"Value (PopUp)\",\n \"Value (CheckboxList)\",\n ].includes(data.rh_result.answers[k].type)\n ? data.rh_result.answers[k].student_value\n : data.rh_result.answers[k].original_student_ans;\n } else {\n // Literally get the input refs\n // data.inputs_ref[k] will usually be a string, the @value of the answer input field that was submitted\n // However in at least the case of checkboxes, data.inputs_ref[k] will be an array\n // So however this is ultimately stored in the Runestone database should respect ans preserve this as an array, not stringified\n student_ans = data.inputs_ref[k];\n }\n this.answerObj.answers[k] = student_ans;\n let mqKey = `MaThQuIlL_${k}`;\n this.answerObj.mqAnswers[mqKey] = data.inputs_ref[mqKey];\n actString += `actual:${student_ans}:expected:${data.rh_result.answers[k].correct_value}:`;\n }\n let pct = correctCount / qCount;\n // If this.percent is set, then runestonebase will transmit it as part of\n // the logBookEvent API.\n this.percent = pct;\n this.actString =\n actString + `correct:${correctCount}:count:${qCount}:pct:${pct}`;\n if (pct == 1.0) {\n this.correct = true;\n } else {\n this.correct = false;\n }\n let ls = {};\n ls.answer = this.answerObj;\n ls.correct = this.correct;\n ls.percent = this.percent;\n this.setLocalStorage(ls);\n this.decorateStatus();\n }\n\n async logCurrentAnswer(sid) {\n this.logBookEvent({\n event: \"webwork\",\n div_id: this.divid, //todo unmangle problemid\n act: this.actString,\n correct: this.correct,\n answer: JSON.stringify(this.answerObj),\n });\n }\n\n checkCurrentAnswer() {}\n}\n\n//\n// These are functions that get called in response to webwork generated events.\n// submitting the work, or showing an answer.\nfunction logWebWork(e, data) {\n if (eBookConfig.useRunestoneServices) {\n let wwObj = wwList[data.inputs_ref.problemUUID.replace(\"-ww-rs\", \"\")];\n if (wwObj) {\n wwObj.processCurrentAnswers(data);\n wwObj.logCurrentAnswer();\n } else {\n console.log(\n `Error: Could not find webwork object ${data.inputs_ref.problemUUID}`\n );\n }\n }\n}\n\nfunction logShowCorrect(e, data) {\n if (eBookConfig.useRunestoneServices) {\n let wwObj = wwList[data.inputs_ref.problemUUID.replace(\"-ww-rs\", \"\")];\n if (wwObj) {\n wwObj.logBookEvent({\n event: \"webwork\",\n div_id: data.inputs_ref.problemUUID,\n act: \"show\",\n });\n } else {\n console.log(\n `Error: Could not find webwork object ${data.inputs_ref.problemUUID}`\n );\n }\n }\n}\n\nasync function getScores(sid, wwId) {}\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\n\nwindow.component_factory.webwork = function (opts) {\n return new WebWork(opts);\n};\n\n$(function () {\n $(\"body\").on(\"runestone_ww_check\", logWebWork);\n $(\"body\").on(\"runestone_show_correct\", logShowCorrect);\n});\n\n$(document).on(\"runestone:login-complete\", function () {\n $(\"[data-component=webwork]\").each(function (index) {\n // MC\n var opts = {\n orig: this,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n };\n if ($(this).closest(\"[data-component=timedAssessment]\").length == 0) {\n // If this element exists within a timed component, don't render it here\n window.wwList[this.id] = new WebWork(opts);\n }\n });\n});\n"],"names":["window","wwList","WebWork","constructor","opts","super","this","useRunestoneServices","multipleanswers","divid","orig","id","correct","optional","answerList","correctList","question","caption","containerDiv","answers","percent","checkServer","restoreAnswers","data","answer","console","log","decorateStatus","checkLocalStorage","storedData","graderactive","localStorage","length","ex","getItem","localStorageKey","JSON","parse","err","message","removeItem","setLocalStorage","timeStamp","Date","storageObj","timestamp","setItem","stringify","processCurrentAnswers","correctCount","qCount","actString","answerObj","lastAnswerRaw","mqAnswers","k","Object","keys","rh_result","student_ans","score","ww_version","includes","type","student_value","original_student_ans","inputs_ref","mqKey","correct_value","pct","ls","logCurrentAnswer","sid","logBookEvent","event","div_id","act","checkCurrentAnswer","logWebWork","e","eBookConfig","wwObj","problemUUID","replace","logShowCorrect","component_factory","webwork","$","on","document","each","index","closest"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/680.ec85c3ce31480628.js.map.gz b/_static/680.ec85c3ce31480628.js.map.gz new file mode 100644 index 0000000..63a61b2 Binary files /dev/null and b/_static/680.ec85c3ce31480628.js.map.gz differ diff --git a/_static/759.f27ff66e7ad33076.js b/_static/759.f27ff66e7ad33076.js new file mode 100644 index 0000000..45de5ea --- /dev/null +++ b/_static/759.f27ff66e7ad33076.js @@ -0,0 +1,2 @@ +(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[759],{32552:()=>{$.i18n().load({en:{msg_dragndrop_correct_answer:"You are correct!",msg_dragndrop_incorrect_answer:"Incorrect. Of the cards you have sorted you placed $1 correctly and $2 incorrectly. You have $4 left to place.",msg_dragndrop_check_me:"Check me",msg_dragndrop_reset:"Reset"}})},56759:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>n});var r=i(78673);i(32552),i(81264);class s extends r.A{constructor(e){super(e);var t=e.orig;this.origElem=t,this.divid=t.id,this.useRunestoneServices=e.useRunestoneServices,this.random=!0,"no"===this.origElem.dataset.random&&(this.random=!1),this.feedback="",this.question="",this.populate(),this.createNewElements(),this.caption="Drag-N-Drop",this.addCaption("runestone"),"undefined"!=typeof Prism&&Prism.highlightAllUnder(this.containerDiv)}populate(){this.responseArray=[],this.premiseArray=[];let e=document.createElement("div");e.classList.add("ptx-runestone-container"),document.body.appendChild(e),console.log("Populating DragNDrop with premises and responses"),this.cards=this.origElem.querySelectorAll("[data-subcomponent='draggable']");for(let t of this.cards){let i=document.createElement("span");i.innerHTML=t.innerHTML,i.id=t.id,i.setAttribute("draggable","true"),i.classList.add("draggable-drag"),i.classList.add("premise"),i.tabIndex=0,i.setAttribute("role","button"),i.dataset.category=this.getCategory(t),i.dataset.parent_id=this.divid,this.premiseArray.push(i),this.setDragListeners(i);let r=document.createElement("div");r.classList.add("vh-dnd-error"),r.innerHTML="Incorrect drop zone for "+i.innerHTML,r.setAttribute("role","alert"),r.id=i.id+"_error",e.appendChild(r)}this.random&&(this.premiseArray=a(this.premiseArray));for(let e of this.origElem.querySelectorAll("[data-subcomponent='dropzone']")){let t=document.createElement("span");t.innerHTML=e.innerHTML,t.id=e.getAttribute("for").replace("drag","drop"),t.classList.add("draggable-drop","drop-label","response"),t.tabIndex=0,t.setAttribute("role","button"),t.dataset.category=this.getCategory(e),t.dataset.parent_id=this.divid,this.responseArray.push(t),this.setDropListeners(t)}this.question=this.origElem.querySelector("[data-subcomponent='question']").innerHTML;let t=this.origElem.querySelector("[data-subcomponent='feedback']");t&&(this.feedback=t.innerHTML)}getCategory(e){return e.dataset.category?e.dataset.category:e.hasAttribute("for")?e.getAttribute("for"):e.id}createNewElements(){this.containerDiv=document.createElement("div"),this.containerDiv.id=this.divid,this.containerDiv.classList.add("draggable-container"),this.statementDiv=document.createElement("div"),this.statementDiv.classList.add("cardsort-statement"),this.statementDiv.classList.add("exercise-statement");try{this.statementDiv.innerHTML=this.question}catch(e){console.error("Error setting statementDiv innerHTML:",e)}this.containerDiv.appendChild(this.statementDiv),this.dragDropWrapDiv=document.createElement("div"),this.dragDropWrapDiv.style.display="block",this.containerDiv.appendChild(this.dragDropWrapDiv),this.draggableDiv=document.createElement("div"),this.draggableDiv.classList.add("rsdraggable","dragzone"),this.addDragDivListeners(),this.dropZoneDiv=document.createElement("div"),this.dropZoneDiv.classList.add("rsdraggable"),this.dragDropWrapDiv.appendChild(this.draggableDiv),this.dragDropWrapDiv.appendChild(this.dropZoneDiv),this.createButtons(),this.checkServer("dragNdrop",!0),eBookConfig.practice_mode&&this.finishSettingUp(),self=this,this.ivp=this.isValidPremise.bind(this),self.queueMathJax(self.containerDiv)}finishSettingUp(){this.appendReplacementSpans(),this.createFeedbackDiv(),console.log("Replacing origElem with containerDiv"),this.origElem.parentNode.replaceChild(this.containerDiv,this.origElem),this.hasStoredDropzones||(this.minheight=this.draggableDiv.offsetHeight,this.queueMathJax(this.containerDiv).then((()=>{this.adjustDragDropWidths()}))),this.draggableDiv.style.minHeight=this.minheight.toString()+"px",this.dropZoneDiv.offsetHeight>this.minheight?this.dragDropWrapDiv.style.minHeight=this.dropZoneDiv.offsetHeight.toString()+"px":this.dragDropWrapDiv.style.minHeight=this.minheight.toString()+"px",this.draggableDiv.style.width=`${this.dragwidth}%`,this.dropZoneDiv.style.width=`${this.dropwidth}%`}addDragDivListeners(){let e=this;this.draggableDiv.addEventListener("dragover",function(e){e.preventDefault(),this.draggableDiv.classList.contains("possibleDrop")||this.draggableDiv.classList.add("possibleDrop")}.bind(this)),this.draggableDiv.addEventListener("drop",function(t){e.isAnswered=!0,t.preventDefault(),this.draggableDiv.classList.contains("possibleDrop")&&this.draggableDiv.classList.remove("possibleDrop");var i=t.dataTransfer.getData("draggableID"),r=document.getElementById(i);this.draggableDiv.contains(r)||this.strangerDanger(r)||(this.draggableDiv.appendChild(r),this.adjustDragDropWidths(),this.minheight=this.draggableDiv.offsetHeight,this.dragDropWrapDiv.style.minHeight=this.minheight.toString()+"px",this.logBookEvent({event:"dragNdrop-drop",div_id:this.divid,act:`${i} -> dragzone`}))}.bind(this)),this.draggableDiv.addEventListener("dragleave",function(e){this.draggableDiv.classList.contains("possibleDrop")&&this.draggableDiv.classList.remove("possibleDrop")}.bind(this))}createButtons(){this.buttonDiv=document.createElement("div"),this.buttonDiv.classList.add("dnd-button-container"),this.submitButton=document.createElement("button"),this.submitButton.textContent=$.i18n("msg_dragndrop_check_me"),this.submitButton.setAttribute("class","btn btn-success drag-button"),this.submitButton.setAttribute("name","do answer"),this.submitButton.setAttribute("type","button"),this.submitButton.onclick=function(){this.checkCurrentAnswer(),this.renderFeedback(),this.logCurrentAnswer()}.bind(this),this.resetButton=document.createElement("button"),this.resetButton.textContent=$.i18n("msg_dragndrop_reset"),this.resetButton.setAttribute("class","btn btn-default drag-button drag-reset"),this.resetButton.setAttribute("name","do answer"),this.resetButton.onclick=function(){this.resetDraggables()}.bind(this),this.buttonDiv.appendChild(this.submitButton),this.buttonDiv.appendChild(this.resetButton),this.containerDiv.appendChild(this.buttonDiv)}appendReplacementSpans(){if(void 0===this.answerState||0===Object.keys(this.answerState).length){this.answerState={};for(let e of this.premiseArray)this.draggableDiv.appendChild(e);for(let e of this.responseArray)this.dropZoneDiv.appendChild(e)}else{let e=[];for(let t of this.responseArray)if(this.dropZoneDiv.appendChild(t),this.answerState[t.id])for(let i of this.answerState[t.id]){e.push(i);let r=this.findPremise(i);r?t.appendChild(r):console.warn(`Premise with ID ${i} not found in premiseArray`)}for(let t of this.premiseArray)-1==e.indexOf(t.id)&&this.draggableDiv.appendChild(t)}}findPremise(e){for(let t of this.premiseArray)if(t.id==e)return t}countSavedPremises(){let e=0,t={};for(let i of this.answerState)if(i.length>0)for(let r of i)t[r]||(e++,t[r]=!0);return e}setDragListeners(e){let t=this;e.addEventListener("dragstart",(function(e){e.dataTransfer.setData("draggableID",e.target.id)})),e.addEventListener("dragover",(function(e){e.preventDefault()})),e.addEventListener("drop",function(e){t.isAnswered=!0,e.preventDefault();var i=e.dataTransfer.getData("draggableID"),r=document.getElementById(i);r==e.target||this.strangerDanger(r)||this.draggableDiv.appendChild(r)}.bind(this)),e.addEventListener("keydown",(function(i){"Enter"!==i.key&&" "!==i.key||(i.preventDefault(),t.selectedPremise?(t.selectedPremise.classList.remove("selected"),t.selectedPremise=null):(t.selectedPremise=e,e.classList.add("selected")))}))}setDropListeners(e){e.addEventListener("dragover",function(e){self.isAnswered=!0,e.preventDefault(),e.target.classList.contains("possibleDrop")||e.target.classList.contains("draggable-drop")&&e.target.classList.add("possibleDrop")}.bind(this)),e.addEventListener("dragleave",(function(e){self.isAnswered=!0,e.preventDefault(),e.target.classList.contains("possibleDrop")&&e.target.classList.remove("possibleDrop")})),e.addEventListener("drop",function(e){self.isAnswered=!0,e.preventDefault(),e.target.classList.contains("possibleDrop")&&e.target.classList.remove("possibleDrop");var t=e.dataTransfer.getData("draggableID"),i=document.getElementById(t);!e.target.classList.contains("draggable-drop")||this.strangerDanger(i)||this.premiseArray.includes(e.target)||(e.target.appendChild(i),this.logBookEvent({event:"dragNdrop-drop",div_id:this.divid,act:`${t} -> ${e.target.id}`})),this.queueMathJax(this.containerDiv).then((()=>{this.adjustDragDropWidths()}))}.bind(this)),e.addEventListener("keydown",(function(t){"Enter"!==t.key&&" "!==t.key||!self.selectedPremise||(t.preventDefault(),self.strangerDanger(self.selectedPremise)||self.premiseArray.includes(e)||(e.appendChild(self.selectedPremise),self.selectedPremise.classList.remove("selected"),self.selectedPremise=null,self.queueMathJax(self.containerDiv).then((()=>{self.adjustDragDropWidths()}))))}))}adjustDragDropWidths(){this.draggableDiv.style.width="fit-content";const e=this.draggableDiv.offsetWidth,t=this.dragDropWrapDiv.offsetWidth;let i=Math.ceil(e/t*100);i=Math.max(28,Math.min(i,48));const r=100-i-4;this.dragwidth=i,this.dropwidth=r,this.draggableDiv.style.width=`${i}%`,this.dropZoneDiv.style.width=`${r}%`}createFeedbackDiv(){this.feedBackDiv||(this.feedBackDiv=document.createElement("div"),this.feedBackDiv.id=this.divid+"_feedback",this.feedBackDiv.classList.add("exercise-content"),this.feedBackDiv.setAttribute("aria-live","polite"),this.feedBackDiv.setAttribute("role","status"),this.containerDiv.appendChild(this.feedBackDiv))}strangerDanger(e){return e.dataset.parent_id!=this.divid}resetDraggables(){this.dropZoneDiv.innerHTML="";for(let e of this.responseArray)e.classList.remove("drop-incorrect"),this.dropZoneDiv.appendChild(e);this.draggableDiv.innerHTML="",this.random&&(this.premiseArray=a(this.premiseArray));for(let e of this.premiseArray)this.draggableDiv.appendChild(e);this.answerState={},this.feedBackDiv.style.display="none",this.adjustDragDropWidths(),this.minheight=this.draggableDiv.offsetHeight,this.dragDropWrapDiv.style.minHeight=this.minheight.toString()+"px",this.feedBackDiv.style.visibility="hidden",this.logBookEvent({event:"dragNdrop-reset",div_id:this.divid,act:"reset"}),this.setLocalStorage({correct:"F"})}getAllCategories(){this.categories=[];for(let e of this.dropZoneDiv.childNodes)this.categories.push(e.dataset.category);return this.categories}checkCurrentAnswer(){let e=this.getAllCategories();this.correct=!0,this.unansweredNum=0,this.incorrectNum=0,this.correctNum=0,this.dragNum=this.premiseArray.length;for(let e of this.dropZoneDiv.childNodes)for(let t of Array.from(e.childNodes).filter(this.ivp))t.dataset.category==e.dataset.category?this.correctNum++:this.incorrectNum++;for(let t of Array.from(this.draggableDiv.childNodes).filter((e=>e.nodeType!==Node.TEXT_NODE)))-1==e.indexOf(t.dataset.category)?this.correctNum++:this.unansweredNum++;this.percent=this.correctNum/this.premiseArray.length,console.log(this.percent,this.incorrectNum,this.unansweredNum),this.percent<1&&(this.correct=!1),this.setLocalStorage({correct:this.correct?"T":"F"})}isCorrectDrop(e){let t=!0,i=0;for(let r of Array.from(e.childNodes).filter(this.ivp))r.dataset.category!=e.dataset.category?t=!1:i++;let r=0;for(let t of this.premiseArray)t.dataset.category==e.dataset.category&&r++;return t&&i==r}isValidPremise(e){return!!this.premiseArray.includes(e)}async logCurrentAnswer(e){let t=JSON.stringify(this.answerState),i={event:"dragNdrop",act:t,answer:t,min_height:Math.round(this.minheight),drag_width:this.dragwidth,drop_width:this.dropwidth,div_id:this.divid,correct:this.correct,correctNum:this.correctNum,dragNum:this.dragNum};void 0!==e&&(i.sid=e),await this.logBookEvent(i)}renderFeedback(){for(let e of this.dropZoneDiv.childNodes)for(let t of Array.from(e.childNodes).filter(this.ivp))t.dataset.category!=e.dataset.category?(t.classList.add("drop-incorrect"),t.setAttribute("aria-invalid","true"),t.setAttribute("aria-errormessage",t.id+"_error"),document.getElementById(t.id+"_error").classList.remove("vh-dnd-error")):(t.classList.remove("drop-incorrect"),t.setAttribute("aria-invalid","false"),t.removeAttribute("aria-errormessage"));if(this.feedBackDiv||this.createFeedbackDiv(),this.feedBackDiv.style.visibility="visible",this.correct){var e=$.i18n("msg_dragndrop_correct_answer");setTimeout((()=>{this.feedBackDiv.innerHTML=e}),10),this.feedBackDiv.className="alert alert-info draggable-feedback exercise-content"}else{var t=$.i18n($.i18n("msg_dragndrop_incorrect_answer"),this.correctNum,this.incorrectNum,this.dragNum,this.unansweredNum);setTimeout((()=>{this.feedBackDiv.innerHTML=`
          ${t}
          ${this.feedback}`}),10),this.feedBackDiv.className="alert alert-danger draggable-feedback exercise-content"}this.queueMathJax(this.feedBackDiv)}restoreAnswers(e){this.hasStoredDropzones=!0,this.minheight=e.min_height,this.dragwidth=e.drag_width,this.dropwidth=e.drop_width,this.answerState=JSON.parse(e.answer),this.correct=e.correct,this.finishSettingUp()}checkLocalStorage(){if(this.graderactive)this.finishSettingUp();else{var e;if(this.hasStoredDropzones=!1,localStorage.length>0){var t=localStorage.getItem(this.localStorageKey());if(null!==t){this.hasStoredDropzones=!0;try{e=JSON.parse(t),this.minheight=e.min_height,this.dragwidth=e.drag_width,this.dropwidth=e.drop_width}catch(e){return console.log(e.message),localStorage.removeItem(this.localStorageKey()),this.hasStoredDropzones=!1,void this.finishSettingUp()}if(this.answerState=e.answer,this.useRunestoneServices){let t=JSON.stringify(this.answerState);this.logBookEvent({event:"dragNdrop",act:t,answer:t,min_height:Math.round(this.minheight),drag_width:this.dragwidth,drop_width:this.dropwidth,div_id:this.divid,correct:e.correct})}}}this.finishSettingUp()}}setLocalStorage(e){if(void 0===e.answer){this.answerState={};for(let e of this.dropZoneDiv.childNodes){this.answerState[e.id]=[];for(let t of e.childNodes)t.nodeType!==Node.TEXT_NODE&&this.premiseArray.includes(t)&&this.answerState[e.id].push(t.id)}}var t=new Date,i=e.correct,r={answer:this.answerState,min_height:this.minheight,timestamp:t,correct:i,drag_width:this.dragwidth,drop_width:this.dropwidth};localStorage.setItem(this.localStorageKey(),JSON.stringify(r))}disableInteraction(){this.resetButton.style.display="none";for(var e=0;e0;t--){const i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}return e}document.addEventListener("runestone:login-complete",(function(){document.querySelectorAll("[data-component=dragndrop]").forEach((e=>{const t={orig:e,useRunestoneServices:eBookConfig.useRunestoneServices};if(!e.closest("[data-component=timedAssessment]"))try{window.componentMap[e.id]=new s(t)}catch(t){console.log(`Error rendering DragNDrop Problem ${e.id}: ${t}`)}}))}));class n extends s{constructor(e){super(e),this.finishSettingUp(),this.renderTimedIcon(this.containerDiv),this.hideButtons()}hideButtons(){$(this.submitButton).hide()}renderTimedIcon(e){var t=document.createElement("div"),i=document.createElement("img");$(i).attr({src:"../_static/clock.png",style:"width:15px;height:15px"}),t.className="timeTip",t.title="",t.appendChild(i),$(e).prepend(t)}checkCorrectTimed(){switch(this.unansweredNum===this.dragPairArray.length&&(this.correct=null),this.correct){case!0:return"T";case!1:return"F";default:return null}}hideFeedback(){$(this.feedBackDiv).hide()}}void 0===window.component_factory&&(window.component_factory={}),window.component_factory.dragndrop=function(e){return e.timed?new n(e):new s(e)}},81264:()=>{$.i18n().load({"pt-br":{msg_dragndrop_correct_answer:"Correto!",msg_dragndrop_incorrect_answer:"Incorreto. Você teve $1 correto(s) e $2 incorreto(s) de $3. Você deixou $4 em branco.",msg_dragndrop_check_me:"Verificar",msg_dragndrop_reset:"Resetar"}})}}]); +//# sourceMappingURL=759.f27ff66e7ad33076.js.map \ No newline at end of file diff --git a/_static/759.f27ff66e7ad33076.js.gz b/_static/759.f27ff66e7ad33076.js.gz new file mode 100644 index 0000000..dad874d Binary files /dev/null and b/_static/759.f27ff66e7ad33076.js.gz differ diff --git a/_static/759.f27ff66e7ad33076.js.map b/_static/759.f27ff66e7ad33076.js.map new file mode 100644 index 0000000..f9ad7e1 --- /dev/null +++ b/_static/759.f27ff66e7ad33076.js.map @@ -0,0 +1 @@ +{"version":3,"file":"759.f27ff66e7ad33076.js","mappings":"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","sources":["webpack://WebComponents/./runestone/dragndrop/js/dragndrop-i18n.en.js","webpack://WebComponents/./runestone/dragndrop/js/dragndrop.js","webpack://WebComponents/./runestone/dragndrop/js/timeddnd.js","webpack://WebComponents/./runestone/dragndrop/js/dragndrop-i18n.pt-br.js"],"sourcesContent":["$.i18n().load({\n en: {\n msg_dragndrop_correct_answer: \"You are correct!\",\n msg_dragndrop_incorrect_answer:\n \"Incorrect. Of the cards you have sorted you placed $1 correctly and $2 incorrectly. You have $4 left to place.\",\n msg_dragndrop_check_me: \"Check me\",\n msg_dragndrop_reset: \"Reset\",\n },\n});\n","/*==========================================\n======= Master dragndrop.js ========\n============================================\n=== This file contains the JS for ===\n=== the Runestone Drag n drop component. ===\n============================================\n=== Created by ===\n=== Isaiah Mayerchak ===\n=== 7/6/15 ===\n=== Brad MIller ===\n=== 2/7/19 ===\n=== 12/30/24 ===\n==========================================*/\n\n/*\n * Some terminology:\n * - draggable: the element that is being dragged\n * - dropzone: the element that is being dropped on\n * - premise: the element that is being dragged\n * - response: the element that is being dropped on\n * - category: each premis and response have a category. Several premises can have the same category\n * and be dropped onto the same response. If a premise has no response its category will not be in\n * the list of categories.\n *\n * Key variables:\n * - dragArray: an array of draggable elements\n * - dropArray: an array of dropzone elements\n * - categories: an array of all categories\n */\n\"use strict\";\n\nimport RunestoneBase from \"../../common/js/runestonebase.js\";\nimport \"../css/dragndrop.less\";\nimport \"./dragndrop-i18n.en.js\";\nimport \"./dragndrop-i18n.pt-br.js\";\n//import \"./DragDropTouch.js\";\n\nexport default class DragNDrop extends RunestoneBase {\n constructor(opts) {\n super(opts);\n var orig = opts.orig; // entire
            element that will be replaced by new HTML\n this.origElem = orig;\n this.divid = orig.id;\n this.useRunestoneServices = opts.useRunestoneServices;\n this.random = true;\n //check if the original element has a data-random attribute set to the value \"no\"\n if (this.origElem.dataset.random === \"no\") {\n this.random = false;\n }\n this.feedback = \"\";\n this.question = \"\";\n this.populate(); // Populates this.responseArray, this.premiseArray, this.feedback and this.question\n this.createNewElements();\n this.caption = \"Drag-N-Drop\";\n this.addCaption(\"runestone\");\n if (typeof Prism !== \"undefined\") {\n Prism.highlightAllUnder(this.containerDiv);\n }\n }\n\n /*======================\n === Update variables ===\n ======================*/\n populate() {\n this.responseArray = [];\n this.premiseArray = [];\n let invisibleErrorDiv = document.createElement(\"div\");\n invisibleErrorDiv.classList.add(\"ptx-runestone-container\");\n document.body.appendChild(invisibleErrorDiv);\n console.log(\"Populating DragNDrop with premises and responses\");\n this.cards = this.origElem.querySelectorAll(\n \"[data-subcomponent='draggable']\"\n );\n for (let element of this.cards) {\n let replaceSpan = document.createElement(\"span\");\n replaceSpan.innerHTML = element.innerHTML;\n replaceSpan.id = element.id;\n replaceSpan.setAttribute(\"draggable\", \"true\");\n replaceSpan.classList.add(\"draggable-drag\");\n replaceSpan.classList.add(\"premise\");\n replaceSpan.tabIndex = 0;\n replaceSpan.setAttribute('role', 'button');\n replaceSpan.dataset.category = this.getCategory(element);\n replaceSpan.dataset.parent_id = this.divid;\n this.premiseArray.push(replaceSpan);\n this.setDragListeners(replaceSpan);\n // now create an error message for when the premise is dropped in the wrong place\n let errorMessage = document.createElement(\"div\");\n errorMessage.classList.add(\"vh-dnd-error\");\n errorMessage.innerHTML = \"Incorrect drop zone for \" + replaceSpan.innerHTML;\n errorMessage.setAttribute(\"role\", \"alert\");\n errorMessage.id = replaceSpan.id + \"_error\";\n invisibleErrorDiv.appendChild(errorMessage);\n }\n if (this.random) {\n // Shuffle the premiseArray if random is true\n this.premiseArray = shuffleArray(this.premiseArray);\n }\n for (let element of this.origElem.querySelectorAll(\n \"[data-subcomponent='dropzone']\"\n )) {\n let replaceSpan = document.createElement(\"span\");\n replaceSpan.innerHTML = element.innerHTML;\n replaceSpan.id = element\n .getAttribute(\"for\")\n .replace(\"drag\", \"drop\");\n replaceSpan.classList.add(\n \"draggable-drop\",\n \"drop-label\",\n \"response\"\n );\n replaceSpan.tabIndex = 0;\n replaceSpan.setAttribute('role', 'button');\n replaceSpan.dataset.category = this.getCategory(element);\n replaceSpan.dataset.parent_id = this.divid;\n this.responseArray.push(replaceSpan);\n this.setDropListeners(replaceSpan);\n }\n\n this.question = this.origElem.querySelector(\n \"[data-subcomponent='question']\"\n ).innerHTML;\n let feedback = this.origElem.querySelector(\n \"[data-subcomponent='feedback']\"\n );\n if (feedback) {\n this.feedback = feedback.innerHTML;\n }\n }\n\n getCategory(elem) {\n if (elem.dataset.category) {\n return elem.dataset.category;\n } else {\n // if no category then use the for attribute or the id\n // this is for backwards compatibility\n if (elem.hasAttribute(\"for\")) {\n return elem.getAttribute(\"for\");\n } else {\n return elem.id;\n }\n }\n }\n /*========================================\n == Create new HTML elements and replace ==\n == original element with them ==\n ========================================*/\n createNewElements() {\n this.containerDiv = document.createElement(\"div\");\n this.containerDiv.id = this.divid;\n this.containerDiv.classList.add(\"draggable-container\");\n this.statementDiv = document.createElement(\"div\");\n this.statementDiv.classList.add(\"cardsort-statement\");\n this.statementDiv.classList.add(\"exercise-statement\");\n try {\n this.statementDiv.innerHTML = this.question;\n } catch (error) {\n console.error(\"Error setting statementDiv innerHTML:\", error);\n }\n this.containerDiv.appendChild(this.statementDiv);\n this.dragDropWrapDiv = document.createElement(\"div\"); // Holds the draggables/dropzones, prevents feedback from bleeding in\n this.dragDropWrapDiv.style.display = \"block\";\n this.containerDiv.appendChild(this.dragDropWrapDiv);\n this.draggableDiv = document.createElement(\"div\");\n this.draggableDiv.classList.add(\"rsdraggable\", \"dragzone\");\n this.addDragDivListeners();\n this.dropZoneDiv = document.createElement(\"div\");\n this.dropZoneDiv.classList.add(\"rsdraggable\");\n this.dragDropWrapDiv.appendChild(this.draggableDiv);\n this.dragDropWrapDiv.appendChild(this.dropZoneDiv);\n this.createButtons();\n this.checkServer(\"dragNdrop\", true);\n if (eBookConfig.practice_mode) {\n this.finishSettingUp();\n }\n self = this;\n this.ivp = this.isValidPremise.bind(this);\n self.queueMathJax(self.containerDiv);\n }\n\n finishSettingUp() {\n this.appendReplacementSpans();\n this.createFeedbackDiv();\n console.log(\"Replacing origElem with containerDiv\");\n this.origElem.parentNode.replaceChild(this.containerDiv, this.origElem);\n if (!this.hasStoredDropzones) {\n this.minheight = this.draggableDiv.offsetHeight;\n // Ensure MathJax has completed before adjusting the zone widths\n this.queueMathJax(this.containerDiv).then(() => {\n this.adjustDragDropWidths();\n });\n }\n this.draggableDiv.style.minHeight = this.minheight.toString() + \"px\";\n if (this.dropZoneDiv.offsetHeight > this.minheight) {\n this.dragDropWrapDiv.style.minHeight =\n this.dropZoneDiv.offsetHeight.toString() + \"px\";\n } else {\n this.dragDropWrapDiv.style.minHeight =\n this.minheight.toString() + \"px\";\n }\n this.draggableDiv.style.width = `${this.dragwidth}%`;\n this.dropZoneDiv.style.width = `${this.dropwidth}%`;\n }\n addDragDivListeners() {\n let self = this;\n this.draggableDiv.addEventListener(\n \"dragover\",\n function (ev) {\n ev.preventDefault();\n if (this.draggableDiv.classList.contains(\"possibleDrop\")) {\n return;\n }\n this.draggableDiv.classList.add(\"possibleDrop\");\n }.bind(this)\n );\n this.draggableDiv.addEventListener(\n \"drop\",\n function (ev) {\n self.isAnswered = true;\n ev.preventDefault();\n if (this.draggableDiv.classList.contains(\"possibleDrop\")) {\n this.draggableDiv.classList.remove(\"possibleDrop\");\n }\n var data = ev.dataTransfer.getData(\"draggableID\");\n var draggedSpan = document.getElementById(data);\n if (\n !this.draggableDiv.contains(draggedSpan) &&\n !this.strangerDanger(draggedSpan)\n ) {\n // Make sure element isn't already there--prevents erros w/appending child\n this.draggableDiv.appendChild(draggedSpan);\n this.adjustDragDropWidths();\n this.minheight = this.draggableDiv.offsetHeight;\n this.dragDropWrapDiv.style.minHeight =\n this.minheight.toString() + \"px\";\n this.logBookEvent({\n event: \"dragNdrop-drop\",\n div_id: this.divid,\n act: `${data} -> dragzone`,\n });\n }\n }.bind(this)\n );\n this.draggableDiv.addEventListener(\n \"dragleave\",\n function (e) {\n if (!this.draggableDiv.classList.contains(\"possibleDrop\")) {\n return;\n }\n this.draggableDiv.classList.remove(\"possibleDrop\");\n }.bind(this)\n );\n }\n createButtons() {\n this.buttonDiv = document.createElement(\"div\");\n this.buttonDiv.classList.add(\"dnd-button-container\");\n this.submitButton = document.createElement(\"button\"); // Check me button\n this.submitButton.textContent = $.i18n(\"msg_dragndrop_check_me\");\n this.submitButton.setAttribute(\"class\", \"btn btn-success drag-button\");\n this.submitButton.setAttribute(\"name\", \"do answer\");\n this.submitButton.setAttribute(\"type\", \"button\");\n this.submitButton.onclick = function () {\n this.checkCurrentAnswer();\n this.renderFeedback();\n this.logCurrentAnswer();\n }.bind(this);\n this.resetButton = document.createElement(\"button\"); // Check me button\n this.resetButton.textContent = $.i18n(\"msg_dragndrop_reset\");\n this.resetButton.setAttribute(\n \"class\",\n \"btn btn-default drag-button drag-reset\"\n );\n this.resetButton.setAttribute(\"name\", \"do answer\");\n this.resetButton.onclick = function () {\n this.resetDraggables();\n }.bind(this);\n this.buttonDiv.appendChild(this.submitButton);\n this.buttonDiv.appendChild(this.resetButton);\n this.containerDiv.appendChild(this.buttonDiv);\n }\n appendReplacementSpans() {\n if (\n this.answerState === undefined ||\n Object.keys(this.answerState).length === 0\n ) {\n this.answerState = {};\n for (let element of this.premiseArray) {\n this.draggableDiv.appendChild(element);\n }\n for (let element of this.responseArray) {\n this.dropZoneDiv.appendChild(element);\n }\n } else {\n let placedPremises = [];\n for (let response of this.responseArray) {\n this.dropZoneDiv.appendChild(response);\n if (this.answerState[response.id]) {\n for (let premise of this.answerState[response.id]) {\n placedPremises.push(premise);\n let foundPremise = this.findPremise(premise);\n if (foundPremise) {\n response.appendChild(foundPremise);\n } else {\n console.warn(\n `Premise with ID ${premise} not found in premiseArray`\n );\n }\n }\n }\n }\n for (let premise of this.premiseArray) {\n if (placedPremises.indexOf(premise.id) == -1) {\n this.draggableDiv.appendChild(premise);\n }\n }\n }\n }\n\n findPremise(id) {\n for (let premise of this.premiseArray) {\n if (premise.id == id) {\n return premise;\n }\n }\n }\n\n countSavedPremises() {\n // Count how many premises are saved in the answerState\n let count = 0;\n let names = {};\n for (let response of this.answerState) {\n if (response.length > 0) {\n for (let premise of response) {\n if (!names[premise]) {\n count++;\n names[premise] = true;\n }\n }\n }\n }\n return count;\n }\n\n setDragListeners(dgSpan) {\n let self = this;\n dgSpan.addEventListener(\"dragstart\", function (ev) {\n ev.dataTransfer.setData(\"draggableID\", ev.target.id);\n });\n dgSpan.addEventListener(\"dragover\", function (ev) {\n ev.preventDefault();\n });\n dgSpan.addEventListener(\n \"drop\",\n function (ev) {\n self.isAnswered = true;\n ev.preventDefault();\n var data = ev.dataTransfer.getData(\"draggableID\");\n var draggedSpan = document.getElementById(data);\n if (\n draggedSpan != ev.target &&\n !this.strangerDanger(draggedSpan)\n ) {\n // Make sure element isn't already there--prevents errors w/appending child\n this.draggableDiv.appendChild(draggedSpan);\n }\n }.bind(this)\n );\n\n // Add keyboard navigation for selecting premises\n dgSpan.addEventListener(\"keydown\", function (ev) {\n if (ev.key === \"Enter\" || ev.key === \" \") {\n ev.preventDefault();\n if (!self.selectedPremise) {\n self.selectedPremise = dgSpan;\n dgSpan.classList.add(\"selected\");\n } else {\n self.selectedPremise.classList.remove(\"selected\");\n self.selectedPremise = null;\n }\n }\n });\n }\n\n setDropListeners(dpSpan) {\n dpSpan.addEventListener(\n \"dragover\",\n function (ev) {\n self.isAnswered = true;\n ev.preventDefault();\n if (ev.target.classList.contains(\"possibleDrop\")) {\n return;\n }\n if (ev.target.classList.contains(\"draggable-drop\")) {\n ev.target.classList.add(\"possibleDrop\");\n }\n }.bind(this)\n );\n dpSpan.addEventListener(\"dragleave\", function (ev) {\n self.isAnswered = true;\n ev.preventDefault();\n if (!ev.target.classList.contains(\"possibleDrop\")) {\n return;\n }\n ev.target.classList.remove(\"possibleDrop\");\n });\n dpSpan.addEventListener(\n \"drop\",\n function (ev) {\n self.isAnswered = true;\n ev.preventDefault();\n if (ev.target.classList.contains(\"possibleDrop\")) {\n ev.target.classList.remove(\"possibleDrop\");\n }\n var data = ev.dataTransfer.getData(\"draggableID\");\n var draggedSpan = document.getElementById(data);\n if (\n ev.target.classList.contains(\"draggable-drop\") &&\n !this.strangerDanger(draggedSpan) &&\n !this.premiseArray.includes(ev.target) // don't drop on another premise!\n ) {\n // Make sure element isn't already there--prevents errors w/appending child\n ev.target.appendChild(draggedSpan);\n // log a drop event\n this.logBookEvent({\n event: \"dragNdrop-drop\",\n div_id: this.divid,\n act: `${data} -> ${ev.target.id}`,\n });\n }\n this.queueMathJax(this.containerDiv).then(() => {\n this.adjustDragDropWidths();\n });\n }.bind(this)\n );\n\n // Add keyboard navigation for dropping premises\n dpSpan.addEventListener(\"keydown\", function (ev) {\n if ((ev.key === \"Enter\" || ev.key === \" \") && self.selectedPremise) {\n ev.preventDefault();\n if (\n !self.strangerDanger(self.selectedPremise) &&\n !self.premiseArray.includes(dpSpan) // don't drop on another premise!\n ) {\n dpSpan.appendChild(self.selectedPremise);\n self.selectedPremise.classList.remove(\"selected\");\n self.selectedPremise = null;\n self.queueMathJax(self.containerDiv).then(() => {\n self.adjustDragDropWidths();\n });\n }\n }\n });\n }\n\n adjustDragDropWidths() {\n // Temporarily minimize the dragzone width to the content\n this.draggableDiv.style.width = \"fit-content\";\n\n const dragzoneWidth = this.draggableDiv.offsetWidth;\n const totalWidth = this.dragDropWrapDiv.offsetWidth;\n\n let dragzonePercent = Math.ceil((dragzoneWidth / totalWidth) * 100);\n dragzonePercent = Math.max(28, Math.min(dragzonePercent, 48));\n const dropzonePercent = 100 - dragzonePercent - 4; // 4 accounts for zone padding\n\n this.dragwidth = dragzonePercent;\n this.dropwidth = dropzonePercent;\n\n this.draggableDiv.style.width = `${dragzonePercent}%`;\n this.dropZoneDiv.style.width = `${dropzonePercent}%`;\n }\n\n createFeedbackDiv() {\n if (!this.feedBackDiv) {\n this.feedBackDiv = document.createElement(\"div\");\n this.feedBackDiv.id = this.divid + \"_feedback\";\n this.feedBackDiv.classList.add(\"exercise-content\");\n this.feedBackDiv.setAttribute(\"aria-live\", \"polite\");\n this.feedBackDiv.setAttribute(\"role\", \"status\");\n this.containerDiv.appendChild(this.feedBackDiv);\n }\n }\n /*=======================\n == Auxiliary functions ==\n =======================*/\n /* leaving the name as is, because it reminds me of Isaiah! */\n strangerDanger(testSpan) {\n // Returns true if the test span doesn't belong to this instance of DragNDrop\n if (testSpan.dataset.parent_id != this.divid) {\n return true;\n } else {\n return false;\n }\n }\n /*==============================\n == Reset button functionality ==\n ==============================*/\n resetDraggables() {\n this.dropZoneDiv.innerHTML = \"\";\n for (let response of this.responseArray) {\n response.classList.remove(\"drop-incorrect\");\n this.dropZoneDiv.appendChild(response);\n }\n this.draggableDiv.innerHTML = \"\";\n // Shuffle the premiseArray if random is true\n if (this.random) {\n this.premiseArray = shuffleArray(this.premiseArray);\n }\n for (let premise of this.premiseArray) {\n this.draggableDiv.appendChild(premise);\n }\n this.answerState = {};\n this.feedBackDiv.style.display = \"none\";\n this.adjustDragDropWidths();\n this.minheight = this.draggableDiv.offsetHeight;\n this.dragDropWrapDiv.style.minHeight =\n this.minheight.toString() + \"px\";\n this.feedBackDiv.style.visibility = \"hidden\";\n this.logBookEvent({\n event: \"dragNdrop-reset\",\n div_id: this.divid,\n act: \"reset\",\n });\n this.setLocalStorage({ correct: \"F\" });\n }\n /*===========================\n == Evaluation and feedback ==\n ===========================*/\n getAllCategories() {\n this.categories = [];\n for (let response of this.dropZoneDiv.childNodes) {\n this.categories.push(response.dataset.category);\n }\n return this.categories;\n }\n\n checkCurrentAnswer() {\n let categories = this.getAllCategories();\n this.correct = true;\n this.unansweredNum = 0;\n this.incorrectNum = 0;\n this.correctNum = 0;\n this.dragNum = this.premiseArray.length;\n\n for (let response of this.dropZoneDiv.childNodes) {\n // ignore drop zone children that aren't premises\n for (let premise of Array.from(response.childNodes).filter(\n this.ivp\n )) {\n if (premise.dataset.category == response.dataset.category) {\n this.correctNum++;\n } else {\n this.incorrectNum++;\n }\n }\n }\n for (let premise of Array.from(this.draggableDiv.childNodes).filter(\n (node) => node.nodeType !== Node.TEXT_NODE\n )) {\n if (categories.indexOf(premise.dataset.category) == -1) {\n this.correctNum++;\n } else {\n this.unansweredNum++;\n }\n }\n this.percent = this.correctNum / this.premiseArray.length;\n console.log(this.percent, this.incorrectNum, this.unansweredNum);\n if (this.percent < 1.0) {\n this.correct = false;\n }\n this.setLocalStorage({ correct: this.correct ? \"T\" : \"F\" });\n }\n\n isCorrectDrop(response) {\n // Returns true if all premises in the response are in the correct category\n // and all premises in the category are in the response\n // used by renderFeedback\n let correct = true;\n let correctPlacements = 0;\n for (let premise of Array.from(response.childNodes).filter(this.ivp)) {\n if (premise.dataset.category != response.dataset.category) {\n correct = false;\n } else {\n correctPlacements++;\n }\n }\n let catCount = 0;\n for (let premis of this.premiseArray) {\n if (premis.dataset.category == response.dataset.category) {\n catCount++;\n }\n }\n return correct && correctPlacements == catCount;\n }\n\n isValidPremise(premise) {\n if (this.premiseArray.includes(premise)) {\n return true;\n } else {\n return false;\n }\n }\n\n async logCurrentAnswer(sid) {\n let answer = JSON.stringify(this.answerState);\n let data = {\n event: \"dragNdrop\",\n act: answer,\n answer: answer,\n min_height: Math.round(this.minheight),\n drag_width: this.dragwidth,\n drop_width: this.dropwidth,\n div_id: this.divid,\n correct: this.correct,\n correctNum: this.correctNum,\n dragNum: this.dragNum,\n };\n if (typeof sid !== \"undefined\") {\n data.sid = sid;\n }\n await this.logBookEvent(data);\n }\n renderFeedback() {\n for (let response of this.dropZoneDiv.childNodes) {\n // iterate over all the premises in the response\n for (let premise of Array.from(response.childNodes).filter(\n this.ivp\n )) {\n // if the premise is not in the correct category, add the class\n if (\n premise.dataset.category != response.dataset.category\n ) {\n premise.classList.add(\"drop-incorrect\");\n premise.setAttribute(\"aria-invalid\", \"true\");\n premise.setAttribute(\n \"aria-errormessage\",\n premise.id + \"_error\"\n );\n document.getElementById(\n premise.id + \"_error\"\n ).classList.remove(\"vh-dnd-error\");\n } else {\n premise.classList.remove(\"drop-incorrect\");\n premise.setAttribute(\"aria-invalid\", \"false\");\n premise.removeAttribute(\"aria-errormessage\");\n }\n }\n }\n if (!this.feedBackDiv) {\n this.createFeedbackDiv();\n }\n this.feedBackDiv.style.visibility = \"visible\";\n if (this.correct) {\n var msgCorrect = $.i18n(\"msg_dragndrop_correct_answer\");\n setTimeout(() => {\n this.feedBackDiv.innerHTML = msgCorrect;\n }, 10);\n this.feedBackDiv.className = \"alert alert-info draggable-feedback exercise-content\";\n\n } else {\n var msgIncorrect = $.i18n(\n $.i18n(\"msg_dragndrop_incorrect_answer\"),\n this.correctNum,\n this.incorrectNum,\n this.dragNum,\n this.unansweredNum\n );\n // this.feedback comes from the author (a hint maybe)\n setTimeout(() => {\n this.feedBackDiv.innerHTML = `
            ${msgIncorrect}
            ${this.feedback}`;\n }, 10);\n this.feedBackDiv.className =\n \"alert alert-danger draggable-feedback exercise-content\";\n }\n this.queueMathJax(this.feedBackDiv);\n }\n /*===================================\n === Checking/restoring from storage ===\n ===================================*/\n restoreAnswers(data) {\n // Restore answers from storage retrieval done in RunestoneBase\n this.hasStoredDropzones = true;\n this.minheight = data.min_height;\n this.dragwidth = data.drag_width;\n this.dropwidth = data.drop_width;\n this.answerState = JSON.parse(data.answer);\n this.correct = data.correct;\n this.finishSettingUp();\n }\n\n checkLocalStorage() {\n if (this.graderactive) {\n this.finishSettingUp();\n return;\n }\n var storedObj;\n this.hasStoredDropzones = false;\n var len = localStorage.length;\n if (len > 0) {\n var ex = localStorage.getItem(this.localStorageKey());\n if (ex !== null) {\n this.hasStoredDropzones = true;\n try {\n storedObj = JSON.parse(ex);\n this.minheight = storedObj.min_height;\n this.dragwidth = storedObj.drag_width;\n this.dropwidth = storedObj.drop_width;\n } catch (err) {\n // error while parsing; likely due to bad value stored in storage\n console.log(err.message);\n localStorage.removeItem(this.localStorageKey());\n this.hasStoredDropzones = false;\n this.finishSettingUp();\n return;\n }\n this.answerState = storedObj.answer;\n if (this.useRunestoneServices) {\n // store answer in database\n let answer = JSON.stringify(this.answerState);\n this.logBookEvent({\n event: \"dragNdrop\",\n act: answer,\n answer: answer,\n min_height: Math.round(this.minheight),\n drag_width: this.dragwidth,\n drop_width: this.dropwidth,\n div_id: this.divid,\n correct: storedObj.correct,\n });\n }\n }\n }\n this.finishSettingUp();\n }\n\n setLocalStorage(data) {\n if (data.answer === undefined) {\n // If we didn't load from the server, we must generate the data\n this.answerState = {};\n for (let response of this.dropZoneDiv.childNodes) {\n this.answerState[response.id] = [];\n for (let premise of response.childNodes) {\n if (\n premise.nodeType !== Node.TEXT_NODE &&\n this.premiseArray.includes(premise)\n ) {\n this.answerState[response.id].push(premise.id);\n }\n }\n }\n }\n var timeStamp = new Date();\n var correct = data.correct;\n var storageObj = {\n answer: this.answerState,\n min_height: this.minheight,\n timestamp: timeStamp,\n correct: correct,\n drag_width: this.dragwidth,\n drop_width: this.dropwidth,\n };\n localStorage.setItem(\n this.localStorageKey(),\n JSON.stringify(storageObj)\n );\n }\n\n disableInteraction() {\n this.resetButton.style.display = \"none\";\n for (var i = 0; i < this.premiseArray.length; i++) {\n // No more dragging\n this.premiseArray[i].draggable = false;\n this.premiseArray[i].style.cursor = \"initial\";\n }\n }\n}\n\nfunction shuffleArray(array) {\n for (let i = array.length - 1; i > 0; i--) {\n // Generate a random index between 0 and i\n const j = Math.floor(Math.random() * (i + 1));\n // Swap elements at indices i and j\n [array[i], array[j]] = [array[j], array[i]];\n }\n return array;\n}\n\n/*=================================\n== Find the custom HTML tags and ==\n== execute our code on them ==\n=================================*/\ndocument.addEventListener(\"runestone:login-complete\", function () {\n const elements = document.querySelectorAll(\"[data-component=dragndrop]\");\n elements.forEach((element) => {\n const opts = {\n orig: element,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n };\n if (!element.closest(\"[data-component=timedAssessment]\")) {\n // If this element exists within a timed component, don't render it here\n try {\n window.componentMap[element.id] = new DragNDrop(opts);\n } catch (err) {\n console.log(\n `Error rendering DragNDrop Problem ${element.id}: ${err}`\n );\n }\n }\n });\n});\n","\"use strict\";\n\nimport DragNDrop from \"./dragndrop.js\";\n\nexport default class TimedDragNDrop extends DragNDrop {\n constructor(opts) {\n super(opts);\n this.finishSettingUp();\n this.renderTimedIcon(this.containerDiv);\n this.hideButtons();\n }\n hideButtons() {\n $(this.submitButton).hide();\n }\n renderTimedIcon(component) {\n // renders the clock icon on timed components. The component parameter\n // is the element that the icon should be appended to.\n var timeIconDiv = document.createElement(\"div\");\n var timeIcon = document.createElement(\"img\");\n $(timeIcon).attr({\n src: \"../_static/clock.png\",\n style: \"width:15px;height:15px\",\n });\n timeIconDiv.className = \"timeTip\";\n timeIconDiv.title = \"\";\n timeIconDiv.appendChild(timeIcon);\n $(component).prepend(timeIconDiv);\n }\n checkCorrectTimed() {\n // Returns if the question was correct. Used for timed assessment grading.\n if (this.unansweredNum === this.dragPairArray.length) {\n this.correct = null;\n }\n switch (this.correct) {\n case true:\n return \"T\";\n case false:\n return \"F\";\n default:\n return null;\n }\n }\n hideFeedback() {\n $(this.feedBackDiv).hide();\n }\n}\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\nwindow.component_factory[\"dragndrop\"] = function (opts) {\n if (opts.timed) {\n return new TimedDragNDrop(opts);\n }\n return new DragNDrop(opts);\n};\n","$.i18n().load({\n \"pt-br\": {\n msg_dragndrop_correct_answer: \"Correto!\",\n msg_dragndrop_incorrect_answer:\n \"Incorreto. Você teve $1 correto(s) e $2 incorreto(s) de $3. Você deixou $4 em branco.\",\n msg_dragndrop_check_me: \"Verificar\",\n msg_dragndrop_reset: \"Resetar\",\n },\n});\n"],"names":["$","i18n","load","en","msg_dragndrop_correct_answer","msg_dragndrop_incorrect_answer","msg_dragndrop_check_me","msg_dragndrop_reset","DragNDrop","constructor","opts","super","orig","this","origElem","divid","id","useRunestoneServices","random","dataset","feedback","question","populate","createNewElements","caption","addCaption","Prism","highlightAllUnder","containerDiv","responseArray","premiseArray","invisibleErrorDiv","document","createElement","classList","add","body","appendChild","console","log","cards","querySelectorAll","element","replaceSpan","innerHTML","setAttribute","tabIndex","category","getCategory","parent_id","push","setDragListeners","errorMessage","shuffleArray","getAttribute","replace","setDropListeners","querySelector","elem","hasAttribute","statementDiv","error","dragDropWrapDiv","style","display","draggableDiv","addDragDivListeners","dropZoneDiv","createButtons","checkServer","eBookConfig","practice_mode","finishSettingUp","self","ivp","isValidPremise","bind","queueMathJax","appendReplacementSpans","createFeedbackDiv","parentNode","replaceChild","hasStoredDropzones","minheight","offsetHeight","then","adjustDragDropWidths","minHeight","toString","width","dragwidth","dropwidth","addEventListener","ev","preventDefault","contains","isAnswered","remove","data","dataTransfer","getData","draggedSpan","getElementById","strangerDanger","logBookEvent","event","div_id","act","e","buttonDiv","submitButton","textContent","onclick","checkCurrentAnswer","renderFeedback","logCurrentAnswer","resetButton","resetDraggables","undefined","answerState","Object","keys","length","placedPremises","response","premise","foundPremise","findPremise","warn","indexOf","countSavedPremises","count","names","dgSpan","setData","target","key","selectedPremise","dpSpan","includes","dragzoneWidth","offsetWidth","totalWidth","dragzonePercent","Math","ceil","max","min","dropzonePercent","feedBackDiv","testSpan","visibility","setLocalStorage","correct","getAllCategories","categories","childNodes","unansweredNum","incorrectNum","correctNum","dragNum","Array","from","filter","node","nodeType","Node","TEXT_NODE","percent","isCorrectDrop","correctPlacements","catCount","premis","sid","answer","JSON","stringify","min_height","round","drag_width","drop_width","removeAttribute","msgCorrect","setTimeout","className","msgIncorrect","restoreAnswers","parse","checkLocalStorage","graderactive","storedObj","localStorage","ex","getItem","localStorageKey","err","message","removeItem","timeStamp","Date","storageObj","timestamp","setItem","disableInteraction","i","draggable","cursor","array","j","floor","forEach","closest","window","componentMap","TimedDragNDrop","renderTimedIcon","hideButtons","hide","component","timeIconDiv","timeIcon","attr","src","title","prepend","checkCorrectTimed","dragPairArray","hideFeedback","component_factory","timed"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/759.f27ff66e7ad33076.js.map.gz b/_static/759.f27ff66e7ad33076.js.map.gz new file mode 100644 index 0000000..4bc7f80 Binary files /dev/null and b/_static/759.f27ff66e7ad33076.js.map.gz differ diff --git a/_static/764.c33a81cafe63d2b6.js b/_static/764.c33a81cafe63d2b6.js new file mode 100644 index 0000000..b0b3641 --- /dev/null +++ b/_static/764.c33a81cafe63d2b6.js @@ -0,0 +1,3 @@ +/*! For license information please see 764.c33a81cafe63d2b6.js.LICENSE.txt */ +(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[764],{60764:()=>{!function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:i})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=87)}([function(t,e,n){var i;!function(e,n){"use strict";"object"==typeof t&&"object"==typeof t.exports?t.exports=e.document?n(e,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return n(t)}:n(e)}("undefined"!=typeof window?window:this,(function(r,o){"use strict";var s=[],a=r.document,l=Object.getPrototypeOf,u=s.slice,c=s.concat,h=s.push,d=s.indexOf,p={},f=p.toString,g=p.hasOwnProperty,m=g.toString,v=m.call(Object),b={};function y(t,e){var n=(e=e||a).createElement("script");n.text=t,e.head.appendChild(n).parentNode.removeChild(n)}var x="3.0.0",A=function(t,e){return new A.fn.init(t,e)},w=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,_=/^-ms-/,C=/-([a-z])/g,k=function(t,e){return e.toUpperCase()};function E(t){var e=!!t&&"length"in t&&t.length,n=A.type(t);return"function"!==n&&!A.isWindow(t)&&("array"===n||0===e||"number"==typeof e&&e>0&&e-1 in t)}A.fn=A.prototype={jquery:x,constructor:A,length:0,toArray:function(){return u.call(this)},get:function(t){return null!=t?0>t?this[t+this.length]:this[t]:u.call(this)},pushStack:function(t){var e=A.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return A.each(this,t)},map:function(t){return this.pushStack(A.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return this.pushStack(u.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,n=+t+(0>t?e:0);return this.pushStack(n>=0&&e>n?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:s.sort,splice:s.splice},A.extend=A.fn.extend=function(){var t,e,n,i,r,o,s=arguments[0]||{},a=1,l=arguments.length,u=!1;for("boolean"==typeof s&&(u=s,s=arguments[a]||{},a++),"object"==typeof s||A.isFunction(s)||(s={}),a===l&&(s=this,a--);l>a;a++)if(null!=(t=arguments[a]))for(e in t)n=s[e],s!==(i=t[e])&&(u&&i&&(A.isPlainObject(i)||(r=A.isArray(i)))?(r?(r=!1,o=n&&A.isArray(n)?n:[]):o=n&&A.isPlainObject(n)?n:{},s[e]=A.extend(u,o,i)):void 0!==i&&(s[e]=i));return s},A.extend({expando:"jQuery"+(x+Math.random()).replace(/\D/g,""),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isFunction:function(t){return"function"===A.type(t)},isArray:Array.isArray,isWindow:function(t){return null!=t&&t===t.window},isNumeric:function(t){var e=A.type(t);return("number"===e||"string"===e)&&!isNaN(t-parseFloat(t))},isPlainObject:function(t){var e,n;return!(!t||"[object Object]"!==f.call(t)||(e=l(t))&&("function"!=typeof(n=g.call(e,"constructor")&&e.constructor)||m.call(n)!==v))},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},type:function(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?p[f.call(t)]||"object":typeof t},globalEval:function(t){y(t)},camelCase:function(t){return t.replace(_,"ms-").replace(C,k)},nodeName:function(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()},each:function(t,e){var n,i=0;if(E(t))for(n=t.length;n>i&&!1!==e.call(t[i],i,t[i]);i++);else for(i in t)if(!1===e.call(t[i],i,t[i]))break;return t},trim:function(t){return null==t?"":(t+"").replace(w,"")},makeArray:function(t,e){var n=e||[];return null!=t&&(E(Object(t))?A.merge(n,"string"==typeof t?[t]:t):h.call(n,t)),n},inArray:function(t,e,n){return null==e?-1:d.call(e,t,n)},merge:function(t,e){for(var n=+e.length,i=0,r=t.length;n>i;i++)t[r++]=e[i];return t.length=r,t},grep:function(t,e,n){for(var i=[],r=0,o=t.length,s=!n;o>r;r++)!e(t[r],r)!==s&&i.push(t[r]);return i},map:function(t,e,n){var i,r,o=0,s=[];if(E(t))for(i=t.length;i>o;o++)null!=(r=e(t[o],o,n))&&s.push(r);else for(o in t)null!=(r=e(t[o],o,n))&&s.push(r);return c.apply([],s)},guid:1,proxy:function(t,e){var n,i,r;return"string"==typeof e&&(n=t[e],e=t,t=n),A.isFunction(t)?(i=u.call(arguments,2),r=function(){return t.apply(e||this,i.concat(u.call(arguments)))},r.guid=t.guid=t.guid||A.guid++,r):void 0},now:Date.now,support:b}),"function"==typeof Symbol&&(A.fn[Symbol.iterator]=s[Symbol.iterator]),A.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),(function(t,e){p["[object "+e+"]"]=e.toLowerCase()}));var D=function(t){var e,n,i,r,o,s,a,l,u,c,h,d,p,f,g,m,v,b,y,x="sizzle"+1*new Date,A=t.document,w=0,_=0,C=st(),k=st(),E=st(),D=function(t,e){return t===e&&(h=!0),0},M={}.hasOwnProperty,T=[],I=T.pop,P=T.push,S=T.push,j=T.slice,O=function(t,e){for(var n=0,i=t.length;i>n;n++)if(t[n]===e)return n;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",N="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",z="\\["+N+"*("+R+")(?:"+N+"*([*^$|!~]?=)"+N+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+R+"))|)"+N+"*\\]",H=":("+R+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+z+")*)|.*)\\)|)",F=new RegExp(N+"+","g"),V=new RegExp("^"+N+"+|((?:^|[^\\\\])(?:\\\\.)*)"+N+"+$","g"),B=new RegExp("^"+N+"*,"+N+"*"),W=new RegExp("^"+N+"*([>+~]|"+N+")"+N+"*"),U=new RegExp("="+N+"*([^\\]'\"]*?)"+N+"*\\]","g"),q=new RegExp(H),G=new RegExp("^"+R+"$"),X={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+z),PSEUDO:new RegExp("^"+H),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+N+"*(even|odd|(([+-]|)(\\d*)n|)"+N+"*(?:([+-]|)"+N+"*(\\d+)|))"+N+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+N+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+N+"*((?:-\\d)?\\d*)"+N+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,J=/[+~]/,$=new RegExp("\\\\([\\da-f]{1,6}"+N+"?|("+N+")|.)","ig"),tt=function(t,e,n){var i="0x"+e-65536;return i!=i||n?e:0>i?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},et=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,nt=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},it=function(){d()},rt=bt((function(t){return!0===t.disabled}),{dir:"parentNode",next:"legend"});try{S.apply(T=j.call(A.childNodes),A.childNodes),T[A.childNodes.length].nodeType}catch(t){S={apply:T.length?function(t,e){P.apply(t,j.call(e))}:function(t,e){for(var n=t.length,i=0;t[n++]=e[i++];);t.length=n-1}}}function ot(t,e,i,r){var o,a,u,c,h,f,v,b=e&&e.ownerDocument,w=e?e.nodeType:9;if(i=i||[],"string"!=typeof t||!t||1!==w&&9!==w&&11!==w)return i;if(!r&&((e?e.ownerDocument||e:A)!==p&&d(e),e=e||p,g)){if(11!==w&&(h=Z.exec(t)))if(o=h[1]){if(9===w){if(!(u=e.getElementById(o)))return i;if(u.id===o)return i.push(u),i}else if(b&&(u=b.getElementById(o))&&y(e,u)&&u.id===o)return i.push(u),i}else{if(h[2])return S.apply(i,e.getElementsByTagName(t)),i;if((o=h[3])&&n.getElementsByClassName&&e.getElementsByClassName)return S.apply(i,e.getElementsByClassName(o)),i}if(n.qsa&&!E[t+" "]&&(!m||!m.test(t))){if(1!==w)b=e,v=t;else if("object"!==e.nodeName.toLowerCase()){for((c=e.getAttribute("id"))?c=c.replace(et,nt):e.setAttribute("id",c=x),a=(f=s(t)).length;a--;)f[a]="#"+c+" "+vt(f[a]);v=f.join(","),b=J.test(t)&>(e.parentNode)||e}if(v)try{return S.apply(i,b.querySelectorAll(v)),i}catch(t){}finally{c===x&&e.removeAttribute("id")}}}return l(t.replace(V,"$1"),e,i,r)}function st(){var t=[];return function e(n,r){return t.push(n+" ")>i.cacheLength&&delete e[t.shift()],e[n+" "]=r}}function at(t){return t[x]=!0,t}function lt(t){var e=p.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function ut(t,e){for(var n=t.split("|"),r=n.length;r--;)i.attrHandle[n[r]]=e}function ct(t,e){var n=e&&t,i=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(i)return i;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function ht(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function dt(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function pt(t){return function(e){return"label"in e&&e.disabled===t||"form"in e&&e.disabled===t||"form"in e&&!1===e.disabled&&(e.isDisabled===t||e.isDisabled!==!t&&("label"in e||!rt(e))!==t)}}function ft(t){return at((function(e){return e=+e,at((function(n,i){for(var r,o=t([],n.length,e),s=o.length;s--;)n[r=o[s]]&&(n[r]=!(i[r]=n[r]))}))}))}function gt(t){return t&&void 0!==t.getElementsByTagName&&t}for(e in n=ot.support={},o=ot.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},d=ot.setDocument=function(t){var e,r,s=t?t.ownerDocument||t:A;return s!==p&&9===s.nodeType&&s.documentElement?(f=(p=s).documentElement,g=!o(p),A!==p&&(r=p.defaultView)&&r.top!==r&&(r.addEventListener?r.addEventListener("unload",it,!1):r.attachEvent&&r.attachEvent("onunload",it)),n.attributes=lt((function(t){return t.className="i",!t.getAttribute("className")})),n.getElementsByTagName=lt((function(t){return t.appendChild(p.createComment("")),!t.getElementsByTagName("*").length})),n.getElementsByClassName=K.test(p.getElementsByClassName),n.getById=lt((function(t){return f.appendChild(t).id=x,!p.getElementsByName||!p.getElementsByName(x).length})),n.getById?(i.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n=e.getElementById(t);return n?[n]:[]}},i.filter.ID=function(t){var e=t.replace($,tt);return function(t){return t.getAttribute("id")===e}}):(delete i.find.ID,i.filter.ID=function(t){var e=t.replace($,tt);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return n&&n.value===e}}),i.find.TAG=n.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):n.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,i=[],r=0,o=e.getElementsByTagName(t);if("*"===t){for(;n=o[r++];)1===n.nodeType&&i.push(n);return i}return o},i.find.CLASS=n.getElementsByClassName&&function(t,e){return void 0!==e.getElementsByClassName&&g?e.getElementsByClassName(t):void 0},v=[],m=[],(n.qsa=K.test(p.querySelectorAll))&&(lt((function(t){f.appendChild(t).innerHTML="",t.querySelectorAll("[msallowcapture^='']").length&&m.push("[*^$]="+N+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||m.push("\\["+N+"*(?:value|"+L+")"),t.querySelectorAll("[id~="+x+"-]").length||m.push("~="),t.querySelectorAll(":checked").length||m.push(":checked"),t.querySelectorAll("a#"+x+"+*").length||m.push(".#.+[+~]")})),lt((function(t){t.innerHTML="";var e=p.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&m.push("name"+N+"*[*^$|!~]?="),2!==t.querySelectorAll(":enabled").length&&m.push(":enabled",":disabled"),f.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&m.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),m.push(",.*:")}))),(n.matchesSelector=K.test(b=f.matches||f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&<((function(t){n.disconnectedMatch=b.call(t,"*"),b.call(t,"[s!='']:x"),v.push("!=",H)})),m=m.length&&new RegExp(m.join("|")),v=v.length&&new RegExp(v.join("|")),e=K.test(f.compareDocumentPosition),y=e||K.test(f.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,i=e&&e.parentNode;return t===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):t.compareDocumentPosition&&16&t.compareDocumentPosition(i)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},D=e?function(t,e){if(t===e)return h=!0,0;var i=!t.compareDocumentPosition-!e.compareDocumentPosition;return i||(1&(i=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!n.sortDetached&&e.compareDocumentPosition(t)===i?t===p||t.ownerDocument===A&&y(A,t)?-1:e===p||e.ownerDocument===A&&y(A,e)?1:c?O(c,t)-O(c,e):0:4&i?-1:1)}:function(t,e){if(t===e)return h=!0,0;var n,i=0,r=t.parentNode,o=e.parentNode,s=[t],a=[e];if(!r||!o)return t===p?-1:e===p?1:r?-1:o?1:c?O(c,t)-O(c,e):0;if(r===o)return ct(t,e);for(n=t;n=n.parentNode;)s.unshift(n);for(n=e;n=n.parentNode;)a.unshift(n);for(;s[i]===a[i];)i++;return i?ct(s[i],a[i]):s[i]===A?-1:a[i]===A?1:0},p):p},ot.matches=function(t,e){return ot(t,null,null,e)},ot.matchesSelector=function(t,e){if((t.ownerDocument||t)!==p&&d(t),e=e.replace(U,"='$1']"),n.matchesSelector&&g&&!E[e+" "]&&(!v||!v.test(e))&&(!m||!m.test(e)))try{var i=b.call(t,e);if(i||n.disconnectedMatch||t.document&&11!==t.document.nodeType)return i}catch(t){}return ot(e,p,null,[t]).length>0},ot.contains=function(t,e){return(t.ownerDocument||t)!==p&&d(t),y(t,e)},ot.attr=function(t,e){(t.ownerDocument||t)!==p&&d(t);var r=i.attrHandle[e.toLowerCase()],o=r&&M.call(i.attrHandle,e.toLowerCase())?r(t,e,!g):void 0;return void 0!==o?o:n.attributes||!g?t.getAttribute(e):(o=t.getAttributeNode(e))&&o.specified?o.value:null},ot.escape=function(t){return(t+"").replace(et,nt)},ot.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},ot.uniqueSort=function(t){var e,i=[],r=0,o=0;if(h=!n.detectDuplicates,c=!n.sortStable&&t.slice(0),t.sort(D),h){for(;e=t[o++];)e===t[o]&&(r=i.push(o));for(;r--;)t.splice(i[r],1)}return c=null,t},r=ot.getText=function(t){var e,n="",i=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=r(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[i++];)n+=r(e);return n},i=ot.selectors={cacheLength:50,createPseudo:at,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace($,tt),t[3]=(t[3]||t[4]||t[5]||"").replace($,tt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||ot.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&ot.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return X.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&q.test(n)&&(e=s(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace($,tt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=C[t+" "];return e||(e=new RegExp("(^|"+N+")"+t+"("+N+"|$)"))&&C(t,(function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")}))},ATTR:function(t,e,n){return function(i){var r=ot.attr(i,t);return null==r?"!="===e:!e||(r+="","="===e?r===n:"!="===e?r!==n:"^="===e?n&&0===r.indexOf(n):"*="===e?n&&r.indexOf(n)>-1:"$="===e?n&&r.slice(-n.length)===n:"~="===e?(" "+r.replace(F," ")+" ").indexOf(n)>-1:"|="===e&&(r===n||r.slice(0,n.length+1)===n+"-"))}},CHILD:function(t,e,n,i,r){var o="nth"!==t.slice(0,3),s="last"!==t.slice(-4),a="of-type"===e;return 1===i&&0===r?function(t){return!!t.parentNode}:function(e,n,l){var u,c,h,d,p,f,g=o!==s?"nextSibling":"previousSibling",m=e.parentNode,v=a&&e.nodeName.toLowerCase(),b=!l&&!a,y=!1;if(m){if(o){for(;g;){for(d=e;d=d[g];)if(a?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;f=g="only"===t&&!f&&"nextSibling"}return!0}if(f=[s?m.firstChild:m.lastChild],s&&b){for(y=(p=(u=(c=(h=(d=m)[x]||(d[x]={}))[d.uniqueID]||(h[d.uniqueID]={}))[t]||[])[0]===w&&u[1])&&u[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(y=p=0)||f.pop();)if(1===d.nodeType&&++y&&d===e){c[t]=[w,p,y];break}}else if(b&&(y=p=(u=(c=(h=(d=e)[x]||(d[x]={}))[d.uniqueID]||(h[d.uniqueID]={}))[t]||[])[0]===w&&u[1]),!1===y)for(;(d=++p&&d&&d[g]||(y=p=0)||f.pop())&&((a?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++y||(b&&((c=(h=d[x]||(d[x]={}))[d.uniqueID]||(h[d.uniqueID]={}))[t]=[w,y]),d!==e)););return(y-=r)===i||y%i==0&&y/i>=0}}},PSEUDO:function(t,e){var n,r=i.pseudos[t]||i.setFilters[t.toLowerCase()]||ot.error("unsupported pseudo: "+t);return r[x]?r(e):r.length>1?(n=[t,t,"",e],i.setFilters.hasOwnProperty(t.toLowerCase())?at((function(t,n){for(var i,o=r(t,e),s=o.length;s--;)t[i=O(t,o[s])]=!(n[i]=o[s])})):function(t){return r(t,0,n)}):r}},pseudos:{not:at((function(t){var e=[],n=[],i=a(t.replace(V,"$1"));return i[x]?at((function(t,e,n,r){for(var o,s=i(t,null,r,[]),a=t.length;a--;)(o=s[a])&&(t[a]=!(e[a]=o))})):function(t,r,o){return e[0]=t,i(e,null,o,n),e[0]=null,!n.pop()}})),has:at((function(t){return function(e){return ot(t,e).length>0}})),contains:at((function(t){return t=t.replace($,tt),function(e){return(e.textContent||e.innerText||r(e)).indexOf(t)>-1}})),lang:at((function(t){return G.test(t||"")||ot.error("unsupported lang: "+t),t=t.replace($,tt).toLowerCase(),function(e){var n;do{if(n=g?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(n=n.toLowerCase())===t||0===n.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}})),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===f},focus:function(t){return t===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:pt(!1),disabled:pt(!0),checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!i.pseudos.empty(t)},header:function(t){return Q.test(t.nodeName)},input:function(t){return Y.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:ft((function(){return[0]})),last:ft((function(t,e){return[e-1]})),eq:ft((function(t,e,n){return[0>n?n+e:n]})),even:ft((function(t,e){for(var n=0;e>n;n+=2)t.push(n);return t})),odd:ft((function(t,e){for(var n=1;e>n;n+=2)t.push(n);return t})),lt:ft((function(t,e,n){for(var i=0>n?n+e:n;--i>=0;)t.push(i);return t})),gt:ft((function(t,e,n){for(var i=0>n?n+e:n;++ie;e++)i+=t[e].value;return i}function bt(t,e,n){var i=e.dir,r=e.next,o=r||i,s=n&&"parentNode"===o,a=_++;return e.first?function(e,n,r){for(;e=e[i];)if(1===e.nodeType||s)return t(e,n,r)}:function(e,n,l){var u,c,h,d=[w,a];if(l){for(;e=e[i];)if((1===e.nodeType||s)&&t(e,n,l))return!0}else for(;e=e[i];)if(1===e.nodeType||s)if(c=(h=e[x]||(e[x]={}))[e.uniqueID]||(h[e.uniqueID]={}),r&&r===e.nodeName.toLowerCase())e=e[i]||e;else{if((u=c[o])&&u[0]===w&&u[1]===a)return d[2]=u[2];if(c[o]=d,d[2]=t(e,n,l))return!0}}}function yt(t){return t.length>1?function(e,n,i){for(var r=t.length;r--;)if(!t[r](e,n,i))return!1;return!0}:t[0]}function xt(t,e,n,i,r){for(var o,s=[],a=0,l=t.length,u=null!=e;l>a;a++)(o=t[a])&&(n&&!n(o,i,r)||(s.push(o),u&&e.push(a)));return s}function At(t,e,n,i,r,o){return i&&!i[x]&&(i=At(i)),r&&!r[x]&&(r=At(r,o)),at((function(o,s,a,l){var u,c,h,d=[],p=[],f=s.length,g=o||function(t,e,n){for(var i=0,r=e.length;r>i;i++)ot(t,e[i],n);return n}(e||"*",a.nodeType?[a]:a,[]),m=!t||!o&&e?g:xt(g,d,t,a,l),v=n?r||(o?t:f||i)?[]:s:m;if(n&&n(m,v,a,l),i)for(u=xt(v,p),i(u,[],a,l),c=u.length;c--;)(h=u[c])&&(v[p[c]]=!(m[p[c]]=h));if(o){if(r||t){if(r){for(u=[],c=v.length;c--;)(h=v[c])&&u.push(m[c]=h);r(null,v=[],u,l)}for(c=v.length;c--;)(h=v[c])&&(u=r?O(o,h):d[c])>-1&&(o[u]=!(s[u]=h))}}else v=xt(v===s?v.splice(f,v.length):v),r?r(null,s,v,l):S.apply(s,v)}))}function wt(t){for(var e,n,r,o=t.length,s=i.relative[t[0].type],a=s||i.relative[" "],l=s?1:0,c=bt((function(t){return t===e}),a,!0),h=bt((function(t){return O(e,t)>-1}),a,!0),d=[function(t,n,i){var r=!s&&(i||n!==u)||((e=n).nodeType?c(t,n,i):h(t,n,i));return e=null,r}];o>l;l++)if(n=i.relative[t[l].type])d=[bt(yt(d),n)];else{if((n=i.filter[t[l].type].apply(null,t[l].matches))[x]){for(r=++l;o>r&&!i.relative[t[r].type];r++);return At(l>1&&yt(d),l>1&&vt(t.slice(0,l-1).concat({value:" "===t[l-2].type?"*":""})).replace(V,"$1"),n,r>l&&wt(t.slice(l,r)),o>r&&wt(t=t.slice(r)),o>r&&vt(t))}d.push(n)}return yt(d)}function _t(t,e){var n=e.length>0,r=t.length>0,o=function(o,s,a,l,c){var h,f,m,v=0,b="0",y=o&&[],x=[],A=u,_=o||r&&i.find.TAG("*",c),C=w+=null==A?1:Math.random()||.1,k=_.length;for(c&&(u=s===p||s||c);b!==k&&null!=(h=_[b]);b++){if(r&&h){for(f=0,s||h.ownerDocument===p||(d(h),a=!g);m=t[f++];)if(m(h,s||p,a)){l.push(h);break}c&&(w=C)}n&&((h=!m&&h)&&v--,o&&y.push(h))}if(v+=b,n&&b!==v){for(f=0;m=e[f++];)m(y,x,s,a);if(o){if(v>0)for(;b--;)y[b]||x[b]||(x[b]=I.call(l));x=xt(x)}S.apply(l,x),c&&!o&&x.length>0&&v+e.length>1&&ot.uniqueSort(l)}return c&&(w=C,u=A),y};return n?at(o):o}return mt.prototype=i.filters=i.pseudos,i.setFilters=new mt,s=ot.tokenize=function(t,e){var n,r,o,s,a,l,u,c=k[t+" "];if(c)return e?0:c.slice(0);for(a=t,l=[],u=i.preFilter;a;){for(s in n&&!(r=B.exec(a))||(r&&(a=a.slice(r[0].length)||a),l.push(o=[])),n=!1,(r=W.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(V," ")}),a=a.slice(n.length)),i.filter)!(r=X[s].exec(a))||u[s]&&!(r=u[s](r))||(n=r.shift(),o.push({value:n,type:s,matches:r}),a=a.slice(n.length));if(!n)break}return e?a.length:a?ot.error(t):k(t,l).slice(0)},a=ot.compile=function(t,e){var n,i=[],r=[],o=E[t+" "];if(!o){for(e||(e=s(t)),n=e.length;n--;)(o=wt(e[n]))[x]?i.push(o):r.push(o);(o=E(t,_t(r,i))).selector=t}return o},l=ot.select=function(t,e,r,o){var l,u,c,h,d,p="function"==typeof t&&t,f=!o&&s(t=p.selector||t);if(r=r||[],1===f.length){if((u=f[0]=f[0].slice(0)).length>2&&"ID"===(c=u[0]).type&&n.getById&&9===e.nodeType&&g&&i.relative[u[1].type]){if(!(e=(i.find.ID(c.matches[0].replace($,tt),e)||[])[0]))return r;p&&(e=e.parentNode),t=t.slice(u.shift().value.length)}for(l=X.needsContext.test(t)?0:u.length;l--&&(c=u[l],!i.relative[h=c.type]);)if((d=i.find[h])&&(o=d(c.matches[0].replace($,tt),J.test(u[0].type)&>(e.parentNode)||e))){if(u.splice(l,1),!(t=o.length&&vt(u)))return S.apply(r,o),r;break}}return(p||a(t,f))(o,e,!g,r,!e||J.test(t)&>(e.parentNode)||e),r},n.sortStable=x.split("").sort(D).join("")===x,n.detectDuplicates=!!h,d(),n.sortDetached=lt((function(t){return 1&t.compareDocumentPosition(p.createElement("fieldset"))})),lt((function(t){return t.innerHTML="","#"===t.firstChild.getAttribute("href")}))||ut("type|href|height|width",(function(t,e,n){return n?void 0:t.getAttribute(e,"type"===e.toLowerCase()?1:2)})),n.attributes&<((function(t){return t.innerHTML="",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")}))||ut("value",(function(t,e,n){return n||"input"!==t.nodeName.toLowerCase()?void 0:t.defaultValue})),lt((function(t){return null==t.getAttribute("disabled")}))||ut(L,(function(t,e,n){var i;return n?void 0:!0===t[e]?e.toLowerCase():(i=t.getAttributeNode(e))&&i.specified?i.value:null})),ot}(r);A.find=D,A.expr=D.selectors,A.expr[":"]=A.expr.pseudos,A.uniqueSort=A.unique=D.uniqueSort,A.text=D.getText,A.isXMLDoc=D.isXML,A.contains=D.contains,A.escapeSelector=D.escape;var M=function(t,e,n){for(var i=[],r=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(r&&A(t).is(n))break;i.push(t)}return i},T=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},I=A.expr.match.needsContext,P=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,S=/^.[^:#\[\.,]*$/;function j(t,e,n){if(A.isFunction(e))return A.grep(t,(function(t,i){return!!e.call(t,i,t)!==n}));if(e.nodeType)return A.grep(t,(function(t){return t===e!==n}));if("string"==typeof e){if(S.test(e))return A.filter(e,t,n);e=A.filter(e,t)}return A.grep(t,(function(t){return d.call(e,t)>-1!==n&&1===t.nodeType}))}A.filter=function(t,e,n){var i=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===i.nodeType?A.find.matchesSelector(i,t)?[i]:[]:A.find.matches(t,A.grep(e,(function(t){return 1===t.nodeType})))},A.fn.extend({find:function(t){var e,n,i=this.length,r=this;if("string"!=typeof t)return this.pushStack(A(t).filter((function(){for(e=0;i>e;e++)if(A.contains(r[e],this))return!0})));for(n=this.pushStack([]),e=0;i>e;e++)A.find(t,r[e],n);return i>1?A.uniqueSort(n):n},filter:function(t){return this.pushStack(j(this,t||[],!1))},not:function(t){return this.pushStack(j(this,t||[],!0))},is:function(t){return!!j(this,"string"==typeof t&&I.test(t)?A(t):t||[],!1).length}});var O,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,N=A.fn.init=function(t,e,n){var i,r;if(!t)return this;if(n=n||O,"string"==typeof t){if(!(i="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:L.exec(t))||!i[1]&&e)return!e||e.jquery?(e||n).find(t):this.constructor(e).find(t);if(i[1]){if(e=e instanceof A?e[0]:e,A.merge(this,A.parseHTML(i[1],e&&e.nodeType?e.ownerDocument||e:a,!0)),P.test(i[1])&&A.isPlainObject(e))for(i in e)A.isFunction(this[i])?this[i](e[i]):this.attr(i,e[i]);return this}return(r=a.getElementById(i[2]))&&(this[0]=r,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):A.isFunction(t)?void 0!==n.ready?n.ready(t):t(A):A.makeArray(t,this)};N.prototype=A.fn,O=A(a);var R=/^(?:parents|prev(?:Until|All))/,z={children:!0,contents:!0,next:!0,prev:!0};function H(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}A.fn.extend({has:function(t){var e=A(t,this),n=e.length;return this.filter((function(){for(var t=0;n>t;t++)if(A.contains(this,e[t]))return!0}))},closest:function(t,e){var n,i=0,r=this.length,o=[],s="string"!=typeof t&&A(t);if(!I.test(t))for(;r>i;i++)for(n=this[i];n&&n!==e;n=n.parentNode)if(n.nodeType<11&&(s?s.index(n)>-1:1===n.nodeType&&A.find.matchesSelector(n,t))){o.push(n);break}return this.pushStack(o.length>1?A.uniqueSort(o):o)},index:function(t){return t?"string"==typeof t?d.call(A(t),this[0]):d.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(A.uniqueSort(A.merge(this.get(),A(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),A.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return M(t,"parentNode")},parentsUntil:function(t,e,n){return M(t,"parentNode",n)},next:function(t){return H(t,"nextSibling")},prev:function(t){return H(t,"previousSibling")},nextAll:function(t){return M(t,"nextSibling")},prevAll:function(t){return M(t,"previousSibling")},nextUntil:function(t,e,n){return M(t,"nextSibling",n)},prevUntil:function(t,e,n){return M(t,"previousSibling",n)},siblings:function(t){return T((t.parentNode||{}).firstChild,t)},children:function(t){return T(t.firstChild)},contents:function(t){return t.contentDocument||A.merge([],t.childNodes)}},(function(t,e){A.fn[t]=function(n,i){var r=A.map(this,e,n);return"Until"!==t.slice(-5)&&(i=n),i&&"string"==typeof i&&(r=A.filter(i,r)),this.length>1&&(z[t]||A.uniqueSort(r),R.test(t)&&r.reverse()),this.pushStack(r)}}));var F=/\S+/g;function V(t){return t}function B(t){throw t}function W(t,e,n){var i;try{t&&A.isFunction(i=t.promise)?i.call(t).done(e).fail(n):t&&A.isFunction(i=t.then)?i.call(t,e,n):e.call(void 0,t)}catch(t){n.call(void 0,t)}}A.Callbacks=function(t){t="string"==typeof t?function(t){var e={};return A.each(t.match(F)||[],(function(t,n){e[n]=!0})),e}(t):A.extend({},t);var e,n,i,r,o=[],s=[],a=-1,l=function(){for(r=t.once,i=e=!0;s.length;a=-1)for(n=s.shift();++a-1;)o.splice(n,1),a>=n&&a--})),this},has:function(t){return t?A.inArray(t,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return r=s=[],o=n="",this},disabled:function(){return!o},lock:function(){return r=s=[],n||e||(o=n=""),this},locked:function(){return!!r},fireWith:function(t,n){return r||(n=[t,(n=n||[]).slice?n.slice():n],s.push(n),e||l()),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!i}};return u},A.extend({Deferred:function(t){var e=[["notify","progress",A.Callbacks("memory"),A.Callbacks("memory"),2],["resolve","done",A.Callbacks("once memory"),A.Callbacks("once memory"),0,"resolved"],["reject","fail",A.Callbacks("once memory"),A.Callbacks("once memory"),1,"rejected"]],n="pending",i={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},catch:function(t){return i.then(null,t)},pipe:function(){var t=arguments;return A.Deferred((function(n){A.each(e,(function(e,i){var r=A.isFunction(t[i[4]])&&t[i[4]];o[i[1]]((function(){var t=r&&r.apply(this,arguments);t&&A.isFunction(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[i[0]+"With"](this,r?[t]:arguments)}))})),t=null})).promise()},then:function(t,n,i){var o=0;function s(t,e,n,i){return function(){var a=this,l=arguments,u=function(){var r,u;if(!(o>t)){if((r=n.apply(a,l))===e.promise())throw new TypeError("Thenable self-resolution");u=r&&("object"==typeof r||"function"==typeof r)&&r.then,A.isFunction(u)?i?u.call(r,s(o,e,V,i),s(o,e,B,i)):(o++,u.call(r,s(o,e,V,i),s(o,e,B,i),s(o,e,V,e.notifyWith))):(n!==V&&(a=void 0,l=[r]),(i||e.resolveWith)(a,l))}},c=i?u:function(){try{u()}catch(i){A.Deferred.exceptionHook&&A.Deferred.exceptionHook(i,c.stackTrace),t+1>=o&&(n!==B&&(a=void 0,l=[i]),e.rejectWith(a,l))}};t?c():(A.Deferred.getStackHook&&(c.stackTrace=A.Deferred.getStackHook()),r.setTimeout(c))}}return A.Deferred((function(r){e[0][3].add(s(0,r,A.isFunction(i)?i:V,r.notifyWith)),e[1][3].add(s(0,r,A.isFunction(t)?t:V)),e[2][3].add(s(0,r,A.isFunction(n)?n:B))})).promise()},promise:function(t){return null!=t?A.extend(t,i):i}},o={};return A.each(e,(function(t,r){var s=r[2],a=r[5];i[r[1]]=s.add,a&&s.add((function(){n=a}),e[3-t][2].disable,e[0][2].lock),s.add(r[3].fire),o[r[0]]=function(){return o[r[0]+"With"](this===o?void 0:this,arguments),this},o[r[0]+"With"]=s.fireWith})),i.promise(o),t&&t.call(o,o),o},when:function(t){var e=arguments.length,n=e,i=Array(n),r=u.call(arguments),o=A.Deferred(),s=function(t){return function(n){i[t]=this,r[t]=arguments.length>1?u.call(arguments):n,--e||o.resolveWith(i,r)}};if(1>=e&&(W(t,o.done(s(n)).resolve,o.reject),"pending"===o.state()||A.isFunction(r[n]&&r[n].then)))return o.then();for(;n--;)W(r[n],s(n),o.reject);return o.promise()}});var U=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;A.Deferred.exceptionHook=function(t,e){r.console&&r.console.warn&&t&&U.test(t.name)&&r.console.warn("jQuery.Deferred exception: "+t.message,t.stack,e)};var q=A.Deferred();function G(){a.removeEventListener("DOMContentLoaded",G),r.removeEventListener("load",G),A.ready()}A.fn.ready=function(t){return q.then(t),this},A.extend({isReady:!1,readyWait:1,holdReady:function(t){t?A.readyWait++:A.ready(!0)},ready:function(t){(!0===t?--A.readyWait:A.isReady)||(A.isReady=!0,!0!==t&&--A.readyWait>0||q.resolveWith(a,[A]))}}),A.ready.then=q.then,"complete"===a.readyState||"loading"!==a.readyState&&!a.documentElement.doScroll?r.setTimeout(A.ready):(a.addEventListener("DOMContentLoaded",G),r.addEventListener("load",G));var X=function(t,e,n,i,r,o,s){var a=0,l=t.length,u=null==n;if("object"===A.type(n))for(a in r=!0,n)X(t,e,a,n[a],!0,o,s);else if(void 0!==i&&(r=!0,A.isFunction(i)||(s=!0),u&&(s?(e.call(t,i),e=null):(u=e,e=function(t,e,n){return u.call(A(t),n)})),e))for(;l>a;a++)e(t[a],n,s?i:i.call(t[a],a,e(t[a],n)));return r?t:u?e.call(t):l?e(t[0],n):o},Y=function(t){return 1===t.nodeType||9===t.nodeType||!+t.nodeType};function Q(){this.expando=A.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(t){var e=t[this.expando];return e||(e={},Y(t)&&(t.nodeType?t[this.expando]=e:Object.defineProperty(t,this.expando,{value:e,configurable:!0}))),e},set:function(t,e,n){var i,r=this.cache(t);if("string"==typeof e)r[A.camelCase(e)]=n;else for(i in e)r[A.camelCase(i)]=e[i];return r},get:function(t,e){return void 0===e?this.cache(t):t[this.expando]&&t[this.expando][A.camelCase(e)]},access:function(t,e,n){return void 0===e||e&&"string"==typeof e&&void 0===n?this.get(t,e):(this.set(t,e,n),void 0!==n?n:e)},remove:function(t,e){var n,i=t[this.expando];if(void 0!==i){if(void 0!==e){n=(e=A.isArray(e)?e.map(A.camelCase):(e=A.camelCase(e))in i?[e]:e.match(F)||[]).length;for(;n--;)delete i[e[n]]}(void 0===e||A.isEmptyObject(i))&&(t.nodeType?t[this.expando]=void 0:delete t[this.expando])}},hasData:function(t){var e=t[this.expando];return void 0!==e&&!A.isEmptyObject(e)}};var K=new Q,Z=new Q,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,$=/[A-Z]/g;function tt(t,e,n){var i;if(void 0===n&&1===t.nodeType)if(i="data-"+e.replace($,"-$&").toLowerCase(),"string"==typeof(n=t.getAttribute(i))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:J.test(n)?JSON.parse(n):n)}catch(t){}Z.set(t,e,n)}else n=void 0;return n}A.extend({hasData:function(t){return Z.hasData(t)||K.hasData(t)},data:function(t,e,n){return Z.access(t,e,n)},removeData:function(t,e){Z.remove(t,e)},_data:function(t,e,n){return K.access(t,e,n)},_removeData:function(t,e){K.remove(t,e)}}),A.fn.extend({data:function(t,e){var n,i,r,o=this[0],s=o&&o.attributes;if(void 0===t){if(this.length&&(r=Z.get(o),1===o.nodeType&&!K.get(o,"hasDataAttrs"))){for(n=s.length;n--;)s[n]&&0===(i=s[n].name).indexOf("data-")&&(i=A.camelCase(i.slice(5)),tt(o,i,r[i]));K.set(o,"hasDataAttrs",!0)}return r}return"object"==typeof t?this.each((function(){Z.set(this,t)})):X(this,(function(e){var n;if(o&&void 0===e){if(void 0!==(n=Z.get(o,t)))return n;if(void 0!==(n=tt(o,t)))return n}else this.each((function(){Z.set(this,t,e)}))}),null,e,arguments.length>1,null,!0)},removeData:function(t){return this.each((function(){Z.remove(this,t)}))}}),A.extend({queue:function(t,e,n){var i;return t?(e=(e||"fx")+"queue",i=K.get(t,e),n&&(!i||A.isArray(n)?i=K.access(t,e,A.makeArray(n)):i.push(n)),i||[]):void 0},dequeue:function(t,e){e=e||"fx";var n=A.queue(t,e),i=n.length,r=n.shift(),o=A._queueHooks(t,e);"inprogress"===r&&(r=n.shift(),i--),r&&("fx"===e&&n.unshift("inprogress"),delete o.stop,r.call(t,(function(){A.dequeue(t,e)}),o)),!i&&o&&o.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return K.get(t,n)||K.access(t,n,{empty:A.Callbacks("once memory").add((function(){K.remove(t,[e+"queue",n])}))})}}),A.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.lengtho;o++)(i=t[o]).style&&(n=i.style.display,e?("none"===n&&(r[o]=K.get(i,"display")||null,r[o]||(i.style.display="")),""===i.style.display&&rt(i)&&(r[o]=lt(i))):"none"!==n&&(r[o]="none",K.set(i,"display",n)));for(o=0;s>o;o++)null!=r[o]&&(t[o].style.display=r[o]);return t}A.fn.extend({show:function(){return ut(this,!0)},hide:function(){return ut(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each((function(){rt(this)?A(this).show():A(this).hide()}))}});var ct=/^(?:checkbox|radio)$/i,ht=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,dt=/^$|\/(?:java|ecma)script/i,pt={option:[1,""],thead:[1,"","
            "],col:[2,"","
            "],tr:[2,"","
            "],td:[3,"","
            "],_default:[0,"",""]};function ft(t,e){var n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[];return void 0===e||e&&A.nodeName(t,e)?A.merge([t],n):n}function gt(t,e){for(var n=0,i=t.length;i>n;n++)K.set(t[n],"globalEval",!e||K.get(e[n],"globalEval"))}pt.optgroup=pt.option,pt.tbody=pt.tfoot=pt.colgroup=pt.caption=pt.thead,pt.th=pt.td;var mt=/<|&#?\w+;/;function vt(t,e,n,i,r){for(var o,s,a,l,u,c,h=e.createDocumentFragment(),d=[],p=0,f=t.length;f>p;p++)if((o=t[p])||0===o)if("object"===A.type(o))A.merge(d,o.nodeType?[o]:o);else if(mt.test(o)){for(s=s||h.appendChild(e.createElement("div")),a=(ht.exec(o)||["",""])[1].toLowerCase(),l=pt[a]||pt._default,s.innerHTML=l[1]+A.htmlPrefilter(o)+l[2],c=l[0];c--;)s=s.lastChild;A.merge(d,s.childNodes),(s=h.firstChild).textContent=""}else d.push(e.createTextNode(o));for(h.textContent="",p=0;o=d[p++];)if(i&&A.inArray(o,i)>-1)r&&r.push(o);else if(u=A.contains(o.ownerDocument,o),s=ft(h.appendChild(o),"script"),u&>(s),n)for(c=0;o=s[c++];)dt.test(o.type||"")&&n.push(o);return h}!function(){var t=a.createDocumentFragment().appendChild(a.createElement("div")),e=a.createElement("input");e.setAttribute("type","radio"),e.setAttribute("checked","checked"),e.setAttribute("name","t"),t.appendChild(e),b.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",b.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var bt=a.documentElement,yt=/^key/,xt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,At=/^([^.]*)(?:\.(.+)|)/;function wt(){return!0}function _t(){return!1}function Ct(){try{return a.activeElement}catch(t){}}function kt(t,e,n,i,r,o){var s,a;if("object"==typeof e){for(a in"string"!=typeof n&&(i=i||n,n=void 0),e)kt(t,a,n,i,e[a],o);return t}if(null==i&&null==r?(r=n,i=n=void 0):null==r&&("string"==typeof n?(r=i,i=void 0):(r=i,i=n,n=void 0)),!1===r)r=_t;else if(!r)return t;return 1===o&&(s=r,r=function(t){return A().off(t),s.apply(this,arguments)},r.guid=s.guid||(s.guid=A.guid++)),t.each((function(){A.event.add(this,e,r,i,n)}))}A.event={global:{},add:function(t,e,n,i,r){var o,s,a,l,u,c,h,d,p,f,g,m=K.get(t);if(m)for(n.handler&&(n=(o=n).handler,r=o.selector),r&&A.find.matchesSelector(bt,r),n.guid||(n.guid=A.guid++),(l=m.events)||(l=m.events={}),(s=m.handle)||(s=m.handle=function(e){return void 0!==A&&A.event.triggered!==e.type?A.event.dispatch.apply(t,arguments):void 0}),u=(e=(e||"").match(F)||[""]).length;u--;)p=g=(a=At.exec(e[u])||[])[1],f=(a[2]||"").split(".").sort(),p&&(h=A.event.special[p]||{},p=(r?h.delegateType:h.bindType)||p,h=A.event.special[p]||{},c=A.extend({type:p,origType:g,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&A.expr.match.needsContext.test(r),namespace:f.join(".")},o),(d=l[p])||((d=l[p]=[]).delegateCount=0,h.setup&&!1!==h.setup.call(t,i,f,s)||t.addEventListener&&t.addEventListener(p,s)),h.add&&(h.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),r?d.splice(d.delegateCount++,0,c):d.push(c),A.event.global[p]=!0)},remove:function(t,e,n,i,r){var o,s,a,l,u,c,h,d,p,f,g,m=K.hasData(t)&&K.get(t);if(m&&(l=m.events)){for(u=(e=(e||"").match(F)||[""]).length;u--;)if(p=g=(a=At.exec(e[u])||[])[1],f=(a[2]||"").split(".").sort(),p){for(h=A.event.special[p]||{},d=l[p=(i?h.delegateType:h.bindType)||p]||[],a=a[2]&&new RegExp("(^|\\.)"+f.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=d.length;o--;)c=d[o],!r&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||i&&i!==c.selector&&("**"!==i||!c.selector)||(d.splice(o,1),c.selector&&d.delegateCount--,h.remove&&h.remove.call(t,c));s&&!d.length&&(h.teardown&&!1!==h.teardown.call(t,f,m.handle)||A.removeEvent(t,p,m.handle),delete l[p])}else for(p in l)A.event.remove(t,p+e[u],n,i,!0);A.isEmptyObject(l)&&K.remove(t,"handle events")}},dispatch:function(t){var e,n,i,r,o,s,a=A.event.fix(t),l=new Array(arguments.length),u=(K.get(this,"events")||{})[a.type]||[],c=A.event.special[a.type]||{};for(l[0]=a,e=1;en;n++)void 0===i[r=(o=e[n]).selector+" "]&&(i[r]=o.needsContext?A(r,this).index(l)>-1:A.find(r,this,null,[l]).length),i[r]&&i.push(o);i.length&&s.push({elem:l,handlers:i})}return a\x20\t\r\n\f]*)[^>]*)\/>/gi,Dt=/\s*$/g;function Pt(t,e){return A.nodeName(t,"table")&&A.nodeName(11!==e.nodeType?e:e.firstChild,"tr")&&t.getElementsByTagName("tbody")[0]||t}function St(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function jt(t){var e=Tt.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function Ot(t,e){var n,i,r,o,s,a,l,u;if(1===e.nodeType){if(K.hasData(t)&&(o=K.access(t),s=K.set(e,o),u=o.events))for(r in delete s.handle,s.events={},u)for(n=0,i=u[r].length;i>n;n++)A.event.add(e,r,u[r][n]);Z.hasData(t)&&(a=Z.access(t),l=A.extend({},a),Z.set(e,l))}}function Lt(t,e){var n=e.nodeName.toLowerCase();"input"===n&&ct.test(t.type)?e.checked=t.checked:"input"!==n&&"textarea"!==n||(e.defaultValue=t.defaultValue)}function Nt(t,e,n,i){e=c.apply([],e);var r,o,s,a,l,u,h=0,d=t.length,p=d-1,f=e[0],g=A.isFunction(f);if(g||d>1&&"string"==typeof f&&!b.checkClone&&Mt.test(f))return t.each((function(r){var o=t.eq(r);g&&(e[0]=f.call(this,r,o.html())),Nt(o,e,n,i)}));if(d&&(o=(r=vt(e,t[0].ownerDocument,!1,t,i)).firstChild,1===r.childNodes.length&&(r=o),o||i)){for(a=(s=A.map(ft(r,"script"),St)).length;d>h;h++)l=r,h!==p&&(l=A.clone(l,!0,!0),a&&A.merge(s,ft(l,"script"))),n.call(t[h],l,h);if(a)for(u=s[s.length-1].ownerDocument,A.map(s,jt),h=0;a>h;h++)l=s[h],dt.test(l.type||"")&&!K.access(l,"globalEval")&&A.contains(u,l)&&(l.src?A._evalUrl&&A._evalUrl(l.src):y(l.textContent.replace(It,""),u))}return t}function Rt(t,e,n){for(var i,r=e?A.filter(e,t):t,o=0;null!=(i=r[o]);o++)n||1!==i.nodeType||A.cleanData(ft(i)),i.parentNode&&(n&&A.contains(i.ownerDocument,i)&>(ft(i,"script")),i.parentNode.removeChild(i));return t}A.extend({htmlPrefilter:function(t){return t.replace(Et,"<$1>")},clone:function(t,e,n){var i,r,o,s,a=t.cloneNode(!0),l=A.contains(t.ownerDocument,t);if(!(b.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||A.isXMLDoc(t)))for(s=ft(a),i=0,r=(o=ft(t)).length;r>i;i++)Lt(o[i],s[i]);if(e)if(n)for(o=o||ft(t),s=s||ft(a),i=0,r=o.length;r>i;i++)Ot(o[i],s[i]);else Ot(t,a);return(s=ft(a,"script")).length>0&>(s,!l&&ft(t,"script")),a},cleanData:function(t){for(var e,n,i,r=A.event.special,o=0;void 0!==(n=t[o]);o++)if(Y(n)){if(e=n[K.expando]){if(e.events)for(i in e.events)r[i]?A.event.remove(n,i):A.removeEvent(n,i,e.handle);n[K.expando]=void 0}n[Z.expando]&&(n[Z.expando]=void 0)}}}),A.fn.extend({detach:function(t){return Rt(this,t,!0)},remove:function(t){return Rt(this,t)},text:function(t){return X(this,(function(t){return void 0===t?A.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)}))}),null,t,arguments.length)},append:function(){return Nt(this,arguments,(function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Pt(this,t).appendChild(t)}))},prepend:function(){return Nt(this,arguments,(function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=Pt(this,t);e.insertBefore(t,e.firstChild)}}))},before:function(){return Nt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this)}))},after:function(){return Nt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)}))},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(A.cleanData(ft(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map((function(){return A.clone(this,t,e)}))},html:function(t){return X(this,(function(t){var e=this[0]||{},n=0,i=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!Dt.test(t)&&!pt[(ht.exec(t)||["",""])[1].toLowerCase()]){t=A.htmlPrefilter(t);try{for(;i>n;n++)1===(e=this[n]||{}).nodeType&&(A.cleanData(ft(e,!1)),e.innerHTML=t);e=0}catch(t){}}e&&this.empty().append(t)}),null,t,arguments.length)},replaceWith:function(){var t=[];return Nt(this,arguments,(function(e){var n=this.parentNode;A.inArray(this,t)<0&&(A.cleanData(ft(this)),n&&n.replaceChild(e,this))}),t)}}),A.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},(function(t,e){A.fn[t]=function(t){for(var n,i=[],r=A(t),o=r.length-1,s=0;o>=s;s++)n=s===o?this:this.clone(!0),A(r[s])[e](n),h.apply(i,n.get());return this.pushStack(i)}}));var zt=/^margin/,Ht=new RegExp("^("+et+")(?!px)[a-z%]+$","i"),Ft=function(t){var e=t.ownerDocument.defaultView;return e&&e.opener||(e=r),e.getComputedStyle(t)};function Vt(t,e,n){var i,r,o,s,a=t.style;return(n=n||Ft(t))&&(""!==(s=n.getPropertyValue(e)||n[e])||A.contains(t.ownerDocument,t)||(s=A.style(t,e)),!b.pixelMarginRight()&&Ht.test(s)&&zt.test(e)&&(i=a.width,r=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=i,a.minWidth=r,a.maxWidth=o)),void 0!==s?s+"":s}function Bt(t,e){return{get:function(){return t()?void delete this.get:(this.get=e).apply(this,arguments)}}}!function(){function t(){if(l){l.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",l.innerHTML="",bt.appendChild(s);var t=r.getComputedStyle(l);e="1%"!==t.top,o="2px"===t.marginLeft,n="4px"===t.width,l.style.marginRight="50%",i="4px"===t.marginRight,bt.removeChild(s),l=null}}var e,n,i,o,s=a.createElement("div"),l=a.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",b.clearCloneStyle="content-box"===l.style.backgroundClip,s.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",s.appendChild(l),A.extend(b,{pixelPosition:function(){return t(),e},boxSizingReliable:function(){return t(),n},pixelMarginRight:function(){return t(),i},reliableMarginLeft:function(){return t(),o}}))}();var Wt=/^(none|table(?!-c[ea]).+)/,Ut={position:"absolute",visibility:"hidden",display:"block"},qt={letterSpacing:"0",fontWeight:"400"},Gt=["Webkit","Moz","ms"],Xt=a.createElement("div").style;function Yt(t){if(t in Xt)return t;for(var e=t[0].toUpperCase()+t.slice(1),n=Gt.length;n--;)if((t=Gt[n]+e)in Xt)return t}function Qt(t,e,n){var i=nt.exec(e);return i?Math.max(0,i[2]-(n||0))+(i[3]||"px"):e}function Kt(t,e,n,i,r){for(var o=n===(i?"border":"content")?4:"width"===e?1:0,s=0;4>o;o+=2)"margin"===n&&(s+=A.css(t,n+it[o],!0,r)),i?("content"===n&&(s-=A.css(t,"padding"+it[o],!0,r)),"margin"!==n&&(s-=A.css(t,"border"+it[o]+"Width",!0,r))):(s+=A.css(t,"padding"+it[o],!0,r),"padding"!==n&&(s+=A.css(t,"border"+it[o]+"Width",!0,r)));return s}function Zt(t,e,n){var i,r=!0,o=Ft(t),s="border-box"===A.css(t,"boxSizing",!1,o);if(t.getClientRects().length&&(i=t.getBoundingClientRect()[e]),0>=i||null==i){if((0>(i=Vt(t,e,o))||null==i)&&(i=t.style[e]),Ht.test(i))return i;r=s&&(b.boxSizingReliable()||i===t.style[e]),i=parseFloat(i)||0}return i+Kt(t,e,n||(s?"border":"content"),r,o)+"px"}function Jt(t,e,n,i,r){return new Jt.prototype.init(t,e,n,i,r)}A.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=Vt(t,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:"cssFloat"},style:function(t,e,n,i){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var r,o,s,a=A.camelCase(e),l=t.style;return e=A.cssProps[a]||(A.cssProps[a]=Yt(a)||a),s=A.cssHooks[e]||A.cssHooks[a],void 0===n?s&&"get"in s&&void 0!==(r=s.get(t,!1,i))?r:l[e]:("string"==(o=typeof n)&&(r=nt.exec(n))&&r[1]&&(n=st(t,e,r),o="number"),void(null!=n&&n==n&&("number"===o&&(n+=r&&r[3]||(A.cssNumber[a]?"":"px")),b.clearCloneStyle||""!==n||0!==e.indexOf("background")||(l[e]="inherit"),s&&"set"in s&&void 0===(n=s.set(t,n,i))||(l[e]=n))))}},css:function(t,e,n,i){var r,o,s,a=A.camelCase(e);return e=A.cssProps[a]||(A.cssProps[a]=Yt(a)||a),(s=A.cssHooks[e]||A.cssHooks[a])&&"get"in s&&(r=s.get(t,!0,n)),void 0===r&&(r=Vt(t,e,i)),"normal"===r&&e in qt&&(r=qt[e]),""===n||n?(o=parseFloat(r),!0===n||isFinite(o)?o||0:r):r}}),A.each(["height","width"],(function(t,e){A.cssHooks[e]={get:function(t,n,i){return n?!Wt.test(A.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?Zt(t,e,i):ot(t,Ut,(function(){return Zt(t,e,i)})):void 0},set:function(t,n,i){var r,o=i&&Ft(t),s=i&&Kt(t,e,i,"border-box"===A.css(t,"boxSizing",!1,o),o);return s&&(r=nt.exec(n))&&"px"!==(r[3]||"px")&&(t.style[e]=n,n=A.css(t,e)),Qt(0,n,s)}}})),A.cssHooks.marginLeft=Bt(b.reliableMarginLeft,(function(t,e){return e?(parseFloat(Vt(t,"marginLeft"))||t.getBoundingClientRect().left-ot(t,{marginLeft:0},(function(){return t.getBoundingClientRect().left})))+"px":void 0})),A.each({margin:"",padding:"",border:"Width"},(function(t,e){A.cssHooks[t+e]={expand:function(n){for(var i=0,r={},o="string"==typeof n?n.split(" "):[n];4>i;i++)r[t+it[i]+e]=o[i]||o[i-2]||o[0];return r}},zt.test(t)||(A.cssHooks[t+e].set=Qt)})),A.fn.extend({css:function(t,e){return X(this,(function(t,e,n){var i,r,o={},s=0;if(A.isArray(e)){for(i=Ft(t),r=e.length;r>s;s++)o[e[s]]=A.css(t,e[s],!1,i);return o}return void 0!==n?A.style(t,e,n):A.css(t,e)}),t,e,arguments.length>1)}}),A.Tween=Jt,Jt.prototype={constructor:Jt,init:function(t,e,n,i,r,o){this.elem=t,this.prop=n,this.easing=r||A.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=i,this.unit=o||(A.cssNumber[n]?"":"px")},cur:function(){var t=Jt.propHooks[this.prop];return t&&t.get?t.get(this):Jt.propHooks._default.get(this)},run:function(t){var e,n=Jt.propHooks[this.prop];return this.options.duration?this.pos=e=A.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Jt.propHooks._default.set(this),this}},Jt.prototype.init.prototype=Jt.prototype,Jt.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=A.css(t.elem,t.prop,""))&&"auto"!==e?e:0},set:function(t){A.fx.step[t.prop]?A.fx.step[t.prop](t):1!==t.elem.nodeType||null==t.elem.style[A.cssProps[t.prop]]&&!A.cssHooks[t.prop]?t.elem[t.prop]=t.now:A.style(t.elem,t.prop,t.now+t.unit)}}},Jt.propHooks.scrollTop=Jt.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},A.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},A.fx=Jt.prototype.init,A.fx.step={};var $t,te,ee=/^(?:toggle|show|hide)$/,ne=/queueHooks$/;function ie(){te&&(r.requestAnimationFrame(ie),A.fx.tick())}function re(){return r.setTimeout((function(){$t=void 0})),$t=A.now()}function oe(t,e){var n,i=0,r={height:t};for(e=e?1:0;4>i;i+=2-e)r["margin"+(n=it[i])]=r["padding"+n]=t;return e&&(r.opacity=r.width=t),r}function se(t,e,n){for(var i,r=(ae.tweeners[e]||[]).concat(ae.tweeners["*"]),o=0,s=r.length;s>o;o++)if(i=r[o].call(n,e,t))return i}function ae(t,e,n){var i,r,o=0,s=ae.prefilters.length,a=A.Deferred().always((function(){delete l.elem})),l=function(){if(r)return!1;for(var e=$t||re(),n=Math.max(0,u.startTime+u.duration-e),i=1-(n/u.duration||0),o=0,s=u.tweens.length;s>o;o++)u.tweens[o].run(i);return a.notifyWith(t,[u,i,n]),1>i&&s?n:(a.resolveWith(t,[u]),!1)},u=a.promise({elem:t,props:A.extend({},e),opts:A.extend(!0,{specialEasing:{},easing:A.easing._default},n),originalProperties:e,originalOptions:n,startTime:$t||re(),duration:n.duration,tweens:[],createTween:function(e,n){var i=A.Tween(t,u.opts,e,n,u.opts.specialEasing[e]||u.opts.easing);return u.tweens.push(i),i},stop:function(e){var n=0,i=e?u.tweens.length:0;if(r)return this;for(r=!0;i>n;n++)u.tweens[n].run(1);return e?(a.notifyWith(t,[u,1,0]),a.resolveWith(t,[u,e])):a.rejectWith(t,[u,e]),this}}),c=u.props;for(function(t,e){var n,i,r,o,s;for(n in t)if(r=e[i=A.camelCase(n)],o=t[n],A.isArray(o)&&(r=o[1],o=t[n]=o[0]),n!==i&&(t[i]=o,delete t[n]),(s=A.cssHooks[i])&&"expand"in s)for(n in o=s.expand(o),delete t[i],o)n in t||(t[n]=o[n],e[n]=r);else e[i]=r}(c,u.opts.specialEasing);s>o;o++)if(i=ae.prefilters[o].call(u,t,c,u.opts))return A.isFunction(i.stop)&&(A._queueHooks(u.elem,u.opts.queue).stop=A.proxy(i.stop,i)),i;return A.map(c,se,u),A.isFunction(u.opts.start)&&u.opts.start.call(t,u),A.fx.timer(A.extend(l,{elem:t,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}A.Animation=A.extend(ae,{tweeners:{"*":[function(t,e){var n=this.createTween(t,e);return st(n.elem,t,nt.exec(e),n),n}]},tweener:function(t,e){A.isFunction(t)?(e=t,t=["*"]):t=t.match(F);for(var n,i=0,r=t.length;r>i;i++)n=t[i],ae.tweeners[n]=ae.tweeners[n]||[],ae.tweeners[n].unshift(e)},prefilters:[function(t,e,n){var i,r,o,s,a,l,u,c,h="width"in e||"height"in e,d=this,p={},f=t.style,g=t.nodeType&&rt(t),m=K.get(t,"fxshow");for(i in n.queue||(null==(s=A._queueHooks(t,"fx")).unqueued&&(s.unqueued=0,a=s.empty.fire,s.empty.fire=function(){s.unqueued||a()}),s.unqueued++,d.always((function(){d.always((function(){s.unqueued--,A.queue(t,"fx").length||s.empty.fire()}))}))),e)if(r=e[i],ee.test(r)){if(delete e[i],o=o||"toggle"===r,r===(g?"hide":"show")){if("show"!==r||!m||void 0===m[i])continue;g=!0}p[i]=m&&m[i]||A.style(t,i)}if((l=!A.isEmptyObject(e))||!A.isEmptyObject(p))for(i in h&&1===t.nodeType&&(n.overflow=[f.overflow,f.overflowX,f.overflowY],null==(u=m&&m.display)&&(u=K.get(t,"display")),"none"===(c=A.css(t,"display"))&&(u?c=u:(ut([t],!0),u=t.style.display||u,c=A.css(t,"display"),ut([t]))),("inline"===c||"inline-block"===c&&null!=u)&&"none"===A.css(t,"float")&&(l||(d.done((function(){f.display=u})),null==u&&(c=f.display,u="none"===c?"":c)),f.display="inline-block")),n.overflow&&(f.overflow="hidden",d.always((function(){f.overflow=n.overflow[0],f.overflowX=n.overflow[1],f.overflowY=n.overflow[2]}))),l=!1,p)l||(m?"hidden"in m&&(g=m.hidden):m=K.access(t,"fxshow",{display:u}),o&&(m.hidden=!g),g&&ut([t],!0),d.done((function(){for(i in g||ut([t]),K.remove(t,"fxshow"),p)A.style(t,i,p[i])}))),l=se(g?m[i]:0,i,d),i in m||(m[i]=l.start,g&&(l.end=l.start,l.start=0))}],prefilter:function(t,e){e?ae.prefilters.unshift(t):ae.prefilters.push(t)}}),A.speed=function(t,e,n){var i=t&&"object"==typeof t?A.extend({},t):{complete:n||!n&&e||A.isFunction(t)&&t,duration:t,easing:n&&e||e&&!A.isFunction(e)&&e};return A.fx.off||a.hidden?i.duration=0:i.duration="number"==typeof i.duration?i.duration:i.duration in A.fx.speeds?A.fx.speeds[i.duration]:A.fx.speeds._default,null!=i.queue&&!0!==i.queue||(i.queue="fx"),i.old=i.complete,i.complete=function(){A.isFunction(i.old)&&i.old.call(this),i.queue&&A.dequeue(this,i.queue)},i},A.fn.extend({fadeTo:function(t,e,n,i){return this.filter(rt).css("opacity",0).show().end().animate({opacity:e},t,n,i)},animate:function(t,e,n,i){var r=A.isEmptyObject(t),o=A.speed(e,n,i),s=function(){var e=ae(this,A.extend({},t),o);(r||K.get(this,"finish"))&&e.stop(!0)};return s.finish=s,r||!1===o.queue?this.each(s):this.queue(o.queue,s)},stop:function(t,e,n){var i=function(t){var e=t.stop;delete t.stop,e(n)};return"string"!=typeof t&&(n=e,e=t,t=void 0),e&&!1!==t&&this.queue(t||"fx",[]),this.each((function(){var e=!0,r=null!=t&&t+"queueHooks",o=A.timers,s=K.get(this);if(r)s[r]&&s[r].stop&&i(s[r]);else for(r in s)s[r]&&s[r].stop&&ne.test(r)&&i(s[r]);for(r=o.length;r--;)o[r].elem!==this||null!=t&&o[r].queue!==t||(o[r].anim.stop(n),e=!1,o.splice(r,1));!e&&n||A.dequeue(this,t)}))},finish:function(t){return!1!==t&&(t=t||"fx"),this.each((function(){var e,n=K.get(this),i=n[t+"queue"],r=n[t+"queueHooks"],o=A.timers,s=i?i.length:0;for(n.finish=!0,A.queue(this,t,[]),r&&r.stop&&r.stop.call(this,!0),e=o.length;e--;)o[e].elem===this&&o[e].queue===t&&(o[e].anim.stop(!0),o.splice(e,1));for(e=0;s>e;e++)i[e]&&i[e].finish&&i[e].finish.call(this);delete n.finish}))}}),A.each(["toggle","show","hide"],(function(t,e){var n=A.fn[e];A.fn[e]=function(t,i,r){return null==t||"boolean"==typeof t?n.apply(this,arguments):this.animate(oe(e,!0),t,i,r)}})),A.each({slideDown:oe("show"),slideUp:oe("hide"),slideToggle:oe("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},(function(t,e){A.fn[t]=function(t,n,i){return this.animate(e,t,n,i)}})),A.timers=[],A.fx.tick=function(){var t,e=0,n=A.timers;for($t=A.now();e1)},removeAttr:function(t){return this.each((function(){A.removeAttr(this,t)}))}}),A.extend({attr:function(t,e,n){var i,r,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===t.getAttribute?A.prop(t,e,n):(1===o&&A.isXMLDoc(t)||(r=A.attrHooks[e.toLowerCase()]||(A.expr.match.bool.test(e)?le:void 0)),void 0!==n?null===n?void A.removeAttr(t,e):r&&"set"in r&&void 0!==(i=r.set(t,n,e))?i:(t.setAttribute(e,n+""),n):r&&"get"in r&&null!==(i=r.get(t,e))?i:null==(i=A.find.attr(t,e))?void 0:i)},attrHooks:{type:{set:function(t,e){if(!b.radioValue&&"radio"===e&&A.nodeName(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,i=0,r=e&&e.match(F);if(r&&1===t.nodeType)for(;n=r[i++];)t.removeAttribute(n)}}),le={set:function(t,e,n){return!1===e?A.removeAttr(t,n):t.setAttribute(n,n),n}},A.each(A.expr.match.bool.source.match(/\w+/g),(function(t,e){var n=ue[e]||A.find.attr;ue[e]=function(t,e,i){var r,o,s=e.toLowerCase();return i||(o=ue[s],ue[s]=r,r=null!=n(t,e,i)?s:null,ue[s]=o),r}}));var ce=/^(?:input|select|textarea|button)$/i,he=/^(?:a|area)$/i;A.fn.extend({prop:function(t,e){return X(this,A.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each((function(){delete this[A.propFix[t]||t]}))}}),A.extend({prop:function(t,e,n){var i,r,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&A.isXMLDoc(t)||(e=A.propFix[e]||e,r=A.propHooks[e]),void 0!==n?r&&"set"in r&&void 0!==(i=r.set(t,n,e))?i:t[e]=n:r&&"get"in r&&null!==(i=r.get(t,e))?i:t[e]},propHooks:{tabIndex:{get:function(t){var e=A.find.attr(t,"tabindex");return e?parseInt(e,10):ce.test(t.nodeName)||he.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),b.optSelected||(A.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),A.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){A.propFix[this.toLowerCase()]=this}));var de=/[\t\r\n\f]/g;function pe(t){return t.getAttribute&&t.getAttribute("class")||""}A.fn.extend({addClass:function(t){var e,n,i,r,o,s,a,l=0;if(A.isFunction(t))return this.each((function(e){A(this).addClass(t.call(this,e,pe(this)))}));if("string"==typeof t&&t)for(e=t.match(F)||[];n=this[l++];)if(r=pe(n),i=1===n.nodeType&&(" "+r+" ").replace(de," ")){for(s=0;o=e[s++];)i.indexOf(" "+o+" ")<0&&(i+=o+" ");r!==(a=A.trim(i))&&n.setAttribute("class",a)}return this},removeClass:function(t){var e,n,i,r,o,s,a,l=0;if(A.isFunction(t))return this.each((function(e){A(this).removeClass(t.call(this,e,pe(this)))}));if(!arguments.length)return this.attr("class","");if("string"==typeof t&&t)for(e=t.match(F)||[];n=this[l++];)if(r=pe(n),i=1===n.nodeType&&(" "+r+" ").replace(de," ")){for(s=0;o=e[s++];)for(;i.indexOf(" "+o+" ")>-1;)i=i.replace(" "+o+" "," ");r!==(a=A.trim(i))&&n.setAttribute("class",a)}return this},toggleClass:function(t,e){var n=typeof t;return"boolean"==typeof e&&"string"===n?e?this.addClass(t):this.removeClass(t):A.isFunction(t)?this.each((function(n){A(this).toggleClass(t.call(this,n,pe(this),e),e)})):this.each((function(){var e,i,r,o;if("string"===n)for(i=0,r=A(this),o=t.match(F)||[];e=o[i++];)r.hasClass(e)?r.removeClass(e):r.addClass(e);else void 0!==t&&"boolean"!==n||((e=pe(this))&&K.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===t?"":K.get(this,"__className__")||""))}))},hasClass:function(t){var e,n,i=0;for(e=" "+t+" ";n=this[i++];)if(1===n.nodeType&&(" "+pe(n)+" ").replace(de," ").indexOf(e)>-1)return!0;return!1}});var fe=/\r/g,ge=/[\x20\t\r\n\f]+/g;A.fn.extend({val:function(t){var e,n,i,r=this[0];return arguments.length?(i=A.isFunction(t),this.each((function(n){var r;1===this.nodeType&&(null==(r=i?t.call(this,n,A(this).val()):t)?r="":"number"==typeof r?r+="":A.isArray(r)&&(r=A.map(r,(function(t){return null==t?"":t+""}))),(e=A.valHooks[this.type]||A.valHooks[this.nodeName.toLowerCase()])&&"set"in e&&void 0!==e.set(this,r,"value")||(this.value=r))}))):r?(e=A.valHooks[r.type]||A.valHooks[r.nodeName.toLowerCase()])&&"get"in e&&void 0!==(n=e.get(r,"value"))?n:"string"==typeof(n=r.value)?n.replace(fe,""):null==n?"":n:void 0}}),A.extend({valHooks:{option:{get:function(t){var e=A.find.attr(t,"value");return null!=e?e:A.trim(A.text(t)).replace(ge," ")}},select:{get:function(t){for(var e,n,i=t.options,r=t.selectedIndex,o="select-one"===t.type,s=o?null:[],a=o?r+1:i.length,l=0>r?a:o?r:0;a>l;l++)if(((n=i[l]).selected||l===r)&&!n.disabled&&(!n.parentNode.disabled||!A.nodeName(n.parentNode,"optgroup"))){if(e=A(n).val(),o)return e;s.push(e)}return s},set:function(t,e){for(var n,i,r=t.options,o=A.makeArray(e),s=r.length;s--;)((i=r[s]).selected=A.inArray(A.valHooks.option.get(i),o)>-1)&&(n=!0);return n||(t.selectedIndex=-1),o}}}}),A.each(["radio","checkbox"],(function(){A.valHooks[this]={set:function(t,e){return A.isArray(e)?t.checked=A.inArray(A(t).val(),e)>-1:void 0}},b.checkOn||(A.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})}));var me=/^(?:focusinfocus|focusoutblur)$/;A.extend(A.event,{trigger:function(t,e,n,i){var o,s,l,u,c,h,d,p=[n||a],f=g.call(t,"type")?t.type:t,m=g.call(t,"namespace")?t.namespace.split("."):[];if(s=l=n=n||a,3!==n.nodeType&&8!==n.nodeType&&!me.test(f+A.event.triggered)&&(f.indexOf(".")>-1&&(m=f.split("."),f=m.shift(),m.sort()),c=f.indexOf(":")<0&&"on"+f,(t=t[A.expando]?t:new A.Event(f,"object"==typeof t&&t)).isTrigger=i?2:3,t.namespace=m.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=n),e=null==e?[t]:A.makeArray(e,[t]),d=A.event.special[f]||{},i||!d.trigger||!1!==d.trigger.apply(n,e))){if(!i&&!d.noBubble&&!A.isWindow(n)){for(u=d.delegateType||f,me.test(u+f)||(s=s.parentNode);s;s=s.parentNode)p.push(s),l=s;l===(n.ownerDocument||a)&&p.push(l.defaultView||l.parentWindow||r)}for(o=0;(s=p[o++])&&!t.isPropagationStopped();)t.type=o>1?u:d.bindType||f,(h=(K.get(s,"events")||{})[t.type]&&K.get(s,"handle"))&&h.apply(s,e),(h=c&&s[c])&&h.apply&&Y(s)&&(t.result=h.apply(s,e),!1===t.result&&t.preventDefault());return t.type=f,i||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(p.pop(),e)||!Y(n)||c&&A.isFunction(n[f])&&!A.isWindow(n)&&((l=n[c])&&(n[c]=null),A.event.triggered=f,n[f](),A.event.triggered=void 0,l&&(n[c]=l)),t.result}},simulate:function(t,e,n){var i=A.extend(new A.Event,n,{type:t,isSimulated:!0});A.event.trigger(i,null,e)}}),A.fn.extend({trigger:function(t,e){return this.each((function(){A.event.trigger(t,e,this)}))},triggerHandler:function(t,e){var n=this[0];return n?A.event.trigger(t,e,n,!0):void 0}}),A.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),(function(t,e){A.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}})),A.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),b.focusin="onfocusin"in r,b.focusin||A.each({focus:"focusin",blur:"focusout"},(function(t,e){var n=function(t){A.event.simulate(e,t.target,A.event.fix(t))};A.event.special[e]={setup:function(){var i=this.ownerDocument||this,r=K.access(i,e);r||i.addEventListener(t,n,!0),K.access(i,e,(r||0)+1)},teardown:function(){var i=this.ownerDocument||this,r=K.access(i,e)-1;r?K.access(i,e,r):(i.removeEventListener(t,n,!0),K.remove(i,e))}}}));var ve=r.location,be=A.now(),ye=/\?/;A.parseXML=function(t){var e;if(!t||"string"!=typeof t)return null;try{e=(new r.DOMParser).parseFromString(t,"text/xml")}catch(t){e=void 0}return e&&!e.getElementsByTagName("parsererror").length||A.error("Invalid XML: "+t),e};var xe=/\[\]$/,Ae=/\r?\n/g,we=/^(?:submit|button|image|reset|file)$/i,_e=/^(?:input|select|textarea|keygen)/i;function Ce(t,e,n,i){var r;if(A.isArray(e))A.each(e,(function(e,r){n||xe.test(t)?i(t,r):Ce(t+"["+("object"==typeof r&&null!=r?e:"")+"]",r,n,i)}));else if(n||"object"!==A.type(e))i(t,e);else for(r in e)Ce(t+"["+r+"]",e[r],n,i)}A.param=function(t,e){var n,i=[],r=function(t,e){var n=A.isFunction(e)?e():e;i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==n?"":n)};if(A.isArray(t)||t.jquery&&!A.isPlainObject(t))A.each(t,(function(){r(this.name,this.value)}));else for(n in t)Ce(n,t[n],e,r);return i.join("&")},A.fn.extend({serialize:function(){return A.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var t=A.prop(this,"elements");return t?A.makeArray(t):this})).filter((function(){var t=this.type;return this.name&&!A(this).is(":disabled")&&_e.test(this.nodeName)&&!we.test(t)&&(this.checked||!ct.test(t))})).map((function(t,e){var n=A(this).val();return null==n?null:A.isArray(n)?A.map(n,(function(t){return{name:e.name,value:t.replace(Ae,"\r\n")}})):{name:e.name,value:n.replace(Ae,"\r\n")}})).get()}});var ke=/%20/g,Ee=/#.*$/,De=/([?&])_=[^&]*/,Me=/^(.*?):[ \t]*([^\r\n]*)$/gm,Te=/^(?:GET|HEAD)$/,Ie=/^\/\//,Pe={},Se={},je="*/".concat("*"),Oe=a.createElement("a");function Le(t){return function(e,n){"string"!=typeof e&&(n=e,e="*");var i,r=0,o=e.toLowerCase().match(F)||[];if(A.isFunction(n))for(;i=o[r++];)"+"===i[0]?(i=i.slice(1)||"*",(t[i]=t[i]||[]).unshift(n)):(t[i]=t[i]||[]).push(n)}}function Ne(t,e,n,i){var r={},o=t===Se;function s(a){var l;return r[a]=!0,A.each(t[a]||[],(function(t,a){var u=a(e,n,i);return"string"!=typeof u||o||r[u]?o?!(l=u):void 0:(e.dataTypes.unshift(u),s(u),!1)})),l}return s(e.dataTypes[0])||!r["*"]&&s("*")}function Re(t,e){var n,i,r=A.ajaxSettings.flatOptions||{};for(n in e)void 0!==e[n]&&((r[n]?t:i||(i={}))[n]=e[n]);return i&&A.extend(!0,t,i),t}Oe.href=ve.href,A.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ve.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(ve.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":je,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":A.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?Re(Re(t,A.ajaxSettings),e):Re(A.ajaxSettings,t)},ajaxPrefilter:Le(Pe),ajaxTransport:Le(Se),ajax:function(t,e){"object"==typeof t&&(e=t,t=void 0),e=e||{};var n,i,o,s,l,u,c,h,d,p,f=A.ajaxSetup({},e),g=f.context||f,m=f.context&&(g.nodeType||g.jquery)?A(g):A.event,v=A.Deferred(),b=A.Callbacks("once memory"),y=f.statusCode||{},x={},w={},_="canceled",C={readyState:0,getResponseHeader:function(t){var e;if(c){if(!s)for(s={};e=Me.exec(o);)s[e[1].toLowerCase()]=e[2];e=s[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return c?o:null},setRequestHeader:function(t,e){return null==c&&(t=w[t.toLowerCase()]=w[t.toLowerCase()]||t,x[t]=e),this},overrideMimeType:function(t){return null==c&&(f.mimeType=t),this},statusCode:function(t){var e;if(t)if(c)C.always(t[C.status]);else for(e in t)y[e]=[y[e],t[e]];return this},abort:function(t){var e=t||_;return n&&n.abort(e),k(0,e),this}};if(v.promise(C),f.url=((t||f.url||ve.href)+"").replace(Ie,ve.protocol+"//"),f.type=e.method||e.type||f.method||f.type,f.dataTypes=(f.dataType||"*").toLowerCase().match(F)||[""],null==f.crossDomain){u=a.createElement("a");try{u.href=f.url,u.href=u.href,f.crossDomain=Oe.protocol+"//"+Oe.host!=u.protocol+"//"+u.host}catch(t){f.crossDomain=!0}}if(f.data&&f.processData&&"string"!=typeof f.data&&(f.data=A.param(f.data,f.traditional)),Ne(Pe,f,e,C),c)return C;for(d in(h=A.event&&f.global)&&0==A.active++&&A.event.trigger("ajaxStart"),f.type=f.type.toUpperCase(),f.hasContent=!Te.test(f.type),i=f.url.replace(Ee,""),f.hasContent?f.data&&f.processData&&0===(f.contentType||"").indexOf("application/x-www-form-urlencoded")&&(f.data=f.data.replace(ke,"+")):(p=f.url.slice(i.length),f.data&&(i+=(ye.test(i)?"&":"?")+f.data,delete f.data),!1===f.cache&&(i=i.replace(De,""),p=(ye.test(i)?"&":"?")+"_="+be+++p),f.url=i+p),f.ifModified&&(A.lastModified[i]&&C.setRequestHeader("If-Modified-Since",A.lastModified[i]),A.etag[i]&&C.setRequestHeader("If-None-Match",A.etag[i])),(f.data&&f.hasContent&&!1!==f.contentType||e.contentType)&&C.setRequestHeader("Content-Type",f.contentType),C.setRequestHeader("Accept",f.dataTypes[0]&&f.accepts[f.dataTypes[0]]?f.accepts[f.dataTypes[0]]+("*"!==f.dataTypes[0]?", "+je+"; q=0.01":""):f.accepts["*"]),f.headers)C.setRequestHeader(d,f.headers[d]);if(f.beforeSend&&(!1===f.beforeSend.call(g,C,f)||c))return C.abort();if(_="abort",b.add(f.complete),C.done(f.success),C.fail(f.error),n=Ne(Se,f,e,C)){if(C.readyState=1,h&&m.trigger("ajaxSend",[C,f]),c)return C;f.async&&f.timeout>0&&(l=r.setTimeout((function(){C.abort("timeout")}),f.timeout));try{c=!1,n.send(x,k)}catch(t){if(c)throw t;k(-1,t)}}else k(-1,"No Transport");function k(t,e,s,a){var u,d,p,x,w,_=e;c||(c=!0,l&&r.clearTimeout(l),n=void 0,o=a||"",C.readyState=t>0?4:0,u=t>=200&&300>t||304===t,s&&(x=function(t,e,n){for(var i,r,o,s,a=t.contents,l=t.dataTypes;"*"===l[0];)l.shift(),void 0===i&&(i=t.mimeType||e.getResponseHeader("Content-Type"));if(i)for(r in a)if(a[r]&&a[r].test(i)){l.unshift(r);break}if(l[0]in n)o=l[0];else{for(r in n){if(!l[0]||t.converters[r+" "+l[0]]){o=r;break}s||(s=r)}o=o||s}return o?(o!==l[0]&&l.unshift(o),n[o]):void 0}(f,C,s)),x=function(t,e,n,i){var r,o,s,a,l,u={},c=t.dataTypes.slice();if(c[1])for(s in t.converters)u[s.toLowerCase()]=t.converters[s];for(o=c.shift();o;)if(t.responseFields[o]&&(n[t.responseFields[o]]=e),!l&&i&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(!(s=u[l+" "+o]||u["* "+o]))for(r in u)if((a=r.split(" "))[1]===o&&(s=u[l+" "+a[0]]||u["* "+a[0]])){!0===s?s=u[r]:!0!==u[r]&&(o=a[0],c.unshift(a[1]));break}if(!0!==s)if(s&&t.throws)e=s(e);else try{e=s(e)}catch(t){return{state:"parsererror",error:s?t:"No conversion from "+l+" to "+o}}}return{state:"success",data:e}}(f,x,C,u),u?(f.ifModified&&((w=C.getResponseHeader("Last-Modified"))&&(A.lastModified[i]=w),(w=C.getResponseHeader("etag"))&&(A.etag[i]=w)),204===t||"HEAD"===f.type?_="nocontent":304===t?_="notmodified":(_=x.state,d=x.data,u=!(p=x.error))):(p=_,!t&&_||(_="error",0>t&&(t=0))),C.status=t,C.statusText=(e||_)+"",u?v.resolveWith(g,[d,_,C]):v.rejectWith(g,[C,_,p]),C.statusCode(y),y=void 0,h&&m.trigger(u?"ajaxSuccess":"ajaxError",[C,f,u?d:p]),b.fireWith(g,[C,_]),h&&(m.trigger("ajaxComplete",[C,f]),--A.active||A.event.trigger("ajaxStop")))}return C},getJSON:function(t,e,n){return A.get(t,e,n,"json")},getScript:function(t,e){return A.get(t,void 0,e,"script")}}),A.each(["get","post"],(function(t,e){A[e]=function(t,n,i,r){return A.isFunction(n)&&(r=r||i,i=n,n=void 0),A.ajax(A.extend({url:t,type:e,dataType:r,data:n,success:i},A.isPlainObject(t)&&t))}})),A._evalUrl=function(t){return A.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},A.fn.extend({wrapAll:function(t){var e;return this[0]&&(A.isFunction(t)&&(t=t.call(this[0])),e=A(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map((function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t})).append(this)),this},wrapInner:function(t){return A.isFunction(t)?this.each((function(e){A(this).wrapInner(t.call(this,e))})):this.each((function(){var e=A(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)}))},wrap:function(t){var e=A.isFunction(t);return this.each((function(n){A(this).wrapAll(e?t.call(this,n):t)}))},unwrap:function(t){return this.parent(t).not("body").each((function(){A(this).replaceWith(this.childNodes)})),this}}),A.expr.pseudos.hidden=function(t){return!A.expr.pseudos.visible(t)},A.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},A.ajaxSettings.xhr=function(){try{return new r.XMLHttpRequest}catch(t){}};var ze={0:200,1223:204},He=A.ajaxSettings.xhr();b.cors=!!He&&"withCredentials"in He,b.ajax=He=!!He,A.ajaxTransport((function(t){var e,n;return b.cors||He&&!t.crossDomain?{send:function(i,o){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];for(s in t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest"),i)a.setRequestHeader(s,i[s]);e=function(t){return function(){e&&(e=n=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===t?a.abort():"error"===t?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(ze[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=e(),n=a.onerror=e("error"),void 0!==a.onabort?a.onabort=n:a.onreadystatechange=function(){4===a.readyState&&r.setTimeout((function(){e&&n()}))},e=e("abort");try{a.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}:void 0})),A.ajaxPrefilter((function(t){t.crossDomain&&(t.contents.script=!1)})),A.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return A.globalEval(t),t}}}),A.ajaxPrefilter("script",(function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")})),A.ajaxTransport("script",(function(t){var e,n;if(t.crossDomain)return{send:function(i,r){e=A("\" +\n prog;\n this.output.srcdoc = prog;\n }\n\n createOutput() {\n var outDiv = document.createElement(\"div\");\n $(outDiv).addClass(\"ac_output\");\n this.outDiv = outDiv;\n this.output = document.createElement(\"iframe\");\n $(this.output).css(\"background-color\", \"white\");\n $(this.output).css(\"position\", \"relative\");\n $(this.output).css(\"height\", \"400px\");\n $(this.output).css(\"width\", \"100%\");\n outDiv.appendChild(this.output);\n this.outerDiv.appendChild(outDiv);\n var clearDiv = document.createElement(\"div\");\n $(clearDiv).css(\"clear\", \"both\"); // needed to make parent div resize properly\n this.outerDiv.appendChild(clearDiv);\n }\n enableSaveLoad() {\n $(this.runButton).text($.i18n(\"msg_activecode_render\"));\n }\n}\n","import { ActiveCode } from \"./activecode.js\";\nimport Handsontable from \"handsontable\";\nimport \"handsontable/dist/handsontable.full.css\";\nimport initSqlJs from \"sql.js/dist/sql-wasm.js\";\n\nvar allDburls = {};\n\nexport default class SQLActiveCode extends ActiveCode {\n constructor(opts) {\n super(opts);\n // fnprefix sets the path to load the sql-wasm.wasm file\n var bookprefix;\n var fnprefix;\n // Fix: the mode=browsing problem wich disables useRunestoneServices and\n // makes it impossible to cororectly load sql-wasm\n if (\n eBookConfig.useRunestoneServices ||\n window.location.search.includes(\"mode=browsing\")\n ) {\n bookprefix = `/ns/books/published/${eBookConfig.basecourse}`;\n fnprefix = bookprefix + \"/_static\";\n } else {\n // The else clause handles the case where you are building for a static web browser\n fnprefix = \"_static\";\n }\n this.config = {\n locateFile: (filename) => `${fnprefix}/${filename}`,\n };\n this.showLast = $(this.origElem).data(\"showlastsql\");\n var self = this;\n initSqlJs(this.config).then(function (SQL) {\n // set up call to load database asynchronously if given\n if (self.dburl) {\n if (self.dburl.startsWith(\"/_static\")) {\n // RST markup\n self.dburl = `${bookprefix}${self.dburl}`;\n } else if (self.dburl.startsWith(\"external\")) {\n // PTX markup\n if (\n eBookConfig.useRunestoneServices ||\n window.location.search.includes(\"mode=browsing\")\n ) {\n // On Runestone server\n self.dburl = `${bookprefix}/${self.dburl}`;\n } else {\n // static individual book\n self.dburl = `${self.dburl}`;\n }\n }\n $(self.runButton).attr(\"disabled\", \"disabled\");\n let buttonText = $(self.runButton).text();\n $(self.runButton).text($.i18n(\"msg_activecode_load_db\"));\n if (!(self.dburl in allDburls)) {\n allDburls[self.dburl] = {\n status: \"loading\",\n xWaitFor: jQuery.Deferred(),\n };\n } else {\n if (allDburls[self.dburl].status == \"loading\") {\n allDburls[self.dburl].xWaitFor.done(function () {\n self.db = allDburls[self.dburl].dbObject;\n $(self.runButton).removeAttr(\"disabled\");\n $(self.runButton).text(buttonText);\n });\n return;\n }\n self.db = allDburls[self.dburl].dbObject;\n $(self.runButton).removeAttr(\"disabled\");\n $(self.runButton).text(buttonText);\n return;\n }\n var xhr = new XMLHttpRequest();\n // For example: https://github.com/lerocha/chinook-database/raw/master/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite\n xhr.open(\"GET\", self.dburl, true);\n xhr.responseType = \"arraybuffer\";\n xhr.onload = (e) => {\n var uInt8Array = new Uint8Array(xhr.response);\n self.db = new SQL.Database(uInt8Array);\n allDburls[self.dburl].dbObject = self.db;\n $(self.runButton).text(buttonText);\n $(self.runButton).removeAttr(\"disabled\");\n allDburls[self.dburl].db = uInt8Array;\n allDburls[self.dburl].status = \"ready\";\n allDburls[self.dburl].xWaitFor.resolve();\n // contents is now [{columns:['col1','col2',...], values:[[first row], [second row], ...]}]\n };\n xhr.send();\n } else {\n self.db = new SQL.Database();\n }\n });\n }\n async runProg(noUI, logResults) {\n if (typeof logResults === \"undefined\") {\n this.logResults = true;\n } else {\n this.logResults = logResults;\n }\n if (typeof noUI !== \"boolean\") {\n noUI = false;\n }\n // Clear any old results\n this.saveCode = \"True\";\n let divid = this.divid + \"_sql_out\";\n let respDiv = document.getElementById(divid);\n if (respDiv) {\n respDiv.parentElement.removeChild(respDiv);\n }\n $(this.output).text(\"\");\n // Run this query\n let query = await this.buildProg(false); // false --> Do not include suffix\n if (!this.db) {\n $(this.output).text(\n `Error: Database not initialized! DBURL: ${this.dburl}`\n );\n return;\n }\n\n let it = this.db.iterateStatements(query);\n this.results = [];\n try {\n for (let statement of it) {\n let columns = statement.getColumnNames();\n if (columns.length > 0) {\n // data! probably a SELECT\n let data = [];\n while (statement.step()) {\n data.push(statement.get());\n }\n this.results.push({\n status: \"success\",\n columns: columns,\n values: data,\n rowcount: data.length,\n });\n } else {\n let nsql = statement.getNormalizedSQL();\n let prefix = nsql.substr(0, 6).toLowerCase();\n statement.step(); // execute the query\n // Try to detect INSERT/UPDATE/DELETE to give friendly feedback\n // on rows modified - unfortunately, this won't catch such queries\n // if they use CTEs. There seems to be no reliable way of knowing\n // when a SQLite query actually modified data.\n if (\n prefix === \"insert\" ||\n prefix === \"update\" ||\n prefix === \"delete\"\n ) {\n this.results.push({\n status: \"success\",\n operation: prefix,\n rowcount: this.db.getRowsModified(),\n });\n } else {\n this.results.push({ status: \"success\" });\n }\n }\n }\n } catch (e) {\n this.results.push({\n status: \"failure\",\n message: e.toString(),\n sql: it.getRemainingSQL(),\n });\n }\n\n if (this.results.length === 0) {\n this.results.push({\n status: \"failure\",\n message: \"No queries submitted.\",\n });\n }\n\n try {\n this.saveCode = await this.manage_scrubber(this.saveCode);\n if (this.slideit) {\n $(this.historyScrubber).on(\n \"slidechange\",\n this.slideit.bind(this)\n );\n }\n $(this.historyScrubber).slider(\"enable\");\n } catch (e) {\n console.log(`Failed to update scrubber ${e}`);\n }\n\n respDiv = document.createElement(\"div\");\n respDiv.id = divid;\n this.outDiv.appendChild(respDiv);\n this.outDiv.style.visibility = \"visible\";\n // Sometimes we don't want to show a bunch of intermediate results\n // like when we are including a bunch of previous statements from\n // other activecodes In that case the showlastsql flag can be set\n // so we only show the last result\n let resultArray = this.results;\n if (this.showLast) {\n resultArray = this.results.slice(-1);\n }\n for (let r of resultArray) {\n let section = document.createElement(\"div\");\n section.setAttribute(\"class\", \"ac_sql_result\");\n section.setAttribute(\"aria-live\", \"polite\");\n section.setAttribute(\"aria-atomic\", \"true\");\n section.setAttribute(\"role\", \"log\");\n respDiv.appendChild(section);\n if (r.status === \"success\") {\n if (r.columns) {\n let tableDiv = document.createElement(\"div\");\n section.appendChild(tableDiv);\n let maxHeight = 350;\n if (resultArray.length > 1) maxHeight = 200; // max height smaller if lots of results\n createTable(r, tableDiv, maxHeight);\n let messageBox = document.createElement(\"pre\");\n let rmsg = r.rowcount !== 1 ? \" rows \" : \" row \";\n let msg = \"\" + r.rowcount + rmsg + \"returned\";\n if (r.rowcount > 100) {\n msg = msg + \" (only first 100 rows displayed)\";\n }\n msg = msg + \".\";\n messageBox.textContent = msg;\n messageBox.setAttribute(\"class\", \"ac_sql_result_success\");\n section.appendChild(messageBox);\n } else if (r.rowcount) {\n let messageBox = document.createElement(\"pre\");\n let op = r.operation;\n op = op + (op.charAt(op.length - 1) === \"e\" ? \"d.\" : \"ed.\");\n let rmsg = r.rowcount !== 1 ? \" rows \" : \" row \";\n messageBox.textContent = \"\" + r.rowcount + rmsg + op;\n messageBox.setAttribute(\"class\", \"ac_sql_result_success\");\n section.appendChild(messageBox);\n } else {\n let messageBox = document.createElement(\"pre\");\n messageBox.textContent = \"Operation succeeded.\";\n messageBox.setAttribute(\"class\", \"ac_sql_result_success\");\n section.appendChild(messageBox);\n }\n } else {\n let messageBox = document.createElement(\"pre\");\n messageBox.textContent = r.message;\n section.classList.add(\"ac_sql_result_failure\");\n // screenreaders seem to miss error message without the delay\n setTimeout(() => {\n section.appendChild(messageBox);\n }, 10);\n }\n }\n\n // Now handle autograding\n if (this.suffix) {\n this.testResult = this.autograde(\n this.results[this.results.length - 1]\n );\n } else {\n $(this.output).css(\"visibility\", \"hidden\");\n }\n\n return Promise.resolve(\"done\");\n }\n\n async logCurrentAnswer(sid) {\n let data = {\n div_id: this.divid,\n code: this.editor.getValue(),\n language: this.language,\n errinfo: this.results[this.results.length - 1].status,\n to_save: this.saveCode,\n prefix: this.pretext,\n suffix: this.suffix,\n partner: this.partner,\n }; // Log the run event\n if (typeof sid !== \"undefined\") {\n data.sid = sid;\n }\n await this.logRunEvent(data);\n\n if (this.unit_results) {\n let unitData = {\n event: \"unittest\",\n div_id: this.divid,\n course: eBookConfig.course,\n act: this.unit_results,\n };\n if (typeof sid !== \"undefined\") {\n unitData.sid = sid;\n }\n await this.logBookEvent(unitData);\n }\n }\n\n renderFeedback() {\n if (this.testResult) {\n $(this.output).text(this.testResult);\n $(this.output).css(\"visibility\", \"visible\");\n }\n }\n\n autograde(result_table) {\n var tests = this.suffix.split(/\\n/);\n this.passed = 0;\n this.failed = 0;\n // Tests should be of the form\n // assert row,col oper value for example\n // assert 4,4 == 3\n var result = \"\";\n tests = tests.filter(function (s) {\n return s.indexOf(\"assert\") > -1;\n });\n for (let test of tests) {\n let wlist = test.split(/\\s+/);\n wlist.shift();\n let loc = wlist.shift();\n let oper = wlist.shift();\n let expected = wlist.join(\" \");\n let [row, col] = loc.split(\",\");\n result += this.testOneAssert(\n row,\n col,\n oper,\n expected,\n result_table\n );\n result += \"\\n\";\n }\n let pct = (100 * this.passed) / (this.passed + this.failed);\n if (isNaN(pct)) {\n pct = 0.0;\n }\n pct = pct.toLocaleString(undefined, { maximumFractionDigits: 2 });\n result += `You passed ${this.passed} out of ${this.passed + this.failed\n } tests for ${pct}%`;\n this.unit_results = `percent:${pct}:passed:${this.passed}:failed:${this.failed}`;\n return result;\n }\n testOneAssert(row, col, oper, expected, result_table) {\n // make sure row and col are in bounds\n let actual;\n let output = \"\";\n try {\n actual = result_table.values[row][col];\n } catch (e) {\n output = `Failed Not enough data to check row ${row} or column ${col}`;\n this.failed++;\n return output;\n }\n const operators = {\n \"==\": function (operand1, operand2) {\n return operand1 == operand2;\n },\n \"!=\": function (operand1, operand2) {\n return operand1 != operand2;\n },\n \">\": function (operand1, operand2) {\n return operand1 > operand2;\n },\n \"<\": function (operand1, operand2) {\n return operand1 > operand2;\n },\n };\n let res = operators[oper](actual, expected);\n if (res) {\n output = `Pass: ${actual} ${oper} ${expected} in row ${row} column ${result_table.columns[col]}`;\n this.passed++;\n } else {\n output = `Failed ${actual} ${oper} ${expected} in row ${row} column ${result_table.columns[col]}`;\n this.failed++;\n }\n return output;\n }\n}\n\nfunction createTable(tableData, container, maxHeight) {\n let data = tableData.values;\n let trimRows = undefined;\n if (data.length === 0) {\n // kludge: no column headers will show up unless we do this\n data = [tableData.columns.map((e) => null)];\n trimRows = [0];\n }\n\n var hot = new Handsontable(container, {\n data: data,\n trimRows: trimRows,\n width: \"100%\",\n height: maxHeight,\n autoRowSize: true,\n autoColumnSize: { useHeaders: true },\n rowHeaders: false,\n colHeaders: tableData.columns,\n editor: false,\n maxRows: 100,\n filters: false,\n dropdownMenu: false,\n licenseKey: \"non-commercial-and-evaluation\",\n });\n\n // calculate actual height and resize\n let actualHeight = 40; // header height + small margin\n if (tableData.values.length > 0) {\n for (let i = 0; i < data.length; i++) {\n actualHeight = actualHeight + hot.getRowHeight(i);\n if (actualHeight > maxHeight) break;\n }\n }\n\n hot.updateSettings({ height: actualHeight });\n\n return hot;\n}\n","import { ActiveCode, isInViewport } from \"./activecode.js\";\nimport JSActiveCode from \"./activecode_js.js\";\nimport HTMLActiveCode from \"./activecode_html.js\";\nimport SQLActiveCode from \"./activecode_sql.js\";\nimport LiveCode from \"./livecode.js\";\nimport {\n TimedActiveCode,\n TimedLiveCode,\n TimedJSActiveCode,\n TimedHTMLActiveCode,\n TimedSQLActiveCode,\n} from \"./timed_activecode\";\nimport \"../../common/js/jquery.highlight.js\";\n\nexport default class ACFactory {\n constructor() {\n this.foo = \"bar\";\n }\n static createActiveCode(orig, lang, addopts) {\n var opts = {\n orig: orig,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n python3: eBookConfig.python3,\n };\n if (addopts) {\n for (var attrname in addopts) {\n opts[attrname] = addopts[attrname];\n }\n }\n if (lang === undefined) {\n let dataElem = opts.orig.querySelector(\"[data-lang]\");\n lang = dataElem ? dataElem.dataset.lang : undefined;\n }\n if (opts.timed == true) {\n if (lang === \"python\") {\n return new TimedActiveCode(opts);\n } else if (\n lang === \"java\" ||\n lang === \"cpp\" ||\n lang === \"c\" ||\n lang === \"python3\"\n ) {\n return new TimedLiveCode(opts);\n } else if (lang === \"javascript\") {\n return new TimedJSActiveCode(opts);\n } else if (lang === \"htmlmixed\" || lang === \"html\") {\n return new TimedHTMLActiveCode(opts);\n } else if (lang === \"sql\") {\n return new TimedSQLActiveCode(opts);\n } else {\n return new TimedActiveCode(opts);\n }\n } else {\n if (lang === \"javascript\") {\n return new JSActiveCode(opts);\n } else if (lang === \"htmlmixed\" || lang === \"html\") {\n return new HTMLActiveCode(opts);\n } else if (lang === \"sql\") {\n return new SQLActiveCode(opts);\n } else if (\n [\"java\", \"cpp\", \"c\", \"python3\", \"python2\", \"octave\", \"kotlin\"].indexOf(\n lang\n ) > -1\n ) {\n return new LiveCode(opts);\n } else {\n // default is python\n return new ActiveCode(opts);\n }\n }\n }\n // used by web2py controller(s)\n static addActiveCodeToDiv(outerdivid, acdivid, sid, initialcode, language) {\n var acdiv = document.getElementById(acdivid);\n acdiv.innerHTML = \"\";\n var thepre = document.createElement(\"textarea\");\n thepre[\"data-component\"] = \"activecode\";\n thepre.id = outerdivid;\n thepre.dataset.lang = language;\n acdiv.appendChild(thepre);\n var opts = {\n orig: thepre,\n useRunestoneServices: true,\n };\n var addopts = {\n sid: sid,\n graderactive: true,\n };\n var newac = ACFactory.createActiveCode(thepre, language, addopts);\n var savediv = newac.divid;\n newac.divid = savediv;\n newac.editor.setSize(500, 300);\n setTimeout(function () {\n newac.editor.refresh();\n }, 500);\n }\n static createActiveCodeFromOpts(opts) {\n return ACFactory.createActiveCode(opts.orig, opts.lang, opts);\n }\n static createScratchActivecode() {\n /* set up the scratch Activecode editor in the search menu */\n // use the URL to assign a divid - each page should have a unique Activecode block id.\n // Remove everything from the URL but the course and page name\n // todo: this could probably be eliminated and simply moved to the template file\n\n if (eBookConfig.enableScratchAC == false) return;\n\n var divid = eBookConfig.course + \"_scratch_ac\";\n divid = divid.replace(/[#.]/g, \"\"); // in case book title has characters that will mess up our selectors\n eBookConfig.scratchDiv = divid;\n let stdin = \"\";\n var lang = eBookConfig.acDefaultLanguage\n ? eBookConfig.acDefaultLanguage\n : \"python\";\n if (lang === \"java\" || lang === \"cpp\" || lang === \"python3\") {\n stdin = `data-stdin=\"text for stdin\"`;\n }\n const languageNames = {\n cpp: \"C++\",\n c: \"C\",\n html: \"HTML\",\n htmlmixed: \"HTML\",\n java: \"Java\",\n javascript: \"JavaScript\",\n js: \"JavaScript\",\n kotlin: \"Kotlin\",\n octave: \"Octave\",\n python: \"Python\",\n py2: \"Python 2\",\n python2: \"Python 2\",\n py3: \"Python 3\",\n py3anaconda: \"Python 3 with Anaconda\",\n python3: \"Python 3\",\n ruby: \"Ruby\",\n sql: \"SQL\",\n ts: \"TypeScript\",\n };\n\n // generate the HTML\n var html = `
            \n
            \n
            \n
            \n \n

            Scratch ActiveCode (${languageNames[lang.toLowerCase()] || lang\n })

            \n
            \n
            \n
            \n

            Use this area for writing code or taking notes.

            \n \n
            \n
            \n
            \n
            \n
            `;\n var el = document.createElement(\"div\");\n el.innerHTML = html;\n document.body.appendChild(el);\n let observable = document.getElementById(\"ac_modal_\" + divid);\n // when the modal becomes visible we want to refresh the CodeMirror editor to ensure\n // that it is properly displayed.\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.attributeName === 'style' || mutation.attributeName === 'class') {\n if (isInViewport(observable)) {\n observable.querySelectorAll(\".CodeMirror\").forEach(function (e) {\n e.CodeMirror.refresh();\n });\n }\n }\n });\n });\n\n // Start observing the element for style changes\n observer.observe(observable, {\n attributes: true,\n attributeFilter: ['style', 'class']\n });\n\n //todo intercept the close event and return focus to the pencil icon\n let closeBtn = document.querySelector(\".ac-modal-header button.close\");\n closeBtn.addEventListener(\"click\", function () {\n let popUp = document.getElementById(\"ac_modal_\" + divid);\n popUp.style.display = \"none\";\n document.querySelector(\".activecode-toggle\").focus();\n });\n }\n\n // Note: this function is called from popScratchAC in webpack.index.js\n // this happens after activecode.js is dynamically loaded.\n static toggleScratchActivecode() {\n if (!eBookConfig.enableScratchAC) return;\n var divid = \"ac_modal_\" + eBookConfig.scratchDiv;\n var realDiv = document.getElementById(divid);\n realDiv.classList.remove(\"ac_section\");\n realDiv.style.display = (realDiv.style.display === \"none\" || realDiv.style.display === \"\") ? \"block\" : \"none\";\n\n const selectors = '.first-focusable, button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n let firstFocusableElement = realDiv.querySelector(selectors);\n let focusableElements = realDiv.querySelectorAll(selectors);\n let lastFocusableElement =\n focusableElements[focusableElements.length - 1];\n\n realDiv.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Tab\") {\n firstFocusableElement = realDiv.querySelector(selectors);\n focusableElements = realDiv.querySelectorAll(selectors);\n lastFocusableElement =\n focusableElements[focusableElements.length - 1];\n if (event.shiftKey) {\n // Shift + Tab\n if (document.activeElement === firstFocusableElement) {\n event.preventDefault();\n lastFocusableElement.focus();\n }\n } else {\n // Tab\n if (document.activeElement === lastFocusableElement) {\n event.preventDefault();\n firstFocusableElement.focus();\n }\n }\n } else {\n if (event.key === \"Escape\") {\n realDiv.style.display = \"none\";\n document.querySelector(\".activecode-toggle\").focus();\n }\n }\n });\n\n\n\n if (firstFocusableElement) {\n console.log(`focus on ${firstFocusableElement}`);\n firstFocusableElement.focus();\n }\n }\n}\n\n//\n// Page Initialization\n//\n\ndocument.addEventListener(\"runestone:login-complete\", function () {\n ACFactory.createScratchActivecode();\n document.querySelectorAll(\"[data-component='activecode']\").forEach(function (element) {\n if (element.closest(\"[data-component='timedAssessment']\") === null) {\n try {\n let textArea = element.querySelector(\"textarea\");\n window.componentMap[element.id] = ACFactory.createActiveCode(element, textArea ? textArea.dataset.lang : null);\n } catch (err) {\n console.error(`Error rendering Activecode Problem ${element.id}\n Details: ${err}`);\n console.error(err.stack);\n }\n }\n });\n if (loggedout) {\n for (let k in window.componentMap) {\n if (window.componentMap[k].disableSaveLoad) {\n window.componentMap[k].disableSaveLoad();\n }\n }\n } else {\n for (let k in window.componentMap) {\n if (window.componentMap[k].enableSaveLoad) {\n window.componentMap[k].enableSaveLoad();\n }\n }\n }\n});\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\n\nwindow.component_factory.activecode = ACFactory.createActiveCodeFromOpts;\n\n// This is the easiest way to expose this outside the module.\nwindow.ACFactory = ACFactory;\n\n// This seems a bit hacky and possibly brittle, but its hard to know how long it will take to\n// figure out the login/logout status of the user. Sometimes its immediate, and sometimes its\n// long. So to be safe we'll do it both ways..\nvar loggedout;\ndocument.addEventListener(\"runestone:logout\", function () {\n loggedout = true;\n});\ndocument.addEventListener(\"runestone:logout\", function () {\n for (let k in window.componentMap) {\n if (\n window.componentMap.hasOwnProperty(k) &&\n window.componentMap[k].attributes[\"data-component\"] == \"activecode\"\n ) {\n window.componentMap[k].disableSaveLoad();\n }\n }\n});\n","/*\nThe TimedActivecode classes are a great example of where multiple inheritance would be useful\nBut since Javascript does not support multiple inheritance we use the mixin pattern.\n\n*/\nimport LiveCode from \"./livecode\";\nimport { ActiveCode } from \"./activecode\";\nimport JSActiveCode from \"./activecode_js\";\nimport HTMLActiveCode from \"./activecode_html\";\nimport SQLActiveCode from \"./activecode_sql\";\n\nvar TimedActiveCodeMixin = {\n timedInit: async function (opts) {\n this.isTimed = true;\n this.hideButtons();\n this.needsReinitialization = true; // the run button click listener needs to be reinitialized\n this.containerDiv.classList.add(\"timedComponent\");\n window.componentMap[this.divid] = this;\n return true;\n },\n\n hideButtons: function () {\n var buttonList = [\n this.saveButton,\n this.loadButton,\n this.gradeButton,\n this.showHideButt,\n this.coachButton,\n this.atButton,\n ];\n for (var i = 0; i < buttonList.length; i++) {\n if (buttonList[i] !== undefined && buttonList[i] !== null)\n $(buttonList[i]).hide();\n }\n },\n\n // bje - not needed anymore\n renderTimedIcon: function (component) {\n // renders the clock icon on timed components. The component parameter\n // is the element that the icon should be appended to.\n var timeIconDiv = document.createElement(\"div\");\n var timeIcon = document.createElement(\"img\");\n $(timeIcon).attr({\n src: \"../_static/clock.png\",\n style: \"width:15px;height:15px\",\n });\n timeIconDiv.className = \"timeTip\";\n timeIconDiv.title = \"\";\n timeIconDiv.appendChild(timeIcon);\n $(component).prepend(timeIconDiv);\n },\n\n checkCorrectTimed: function () {\n // pct_correct is set by the unittest/gui.py module in skulpt.\n // it relies on finding this object in the edList\n if (this.isAnswered) {\n if (this.pct_correct >= 100.0) {\n return \"T\";\n } else {\n return \"F\";\n }\n } else {\n return \"I\"; // we ignore this in the grading if no unittests\n }\n },\n\n hideFeedback: function () {\n $(this.output).css(\"visibility\", \"hidden\");\n },\n\n reinitializeListeners: function (taken) {\n if (!this.runButton.onclick) {\n console.log(\"reattaching runbuttonhandler\");\n this.runButton.onclick = this.runButtonHander.bind(this);\n }\n $(this.codeDiv).show();\n this.runButton.disabled = false;\n $(this.codeDiv).removeClass(\"ac-disabled\");\n this.editor.refresh();\n if (this.historyScrubber !== null) {\n $(this.historyScrubber).slider({\n max: this.history.length - 1,\n value: this.history.length - 1,\n slide: this.slideit.bind(this),\n change: this.slideit.bind(this),\n });\n }\n if (taken) {\n $(`#${this.divid}_unit_results`).show();\n }\n },\n};\n\nexport class TimedLiveCode extends LiveCode {\n constructor(opts) {\n super(opts);\n this.timedInit(opts);\n }\n}\n\nObject.assign(TimedLiveCode.prototype, TimedActiveCodeMixin);\n\nexport class TimedActiveCode extends ActiveCode {\n constructor(opts) {\n super(opts);\n this.timedInitComplete = this.timedInit(opts);\n }\n\n // for timed exams we need to call runProg and tell it that there is\n // no GUI for sliders or other things.\n // the answers.\n async checkCurrentAnswer() {\n let noUI = true;\n const result = await this.timedInitComplete;\n if (this.isAnswered) {\n await this.runProg(noUI, false);\n }\n }\n}\n\nObject.assign(TimedActiveCode.prototype, TimedActiveCodeMixin);\n\nexport class TimedJSActiveCode extends JSActiveCode {\n constructor(opts) {\n super(opts);\n this.timedInit(opts);\n }\n}\nObject.assign(TimedJSActiveCode.prototype, TimedActiveCodeMixin);\n\nexport class TimedHTMLActiveCode extends HTMLActiveCode {\n constructor(opts) {\n super(opts);\n this.timedInit(opts);\n }\n}\nObject.assign(TimedHTMLActiveCode.prototype, TimedActiveCodeMixin);\n\nexport class TimedSQLActiveCode extends SQLActiveCode {\n constructor(opts) {\n super(opts);\n this.timedInit(opts);\n }\n}\nObject.assign(TimedSQLActiveCode.prototype, TimedActiveCodeMixin);\n","$.i18n().load({\n en: {\n msg_activecode_load_history: \"Load History\",\n msg_activecode_audio_tour: \"Audio Tour\",\n msg_activecode_loaded_code: \"Loaded your saved code.\",\n msg_activecode_no_saved_code: \"No saved code.\",\n msg_activecode_run_code: \"Run\",\n msg_activecode_show_feedback: \"Show Feedback\",\n msg_activecode_show_code: \"Show Code\",\n msg_activecode_hide_code: \"Hide Code\",\n msg_activecode_show_codelens: \"Show CodeLens\",\n msg_activecode_show_in_codelens: \"Show in CodeLens\",\n msg_activecode_hide_codelens: \"Hide Codelens\",\n msg_activecode_reformat: \"Reformat\",\n\n msg_activecode_parse_error:\n \"A parse error means that Python does not understand the syntax on the line the error message points out. Common examples are forgetting commas beteween arguments or forgetting a : on a for statement\",\n msg_activecode_parse_error_fix:\n \"To fix a parse error you just need to look carefully at the line with the error and possibly the line before it. Make sure it conforms to all of Python's rules.\",\n msg_activecode_type_error:\n \"Type errors most often occur when an expression tries to combine two objects with types that should not be combined. Like raising a string to a power\",\n msg_activecode_type_error_fix:\n \"To fix a type error you will most likely need to trace through your code and make sure the variables have the types you expect them to have. It may be helpful to print out each variable along the way to be sure its value is what you think it should be.\",\n msg_activecode_name_error:\n \"A name error almost always means that you have used a variable before it has a value. Often this may be a simple typo, so check the spelling carefully.\",\n msg_activecode_name_error_fix:\n \"Check the right hand side of assignment statements and your function calls, this is the most likely place for a NameError to be found.\",\n msg_activecode_value_error:\n \"A ValueError most often occurs when you pass a parameter to a function and the function is expecting one type and you pass another.\",\n msg_activecode_value_error_fix:\n \"The error message gives you a pretty good hint about the name of the function as well as the value that is incorrect. Look at the error message closely and then trace back to the variable containing the problematic value.\",\n msg_activecode_attribute_error:\n \"This error message is telling you that the object on the left hand side of the dot, does not have the attribute or method on the right hand side.\",\n msg_activecode_attribute_error_fix:\n \"The most common variant of this message is that the object undefined does not have attribute X. This tells you that the object on the left hand side of the dot is not what you think. Trace the variable back and print it out in various places until you discover where it becomes undefined. Otherwise check the attribute on the right hand side of the dot for a typo.\",\n msg_activecode_token_error:\n \"Most of the time this error indicates that you have forgotten a right parenthesis or have forgotten to close a pair of quotes.\",\n msg_activecode_token_error_fix:\n \"Check each line of your program and make sure that your parenthesis are balanced.\",\n msg_activecode_time_limit_error:\n \"Your program is running too long. Most programs in this book should run in less than 10 seconds easily. This probably indicates your program is in an infinite loop.\",\n msg_activecode_time_limit_error_fix:\n \"Add some print statements to figure out if your program is in an infinte loop. If it is not you can increase the run time with sys.setExecutionLimit(msecs)\",\n msg_activecode_general_error:\n \"Your program is running for too long. Most programs in this book should run in less than 30 seconds easily. This probably indicates your program is in an infinite loop.\",\n msg_activecode_general_error_fix:\n \"Add some print statements to figure out if your program is in an infinte loop. If it is not you can increase the run time with sys.setExecutionLimit(msecs)\",\n msg_activecode_syntax_error:\n \"This message indicates that Python can't figure out the syntax of a particular statement. Some examples are assigning to a literal, or a function call\",\n msg_activecode_syntax_error_fix:\n \"Check your assignment statements and make sure that the left hand side of the assignment is a variable, not a literal or a function.\",\n msg_activecode_key_error:\n \"This message indicates that you are trying to access an element of a dictionary, but the dictionary does not have that the key you are using.\",\n msg_activecode_key_error_fix:\n \"You may have a typo in the name of your key. It is also good practice to check if the key exists using a statement like if key in mydict. You can also use mydict.get(key,defaultvalue) so that if the key is not in the dictionary you get the default value instead of an error.\",\n msg_activecode_index_error:\n \"This message means that you are trying to index past the end of a string or a list. For example if your list has 3 things in it and you try to access the item at position 3 or more.\",\n msg_activecode_index_error_fix:\n \"Remember that the first item in a list or string is at index position 0, quite often this message comes about because you are off by one. Remember in a list of length 3 the last legal index is 2\",\n msg_activecode_uri_error: \"\",\n msg_activecode_uri_error_fix: \"\",\n msg_activecode_import_error:\n \"This error message indicates that you are trying to import a module that does not exist\",\n msg_activecode_import_error_fix:\n \"One problem may simply be that you have a typo. It may also be that you are trying to import a module that exists in 'real' Python, but does not exist in this book. If this is the case, please submit a feature request to have the module added.\",\n msg_activecode_reference_error:\n \"This is most likely an internal error, particularly if the message references the console.\",\n msg_activecode_reference_error_fix:\n \"Try refreshing the webpage, and if the error continues, submit a bug report along with your code\",\n msg_activecode_zero_division_error:\n \"This tells you that you are trying to divide by 0. Typically this is because the value of the variable in the denominator of a division expression has the value 0\",\n msg_activecode_zero_division_error_fix:\n \"You may need to protect against dividing by 0 with an if statment, or you may need to rexamine your assumptions about the legal values of variables, it could be an earlier statment that is unexpectedly assigning a value of zero to the variable in question.\",\n msg_activecode_range_error:\n \"This message almost always shows up in the form of Maximum call stack size exceeded.\",\n msg_activecode_range_error_fix:\n \"This always occurs when a function calls itself. Its pretty likely that you are not doing this on purpose. Except in the chapter on recursion. If you are in that chapter then its likely you haven't identified a good base case.\",\n msg_activecode_internal_error:\n \"An Internal error may mean that you've triggered a bug in our Python\",\n msg_activecode_internal_error_fix:\n \"Report this error, along with your code as a bug.\",\n msg_activecode_indentation_error:\n \"This error occurs when you have not indented your code properly. This is most likely to happen as part of an if, for, while or def statement.\",\n msg_activecode_indentation_error_fix:\n \"Check your if, def, for, and while statements to be sure the lines are properly indented beneath them. Another source of this error comes from copying and pasting code where you have accidentally left some bits of code lying around that don't belong there anymore.\",\n msg_activecode_not_implemented_error:\n \"This error occurs when you try to use a builtin function of Python that has not been implemented in this in-browser version of Python.\",\n msg_activecode_not_implemented_error_fix:\n \"For now the only way to fix this is to not use the function. There may be workarounds. If you really need this builtin function then file a bug report and tell us how you are trying to use the function.\",\n\n msg_activecode_file_not_found: \"File not found: '$1'\",\n msg_activecode_no_file_or_dir:\n \"[Errno 2] No such file or directory: '$1'\",\n msg_activecode_starting: \"Click the play button to begin the $1\",\n msg_activecode_playing: \"Playing the $1\",\n msg_activecode_loading_audio:\n \"Loading audio. Please wait. If the tour doesn't start soon click on the leftmost control button (Play first audio in tour)\",\n msg_activecode_pause_current_audio: \"Pause current audio\",\n msg_activecode_pause_audio: \"Pause audio\",\n msg_activecode_play_paused_audio: \"Play paused audio\",\n msg_activecode_audio_paused:\n \"The $1 has been paused. Click on the play button to resume the tour.\",\n msg_activecode_input_prg: \"Input for Program\",\n msg_activecode_were_compiling_err:\n \"There were errors compiling your code. See below.\",\n msg_activecode_compile_only:\n \"Code successfully compiled. No executable built.\",\n msg_activecode_time_limit_exc: \"Time Limit Exceeded on your program\",\n msg_activecode_server_err: \"A server error occurred\",\n msg_activecode_compiling_running:\n \"Compiling and Running your Code Now...\",\n msg_activecode_server_comm_err: \"Error communicating with the server.\",\n msg_activecode_save_run: \"Save & Run\",\n msg_activecode_run_button_title: \"Save & Run (ctrl-s)\",\n msg_activecode_render: \"Save & Render\",\n msg_activecode_assertion_error:\n \"An assertion error happens when python encounters an assertion statement. Python evaluates the expression to the right of the word assert; if that expression is True everything is fine and the program continues. If the expression is False Python raises an error and stops.\",\n msg_activecode_assertion_error_fix:\n \"Check the expression to the right of assert. The expression is False and you will need to determine why that is. You may want to simply print out the individual parts of the expression to understand why it is evaluating to False.\",\n msg_activecode_load_db: \"Loading DB...\",\n msg_activecode_code_coach: \"Code Coach\",\n msg_activecode_passed: \"Passed\",\n msg_activecode_failed: \"Failed\",\n msg_activecode_unit_test_results: \"Unit Test Results\",\n msg_activecode_test_run_error: \"Runtime error\",\n msg_activecode_test_compile_error: \"Compiler error\",\n msg_activecode_iotest_results: \"IO tests completed. See table for results.\",\n msg_activecode_assertions_checked: \"Assertions checked:\",\n },\n});\n","$.i18n().load({\n \"sr-Cyrl\": {\n msg_activecode_load_history: \"Учитај историју\",\n msg_activecode_audio_tour: \"Аудио тура\",\n msg_activecode_loaded_code: \"Ваш изворни код је учитан.\",\n msg_activecode_no_saved_code: \"Не постоји снимљен код.\",\n msg_activecode_run_code: \"Покрени програм\",\n msg_activecode_show_feedback: \"Прикажи резултат\",\n msg_activecode_show_code: \"Прикажи код\",\n msg_activecode_hide_code: \"Затвори код\",\n msg_activecode_show_codelens: \"Корак по корак\",\n msg_activecode_show_in_codelens: \"Корак по корак\",\n msg_activecode_hide_codelens: \"Затвори корак по корак\",\n msg_activecode_reformat: \"Реформат\",\n\n msg_sctivecode_parse_error:\n \"Синтаксна грешка (parse error) значи да Пајтон не разуме синтаксу у линији кога на коју порука о грешци указује. Типични примери овакве грешке су заборавлјена двотачка код 'if' или 'for' исказа или заборављена запета између аргумената код позива функције\",\n msg_sctivecode_parse_error_fix:\n \"Да бисте исправили синтаксну грешку треба пажњиво да погледате линију изворног кода на коју указује поруга о грешци и можда претходну линину изворног кода. Проверите да ли су поштована сва синтаксна правила Пајтона.\",\n },\n});\n","/**\n *\n * MD5 (Message-Digest Algorithm)\n * http://www.webtoolkit.info/\n *\n **/\n\nexport default function MD5(string) {\n function RotateLeft(lValue, iShiftBits) {\n return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));\n }\n\n function AddUnsigned(lX, lY) {\n var lX4, lY4, lX8, lY8, lResult;\n lX8 = lX & 0x80000000;\n lY8 = lY & 0x80000000;\n lX4 = lX & 0x40000000;\n lY4 = lY & 0x40000000;\n lResult = (lX & 0x3fffffff) + (lY & 0x3fffffff);\n if (lX4 & lY4) {\n return lResult ^ 0x80000000 ^ lX8 ^ lY8;\n }\n if (lX4 | lY4) {\n if (lResult & 0x40000000) {\n return lResult ^ 0xc0000000 ^ lX8 ^ lY8;\n } else {\n return lResult ^ 0x40000000 ^ lX8 ^ lY8;\n }\n } else {\n return lResult ^ lX8 ^ lY8;\n }\n }\n\n function F(x, y, z) {\n return (x & y) | (~x & z);\n }\n\n function G(x, y, z) {\n return (x & z) | (y & ~z);\n }\n\n function H(x, y, z) {\n return x ^ y ^ z;\n }\n\n function I(x, y, z) {\n return y ^ (x | ~z);\n }\n\n function FF(a, b, c, d, x, s, ac) {\n a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));\n return AddUnsigned(RotateLeft(a, s), b);\n }\n\n function GG(a, b, c, d, x, s, ac) {\n a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));\n return AddUnsigned(RotateLeft(a, s), b);\n }\n\n function HH(a, b, c, d, x, s, ac) {\n a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));\n return AddUnsigned(RotateLeft(a, s), b);\n }\n\n function II(a, b, c, d, x, s, ac) {\n a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));\n return AddUnsigned(RotateLeft(a, s), b);\n }\n\n function ConvertToWordArray(string) {\n var lWordCount;\n var lMessageLength = string.length;\n var lNumberOfWords_temp1 = lMessageLength + 8;\n var lNumberOfWords_temp2 =\n (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;\n var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;\n var lWordArray = Array(lNumberOfWords - 1);\n var lBytePosition = 0;\n var lByteCount = 0;\n while (lByteCount < lMessageLength) {\n lWordCount = (lByteCount - (lByteCount % 4)) / 4;\n lBytePosition = (lByteCount % 4) * 8;\n lWordArray[lWordCount] =\n lWordArray[lWordCount] |\n (string.charCodeAt(lByteCount) << lBytePosition);\n lByteCount++;\n }\n lWordCount = (lByteCount - (lByteCount % 4)) / 4;\n lBytePosition = (lByteCount % 4) * 8;\n lWordArray[lWordCount] =\n lWordArray[lWordCount] | (0x80 << lBytePosition);\n lWordArray[lNumberOfWords - 2] = lMessageLength << 3;\n lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;\n return lWordArray;\n }\n\n function WordToHex(lValue) {\n var WordToHexValue = \"\",\n WordToHexValue_temp = \"\",\n lByte,\n lCount;\n for (lCount = 0; lCount <= 3; lCount++) {\n lByte = (lValue >>> (lCount * 8)) & 255;\n WordToHexValue_temp = \"0\" + lByte.toString(16);\n WordToHexValue =\n WordToHexValue +\n WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);\n }\n return WordToHexValue;\n }\n\n function Utf8Encode(string) {\n string = string.replace(/\\r\\n/g, \"\\n\");\n var utftext = \"\";\n\n for (var n = 0; n < string.length; n++) {\n var c = string.charCodeAt(n);\n\n if (c < 128) {\n utftext += String.fromCharCode(c);\n } else if (c > 127 && c < 2048) {\n utftext += String.fromCharCode((c >> 6) | 192);\n utftext += String.fromCharCode((c & 63) | 128);\n } else {\n utftext += String.fromCharCode((c >> 12) | 224);\n utftext += String.fromCharCode(((c >> 6) & 63) | 128);\n utftext += String.fromCharCode((c & 63) | 128);\n }\n }\n\n return utftext;\n }\n\n var x = Array();\n var k, AA, BB, CC, DD, a, b, c, d;\n var S11 = 7,\n S12 = 12,\n S13 = 17,\n S14 = 22;\n var S21 = 5,\n S22 = 9,\n S23 = 14,\n S24 = 20;\n var S31 = 4,\n S32 = 11,\n S33 = 16,\n S34 = 23;\n var S41 = 6,\n S42 = 10,\n S43 = 15,\n S44 = 21;\n\n string = Utf8Encode(string);\n\n x = ConvertToWordArray(string);\n\n a = 0x67452301;\n b = 0xefcdab89;\n c = 0x98badcfe;\n d = 0x10325476;\n\n for (k = 0; k < x.length; k += 16) {\n AA = a;\n BB = b;\n CC = c;\n DD = d;\n a = FF(a, b, c, d, x[k + 0], S11, 0xd76aa478);\n d = FF(d, a, b, c, x[k + 1], S12, 0xe8c7b756);\n c = FF(c, d, a, b, x[k + 2], S13, 0x242070db);\n b = FF(b, c, d, a, x[k + 3], S14, 0xc1bdceee);\n a = FF(a, b, c, d, x[k + 4], S11, 0xf57c0faf);\n d = FF(d, a, b, c, x[k + 5], S12, 0x4787c62a);\n c = FF(c, d, a, b, x[k + 6], S13, 0xa8304613);\n b = FF(b, c, d, a, x[k + 7], S14, 0xfd469501);\n a = FF(a, b, c, d, x[k + 8], S11, 0x698098d8);\n d = FF(d, a, b, c, x[k + 9], S12, 0x8b44f7af);\n c = FF(c, d, a, b, x[k + 10], S13, 0xffff5bb1);\n b = FF(b, c, d, a, x[k + 11], S14, 0x895cd7be);\n a = FF(a, b, c, d, x[k + 12], S11, 0x6b901122);\n d = FF(d, a, b, c, x[k + 13], S12, 0xfd987193);\n c = FF(c, d, a, b, x[k + 14], S13, 0xa679438e);\n b = FF(b, c, d, a, x[k + 15], S14, 0x49b40821);\n a = GG(a, b, c, d, x[k + 1], S21, 0xf61e2562);\n d = GG(d, a, b, c, x[k + 6], S22, 0xc040b340);\n c = GG(c, d, a, b, x[k + 11], S23, 0x265e5a51);\n b = GG(b, c, d, a, x[k + 0], S24, 0xe9b6c7aa);\n a = GG(a, b, c, d, x[k + 5], S21, 0xd62f105d);\n d = GG(d, a, b, c, x[k + 10], S22, 0x2441453);\n c = GG(c, d, a, b, x[k + 15], S23, 0xd8a1e681);\n b = GG(b, c, d, a, x[k + 4], S24, 0xe7d3fbc8);\n a = GG(a, b, c, d, x[k + 9], S21, 0x21e1cde6);\n d = GG(d, a, b, c, x[k + 14], S22, 0xc33707d6);\n c = GG(c, d, a, b, x[k + 3], S23, 0xf4d50d87);\n b = GG(b, c, d, a, x[k + 8], S24, 0x455a14ed);\n a = GG(a, b, c, d, x[k + 13], S21, 0xa9e3e905);\n d = GG(d, a, b, c, x[k + 2], S22, 0xfcefa3f8);\n c = GG(c, d, a, b, x[k + 7], S23, 0x676f02d9);\n b = GG(b, c, d, a, x[k + 12], S24, 0x8d2a4c8a);\n a = HH(a, b, c, d, x[k + 5], S31, 0xfffa3942);\n d = HH(d, a, b, c, x[k + 8], S32, 0x8771f681);\n c = HH(c, d, a, b, x[k + 11], S33, 0x6d9d6122);\n b = HH(b, c, d, a, x[k + 14], S34, 0xfde5380c);\n a = HH(a, b, c, d, x[k + 1], S31, 0xa4beea44);\n d = HH(d, a, b, c, x[k + 4], S32, 0x4bdecfa9);\n c = HH(c, d, a, b, x[k + 7], S33, 0xf6bb4b60);\n b = HH(b, c, d, a, x[k + 10], S34, 0xbebfbc70);\n a = HH(a, b, c, d, x[k + 13], S31, 0x289b7ec6);\n d = HH(d, a, b, c, x[k + 0], S32, 0xeaa127fa);\n c = HH(c, d, a, b, x[k + 3], S33, 0xd4ef3085);\n b = HH(b, c, d, a, x[k + 6], S34, 0x4881d05);\n a = HH(a, b, c, d, x[k + 9], S31, 0xd9d4d039);\n d = HH(d, a, b, c, x[k + 12], S32, 0xe6db99e5);\n c = HH(c, d, a, b, x[k + 15], S33, 0x1fa27cf8);\n b = HH(b, c, d, a, x[k + 2], S34, 0xc4ac5665);\n a = II(a, b, c, d, x[k + 0], S41, 0xf4292244);\n d = II(d, a, b, c, x[k + 7], S42, 0x432aff97);\n c = II(c, d, a, b, x[k + 14], S43, 0xab9423a7);\n b = II(b, c, d, a, x[k + 5], S44, 0xfc93a039);\n a = II(a, b, c, d, x[k + 12], S41, 0x655b59c3);\n d = II(d, a, b, c, x[k + 3], S42, 0x8f0ccc92);\n c = II(c, d, a, b, x[k + 10], S43, 0xffeff47d);\n b = II(b, c, d, a, x[k + 1], S44, 0x85845dd1);\n a = II(a, b, c, d, x[k + 8], S41, 0x6fa87e4f);\n d = II(d, a, b, c, x[k + 15], S42, 0xfe2ce6e0);\n c = II(c, d, a, b, x[k + 6], S43, 0xa3014314);\n b = II(b, c, d, a, x[k + 13], S44, 0x4e0811a1);\n a = II(a, b, c, d, x[k + 4], S41, 0xf7537e82);\n d = II(d, a, b, c, x[k + 11], S42, 0xbd3af235);\n c = II(c, d, a, b, x[k + 2], S43, 0x2ad7d2bb);\n b = II(b, c, d, a, x[k + 9], S44, 0xeb86d391);\n a = AddUnsigned(a, AA);\n b = AddUnsigned(b, BB);\n c = AddUnsigned(c, CC);\n d = AddUnsigned(d, DD);\n }\n\n var temp = WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d);\n\n return temp.toLowerCase();\n}\n","import { ActiveCode } from \"./activecode.js\";\nimport MD5 from \"./md5.js\";\nimport JUnitTestParser from \"./extractUnitResults-JUnit.js\";\nimport DoctestTestParser from \"./extractUnitResults-Doctest.js\";\nimport \"../../codelens/js/pytutor-embed.bundle.js\";\nimport { base64encode } from \"byte-base64\";\n\nexport default class LiveCode extends ActiveCode {\n constructor(opts) {\n var orig = $(opts.orig).find(\"textarea\")[0];\n super(opts);\n this.stdin = $(orig).data(\"stdin\");\n this.additional_files = $(orig).data(\"add-files\");\n // Accept older \"datafile\" attribute for backwards compatibility\n this.datafiles = $(orig).data(\"datafile\");\n this.sourcefile = $(orig).data(\"sourcefile\");\n this.compileargs = unescapeHtml($(orig).data(\"compileargs\")) || \"\";\n this.compileAlso = unescapeHtml($(orig).data(\"compile-also\"));\n this.linkargs = unescapeHtml($(orig).data(\"linkargs\"));\n this.runargs = unescapeHtml($(orig).data(\"runargs\"));\n this.interpreterargs = unescapeHtml($(orig).data(\"interpreterargs\"));\n this.API_KEY = \"67033pV7eUUvqo07OJDIV8UZ049aLEK1\";\n this.USE_API_KEY = true;\n this.JOBE_SERVER = eBookConfig.jobehost || eBookConfig.host;\n this.resource = eBookConfig.proxyuri_runs || \"/ns/rsproxy/jobeRun\";\n this.jobePutFiles =\n eBookConfig.proxyuri_files || \"/ns/rsproxy/jobePushFile/\";\n this.jobeCheckFiles =\n eBookConfig.proxyuri_files || \"/ns/rsproxy/jobeCheckFile/\";\n // TODO: should add a proper put/check in pavement.tmpl as this is misleading and will break on runestone\n this.div2id = {};\n if (typeof this.stdin !== \"undefined\") {\n this.createInputElement();\n }\n this.createErrorOutput();\n }\n outputfun(a) { }\n createInputElement() {\n let inputContainer = document.createElement(\"div\");\n var label = document.createElement(\"label\");\n label.for = this.divid + \"_stdin\";\n $(label).text($.i18n(\"msg_activecode_input_prg\"));\n var input = document.createElement(\"textarea\");\n input.id = this.divid + \"_stdin\";\n input.classList.add(\"activecode__stdin\");\n input.value = this.stdin;\n input.setAttribute(\"rows\", \"3\");\n this.outerDiv.appendChild(inputContainer);\n inputContainer.appendChild(label);\n inputContainer.appendChild(input);\n this.stdin_el = input;\n }\n createErrorOutput() { }\n\n\n getCombinedSuffixes() {\n if (this.suffix && this.visibleSuffix)\n return this.suffix + this.visibleSuffix;\n else if (this.suffix)\n return this.suffix;\n else if (this.visibleSuffix)\n return this.visibleSuffix;\n return \"\";\n }\n\n hasUnitTests() {\n let combinedSuffix = this.getCombinedSuffixes();\n\n // import used to detect java unit tests is historically assumed to always be in suffix\n if (this.language === \"java\")\n return combinedSuffix.indexOf(\"import org.junit\") > -1;\n\n // cpp unit test include may be in suffix or hidden prefix code\n if (this.language === \"cpp\")\n return combinedSuffix.indexOf(\"doctest.h\") > -1 || (this.prefix && this.prefix.indexOf(\"doctest.h\") > -1);\n\n return false;\n }\n\n /* Main runProg method for livecode\n *\n */\n async runProg(noUI, logResults) {\n if (typeof logResults === \"undefined\") {\n this.logResults = true;\n } else {\n this.logResults = logResults;\n }\n if (typeof noUI !== \"boolean\") {\n noUI = false;\n }\n await this.runSetup();\n try {\n // Either have one run or are doing a series of io tests\n if (!this.iotests) {\n let res = await this.submitToJobe();\n if (!res.ok) {\n this.addJobeErrorMessage(\n $.i18n(`Server Error: ${res.statusText}`)\n );\n $(this.runButton).removeAttr(\"disabled\");\n return \"fail\";\n }\n let runResults = await res.json();\n this.processJobeResponse(runResults);\n } else {\n if(this.hasUnitTests()) {\n console.log(`IO tests are not supported with unit tests. They will be ignored in ${this.divid}`);\n } else {\n let ioResults = [];\n for(let iotest of this.iotests) {\n let spec = JSON.parse(this.json_runspec);\n spec.run_spec.input = iotest.input;\n this.json_runspec = JSON.stringify(spec);\n let iores = await this.submitToJobe();\n if (!iores.ok) {\n this.addJobeErrorMessage(\n $.i18n(`Server Error: ${iores.statusText}`)\n );\n $(this.runButton).removeAttr(\"disabled\");\n return \"fail\";\n }\n let result = await iores.json();\n result.test = iotest;\n ioResults.push(result);\n }\n this.processJobeIOResponses(ioResults);\n }\n }\n } catch (e) {\n this.addJobeErrorMessage(\n $.i18n(\"msg_activecode_server_comm_err\") + e.toString()\n );\n $(this.runButton).removeAttr(\"disabled\");\n return `fail: ${e}`;\n }\n return \"success\";\n }\n /**\n * Note:\n * In order to check for supplemental files in java and deal with asynchronicity\n * I split the original runProg into two functions: runProg and runProg_callback\n */\n async runSetup() {\n var stdin;\n var source;\n var saveCode = \"True\";\n var sfilemap = {\n java: \"\",\n cpp: \"test.cpp\",\n c: \"test.c\",\n python3: \"test.py\",\n python2: \"test.py\",\n octave: \"octatest.m\",\n };\n var sourcefilename = \"\";\n var testdrivername = \"\";\n var file_checkp;\n\n // extract the class names so files can be named properly\n if (this.suffix && this.language == \"java\") {\n // the suffix contains unit test code and should include and import of junit\n // import static org.junit.Assert.*;\n // import org.junit.*;\n // import java.io.*;\n if (this.suffix.indexOf(\"import org.junit\") < 0) {\n console.log(`Missing imports in unit tests:\n ${this.suffix}`);\n // alert(\"The unit tests for this problem are incomplete, Please report this.\");\n this.suffix =\n `\n import static org.junit.Assert.*;\n import org.junit.*;\n import java.io.*;\n ` + this.suffix;\n }\n let classMatch = new RegExp(/public\\s+class\\s+(\\w+)/);\n source = await this.buildProg(false);\n let m = source.match(classMatch);\n if (m) {\n sourcefilename = m[1] + \".java\";\n } else {\n alert(\n \"Error: Could not find the class name in the source, this will not compile.\"\n );\n throw new Error(\"No class name in source\");\n }\n // this will be unit test code\n m = this.suffix.match(classMatch);\n if (m) {\n testdrivername = m[1] + \".java\";\n }\n } else {\n source = await this.buildProg(true);\n }\n // Validate the data is convertible to Base64. If not then error out now\n try {\n btoa(source);\n } catch (e) {\n alert(\n \"Error: Bad Characters in the activecode window. Likely a quote character that has been copy/pasted. 🙁\"\n );\n return;\n }\n\n this.saveCode = await this.manage_scrubber(saveCode);\n\n // assemble parameters for JOBE\n var paramlist = [\n \"compileargs\",\n \"linkargs\",\n \"runargs\",\n \"interpreterargs\",\n \"memorylimit\",\n ];\n var paramobj = {};\n for (let param of paramlist) {\n if (this[param]) {\n paramobj[param] = eval(this[param]); // needs a list\n }\n }\n if (this.language === \"octave\") {\n paramobj.memorylimit = 200000;\n }\n if (this.compileargs && this.compileargs.toString().indexOf(\"fsanitize\") > -1) {\n //fsanitize requires an allocation of a giant block of memory\n paramobj.memorylimit = 2000000000;\n }\n if (this.timelimit) {\n // convert to seconds to match JOBE - decimal is OK\n let timelimitSeconds = this.timelimit / 1000;\n paramobj.cputime = timelimitSeconds;\n }\n\n if (this.stdin) {\n stdin = $(this.stdin_el).val();\n }\n if (!this.sourcefile) {\n this.sourcefile = sfilemap[this.language];\n }\n\n $(this.output).html($.i18n(\"msg_activecode_compiling_running\"));\n\n // Need to handle additional files\n // that come from additional_files (based on ids) and datafiles (based on filenames)\n // merge into one collection of objects we can iterate over. Tag datafiles as \"datafile\"\n let allFilesRaw = [];\n if (this.datafiles != undefined) {\n let datafiles = this.datafiles.split(\",\");\n for (let d of datafiles) {\n let datafileFileName = d.trim();\n allFilesRaw.push({filename:datafileFileName, type: \"datafile\"});\n }\n }\n if (this.additional_files != undefined) {\n let additionalFiles = this.additional_files.split(\",\");\n for (let f of additionalFiles) {\n let addFileId = f.trim();\n allFilesRaw.push({acid:addFileId});\n }\n }\n\n // Now build up actual file collection\n var files = [];\n for (let f of allFilesRaw) {\n // Need to determine content and filename for each datafile\n let fileName, content;\n // Check on page to see if we have the datafile.\n // Datafiles are looked up via data-filename attribute while additional_files are looked up via id\n let fileElement;\n if (f.type === \"datafile\") {\n fileElement = document.querySelector(`[data-filename=\"${f.filename}\"]`);\n // But RST markup uses filename as id\n if (!fileElement)\n fileElement = document.getElementById(f.filename);\n }\n else {\n fileElement = document.getElementById(f.acid);\n }\n\n if (fileElement) {\n // if the element is a code mirror, get the value from the editor\n if (window.componentMap && window.componentMap.hasOwnProperty(fileElement.id)) {\n let editor = window.componentMap[fileElement.id].editor;\n content = editor.getValue();\n } else {\n // if file element is editable textarea, file.value is defined and has the current contents\n // otherwise rely on static contents\n if(fileElement.value)\n content = fileElement.value;\n else\n content = fileElement.textContent;\n }\n // Note - content may be undefined at this point if file is an image\n // If the file came from an item with a data-filename attribute, use that as the filename\n // otherwise this must be an RST item with filename as the id\n fileName = fileElement.dataset.filename || f.filename;\n } else {\n // check to see if file is in db\n let result = null;\n let studentCode = null;\n let url;\n // Again, datafiles traditionally are looked up via filename, additional_files are looked up via acid\n if (f.type === \"datafile\") {\n url = `/ns/logger/get_source_code?course_id=${eBookConfig.course}&filename=${f.filename}`;\n } else {\n url = `/ns/logger/get_source_code?course_id=${eBookConfig.course}&acid=${f.acid}`;\n // if looking up additional file, also check to see if there is a student submission\n // if so, we will want to use their code. Still need to hit source_code table for filename.\n let request = new Request(\n `${eBookConfig.new_server_prefix}/assessment/get_latest_code?acid=${f.acid}`,\n {\n method: \"POST\",\n headers: this.jsonHeaders,\n }\n );\n try {\n let response = await fetch(request);\n let data = await response.json();\n data = data.detail;\n if (data && data.code) {\n studentCode = data.code;\n }\n } catch (e) {\n console.log(\"Error getting student code: \" + e);\n // do nothing, we will just use the original code\n }\n }\n // Now make request for source_code\n $.ajax({\n async: false,\n url: url,\n success: function (data) {\n result = data.detail;\n }\n });\n if (result) {\n // favor student code if it exists\n content = studentCode || result.file_contents;\n fileName = result.filename;\n }\n }\n\n if (fileName) {\n let fileExtension = fileName.substring(\n fileName.lastIndexOf(\".\") + 1\n );\n if (fileExtension === \"jar\") {\n files = files.concat(this.parseJavaClasses(content));\n } else if ([\"jpg\", \"png\", \"gif\"].indexOf(fileExtension) > -1) {\n let base64;\n if (fileElement) {\n if (fileElement.toDataURL) {\n base64 = fileElement.toDataURL(\"image/\" + fileExtension);\n base64 = base64.substring(base64.indexOf(\",\") + 1);\n } else {\n base64 = fileElement.src.substring(\n fileElement.src.indexOf(\",\") + 1\n );\n }\n } else {\n base64 = content;\n }\n files.push({ name: fileName, content: base64 });\n } else {\n // if no className or un recognized className it is treated as an individual file\n // this could be any type of file, .txt, .java, .csv, etc\n files.push({ name: fileName, content: content });\n }\n } else {\n // if we don't have a file name, then we don't have a file\n $.i18n(\"msg_activecode_no_file_or_dir\")\n }\n }\n // If we are running unit tests we need to substitute the test driver for the student\n // code and send the student code as a file. We'll do that here.\n this.junitDriverCode = `\n import org.junit.runner.JUnitCore;\n import org.junit.runner.Result;\n import org.junit.runner.notification.Failure;\n\n public class TestRunner {\n public static void main(String[] args) {\n CodeTestHelper.resetFinalResults();\n Result result = JUnitCore.runClasses(${testdrivername.replace(\n \".java\",\n \".class\"\n )});\n System.out.println(CodeTestHelper.getFinalResults());\n\n int total = result.getRunCount();\n int fails = result.getFailureCount();\n int corr = total - fails;\n System.out.println(\"You got \" + corr + \" out of \" + total + \" correct. \" + String.format(\"%.2f\", (100.0 * corr / total)) + \"%\");\n }\n }\n `;\n if (this.suffix && this.language == \"java\") {\n files.push({ name: sourcefilename, content: source });\n files.push({ name: testdrivername, content: this.suffix });\n source = this.junitDriverCode;\n if (paramobj.compileargs) {\n paramobj.compileargs.push(sourcefilename);\n } else {\n paramobj.compileargs = [sourcefilename];\n }\n }\n if (this.compileAlso) {\n // a comma separated list of files that also need to be compiled\n // they also all should be part of additional_files\n // we will stick them onto the end of the compilerargs\n // so that jobe builds them into the string sent to the compiler\n // e.g. g++ [other_compile_args] [compileAlso] sourcefile -o executable\n paramobj.compileargs = paramobj.compileargs || [];\n let compileList = this.compileAlso.split(\",\");\n paramobj.compileargs = paramobj.compileargs.concat(compileList);\n }\n let runspec = {\n language_id: this.language,\n sourcecode: source,\n parameters: paramobj,\n sourcefilename: this.sourcefile,\n };\n\n if (stdin) {\n runspec.input = stdin;\n }\n if (files.length === 0) {\n this.json_runspec = JSON.stringify({ run_spec: runspec });\n file_checkp = Promise.resolve(\"ready\");\n } else {\n runspec[\"file_list\"] = [];\n var promises = [];\n var instance = this;\n\n for (let i = 0; i < files.length; i++) {\n var fileName = files[i].name;\n var fileContent = files[i].content;\n instance.div2id[fileName] =\n \"runestone\" + MD5(fileName + fileContent);\n runspec[\"file_list\"].push([\n instance.div2id[fileName],\n fileName,\n ]);\n promises.push(\n new Promise((resolve, reject) => {\n instance.checkFile(files[i], resolve, reject);\n })\n );\n }\n this.json_runspec = JSON.stringify({ run_spec: runspec });\n this.div2id = instance.div2id;\n file_checkp = Promise.all(promises).catch(function (err) {\n console.log(\"Error: \" + err);\n });\n }\n return file_checkp;\n }\n\n /* Submit the assembled job to the JOBE server and await the results.\n *\n */\n async submitToJobe() {\n var data = this.json_runspec;\n let host = this.JOBE_SERVER + this.resource;\n $(this.runButton).attr(\"disabled\", \"disabled\");\n $(this.outDiv).show({ duration: 700, queue: false });\n $(this.errDiv).remove();\n $(this.output).css(\"visibility\", \"visible\");\n\n let headers = new Headers({\n \"Content-type\": \"application/json; charset=utf-8\",\n Accept: \"application/json\",\n \"X-API-KEY\": this.API_KEY,\n });\n let request = new Request(host, {\n method: \"POST\",\n headers: headers,\n body: data,\n });\n return fetch(request);\n\n ///$(\"#\" + divid + \"_errinfo\").remove();\n }\n\n // Handle the results of a single program run (including formal unit tests)\n processJobeResponse(result) {\n var logresult;\n var odiv = this.output;\n this.parsedOutput = {};\n $(this.runButton).removeAttr(\"disabled\");\n if (result.outcome === 15) {\n logresult = \"success\";\n } else {\n logresult = result.outcome;\n }\n this.errinfo = logresult;\n switch (result.outcome) {\n case 15: {\n if (this.language === \"java\") {\n this.parsedOutput = new JUnitTestParser(\n result.stdout,\n this.divid\n );\n $(odiv).html(this.parsedOutput.stdout);\n } else if (this.language === \"cpp\" && result.stdout.includes(\"[doctest]\")) {\n this.parsedOutput = new DoctestTestParser(\n result.stdout,\n this.divid\n );\n $(odiv).html(this.parsedOutput.stdout);\n } else {\n let output = result.stdout ? result.stdout : \"\";\n $(odiv).html(output);\n }\n if (this.hasUnitTests() || this.iotests) {\n if (this.parsedOutput.pct === undefined) {\n this.parsedOutput.pct =\n this.parsedOutput.passed =\n this.parsedOutput.failed =\n 0;\n }\n this.unit_results = `percent:${this.parsedOutput.pct}:passed:${this.parsedOutput.passed}:failed:${this.parsedOutput.failed}`;\n }\n break;\n }\n case 11: // compiler error\n $(odiv).html($.i18n(\"msg_activecode_were_compiling_err\"));\n this.addJobeErrorMessage(result.cmpinfo);\n this.errinfo = result.cmpinfo;\n break;\n case 12: // run time error\n // special case for compile-only request when using c/cpp\n if(\n (this.language === \"cpp\" || this.language === \"c\")\n && result.stderr.includes(\"Permission denied\")\n && this.compileargs && this.compileargs.includes(\"-c\")\n ) {\n $(odiv).html($.i18n(\"msg_activecode_compile_only\"));\n } else {\n // any other case is real run time error\n $(odiv).html(result.stdout.replace(/\\n/g, \"
            \"));\n if (result.stderr) {\n this.addJobeErrorMessage(result.stderr);\n }\n }\n break;\n case 13: // time limit\n $(odiv).html(escapeHtml(result.stdout).replace(/\\n/g, \"
            \"));\n this.addJobeErrorMessage(\n $.i18n(\"msg_activecode_time_limit_exc\")\n );\n break;\n default:\n if (result.stderr) {\n $(odiv).html(result.stderr.replace(/\\n/g, \"
            \"));\n } else {\n this.addJobeErrorMessage(\n $.i18n(\"msg_activecode_server_err\")\n );\n }\n }\n // todo: handle server busy errors too\n }\n\n // Handle the results of a seriest of program runs from IO tests\n processJobeIOResponses(resultList) {\n //process a series of IO test results into one unittest-like result\n\n $(this.output).html($.i18n(\"msg_activecode_iotest_results\"));\n $(this.runButton).removeAttr(\"disabled\");\n const odiv = this.output;\n this.parsedOutput = {};\n\n // Make a pretty results table\n const parent = document.createElement(\"div\");\n const heading = document.createElement(\"div\");\n heading.classList.add(\"unittest-results__heading\");\n heading.innerHTML = $.i18n(\"msg_activecode_unit_test_results\");\n parent.appendChild(heading);\n parent.classList.add(\"unittest-results\");\n const tbl = document.createElement(\"table\");\n tbl.classList.add(\"ac-feedback\");\n parent.appendChild(tbl);\n parent.setAttribute(\"id\", `${this.divid}_unit_results`);\n const trh = document.createElement(\"tr\");\n trh.innerHTML =\n 'Input:Expected Output:Your Output:Result:';\n tbl.appendChild(trh);\n this.parsedOutput.table = parent;\n\n // Process each IO test result\n let passedTests = 0;\n // we will stop on the first error\n this.errinfo = null;\n // trim any trailing whitespace so invisible extra newline doesn't fail test\n // then trim trailing whitespace on each remaining line\n const trimLines = (s) => s.trimEnd().split(\"\\n\").map( s => s.trimEnd()).join(\"\\n\")\n for (let result of resultList) {\n const produced = trimLines(result.stdout);\n const desired = trimLines(result.test.out);\n const tr = document.createElement(\"tr\");\n const td1 = document.createElement(\"td\");\n td1.classList.add(\"ac-feedback\");\n td1.innerHTML = `
            ${result.test.input}\\n\\n
            `;\n tr.appendChild(td1);\n const td2 = document.createElement(\"td\");\n td2.classList.add(\"ac-feedback\");\n td2.innerHTML = `
            ${desired}
            `;\n tr.appendChild(td2);\n const td3 = document.createElement(\"td\");\n td3.classList.add(\"ac-feedback\");\n //
             doesn't prevent browser from gulping leading space\n            // so produce a version that transforms whitespace into html entities/tags\n            let producedRenderOutput = produced.replaceAll(\" \", \" \").replaceAll(\"\\n\", \"
            \");\n td3.innerHTML = `
            ${producedRenderOutput}
            `;\n tr.appendChild(td3);\n const td4 = document.createElement(\"td\");\n td4.classList.add(\"ac-feedback\");\n tr.appendChild(td4);\n tbl.appendChild(tr);\n switch (result.outcome) {\n case 15:\n if(produced === desired) {\n passedTests++;\n td4.innerHTML = $.i18n(\"msg_activecode_passed\");\n td4.classList.add(\"ac-feedback-pass\");\n } else {\n td4.innerHTML = $.i18n(\"msg_activecode_failed\");\n td4.classList.add(\"ac-feedback-fail\");\n }\n break;\n case 11: // compiler error\n $(odiv).html(result.cmpinfo.replace(/\\n/g, \"
            \"));\n td4.innerHTML = $.i18n(\"msg_activecode_test_compile_error\");\n td4.classList.add(\"ac-feedback-fail\");\n this.errinfo = result.cmpinfo;\n break;\n case 12: // run time error\n $(odiv).html(result.stderr.replace(/\\n/g, \"
            \"));\n td4.innerHTML = $.i18n(\"msg_activecode_test_run_error\");\n td4.classList.add(\"ac-feedback-fail\");\n this.errinfo = result.stderr;\n break;\n case 13: // time limit\n $(odiv).html(escapeHtml(result.stdout).replace(/\\n/g, \"
            \"));\n td4.innerHTML = $.i18n(\"msg_activecode_time_limit_exc\");\n td4.classList.add(\"ac-feedback-fail\");\n this.errinfo = 'time exceeded ' + result.stdout;\n break;\n default:\n if (result.stderr) {\n $(odiv).html(result.stderr.replace(/\\n/g, \"
            \"));\n }\n td4.innerHTML = $.i18n(\"msg_activecode_server_err\");\n td4.classList.add(\"ac-feedback-fail\");\n this.errinfo = result.stderr;\n }\n if (this.errinfo) {\n break;\n }\n }\n\n const pct = (passedTests / resultList.length) * 100;\n this.unit_results = `percent:${pct}:passed:${passedTests}:failed:${resultList.length - passedTests}`;\n const pctString = document.createElement(\"div\");\n pctString.classList.add(\"unittest-results__percent\");\n pctString.innerHTML = `${Math.round(pct)}% ` + $.i18n(\"msg_activecode_passed\");\n this.parsedOutput.pctString = pctString;\n\n if (!this.errinfo) {\n this.errinfo = \"success\";\n }\n }\n\n renderFeedback() {\n let rdiv = document.getElementById(`${this.divid}_unit_results`);\n if (rdiv) {\n rdiv.remove();\n }\n if (this.parsedOutput && this.parsedOutput.table) {\n this.outDiv.parentNode.appendChild(this.parsedOutput.table);\n }\n rdiv = document.getElementById(`${this.divid}_unit_results`);\n if (rdiv) {\n rdiv.appendChild(this.parsedOutput.pctString);\n }\n }\n\n addJobeErrorMessage(err) {\n if (this.errDiv) {\n this.errDiv.remove();\n }\n var errHead = $(\"

            \").html(\"Error\");\n var eContainer = this.outerDiv.appendChild(\n document.createElement(\"div\")\n );\n this.errDiv = eContainer;\n eContainer.setAttribute(\"aria-live\", \"polite\");\n eContainer.setAttribute(\"aria-atomic\", \"true\");\n eContainer.setAttribute(\"role\", \"log\");\n eContainer.className = \"error alert alert-danger\";\n eContainer.id = this.divid + \"_errinfo\";\n eContainer.appendChild(errHead[0]);\n var errText = eContainer.appendChild(document.createElement(\"pre\"));\n // screenreaders seem to miss error message without the delay\n setTimeout(() => {\n errText.innerHTML = escapeHtml(err);\n }, 10);\n }\n /**\n * Checks to see if file is on server\n * Places it on server if it is not on server\n * @param {object{name, contents}} file File to place on server\n * @param {function} resolve promise resolve function\n * @param {function} reject promise reject function\n */\n checkFile(file, resolve, reject) {\n var file_id = this.div2id[file.name];\n var resource = this.jobeCheckFiles + file_id;\n var host = this.JOBE_SERVER + resource;\n var xhr = new XMLHttpRequest();\n xhr.open(\"HEAD\", host, true);\n xhr.setRequestHeader(\"Content-type\", \"application/json\");\n xhr.setRequestHeader(\"Accept\", \"text/plain\");\n xhr.setRequestHeader(\"X-API-KEY\", this.API_KEY);\n xhr.onerror = function () {\n // console.log(\"error sending file\" + xhr.responseText);\n };\n xhr.onload = function () {\n switch (xhr.status) {\n case 208:\n case 404:\n // console.log(\"File not on Server\");\n this.pushDataFile(file, resolve, reject);\n break;\n case 400:\n // console.log(\"Bad Request\");\n reject();\n break;\n case 204:\n // console.log(\"File already on Server\");\n resolve();\n break;\n default:\n //console.log(\"This case should never happen\");\n reject();\n }\n }.bind(this);\n xhr.send();\n }\n /**\n * Places a file on a server\n */\n pushDataFile(file, resolve, reject) {\n var fileName = file.name;\n var extension = fileName.substring(fileName.indexOf(\".\") + 1);\n var file_id = this.div2id[fileName];\n var contents = file.content;\n // File types being uploaded that come in already in base64 format\n var extensions = [\"jar\", \"zip\", \"png\", \"jpg\", \"jpeg\"];\n var contentsb64;\n if (extensions.indexOf(extension) === -1) {\n contentsb64 = base64encode(contents);\n } else {\n contentsb64 = contents;\n }\n var data = JSON.stringify({ file_contents: contentsb64 });\n var resource = this.jobePutFiles + file_id;\n var host = this.JOBE_SERVER + resource;\n var xhr = new XMLHttpRequest();\n xhr.open(\"PUT\", host, true);\n xhr.setRequestHeader(\"Content-type\", \"application/json\");\n xhr.setRequestHeader(\"Accept\", \"text/plain\");\n xhr.setRequestHeader(\"X-API-KEY\", this.API_KEY);\n xhr.onload = function () {\n switch (xhr.status) {\n case 403:\n // console.log(\"Forbidden\");\n reject();\n break;\n case 400:\n // console.log(\"Bad Request\");\n reject();\n break;\n case 204:\n //console.log(\"successfully sent file \" + xhr.responseText);\n //console.log(\"File \" + fileName +\", \" + file_id +\" placed on server\");\n resolve();\n break;\n default:\n // console.log(\"This case should never happen\");\n reject();\n }\n }.bind(this);\n xhr.onerror = function () {\n // console.log(\"error sending file\" + xhr.responseText);\n reject();\n };\n xhr.send(data);\n }\n\n async showCodelens() {\n let clMess = \"\";\n if (this.codelens.style.display == \"none\") {\n this.codelens.style.display = \"block\";\n clMess = \"Building your visualization\";\n this.codelens.innerHTML = clMess;\n this.clButton.innerText = $.i18n(\"msg_activecode_hide_codelens\");\n } else {\n this.codelens.style.display = \"none\";\n this.clButton.innerText = $.i18n(\"msg_activecode_show_in_codelens\");\n return;\n }\n var cl = this.codelens.firstChild;\n if (cl) {\n this.codelens.removeChild(cl);\n this.codelens.innerHTML = clMess;\n }\n var code = await this.buildProg(false);\n if (code.match(/System.exit/)) {\n alert(\n \"Sorry... System.exit breaks the visualizer temporarily removing\"\n );\n code = code.replace(/System.exit\\(\\d+\\);/, \"\");\n }\n var myVars = {};\n myVars.code = code;\n myVars.lang = this.language;\n if (this.stdin) {\n myVars.stdin = $(this.stdin_el).val();\n }\n var targetDiv = this.codelens.id;\n\n let request = new Request(\"/ns/rsproxy/pytutor_trace\", {\n method: \"POST\",\n body: JSON.stringify(myVars),\n headers: this.jsonHeaders,\n });\n try {\n let response = await fetch(request);\n let data = await response.json();\n let vis = addVisualizerToPage(data, targetDiv, {\n startingInstruction: 0,\n editCodeBaseURL: null,\n hideCode: false,\n lang: myVars.lang,\n });\n } catch (error) {\n let targetDivError = document.getElementById(targetDiv);\n targetDivError.innerHTML =\n \"Sorry, an error occurred while creating your visualization.\";\n console.log(\"Get Trace Failed -- \");\n console.log(error);\n }\n\n this.logBookEvent({\n event: \"codelens\",\n act: \"view\",\n div_id: this.divid,\n });\n }\n\n /**\n * Seperates text into multiple .java files\n * @param {String} text String with muliple java classes needed to be seperated\n * @return {array of objects} .name gives the name of the java file with .java extension\n * .content gives the contents of the file\n */\n parseJavaClasses(text) {\n text = text.trim();\n var found = false;\n var stack = 0;\n var startIndex = 0;\n var classes = [];\n var importIndex = 0;\n var endOfLastCommentBeforeClassBegins = 0;\n for (var i = 0; i < text.length; i++) {\n var char = text.charAt(i);\n if (char === \"/\") {\n i++;\n if (text.charAt(i) === \"/\") {\n i++;\n while (text.charAt(i) !== \"\\n\" && i < text.length) {\n i++;\n }\n if (!found) {\n endOfLastCommentBeforeClassBegins = i;\n }\n } else if (text.charAt(i) == \"*\") {\n i++;\n while (\n (text.charAt(i) !== \"*\" ||\n text.charAt(i + 1) !== \"/\") &&\n i + 1 < text.length\n ) {\n i++;\n }\n if (!found) {\n endOfLastCommentBeforeClassBegins = i;\n }\n }\n } else if (char === '\"') {\n i++;\n while (text.charAt(i) !== '\"' && i < text.length) {\n i++;\n }\n } else if (char === \"'\") {\n while (text.charAt(i) !== \"'\" && i < text.length) {\n i++;\n }\n } else if (char === \"(\") {\n var pCount = 1;\n i++;\n while (pCount > 0 && i < text.length) {\n if (text.charAt(i) === \"(\") {\n pCount++;\n } else if (text.charAt(i) === \")\") {\n pCount--;\n }\n i++;\n }\n }\n if (!found && text.charAt(i) === \"{\") {\n startIndex = i;\n found = true;\n stack = 1;\n } else if (found) {\n if (text.charAt(i) === \"{\") {\n stack++;\n }\n if (text.charAt(i) === \"}\") {\n stack--;\n }\n }\n if (found && stack === 0) {\n let endIndex = i + 1;\n var words = text\n .substring(endOfLastCommentBeforeClassBegins, startIndex)\n .trim()\n .split(\" \");\n var className = \"\";\n for (var w = 0; w < words.length; w++) {\n className = words[w];\n if (words[w] === \"extends\" || words[w] === \"implements\") {\n className = words[w - 1];\n w = words.length;\n }\n }\n className = className.trim() + \".java\";\n classes.push({\n name: className,\n content: text.substring(importIndex, endIndex),\n });\n found = false;\n importIndex = endIndex;\n endOfLastCommentBeforeClassBegins = endIndex;\n }\n }\n return classes;\n }\n}\n\n// Warning - returns undefined if safe is an empty string\n// existing usages in constructor appear to rely on that behavior\nfunction unescapeHtml(safe) {\n if (safe) {\n return safe\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\");\n }\n}\n\n// Designed to produce HTML from a string, so always return a string\nfunction escapeHtml(str) {\n if (str) {\n return str\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/'/g, ''')\n .replace(/\"/g, '"');\n }\n return '';\n}\n"],"names":["Sk","builtinFiles","JSActiveCode","constructor","opts","super","outputfun","a","$","this","output","css","str","length","i","j","JSON","stringify","e","runProg","_this","prog","buildProg","saveCode","write","innerHTML","writeln","manage_scrubber","eContainer","remove","text","outDiv","show","duration","queue","eval","errinfo","addErrorMessage","err","errLastRun","errHead","html","outerDiv","appendChild","document","createElement","setAttribute","className","id","divid","errText","errString","toString","setTimeout","console","log","DoctestTestParser","parentId","sep","pre","testDetails","report","parts","split","cleanedOutput","programOutLines","slice","line","trim","testOutputLines","reportLines","stdout","patt","RegExp","matches","matchAll","match","pct","groups","passed","tests","pctString","replace","parseInt","failed","parent","classList","add","tbl","trh","i18n","tr","td","table","load","msg_activecode_load_history","msg_activecode_audio_tour","msg_activecode_loaded_code","msg_activecode_no_saved_code","msg_activecode_run_code","msg_activecode_show_feedback","msg_activecode_show_code","msg_activecode_hide_code","msg_activecode_show_codelens","msg_activecode_show_in_codelens","msg_activecode_hide_codelens","msg_activecode_reformat","msg_activecode_parse_error","msg_activecode_parse_error_fix","msg_activecode_type_error","msg_activecode_type_error_fix","msg_activecode_name_error","msg_activecode_name_error_fix","msg_activecode_value_error","msg_activecode_value_error_fix","msg_activecode_attribute_error","msg_activecode_attribute_error_fix","msg_activecode_token_error","msg_activecode_token_error_fix","msg_activecode_time_limit_error","msg_activecode_time_limit_error_fix","msg_activecode_general_error","msg_activecode_general_error_fix","msg_activecode_syntax_error","msg_activecode_syntax_error_fix","msg_activecode_key_error","msg_activecode_key_error_fix","msg_activecode_index_error","msg_activecode_index_error_fix","msg_activecode_uri_error","msg_activecode_uri_error_fix","msg_activecode_import_error","msg_activecode_import_error_fix","msg_activecode_reference_error","msg_activecode_reference_error_fix","msg_activecode_zero_division_error","msg_activecode_zero_division_error_fix","msg_activecode_range_error","msg_activecode_range_error_fix","msg_activecode_internal_error","msg_activecode_internal_error_fix","msg_activecode_indentation_error","msg_activecode_indentation_error_fix","msg_activecode_not_implemented_error","msg_activecode_not_implemented_error_fix","msg_activecode_file_not_found","msg_activecode_no_file_or_dir","msg_activecode_starting","msg_activecode_playing","msg_activecode_loading_audio","msg_activecode_pause_current_audio","msg_activecode_pause_audio","msg_activecode_play_paused_audio","msg_activecode_audio_paused","msg_activecode_input_prg","msg_activecode_were_compiling_err","msg_activecode_time_limit_exc","msg_activecode_server_err","msg_activecode_compiling_running","msg_activecode_server_comm_err","msg_activecode_save_run","msg_activecode_render","msg_activecode_assertion_error","msg_activecode_assertion_error_fix","msg_activecode_load_db","map","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","code","keys","Object","resolve","module","exports","jQuery","fn","highlight","pat","innerHighlight","node","skip","nodeType","pos","data","toUpperCase","indexOf","spannode","middlebit","splitText","middleclone","cloneNode","parentNode","replaceChild","childNodes","test","tagName","each","removeHighlight","find","firstChild","nodeName","normalize","end","$jscomp","scope","ASSUME_ES5","ASSUME_NO_NATIVE_MAP","ASSUME_NO_NATIVE_SET","SIMPLE_FROUND_POLYFILL","ISOLATE_POLYFILLS","FORCE_POLYFILL_PROMISE","FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION","defineProperty","defineProperties","D","R","Array","prototype","value","getGlobal","globalThis","window","self","g","Math","global","IS_SYMBOL_NATIVE","Symbol","TRUST_ES6_POLYFILLS","polyfills","propertyToPolyfillSymbol","POLYFILL_PREFIX","polyfill","d","polyfillIsolated","polyfillUnisolated","c","configurable","writable","k","isArray","flat","call","push","apply","arrayIteratorImpl","done","arrayIterator","next","initSymbol","iteratorPrototype","iterator","TypeError","p","lastIndex","h","exec","String","max","is","owns","hasOwnProperty","checkStringArgs","stringPadding","repeat","ceil","substring","iteratorFromArray","l","m","enumerable","get","r","toStringTag","t","__esModule","create","bind","n","s","Function","Cc","Cf","Co","Cs","Cn","Ll","Lm","Lo","Lt","Lu","M","Mc","Me","Mn","Nd","Nl","No","Pc","Pd","Pe","Pf","Pi","Po","Ps","Sc","Sm","So","Zl","Zp","Zs","C","L","LC","N","P","S","Z","w","b","bOut","bIn","bInCapture","B","strftime","builtin","object","type","forEach","abstr","setUpSlots","setUpMethods","setUpGetSets","setUpClassMethods","none","NotImplemented","__doc__","tp$doc","none$","build","githash","date","exportSymbol","f","isArrayLike","js_beautify","getDay","Date","UTC","getFullYear","getMonth","getDate","floor","warn","de_DE","identifier","days","shortDays","months","shortMonths","AM","PM","am","pm","formats","F","T","v","X","x","en_CA","ordinalSuffixes","en_US","es_MX","fr_FR","it_IT","nl_NL","pt_BR","ru_RU","tr_TR","zh_CN","q","z","G","K","U","y","J","Q","charCodeAt","getHours","getMinutes","getSeconds","getTime","getTimezoneOffset","abs","E","now","localize","localizeByIdentifier","timezone","utc","JSBI","BigInt","__isBigInt","powermod","greaterThan","__ZERO","unaryMinus","bitwiseAnd","remainder","multiply","signedRightShift","assign","toNumber","Number","bitwiseNot","bitwiseOr","bitwiseXor","exponentiate","divide","subtract","leftShift","unsignedRightShift","lessThan","lessThanOrEqual","greaterThanOrEqual","equal","notEqual","__MAX_SAFE","MAX_SAFE_INTEGER","__MIN_SAFE","numberIfSafe","BigUp","imul","clz32","sign","__kMaxLength","RangeError","isFinite","__zero","__isOneDigitInt","__oneDigit","__fromDouble","__fromString","SyntaxError","__toPrimitive","toDebugString","join","__toStringGeneric","__toStringBasePowerOfTwo","__unsignedDigit","__digit","__clz30","__decideRounding","__kBitConversionInts","__kBitConversionDouble","__copy","__absoluteSubOne","__trim","__absoluteAddOne","__kMaxLengthBits","__initializeDigits","__setDigit","__clzmsd","__multiplyAccumulate","__absoluteCompare","__absoluteDivSmall","__absoluteDivLarge","__absoluteModSmall","__absoluteAdd","__absoluteSub","__rightShiftByAbsolute","__leftShiftByAbsolute","__compareToBigInt","__absoluteAnd","__absoluteOr","__absoluteAndNot","__absoluteXor","asIntN","__truncateToNBits","__truncateAndSubFromPowerOfTwo","asUintN","ADD","__toNumeric","LT","__compare","LE","GT","GE","EQ","__equalToNumber","NE","pop","__isWhitespace","__kMaxBitsPerChar","__kBitsPerCharTableMultiplier","__kBitsPerCharTableShift","__inplaceMultiplyAdd","__fillFromParts","__kConversionChars","__halfDigit","__setHalfDigit","quotient","__unequalSign","__absoluteGreater","__absoluteLess","__compareToNumber","__compareToDouble","__comparisonResultToBool","__setDigitGrow","__imul","__internalMultiplyAdd","__halfDigitLength","__clz15","__specialLeftShift","__inplaceSub","__inplaceAdd","__inplaceRightShift","__toShiftAmount","__rightShiftByMaximum","toPrimitive","valueOf","min","__digitPow","__kBitConversionBuffer","ArrayBuffer","Float64Array","Int32Array","LN2","callback","args","setImmediate","getPrototypeOf","process","nextTick","postMessage","importScripts","onmessage","random","source","addEventListener","attachEvent","MessageChannel","port1","port2","documentElement","onreadystatechange","removeChild","arguments","clearImmediate","concat","run","clearTimeout","fun","array","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","asserts","assert","fail","bool_check","python2","print_function","division","absolute_import","unicode_literals","python3","class_repr","inherit_from_object","super_args","octal_number_literal","bankers_rounding","python_version","dunder_round","exceptions","no_long_type","ceil_floor_int","silent_octal_literal","configure","filewriter","debugout","uncaughtException","read","nonreadopen","fileopen","filewrite","timeoutMsg","sysargv","__future__","imageProxy","inputfun","inputfunTakesPrompt","retainGlobals","retainglobals","debugging","killableWhile","killableFor","signals","removeEventListener","splice","signal","breakpoints","execLimit","yieldLimit","syspath","realsyspath","sysmodules","dict","misceval","softspace_","defaultHandlers","suspensionHandlers","switch_version","$next","setupOperators","setupDunderMethods","setupObjects","token","setupTokens","POSITIVE_INFINITY","files","getSysArgv","inBrowser","print","prompt","setup_method_mappings","setupDictIterators","float_","method_names","int_","list","py3$methods","d$def","py2$methods","method_descriptor","func","$mangled","tp$mro","tp$base","sk$klass","__dict__","checkDataDescr","tp$name","$jsstr","ob$type","tp$slots","tp$call","tp$new","$isSuspension","chain","$isSubType","tp$init","typeName","checkString","sk$asarray","sk$solidBase","sk$solidSlotBase","checkClass","sk$unacceptableBase","setUpInheritance","sk$prototypical","tp$bases","ht$type","ht$name","ht$qualname","$buildMRO","$typeLookup","sk$hasDict","$d","$s","globals","__module__","__name__","quick$lookup","$slots","$dict","Set","arrayFromIterable","$isIdentifier","mangleName","sk$nslots","$fixReserved","getset_descriptor","$get","AttributeError","$set","sort","localeCompare","ht$slots","$items","has","ValueError","__qualname__","$allocateSlots","lookupSpecial","$setname","unfixReserved","callsimArray","RuntimeError","$cause","super_","tp$getattr","$initsubclass","tp$descr_get","tp$descr_set","tp$setattr","dunderToSkulpt","$allocateGetterSlot","$allocateSlot","$r","tp$methods","tp$classmethods","tp$getsets","sk$type","includes","slots","$slot_name","$slot_func","tp$hash","__hash__","getOwnPropertyDescriptor","$mroMerge","sk$attrError","__base__","__bases__","sk$tuple_bases","tuple","__mro__","sk$tuple_mro","mappingproxy","$doc","lastIndexOf","$name","$module","mro","$meth","$flags","NoArgs","__dir__","$mergeClassDict","__prepare__","FastCall","generic","getSetDict","getAttr","setAttr","dict$setItem","dict$delItem","sk$object","new","newMethodDef","shift","sk$staticNew","$textsig","selfIter","iterNextWithArrayCheckSize","$seq","$orig","get$size","$index","iterNextWithArray","tp$iternext","iterLengthHintWithArrayMethodDef","iterReverseLengthHintMethodDef","seqCompare","opAllowsEquality","sk$builtinBase","NotImplemented$","richCompareBool","classGetItem","__class_getitem__","GenericAlias","OneArg","pyCheckArgs","Infinity","pyCheckArgsLen","pyCheckType","checkSequence","mp$subscript","checkIterable","tp$iter","checkCallable","checkNumber","lng","checkComplex","complex","checkInt","isInteger","checkFloat","checkBytes","bytes","checkBool","bool","checkNone","checkFunction","checkAnySet","set","frozenset","checkMapping","$keys","nb$reflected_add","nb$reflected_subtract","nb$reflected_multiply","nb$reflected_matrix_multiply","nb$reflected_divide","nb$reflected_floor_divide","nb$reflected_remainder","nb$reflected_divmod","nb$reflected_power","nb$reflected_lshift","nb$reflected_rshift","nb$reflected_and","nb$reflected_xor","nb$reflected_or","sk$baseClass","nb$add","nb$subtract","nb$multiply","nb$matrix_multiply","nb$divide","nb$floor_divide","nb$remainder","nb$divmod","nb$power","nb$lshift","nb$rshift","nb$and","nb$xor","nb$or","nb$inplace_add","nb$inplace_subtract","nb$inplace_multiply","nb$inplace_matrix_multiply","nb$inplace_divide","nb$inplace_floor_divide","nb$inplace_remainder","nb$inplace_power","nb$inplace_lshift","nb$inplace_rshift","nb$inplace_and","nb$inplace_or","nb$inplace_xor","Add","Sub","Mult","MatMult","Div","FloorDiv","Mod","DivMod","Pow","LShift","RShift","BitAnd","BitXor","BitOr","UAdd","USub","Invert","numberBinOp","numberInplaceBinOp","numberUnaryOp","isTrue","false$","true$","nb$negative","nb$positive","nb$invert","fixSeqIndex_","asnum$","sq$length","sequenceContains","sq$contains","iterFor","iter","Break","retryOptionalSuspensionOrThrow","sequenceConcat","sq$concat","sequenceInPlaceConcat","sq$inplace_concat","sequenceGetIndexOf","index","sequenceGetCountOf","count","sequenceGetItem","objectGetItem","sequenceSetItem","objectSetItem","sequenceDelItem","objectDelItem","sequenceGetSlice","sequenceDelSlice","sequenceSetSlice","sequenceUnpack","mappingUnpackIntoKeywordArray","callsimOrSuspendArray","$qualname","keywordArrayFromPyDict","keywordArrayToPyDict","mp$ass_subscript","copyKeywordsToNamedArgs","filter","checkNoKwargs","checkNoArgs","checkOneArg","checkArgsLen","objectFormat","$emptystr","$format","objectHash","objectAdd","objectNegative","objectPositive","typeLookup","$class_getitem","gattr","sattr","iternext","seq_iter_","lookupAttr","markUnhashable","setPrototypeOf","setUpBuiltinMro","entries","classmethod_descriptor","Eq","NotEq","Gt","GtE","LtE","wrapper_descriptor","tp$richcompare","ob$eq","tp$as_number","reflectedNumberSlots","reflected","slot","tp$as_sequence_or_mapping","sequenceAndMappingSlots","__new__","sk_method","subSlots","main_slots","number_slots","sequence_and_mapping_slots","buildNativeClass","base","meta","getsets","methods","classmethods","proto","flags","buildIteratorClass","built$iterators","setUpModuleMethods","superConstructor","WeakMap","tp$str","__class__","every","dict$copy","$class","__format__","__init_subclass__","NoKwargs","dict$merge","$bases","len","$getattribute","d$wrapped","tryCatch","__init__","$wrapper","sk$static_new","__call__","__repr__","__str__","__getattribute__","$getattr","__getattr__","__setattr__","MinArgs","MaxArgs","__delattr__","__get__","__set__","__delete__","__eq__","__ge__","__gt__","__le__","__lt__","__ne__","__iter__","__next__","StopIteration","gi$ret","$value","__len__","asIndexOrThrow","__contains__","__getitem__","__setitem__","__delitem__","__add__","__radd__","__iadd__","__sub__","__rsub__","__imul__","__mul__","__rmul__","__isub__","__mod__","__rmod__","__imod__","__divmod__","__rdivmod__","__pos__","__neg__","__abs__","__bool__","__invert__","__lshift__","__rlshift__","__rshift__","__rrshift__","__ilshift__","__irshift__","__and__","__rand__","__iand__","__xor__","__rxor__","__ixor__","__or__","__ror__","__ior__","__int__","__float__","__floordiv__","__rfloordiv__","__ifloordiv__","__truediv__","__rtruediv__","__itruediv__","__index__","__pow__","__rpow__","__ipow__","__matmul__","__rmatmul__","__imatmul__","__long__","__nonzero__","__div__","__rdiv__","__idiv__","ob$ne","ob$lt","ob$le","ob$gt","ob$ge","nb$abs","nb$int","nb$long","nb$float","nb$index","nb$bool","sq$repeat","mp$length","sq$inplace_repeat","findIndex","py3$slots","d$repr_name","d$check","d$set_check","d$type","d$name","__objclass__","__text_signature__","$methodFastCallNoKwargs","$methodFastCall","$methodCallNoArgs","$methodCallOneArg","NamedArgs","$methodCallNamedArgs","$methodCallMinArgs","func_code","$defaultCall","$memoiseFlags","$resolveArgs","m$checkself","Defaults","method_wrapper","raw$call","m$descr","m$self","__self__","$self","name","m$def","$fastCallNoKwargs","$callNoArgs","$callOneArg","$callNamedArgs","$callMinArgs","$defaultCallMethod","sysModules","mp$lookup","Ellipsis","formatting","str$","nb$isnegative","toLocaleString","mkNumber__format__","fromCodePoint","isNaN","toLowerCase","toFixed","format","KeyError","IndexError","repr","ascii","formatString","charAt","get$tgt","asIndexSized","OverflowError","start","startEnd$wrt","$hasAstralCodePoints","codepoints","default","Map","$savedKeyHash","$hash","$subtype_new","check$encodeArgs","$decode","codePointAt","isIndex","sssiter$","ba","ia","oa","pa","la","qa","na","substr","ja","W","ea","I","aa","parseFloat","toExponential","fromCharCode","$bytes","find$left","find$right","isIdentifier","encode","encoding","errors","str$encode","rsplit","capitalize","center","expandtabs","partition","ljust","lower","lstrip","removeprefix","startsWith","removesuffix","endsWith","rfind","rindex","rjust","rstrip","rpartition","splitlines","strip","swapcase","upper","startswith","endswith","isascii","islower","isupper","istitle","isspace","isdecimal","isdigit","isnumeric","isalpha","isalnum","isidentifier","isprintable","zfill","__getnewargs__","$py2decode","__length_hint__","abstract","as","boolean","break","byte","case","catch","char","class","continue","const","debugger","delete","do","double","else","enum","export","extends","false","final","finally","float","for","function","goto","if","implements","import","in","instanceof","int","interface","long","namespace","native","null","package","private","protected","public","return","short","static","switch","synchronized","throw","throws","transient","true","try","typeof","use","var","void","volatile","while","with","__defineGetter__","__defineSetter__","caller","isPrototypeOf","__lookupGetter__","__lookupSetter__","__noSuchMethod__","propertyIsEnumerable","toSource","unwatch","watch","reservedWords_","func_globals","co_name","co_docstring","co_qualname","func_closure","func_annotations","memoised","co_fastcall","$funcCall","method","__annotations__","__defaults__","$defaults","co_varnames","co_argcount","co_kwonlyargcount","co_varargs","co_kwargs","$kwdefs","no_kw","unshift","assk$","asnum$nofloat","round","round$","$round","any","all","sum","zip","fabs","ord","chr","unichr","message","int2str_","hex","oct","bin","dir","$dir","sorted","NotImplementedError","open","file","isinstance","hash","getattr","objectRepr","setattr","raw_input","importModule","stdin","fileno","$readline","readline","input","jseval","ffi","remapToJs","remapToPy","jsmillis","compiled","filename","compile","__file__","parse","astFromParse","cst","body","astnodes","Expr","__final_res__","reduce","list$sort","hasattr","pow","quit","SystemExit","issubclass","divmod","bytearray","callable","delattr","execfile","help","callable_iter_","locals","memoryview","next_","reload","vars","apply_","buffer","coerce","intern","u","A","H","fromEntries","traceback","lineno","context","cause","__cause__","BaseException","$path","$msg","$filename","$lineno","$offset","$text","KeyboardInterrupt","GeneratorExit","Exception","StopAsyncIteration","ArithmeticError","FloatingPointError","ZeroDivisionError","AssertionError","BufferError","EOFError","ImportError","ModuleNotFoundError","LookupError","MemoryError","NameError","UnboundLocalError","OSError","IOError","FileNotFoundError","TimeoutError","ReferenceError","RecursionError","IndentationError","TabError","SystemError","UnicodeError","UnicodeDecodeError","UnicodeEncodeError","SuspensionError","ExternalError","nativeError","getExcInfo","im_func","im_self","im_call","__func__","sk$int","Suspension","resume","child","optional","colno","$colno","reverse","asIndex","applySlice","assignSlice","arrayFromArguments","$obj","swappedOp_","opSymbols","Is","IsNot","In_","NotIn","enumerate","filter_","map_","zip_","$cmp","print_","loadname","builtins","callAsync","applyAsync","callOrSuspend","applyOrSuspend","callsim","callsimAsync","callsimOrSuspend","asyncToPromise","Promise","result","error","then","promise","brValue","iterArray","promiseToSuspension","buildClass","$prepare","navigator","userAgent","Proxy","$callable","$sentinel","$flag","in$repr","list$inRange","del$subscript","ass$subscript","__reversed__","clear","copy","append","insert","extend","list$indexOf","list$reverse","timSort","lt","listlength","ass$index","stop","step","slice$indices","ass$slice","ass$ext_slice","del$index","del$slice","del$ext_slice","Uint8Array","decode","TextDecoder","subarray","get$raw","find$subright","find$subleft","fill","utf","utf8","utf_8","latin_1","utf16","utf_16","TextEncoder","get$splitArgs","maxsplit","padStart","fromhex","SharedArrayBuffer","isView","Uint16Array","isdisjoint","$version","next$item","size","buckets","update$common","update$onearg","$missing","setdefault","get$bucket_item","set$bucket_item","pop$item","popitem","items","values","update","dict$clear","fromkeys","dict$merge_seq","pop$bucket_item","difference","intersection","union","symmetric_difference","has_key","mapping","str$get","str$keys","str$items","str$values","str$copy","$ann","property","prop$get","prop$set","prop$del","getter$doc","prop$doc","getter","$copy","setter","deleter","fget","fset","fdel","classmethod","cm$callable","__wrapped__","staticmethod","sm$callable","str2number","$trunc","nb$ispositive","real","imag","numerator","denominator","from_bytes","conjugate","bit_length","to_bytes","__trunc__","__floor__","__ceil__","__round__","log2","MAX_VALUE","MIN_VALUE","longFromStr","withinThreshold","stringToNumberOrBig","str$True","str$False","NaN","trunc","as_integer_ratio","is_integer","PyFloat_Check","toPrecision","hypot","atan2","exp","cos","sin","Py_DTSF_ADD_DOT_0","Py_DTSF_ALT","Py_DTSF_SIGN","complex_subtype_from_string","$complex","Py_DTST_FINITE","Py_DTST_INFINITE","Py_DTST_NAN","indices","slice$as_indices","$wrt","set$clear","set$update","set$issubset","set$copy","difference_update","intersection_update","symmetric_difference_update","set$add","discard","set$discard","set$difference_update","set$intersection_multi","swap$bodies","issubset","set$make_basetype","issuperset","set$symmetric_diff_update","set$intersection","$emptyset","$write","init$dict","get$name","get$mod_reprf","from$file","empty_or$loader","__package__","__spec__","__loader__","$initializing","$file","$js","$loader","str$mod_repr","structseq_types","make_structseq","$hidden","__reduce__","num_sequence_fields","generator","gi$running","gi$resumeat","gi$sentvalue","gi$locals","gi$cells","send","makeGenerator","mode","closed","data$","currentFileno","lineList","currentLine","pos$","$lines","__enter__","__exit__","close","flush","isatty","readlines","seek","tell","truncate","$isPyWrapped","unwrap","funcHook","arrayHook","dictHook","setHook","mapHook","proxyHook","unhandledHook","stringHook","numberHook","bigintHook","objectHook","from","bound","$bound","js$wrapped","$lookup","proxy$getItem","remapToJsOrWrap","toPy","toJs","toJsString","toJsNumber","toJsArray","toJsHashMap","toPyDict","toPyFloat","toPyInt","toPyNumber","toPyStr","toPyList","toPyTuple","toPySet","numberToPy","proxy","isFrozen","getOwnPropertyNames","$methods","memoized$slots","is$callable","is$type","js$proto","$new","$call","Boolean","range_","range","xrange","$iterable","$func","check$filter","$iters","reversed","$idx","$reversed","$len","T_ENDMARKER","T_NAME","T_NUMBER","T_STRING","T_NEWLINE","T_INDENT","T_DEDENT","T_LPAR","T_RPAR","T_LSQB","T_RSQB","T_COLON","T_COMMA","T_SEMI","T_PLUS","T_MINUS","T_STAR","T_SLASH","T_VBAR","T_AMPER","T_LESS","T_GREATER","T_EQUAL","T_DOT","T_PERCENT","T_LBRACE","T_RBRACE","T_EQEQUAL","T_NOTEQUAL","T_LESSEQUAL","T_GREATEREQUAL","T_TILDE","T_CIRCUMFLEX","T_LEFTSHIFT","T_RIGHTSHIFT","T_DOUBLESTAR","T_PLUSEQUAL","T_MINEQUAL","T_STAREQUAL","T_SLASHEQUAL","T_PERCENTEQUAL","T_AMPEREQUAL","T_VBAREQUAL","T_CIRCUMFLEXEQUAL","T_LEFTSHIFTEQUAL","T_RIGHTSHIFTEQUAL","T_DOUBLESTAREQUAL","T_DOUBLESLASH","T_DOUBLESLASHEQUAL","T_AT","T_ATEQUAL","T_RARROW","T_ELLIPSIS","T_OP","T_AWAIT","T_ASYNC","T_ERRORTOKEN","T_NT_OFFSET","T_N_TOKENS","T_COMMENT","T_NL","T_ENCODING","tokens","tok_name","EXACT_TOKEN_TYPES","ISTERMINAL","ISNONTERMINAL","ISEOF","string","exact_type","_tokenize","O","ha","V","ca","Y","da","fa","Floatnumber","OpMap","T_BACKQUOTE","ParseTables","sym","and_expr","and_test","annassign","arglist","argument","arith_expr","assert_stmt","async_funcdef","async_stmt","atom","atom_expr","augassign","break_stmt","classdef","comp_for","comp_if","comp_iter","comp_op","comparison","compound_stmt","continue_stmt","debugger_stmt","decorated","decorator","decorators","del_stmt","dictorsetmaker","dotted_as_name","dotted_as_names","dotted_name","encoding_decl","eval_input","except_clause","expr","expr_stmt","exprlist","factor","file_input","flow_stmt","for_stmt","funcdef","global_stmt","if_stmt","import_as_name","import_as_names","import_from","import_name","import_stmt","lambdef","lambdef_nocond","nonlocal_stmt","not_test","or_test","parameters","pass_stmt","power","print_stmt","raise_stmt","return_stmt","shift_expr","simple_stmt","single_input","sliceop","small_stmt","star_expr","stmt","subscript","subscriptlist","suite","term","test_nocond","testlist","testlist_comp","testlist_star_expr","tfpdef","trailer","try_stmt","typedargslist","varargslist","vfpdef","while_stmt","with_item","with_stmt","xor_expr","yield_arg","yield_expr","yield_stmt","number2symbol","dfas","states","labels","keywords","False","None","True","and","def","del","elif","except","lambda","nonlocal","not","or","pass","raise","yield","grammar","p_flags","FUTURE_PRINT_FUNCTION","FUTURE_UNICODE_LITERALS","FUTURE_DIVISION","FUTURE_ABSOLUTE_IMPORT","FUTURE_WITH_STATEMENT","FUTURE_NESTED_SCOPES","FUTURE_GENERATORS","CO_FUTURE_PRINT_FUNCTION","CO_FUTURE_UNICODE_LITERALS","CO_FUTURE_DIVISON","CO_FUTURE_ABSOLUTE_IMPORT","CO_FUTURE_WITH_STATEMENT","setup","stack","dfa","state","children","used_names","addtoken","classify","col_offset","rootnode","parseTreeDump","Load","Store","Del","AugLoad","AugStore","Param","And","Or","Not","In","Module","docstring","Interactive","Expression","Suite","FunctionDef","decorator_list","returns","AsyncFunctionDef","ClassDef","bases","Return","Delete","targets","Assign","AugAssign","target","op","AnnAssign","annotation","simple","For","orelse","AsyncFor","While","If","With","AsyncWith","Raise","exc","inst","tback","Try","handlers","finalbody","Assert","msg","Import","names","ImportFrom","level","Global","Nonlocal","Pass","Continue","Print","dest","nl","Debugger","BoolOp","BinOp","left","right","UnaryOp","operand","Lambda","IfExp","Dict","elts","ListComp","elt","generators","SetComp","DictComp","key","GeneratorExp","Await","Yield","YieldFrom","Compare","ops","comparators","Call","Num","Str","FormattedValue","conversion","format_spec","JoinedStr","Bytes","NameConstant","Constant","Attribute","attr","ctx","Subscript","Starred","Name","List","Tuple","Slice","ExtSlice","dims","Index","comprehension","ifs","is_async","ExceptHandler","arguments_","vararg","kwonlyargs","kw_defaults","kwarg","defaults","arg","keyword","alias","asname","withitem","context_expr","optional_vars","_astname","_fields","_isenum","c_encoding","c_filename","c_flags","Repr","end_lineno","end_col_offset","listmaker","testlist_safe","testlist1","old_test","ma","kind","Index_kind","c_feature_version","T_TYPE_COMMENT","T_NEW_TYPE_COMMENT","ka","ra","Slice_kind","ExtSlice_kind","astDump","__name","__flags","__scope","__namespaces","symFlags","varnames","blockType","returnsValue","varkeywords","varargs","childHasFree","hasFree","isNested","cur","nested","scopeId","stss","symbols","top","curClass","tmpname","DEF_GLOBAL","DEF_LOCAL","DEF_PARAM","USE","DEF_STAR","DEF_DOUBLESTAR","DEF_INTUPLE","DEF_FREE","DEF_FREE_GLOBAL","DEF_FREE_CLASS","DEF_IMPORT","DEF_BOUND","SCOPE_OFF","SCOPE_MASK","LOCAL","GLOBAL_EXPLICIT","GLOBAL_IMPLICIT","FREE","CELL","OPT_IMPORT_STAR","OPT_EXEC","OPT_BARE_EXEC","OPT_TOPLEVEL","GENERATOR","GENERATOR_EXPRESSION","ModuleBlock","FunctionBlock","ClassBlock","get_name","is_referenced","is_parameter","is_global","is_declared_global","is_local","is_free","is_imported","is_assigned","is_namespace","get_namespaces","get_type","get_lineno","is_nested","has_children","get_identifiers","_identsMatching","lookup","__check_children","get_parameters","_funcParams","get_locals","_funcLocals","get_globals","_funcGlobals","get_frees","_funcFrees","get_methods","_classMethods","getScope","getStsForAst","SEQStmt","visitStmt","SEQExpr","visitExpr","enterBlock","fixReserved","exitBlock","visitParams","addDef","visitAnnotations","posonlyargs","visitArgAnnotations","visitArguments","newTmpname","visitSlice","visitAlias","visit_withitem","visitExcepthandlers","visitComprehension","visitGenexp","analyzeBlock","analyzeName","analyzeChildBlock","analyzeCells","updateSymbols","analyze","symboltable","dumpSymtab","st","canSuspend","interactive","nestlevel","allUnits","ste","doesSuspend","private_","firstlineno","linenoSet","localnames","localtemps","tempsToSave","blocknum","blocks","curblock","consts","scopename","suffixCode","switchCode","varDeclsCode","prefixCode","breakBlocks","continueBlocks","exceptBlocks","finallyBlocks","gensymcount","activateScope","_next","getSourceLine","annotateSource","gensym","niceName","makeConstant","_gr","outputInterruptTest","_jumpfalse","_jumpundef","_jumpnotundef","_jumptrue","_jump","_checkSuspension","newBlock","setBlock","cunpackstarstoarray","vexpr","cunpackkwstoarray","ctuplelistorset","csubdict","cdict","clistcomp","ccompgen","cdictcomp","csetcomp","cyield","SYMTAB_CONSTS","cyieldfrom","ccompare","ccall","cslice","eslice","vslicesub","vslice","chandlesubscr","cboolop","cjoinedstr","cformattedvalue","clambda","cifexp","cgenexp","nameop","vseqexpr","cannassign","hasAnnotations","caugassign","exprConstant","_name","pushBreakBlock","popBreakBlock","pushContinueBlock","popContinueBlock","pushExceptBlock","popExceptBlock","pushFinallyBlock","blk","breakDepth","popFinallyBlock","peekFinallyBlock","setupExcept","endExcept","outputLocals","argnames","outputSuspensionHelpers","outputAllUnits","cif","vseqstmt","cwhile","cfor","craise","outputFinallyCascade","ctry","cwith","cassert","cimportas","cimport","cfromimport","buildcodeobj","cannotations","enterScope","isCell","exitScope","cDocstringOfCode","cargannotation","cargannotations","maybeCDocstringOfBody","cfunction","cgenexpgen","cclass","cbody","ccontinue","cbreak","vstmt","cprint","cmod","funcname","resetCompiler","importSearchPathForName","packagePath","importSetUpPath","importModuleInternal_","onBeforeImport","dateSet","__path__","onAfterImport","importMain","filesLoaded","importMainWithBody","importBuiltinWithBody","__import__","importStar","MIN_GALLOP","le","setitem","binary_sort","getitem","count_run","listSlice","descending","merge_init","merge_compute_minrun","advance","pending","merge_collapse","merge_force_collapse","gallop","min_gallop","merge_lo","copyitems","popleft","merge_hi","popright","merge_at","obj","obj_type","$supercheck","__thisclass__","__self_class__","$origin","$args","$params","attr$exc","ga$repr","mk$params","__mro_entries__","__instancecheck__","__subclasscheck__","__parameters__","__origin__","__args__","is$typevar","tuple$index","str$orig","str$args","OperationError","NegativePowerError","float_$rw$","int_$rw$","long_$rw$","exit","super_$rw$","apply_$rw$","eval_$rw$","StandardError","unicode","basestring","$empty","$utf8","$ascii","$default_factory","$imag","$real","$abs","$contains","$enter","$eq","$exit","$init","$int_","$iter","$float_","$ge","$getitem","$gt","$le","$length_hint","$lt","$ne","$repr","$setattr","$setitem","$str","op2method_","AudioTour","bnum","audio_text","audio_tour","audio_code","windowcode","first_audio","prev_audio","pause_audio","next_audio","last_audio","status","stop_button","tourButtons","elem","currIndex","buttonCount","aname","ahash","theDivid","afile","playing","tourName","codeArray","replaceAll","audio_hash","bval","audio_type","aword","first","num_lines","bcount","newButton","align","disabled","hide","click","pause","logBookEvent","event","act","div_id","tour","firstAudio","prevAudio","pauseAndPlayAudio","nextAudio","lastAudio","removeAttr","atype","temp","temp_line","temp_aname","akey","lnums","playCurrIndexAudio","handlePlaying","unbind","unhighlightLines","handleTourEnd","playaudio","outerAudio","playWhenReady","currentTime","highlightLines","play","getElementById","paused","processLines","lnum","color","comma","setBackgroundForLines","hyphen","en","msd_pyflakes_coach_line","PyflakesCoach","check","reject","fetch","response","json","errorLines","codeLines","cleaner","lineParts","vegaEmbed","socket","connection","doc","stopExecution","onmousedown","onmouseup","componentMap","chatcodesServer","autocomplete","cm","showHint","hint","anyword","ActiveCode","orig","containerDiv","useRunestoneServices","origElem","origText","textContent","codeCoachList","problem_description","parsonspersonalize","parsonsexample","puzzleScaffoldingDivid","language","timelimit","hidecode","chatcodes","hidehistory","question","tie","dburl","runButton","enabledownload","parseBooleanAttribute","downloadButton","saveButton","loadButton","partner","runCount","firstAfterRun","logResults","eBookConfig","allow_pairs","enablePartner","graphics","codecoach","codelens","controlDiv","historyScrubber","timestamps","autorun","outputLineCount","outputLines","enable_chatcodes","WebSocket","sharedb","Connection","graderactive","isTimed","iotestsStart","iotestText","iotests","prefixMarker","prefixEnd","prefixLength","prefix","markerLength","visiblePrefixEnd","visiblePrefix","suffixMarker","suffStart","suffLength","suffix","visibleSuffixStart","visibleSuffixLength","visibleSuffix","baseCode","trimLockedCode","history","createEditor","createOutput","createControls","caption","addCaption","editor","refresh","setLockedRegions","setHighlightLines","runButtonHandler","indicate_component_ready","Prism","highlightAllUnder","helpLoaded","prevHelpedCode","linkdiv","codeDiv","replaceWith","edmode","gutterList","style","lineNumbers","indentUnit","getComputedStyle","getPropertyValue","matchBrackets","autoMatchParens","gutters","screenReaderLabel","extraKeys","Tab","requestAnimationFrame","display","scrollbars","vert","bottom","getWrapperElement","resizable","resize","setSize","width","height","borderTopColor","borderBottomColor","ev","acEditEvent","undefined","getValue","addingScrubber","isAnswered","startEditTimeStamp","preventDefault","acElement","keydown","keyCode","which","setOption","activeElement","closest","nextSibling","focus","previousSibling","originalEvent","ctrlKey","toggleComment","highlightList","lines","querySelectorAll","lineNum","decorateLines","midLine","marker","setGutterMarker","lastLine","posFromIndex","endPos","markText","ch","readOnly","atomic","inclusiveLeft","inclusiveRight","endIndex","endPos2","logCurrentAnswer","runCoaches","renderFeedback","toggleAlert","getParsonsCodeTailor","problem_id","personalization_level","internal_test_case","raw_test_case","junitCode","helperMatch","helperCode","junitToBackend","cleanTestcase","student_code","scaffoldingController","AbortController","timeoutMessage","timeoutId","abort","course","headers","ok","loadingBarDiv","reopenHelpBtnHandler","isNewHelp","splitIntoChunks","chunkSize","chunks","startIndex","adjustedChunkSize","lastLineBreakIndex","latestParsonsHelpID","removeClass","reopen_act","reopen","helpText","codeSolution","puzzleHtml","solutionGenerationType","generationResultType","codeAnswer","puzzle_rst","code_answer","generation_type","solution_type","cleaned","tempDiv","innerText","cleanParsonsHTML","basicData","chunkIndex","codeChunks","chunk","content","totalChunks","puzzle","puzzleChunks","puzzleIndex","logActInParts","probDescHTML","last","puzzleCode","scaffoldingContainer","insertBefore","closeScaffoldingButton","onclick","close_divId","currentTarget","parsonsScaffolding","querySelector","parsonsContainer","innerDiv","addClass","copyAnswerButton","copyScaffoldingSolutionToClipboard","parsonsDiv","temptextarea","select","setSelectionRange","execCommand","prop","alert","parsonsBtnHandler","parsonsBtn","existingLoadingPrompt","loadingPrompt","spinner","encouragementText","countdownText","scrollIntoView","request_act","requestChunkIndex","butt","ctrlDiv","downloadsEnabled","addDownloadButton","addHistoryScrubber","addFeedbackButton","enableHideShow","enableCodeLens","parsonsScaffoldingBtn","reopenScaffoldingBtn","reformatable","enableReformat","enableAudioTours","isInstructor","enableInstructorSharing","setupPartner","enableChatCodes","prepend","gradeButton","createGradeSummary","downloadFile","showHideButt","toggle","parentElement","clButton","showCodelens","reformatButton","reformat","atButton","shareButt","async","confirm","lang","request","Request","ajaxURL","jsonHeaders","post_promise","mess","share_count","checkPartner","plabel","partnerTextBox","didAgree","localStorage","getItem","setItem","change","chatBar","channels","topic","location","host","param","chatButton","updateChatCodesChannels","channel","archived","link","href","channelName","subscribe","enableSaveLoad","pos_last","reqData","acid","sid","practice_mode","isLoggedIn","assessmentTaken","renderScrubber","new_server_prefix","detail","scrubberDiv","scrubber","timestampP","slideit","el","submittedCode","slider","readdLockedCode","setValue","curVal","outOf","deadline","ts","insertAfter","coachDiv","lensDiv","visibility","disableSaveLoad","computeChangesPerSecond","lastCode","editDistance","computeEditDistance","timeDifference","currentCode","dp","fileName","toJSON","languageExtensions","textToWrite","textFileAsBlob","Blob","msSaveOrOpenBlob","downloadLink","download","URL","createObjectURL","modal","cl","myVars","origin","cumulative","heapPrimitives","drawParentPointers","textReferences","showOnlyOutputs","rawInputLstJSON","py","langauge","curInstr","codeDivWidth","codeDivHeight","embedUrlStr","myIframe","background","src","firstLine","indentLine","blur","toggleEditorVisibility","errorLine","pretextLines","progLines","to","errName","errorText","setTimeLimit","timer","builtinRead","fileReader","skulptFile","ajax","url","success","file_contents","fobj","filecomponent","val","container","tab","rows","cols","current","getIncludedCode","wresult","visPrefixLength","visSuffixLength","useSuffix","pretext","userCode","checkCurrentAnswer","to_save","editDist","changesPerSecond","logRunEvent","unit_results","unitData","results","coach","allSettled","promises","checkDiv","unit_results_divid","urDivid","unitFeedback","tmp","rowHeaders","rh","backgroundColor","urResults","is_toggle","noUI","urdiv","jsonpSites","gradeContainer","TurtleGraphics","canvas","allVisualizers","redrawConnectors","disableInteraction","python","javascript","java","cpp","sql","octave","kotlin","isInViewport","element","rect","getBoundingClientRect","innerHeight","clientHeight","innerWidth","clientWidth","ParseError","ParseErrorFix","TypeErrorFix","NameErrorFix","ValueErrorFix","AttributeErrorFix","TokenError","TokenErrorFix","TimeLimitError","TimeLimitErrorFix","TimeoutErrorFix","ErrorFix","SyntaxErrorFix","IndexErrorFix","URIError","URIErrorFix","ImportErrorFix","ReferenceErrorFix","ZeroDivisionErrorFix","RangeErrorFix","InternalError","InternalErrorFix","IndentationErrorFix","NotImplementedErrorFix","KeyErrorFix","AssertionErrorFix","replacement","JUnitTestParser","textResults","HTMLActiveCode","srcdoc","clearDiv","allDburls","SQLActiveCode","bookprefix","fnprefix","search","basecourse","config","locateFile","showLast","SQL","buttonText","xWaitFor","db","dbObject","Deferred","xhr","XMLHttpRequest","responseType","onload","uInt8Array","Database","respDiv","query","it","iterateStatements","statement","columns","getColumnNames","rowcount","getNormalizedSQL","operation","getRowsModified","getRemainingSQL","resultArray","section","tableDiv","maxHeight","createTable","messageBox","rmsg","testResult","autograde","result_table","wlist","loc","oper","expected","row","col","testOneAssert","maximumFractionDigits","actual","operand1","operand2","tableData","trimRows","hot","autoRowSize","autoColumnSize","useHeaders","colHeaders","maxRows","filters","dropdownMenu","licenseKey","actualHeight","getRowHeight","updateSettings","loggedout","TimedActiveCodeMixin","timedInit","hideButtons","needsReinitialization","buttonList","coachButton","renderTimedIcon","component","timeIconDiv","timeIcon","checkCorrectTimed","pct_correct","hideFeedback","reinitializeListeners","taken","runButtonHander","slide","TimedLiveCode","TimedActiveCode","timedInitComplete","TimedJSActiveCode","TimedHTMLActiveCode","TimedSQLActiveCode","ACFactory","foo","createActiveCode","addopts","attrname","dataElem","dataset","timed","addActiveCodeToDiv","outerdivid","acdivid","initialcode","acdiv","thepre","newac","savediv","createActiveCodeFromOpts","createScratchActivecode","enableScratchAC","scratchDiv","acDefaultLanguage","htmlmixed","js","py2","py3","py3anaconda","ruby","observable","MutationObserver","mutations","mutation","attributeName","CodeMirror","observe","attributes","attributeFilter","toggleScratchActivecode","realDiv","selectors","firstFocusableElement","focusableElements","lastFocusableElement","shiftKey","textArea","component_factory","activecode","msg_activecode_compile_only","msg_activecode_run_button_title","msg_activecode_code_coach","msg_activecode_passed","msg_activecode_failed","msg_activecode_unit_test_results","msg_activecode_test_run_error","msg_activecode_test_compile_error","msg_activecode_iotest_results","msg_activecode_assertions_checked","msg_sctivecode_parse_error","msg_sctivecode_parse_error_fix","MD5","RotateLeft","lValue","iShiftBits","AddUnsigned","lX","lY","lX4","lY4","lX8","lY8","lResult","FF","ac","GG","HH","II","WordToHex","lCount","WordToHexValue","WordToHexValue_temp","AA","BB","CC","DD","utftext","Utf8Encode","lWordCount","lMessageLength","lNumberOfWords_temp1","lNumberOfWords","lWordArray","lBytePosition","lByteCount","ConvertToWordArray","LiveCode","additional_files","datafiles","sourcefile","compileargs","unescapeHtml","compileAlso","linkargs","runargs","interpreterargs","API_KEY","USE_API_KEY","JOBE_SERVER","jobehost","resource","proxyuri_runs","jobePutFiles","proxyuri_files","jobeCheckFiles","div2id","createInputElement","createErrorOutput","inputContainer","label","stdin_el","getCombinedSuffixes","hasUnitTests","combinedSuffix","runSetup","ioResults","iotest","spec","json_runspec","run_spec","iores","submitToJobe","addJobeErrorMessage","statusText","processJobeIOResponses","res","runResults","processJobeResponse","sfilemap","sourcefilename","testdrivername","file_checkp","classMatch","btoa","paramlist","paramobj","memorylimit","timelimitSeconds","cputime","allFilesRaw","datafileFileName","additionalFiles","addFileId","fileElement","studentCode","fileExtension","parseJavaClasses","base64","toDataURL","junitDriverCode","compileList","runspec","language_id","sourcecode","instance","fileContent","checkFile","errDiv","Headers","Accept","logresult","odiv","parsedOutput","outcome","cmpinfo","stderr","escapeHtml","resultList","heading","passedTests","trimLines","trimEnd","produced","desired","out","td1","td2","td3","producedRenderOutput","td4","rdiv","file_id","setRequestHeader","onerror","pushDataFile","contentsb64","extension","contents","clMess","targetDiv","addVisualizerToPage","startingInstruction","editCodeBaseURL","hideCode","found","classes","importIndex","endOfLastCommentBeforeClassBegins","pCount","words","safe"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/877.fc49cc812ccc4937.js.map.gz b/_static/877.fc49cc812ccc4937.js.map.gz new file mode 100644 index 0000000..519c16e Binary files /dev/null and b/_static/877.fc49cc812ccc4937.js.map.gz differ diff --git a/_static/915.8f500bccc86f901d.js b/_static/915.8f500bccc86f901d.js new file mode 100644 index 0000000..20b376e --- /dev/null +++ b/_static/915.8f500bccc86f901d.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[915],{86915:(e,t,n)=>{n.r(t);var o=n(78673);class a extends o.A{constructor(e){if(super(e),this.divid=e.orig.id,this.container=$(`#${this.divid}`),this.caption="YouTube",null==document.getElementById("youtubescript")){let e=document.createElement("script");e.id="youtubescript",e.src="https://www.youtube.com/player_api",document.body.appendChild(e)}this.containerDiv=this.container[0].parentElement,this.addCaption("runestone"),this.indicate_component_ready()}}window.onPlayerStateChange=function(e){let t=new o.A,n=e.target.getCurrentTime(),a={event:"video",div_id:e.target.getIframe().id};e.data==YT.PlayerState.PLAYING?(console.log("playing "+e.target.getIframe().id),a.act="play:"+n):e.data==YT.PlayerState.ENDED?(console.log("ended "+e.target.getIframe().id),a.act="complete"):e.data==YT.PlayerState.PAUSED?(console.log("paused at "+n),a.act="pause:"+n):(console.log(`YT Player State: ${YT.PlayerState}`),a.act="ready"),t.logBookEvent(a)},window.onYouTubeIframeAPIReady=function(){$(".youtube-video").each((function(e,t){let n={};n.start=$(t).data("video-start"),-1!=$(t).data("video-end")&&(n.end=$(t).data("video-end")),new YT.Player($(t).data("video-divid"),{height:$(t).data("video-height"),width:$(t).data("video-width"),videoId:$(t).data("video-videoid"),align:"center",playerVars:n,events:{onStateChange:window.onPlayerStateChange}})}))},$((function(){let e=document.createElement("script");e.src="https://www.youtube.com/player_api",document.body.appendChild(e)})),$(document).on("runestone:login-complete",(function(){$("[data-component=youtube]").each((function(e){var t={orig:this,useRunestoneServices:eBookConfig.useRunestoneServices};window.componentMap[this.id]=new a(t)}))})),void 0===window.component_factory&&(window.component_factory={}),window.component_factory.youtube=function(e){return new a(e)},window.component_factory.vimeo=function(e){return new a(e)}}}]); +//# sourceMappingURL=915.8f500bccc86f901d.js.map \ No newline at end of file diff --git a/_static/915.8f500bccc86f901d.js.gz b/_static/915.8f500bccc86f901d.js.gz new file mode 100644 index 0000000..720cc55 Binary files /dev/null and b/_static/915.8f500bccc86f901d.js.gz differ diff --git a/_static/915.8f500bccc86f901d.js.map b/_static/915.8f500bccc86f901d.js.map new file mode 100644 index 0000000..cf1e9cd --- /dev/null +++ b/_static/915.8f500bccc86f901d.js.map @@ -0,0 +1 @@ +{"version":3,"file":"915.8f500bccc86f901d.js","mappings":"oIAKA,MAAMA,UAAuB,IACzB,WAAAC,CAAYC,GAKR,GAJAC,MAAMD,GACNE,KAAKC,MAAQH,EAAKI,KAAKC,GACvBH,KAAKI,UAAYC,EAAE,IAAIL,KAAKC,SAC5BD,KAAKM,QAAU,UACiC,MAA5CC,SAASC,eAAe,iBAA0B,CAClD,IAAIC,EAASF,SAASG,cAAc,UACpCD,EAAON,GAAK,gBACZM,EAAOE,IAAM,qCACbJ,SAASK,KAAKC,YAAYJ,EAC9B,CACAT,KAAKc,aAAed,KAAKI,UAAU,GAAGW,cACtCf,KAAKgB,WAAW,aAChBhB,KAAKiB,0BACT,EAGJC,OAAOC,oBAAsB,SAAUC,GACnC,IAAIC,EAAK,IAAI,IACTC,EAAYF,EAAMG,OAAOC,iBACzBC,EAAO,CACPL,MAAO,QACPM,OAAQN,EAAMG,OAAOI,YAAYxB,IAEjCiB,EAAMK,MAAQG,GAAGC,YAAYC,SAC7BC,QAAQC,IAAI,WAAaZ,EAAMG,OAAOI,YAAYxB,IAClDsB,EAAKQ,IAAM,QAAUX,GACdF,EAAMK,MAAQG,GAAGC,YAAYK,OACpCH,QAAQC,IAAI,SAAWZ,EAAMG,OAAOI,YAAYxB,IAChDsB,EAAKQ,IAAM,YACJb,EAAMK,MAAQG,GAAGC,YAAYM,QACpCJ,QAAQC,IAAI,aAAeV,GAC3BG,EAAKQ,IAAM,SAAWX,IAEtBS,QAAQC,IAAI,oBAAoBJ,GAAGC,eACnCJ,EAAKQ,IAAM,SAEfZ,EAAGe,aAAaX,EACpB,EAGAP,OAAOmB,wBAA0B,WACbhC,EAAE,kBACRiC,MAAK,SAAUC,EAAGC,GACxB,IAAIC,EAAa,CAAC,EAClBA,EAAkB,MAAIpC,EAAEmC,GAAOf,KAAK,gBACD,GAA/BpB,EAAEmC,GAAOf,KAAK,eACdgB,EAAgB,IAAIpC,EAAEmC,GAAOf,KAAK,cACzB,IAAIG,GAAGc,OAAOrC,EAAEmC,GAAOf,KAAK,eAAgB,CACrDkB,OAAQtC,EAAEmC,GAAOf,KAAK,gBACtBmB,MAAOvC,EAAEmC,GAAOf,KAAK,eACrBoB,QAASxC,EAAEmC,GAAOf,KAAK,iBACvBqB,MAAO,SACPL,WAAYA,EACZM,OAAQ,CACJC,cAAe9B,OAAOC,sBAGlC,GACJ,EAIAd,GAAE,WACE,IAAII,EAASF,SAASG,cAAc,UACpCD,EAAOE,IAAM,qCACbJ,SAASK,KAAKC,YAAYJ,EAC9B,IAEAJ,EAAEE,UAAU0C,GAAG,4BAA4B,WACvC5C,EAAE,4BAA4BiC,MAAK,SAAUY,GAEzC,IAAIpD,EAAO,CACPI,KAAMF,KACNmD,qBAAsBC,YAAYD,sBAEtCjC,OAAOmC,aAAarD,KAAKG,IAAM,IAAIP,EAAeE,EACtD,GACJ,SAEwC,IAA7BoB,OAAOoC,oBACdpC,OAAOoC,kBAAoB,CAAC,GAEhCpC,OAAOoC,kBAAkBC,QAAU,SAAUzD,GACzC,OAAO,IAAIF,EAAeE,EAC9B,EAEAoB,OAAOoC,kBAAkBE,MAAQ,SAAU1D,GACvC,OAAO,IAAIF,EAAeE,EAC9B,C","sources":["webpack://WebComponents/./runestone/video/js/runestonevideo.js"],"sourcesContent":["\"use strict\";\n\nimport RunestoneBase from \"../../common/js/runestonebase\";\nimport \"../css/video.css\";\n\nclass RunestoneVideo extends RunestoneBase {\n constructor(opts) {\n super(opts);\n this.divid = opts.orig.id;\n this.container = $(`#${this.divid}`);\n this.caption = \"YouTube\";\n if (document.getElementById(\"youtubescript\") == null) {\n let script = document.createElement(\"script\");\n script.id = \"youtubescript\";\n script.src = \"https://www.youtube.com/player_api\";\n document.body.appendChild(script);\n }\n this.containerDiv = this.container[0].parentElement;\n this.addCaption(\"runestone\");\n this.indicate_component_ready();\n }\n}\n\nwindow.onPlayerStateChange = function (event) {\n let rb = new RunestoneBase();\n let videoTime = event.target.getCurrentTime();\n let data = {\n event: \"video\",\n div_id: event.target.getIframe().id,\n };\n if (event.data == YT.PlayerState.PLAYING) {\n console.log(\"playing \" + event.target.getIframe().id);\n data.act = \"play:\" + videoTime;\n } else if (event.data == YT.PlayerState.ENDED) {\n console.log(\"ended \" + event.target.getIframe().id);\n data.act = \"complete\";\n } else if (event.data == YT.PlayerState.PAUSED) {\n console.log(\"paused at \" + videoTime);\n data.act = \"pause:\" + videoTime;\n } else {\n console.log(`YT Player State: ${YT.PlayerState}`);\n data.act = \"ready\";\n }\n rb.logBookEvent(data);\n};\n\n//Callback function to load youtube videos once IFrame Player loads\nwindow.onYouTubeIframeAPIReady = function () {\n let videolist = $(\".youtube-video\");\n videolist.each(function (i, video) {\n let playerVars = {};\n playerVars[\"start\"] = $(video).data(\"video-start\");\n if ($(video).data(\"video-end\") != -1)\n playerVars[\"end\"] = $(video).data(\"video-end\");\n let player = new YT.Player($(video).data(\"video-divid\"), {\n height: $(video).data(\"video-height\"),\n width: $(video).data(\"video-width\"),\n videoId: $(video).data(\"video-videoid\"),\n align: \"center\",\n playerVars: playerVars,\n events: {\n onStateChange: window.onPlayerStateChange,\n },\n });\n });\n};\n\n//Need to make sure the YouTube IFrame Player API is not loaded until after\n// all YouTube videos are in the DOM. Add a script tag with it after document is loaded\n$(function () {\n let script = document.createElement(\"script\");\n script.src = \"https://www.youtube.com/player_api\";\n document.body.appendChild(script);\n});\n\n$(document).on(\"runestone:login-complete\", function () {\n $(\"[data-component=youtube]\").each(function (index) {\n // MC\n var opts = {\n orig: this,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n };\n window.componentMap[this.id] = new RunestoneVideo(opts);\n });\n});\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\nwindow.component_factory.youtube = function (opts) {\n return new RunestoneVideo(opts);\n};\n\nwindow.component_factory.vimeo = function (opts) {\n return new RunestoneVideo(opts);\n};\n"],"names":["RunestoneVideo","constructor","opts","super","this","divid","orig","id","container","$","caption","document","getElementById","script","createElement","src","body","appendChild","containerDiv","parentElement","addCaption","indicate_component_ready","window","onPlayerStateChange","event","rb","videoTime","target","getCurrentTime","data","div_id","getIframe","YT","PlayerState","PLAYING","console","log","act","ENDED","PAUSED","logBookEvent","onYouTubeIframeAPIReady","each","i","video","playerVars","Player","height","width","videoId","align","events","onStateChange","on","index","useRunestoneServices","eBookConfig","componentMap","component_factory","youtube","vimeo"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/915.8f500bccc86f901d.js.map.gz b/_static/915.8f500bccc86f901d.js.map.gz new file mode 100644 index 0000000..5fce0ac Binary files /dev/null and b/_static/915.8f500bccc86f901d.js.map.gz differ diff --git a/_static/919.237aced0c044e4b6.js b/_static/919.237aced0c044e4b6.js new file mode 100644 index 0000000..88359ad --- /dev/null +++ b/_static/919.237aced0c044e4b6.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[919],{9919:(e,t,i)=>{i.r(t),i.d(t,{default:()=>n});var s=i(78673);class r extends s.A{constructor(e){super(e);var t=(e=e||{}).orig;this.origElem=t,this.useRunestoneServices=e.useRunestoneServices,this.multipleanswers=!1,this.divid=t.id,this.parseBooleanAttribute(this.origElem,"data-multipleanswers")&&(this.multipleanswers=!0),this.children=this.origElem.childNodes,this.random=!1,this.parseBooleanAttribute(this.origElem,"data-random")&&(this.random=!0),this.correct=null,this.didSubmit=!1,this.answerList=[],this.correctList=[],this.correctIndexList=[],this.feedbackList=[],this.question=null,this.caption="Multiple Choice",this.findAnswers(),this.findQuestion(),this.findFeedbacks(),this.createCorrectList(),this.createMCForm(),this.addCaption("runestone"),this.checkServer("mChoice",!0),this.queueMathJax(this.containerDiv),"undefined"!=typeof Prism&&Prism.highlightAllUnder(this.containerDiv)}findQuestion(){const e=this.origElem.parentElement.querySelector(".exercise-statement");if(e)this.question=e;else{for(var t,i=0;i")&&(h="

            ",c=c.slice(3)),a.innerHTML=`${h}${String.fromCharCode("A".charCodeAt(0)+r)}. ${c}`;var d={input:a.querySelector("input"),label:a};d.input.onclick=s,this.optionArray.push(d),this.optsFieldSet.appendChild(a)}}renderMCFormButtons(){this.submitButton=document.createElement("button"),this.submitButton.textContent="Check Me",this.submitButton.className="btn btn-success",this.submitButton.name="do answer",this.submitButton.type="button",this.multipleanswers?this.submitButton.addEventListener("click",function(){this.processMCMASubmission(!0)}.bind(this),!1):this.submitButton.addEventListener("click",function(e){e.preventDefault(),this.processMCMFSubmission(!0)}.bind(this),!1),this.optsForm.appendChild(this.submitButton),this.useRunestoneServices&&!eBookConfig.peer&&(this.compareButton=document.createElement("button"),this.compareButton.className="btn btn-default",this.compareButton.id=this.divid+"_bcomp",this.compareButton.disabled=!0,this.compareButton.name="compare",this.compareButton.textContent="Compare me",this.compareButton.addEventListener("click",function(){this.compareAnswers(this.divid)}.bind(this),!1),this.optsForm.appendChild(this.compareButton))}renderMCfeedbackDiv(){this.feedBackDiv=document.createElement("div"),this.feedBackDiv.id=this.divid+"_feedback",this.feedBackDiv.setAttribute("aria-live","polite"),this.feedBackDiv.setAttribute("role","status"),this.containerDiv.appendChild(this.feedBackDiv)}randomizeAnswers(){for(var e,t,i=this.indexArray.length;0!==i;){t=Math.floor(Math.random()*i),i-=1,e=this.indexArray[i],this.indexArray[i]=this.indexArray[t],this.indexArray[t]=e;var s=this.feedbackList[i];this.feedbackList[i]=this.feedbackList[t],this.feedbackList[t]=s}}restoreAnswers(e){e.answer||(e.answer="");for(var t=e.answer.split(","),i=0;i0){var t=localStorage.getItem(this.localStorageKey());if(null!==t){try{e=JSON.parse(t).answer.split(",")}catch(e){return console.log(e.message),void localStorage.removeItem(this.localStorageKey())}for(var i=0;i1?this.renderMCMAFeedBack():(this.feedBackDiv.innerHTML="

            Your answer has been recorded

            ",this.feedBackDiv.className="alert alert-info"),this.didSubmit=!0}getSubmittedOpts(){var e;this.singlefeedback="",this.feedbackString="",this.givenArray=[],this.givenlog="";for(var t=this.optsForm.elements.group1,i=0;i${this.feedbackList[i]}`,this.givenlog+=e+",",this.singlefeedback=this.feedbackList[i]);this.givenArray.sort()}checkCurrentAnswer(){this.getSubmittedOpts(),0!==this.givenArray.length&&(this.multipleanswers?this.scoreMCMASubmission():this.scoreMCMFSubmission())}async logCurrentAnswer(e){this.multipleanswers?await this.logMCMAsubmission(e):await this.logMCMFsubmission(e)}renderFeedback(){this.multipleanswers?this.renderMCMAFeedBack():this.renderMCMFFeedback(),this.queueMathJax(this.feedBackDiv)}scoreMCMASubmission(){this.correctCount=0;for(var e=0,t=0;e${r}

          `,this.feedBackDiv.className="alert alert-info"):(this.feedBackDiv.innerHTML=`✖️ You gave ${t} ${e} and got ${i} correct of ${s} needed.
            ${r}`,this.feedBackDiv.className="alert alert-danger")}processMCMFSubmission(e){this.getSubmittedOpts(),this.scoreMCMFSubmission(),this.setLocalStorage({correct:this.correct?"T":"F",answer:this.givenArray.join(",")}),e&&this.logMCMFsubmission(),!eBookConfig.peer||eBookConfig.isInstructor?(this.renderMCMFFeedback(),this.useRunestoneServices&&this.enableMCComparison()):eBookConfig.peer&&"async"===eBookConfig.peerMode&&"undefined"!=typeof studentVoteCount&&studentVoteCount>1?this.renderMCMAFeedBack():(this.feedBackDiv.innerHTML="

            Your answer has been recorded

            ",this.feedBackDiv.className="alert alert-info"),this.didSubmit=!0}scoreMCMFSubmission(){this.answer=this.givenArray[0],this.givenArray[0]==this.correctIndexList[0]?(this.correct=!0,this.percent=1):null!=this.givenArray[0]&&(this.correct=!1,this.percent=0)}async logMCMFsubmission(e){var t=this.givenArray[0]||"",i=this.givenArray[0]==this.correctIndexList[0]?"T":"F";let s={event:"mChoice",act:"answer:"+t+":"+("T"==i?"correct":"no"),answer:t,correct:i,div_id:this.divid};eBookConfig.peer&&"undefined"!=typeof studentVoteCount&&(s.act=s.act+`:vote${studentVoteCount}`),void 0!==e&&(s.sid=e),await this.logBookEvent(s)}renderMCMFFeedback(){let e=this.givenArray[0]==this.correctIndexList[0],t=this.singlefeedback;e?(this.feedBackDiv.innerHTML="✔️ "+t,this.feedBackDiv.className="alert alert-info"):(null==t&&(t=""),this.feedBackDiv.innerHTML="✖️ "+t,this.feedBackDiv.className="alert alert-danger")}enableMCComparison(){eBookConfig.enableCompareMe&&(this.compareButton.disabled=!1)}instructorMchoiceModal(e){var t="";for(var i in e)t+="";return t+"
            StudentAnswer(s)
            "+e[i][0]+""+e[i][1]+"
            "}compareModal(e,t,i){var s=e.detail,r=s.answerDict,n=s.misc,o=Object.keys(r).sort(),a="";a+="";var c="";for(var h in o){c=o[h]===n.correct?"success":"info",a+=""}a+="
            AnswerPercent
            "+o[h]+"";var d=r[o[h]]+"%";a+="
            ",a+="
            "+d,a+="
            ",a+="
            ","unavailable"!==n.yourpct&&(a+="

            You have "+n.yourpct+"% correct for all questions

            "),void 0!==s.reslist&&(a+=this.instructorMchoiceModal(s.reslist));const l=document.createElement("div");l.style.position="fixed",l.style.inset="0",l.style.background="rgba(0,0,0,0.5)",l.style.zIndex="9999";const u=document.createElement("div");u.style.maxWidth="720px",u.style.margin="10vh auto",u.style.background="#fff",u.style.borderRadius="6px",u.style.boxShadow="0 2px 12px rgba(0,0,0,0.3)",u.style.padding="16px";const m=document.createElement("div"),p=document.createElement("button");p.type="button",p.textContent="×",p.setAttribute("aria-label","Close"),p.style.float="right",p.className="btn btn-light",p.onclick=function(){document.body.removeChild(l)};const v=document.createElement("h4");v.className="modal-title",v.textContent="Distribution of Answers",m.appendChild(p),m.appendChild(v);const g=document.createElement("div");g.innerHTML=a,u.appendChild(m),u.appendChild(g),l.appendChild(u),document.body.appendChild(l)}async compareAnswers(){var e={};e.div_id=this.divid,e.course_name=eBookConfig.course;try{const t=new URLSearchParams(e),i=await fetch(`${eBookConfig.new_server_prefix}/assessment/getaggregateresults?${t.toString()}`),s=await i.json();this.compareModal(s)}catch(e){console.error("Error fetching aggregate results:",e)}}disableInteraction(){for(var e=0;e=0?this.feedBackEachArray[e].classList.add("alert","alert-success"):this.feedBackEachArray[e].classList.add("alert","alert-danger")}}renderMCFormOpts(){super.renderMCFormOpts(),this.feedBackEachArray=[];for(var e=0;e element\n this.origElem = orig;\n this.useRunestoneServices = opts.useRunestoneServices;\n this.multipleanswers = false;\n this.divid = orig.id;\n if (this.parseBooleanAttribute(this.origElem, \"data-multipleanswers\")) {\n this.multipleanswers = true;\n }\n this.children = this.origElem.childNodes;\n this.random = false;\n if (this.parseBooleanAttribute(this.origElem, \"data-random\")) {\n this.random = true;\n }\n this.correct = null;\n this.didSubmit = false;\n this.answerList = [];\n this.correctList = [];\n this.correctIndexList = [];\n this.feedbackList = [];\n this.question = null;\n this.caption = \"Multiple Choice\";\n this.findAnswers();\n this.findQuestion();\n this.findFeedbacks();\n this.createCorrectList();\n this.createMCForm();\n this.addCaption(\"runestone\");\n this.checkServer(\"mChoice\", true);\n // https://docs.mathjax.org/en/latest/options/startup/startup.html\n // https://docs.mathjax.org/en/latest/web/configuration.html#startup-action\n // runestoneMathReady is defined in the preamble for all PTX authored books\n this.queueMathJax(this.containerDiv);\n if (typeof Prism !== \"undefined\") {\n Prism.highlightAllUnder(this.containerDiv);\n }\n }\n\n /*====================================\n ==== Functions parsing variables ====\n ==== out of intermediate HTML ====\n ====================================*/\n findQuestion() {\n // Old HTML format had question inside ul\n // Newer format has a div.exercise-statement that is a part of the ul's parent\n // Check for newer format...\n const exStatement = this.origElem.parentElement.querySelector('.exercise-statement');\n if (exStatement) {\n this.question = exStatement;\n } else {\n //Older format\n var delimiter;\n for (var i = 0; i < this.origElem.childNodes.length; i++) {\n if (this.origElem.childNodes[i].nodeName === \"LI\") {\n delimiter = this.origElem.childNodes[i].outerHTML;\n break;\n }\n }\n var fulltext = this.origElem.innerHTML;\n var temp = fulltext.split(delimiter);\n this.question = temp[0];\n }\n }\n\n findAnswers() {\n // Creates answer objects and pushes them to answerList\n // format: ID, Correct bool, Content (text)\n var ChildAnswerList = [];\n for (var i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.nodeType === Node.ELEMENT_NODE && child.matches(\"[data-component=answer]\")) {\n ChildAnswerList.push(child);\n }\n }\n for (var j = 0; j < ChildAnswerList.length; j++) {\n var answer_id = ChildAnswerList[j].id;\n var is_correct = false;\n if (ChildAnswerList[j].hasAttribute(\"data-correct\")) {\n // If data-correct attribute exists, answer is correct\n is_correct = true;\n }\n var answer_text = ChildAnswerList[j].innerHTML;\n var answer_object = {\n id: answer_id,\n correct: is_correct,\n content: answer_text,\n };\n this.answerList.push(answer_object);\n }\n }\n\n findFeedbacks() {\n for (var i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.nodeType === Node.ELEMENT_NODE && child.matches(\"[data-component=feedback]\")) {\n this.feedbackList.push(child.innerHTML);\n }\n }\n }\n\n createCorrectList() {\n // Creates array that holds the ID\"s of correct answers\n // Also populates an array that holds the indeces of correct answers\n for (var i = 0; i < this.answerList.length; i++) {\n if (this.answerList[i].correct) {\n this.correctList.push(this.answerList[i].id);\n this.correctIndexList.push(i);\n }\n }\n }\n\n /*===========================================\n ==== Functions generating final HTML ====\n ===========================================*/\n createMCForm() {\n this.renderMCContainer();\n this.renderMCForm(); // renders the form with options and buttons\n this.renderMCfeedbackDiv();\n // replaces intermediate HTML with rendered HTML\n this.origElem.replaceWith(this.containerDiv);\n }\n\n renderMCContainer() {\n this.containerDiv = document.createElement(\"div\");\n this.questionDiv = document.createElement(\"div\");\n // this.question may be an element or text - need to handle both cases\n if (typeof this.question === \"string\") {\n this.questionDiv.innerHTML = this.question;\n } else {\n this.questionDiv.appendChild(this.question);\n }\n this.questionDiv.id = this.divid + \"_prompt\";\n this.questionDiv.className = \"exercise-statement\";\n this.containerDiv.appendChild(this.questionDiv);\n const origClass = this.origElem.getAttribute(\"class\");\n if (origClass) {\n this.containerDiv.classList.add(...origClass.split(\" \").filter(Boolean));\n }\n this.containerDiv.classList.add(\"mchoice\");\n this.containerDiv.id = this.divid;\n }\n\n renderMCForm() {\n this.optsForm = document.createElement(\"form\");\n this.optsForm.id = this.divid + \"_form\";\n this.optsForm.method = \"get\";\n this.optsForm.action = \"\";\n this.optsForm.onsubmit = function () { return false; };\n // Add fieldset and legend for accessibility\n this.optsFieldSet = document.createElement(\"fieldset\");\n this.optsFieldSet.setAttribute(\"role\", \"radiogroup\");\n this.optsFieldSet.setAttribute(\"aria-labelledby\", this.divid + \"_prompt\");\n this.optsForm.appendChild(this.optsFieldSet);\n // generate form options\n this.renderMCFormOpts();\n this.renderMCFormButtons();\n // Append the form to the container\n let legend = document.createElement(\"legend\");\n if (this.multipleanswers) {\n legend.textContent = \"Choose all that apply\";\n } else {\n legend.textContent = \"Choose one\";\n }\n this.optsFieldSet.appendChild(legend);\n this.containerDiv.appendChild(this.optsForm);\n }\n\n renderMCFormOpts() {\n // creates input DOM elements\n this.optionArray = []; // array with an object for each option containing the input and label for that option\n var input_type = \"radio\";\n if (this.multipleanswers) {\n input_type = \"checkbox\";\n }\n // this.indexArray is used to index through the answers\n // it is just 0-n normally, but the order is shuffled if the random option is present\n this.indexArray = [];\n for (var i = 0; i < this.answerList.length; i++) {\n this.indexArray.push(i);\n }\n if (this.random) {\n this.randomizeAnswers();\n }\n let self = this;\n let answerFunc = function () {\n self.isAnswered = true;\n };\n for (var j = 0; j < this.answerList.length; j++) {\n var k = this.indexArray[j];\n var optid = this.divid + \"_opt_\" + k;\n // Create the label for the input\n var label = document.createElement(\"label\");\n label.className = \"mchoice-option\";\n // If the content begins with a ``

            ``, put the label inside of it. (Sphinx 2.0 puts all content in a ``

            ``, while Sphinx 1.8 doesn't).\n var content = this.answerList[k].content;\n var prefix = \"\";\n if (content.startsWith(\"

            \")) {\n prefix = \"

            \";\n content = content.slice(3);\n }\n label.innerHTML =\n `${prefix}` +\n `${String.fromCharCode(\"A\".charCodeAt(0) + j)}. ${content}`;\n // create the object to store in optionArray\n var inputEl = label.querySelector(\"input\");\n var optObj = {\n input: inputEl,\n label: label,\n };\n optObj.input.onclick = answerFunc;\n\n this.optionArray.push(optObj);\n // add the option to the form\n this.optsFieldSet.appendChild(label);\n }\n }\n\n renderMCFormButtons() {\n // submit and compare me buttons\n // Create submit button\n this.submitButton = document.createElement(\"button\");\n this.submitButton.textContent = \"Check Me\";\n this.submitButton.className = \"btn btn-success\";\n this.submitButton.name = \"do answer\";\n this.submitButton.type = \"button\";\n if (this.multipleanswers) {\n this.submitButton.addEventListener(\n \"click\",\n function () {\n this.processMCMASubmission(true);\n }.bind(this),\n false\n );\n } else {\n this.submitButton.addEventListener(\n \"click\",\n function (ev) {\n ev.preventDefault();\n this.processMCMFSubmission(true);\n }.bind(this),\n false\n );\n } // end else\n this.optsForm.appendChild(this.submitButton);\n // Create compare button\n if (this.useRunestoneServices && !eBookConfig.peer) {\n this.compareButton = document.createElement(\"button\");\n this.compareButton.className = \"btn btn-default\";\n this.compareButton.id = this.divid + \"_bcomp\";\n this.compareButton.disabled = true;\n this.compareButton.name = \"compare\";\n this.compareButton.textContent = \"Compare me\";\n this.compareButton.addEventListener(\n \"click\",\n function () {\n this.compareAnswers(this.divid);\n }.bind(this),\n false\n );\n this.optsForm.appendChild(this.compareButton);\n }\n }\n\n renderMCfeedbackDiv() {\n this.feedBackDiv = document.createElement(\"div\");\n this.feedBackDiv.id = this.divid + \"_feedback\";\n this.feedBackDiv.setAttribute(\"aria-live\", \"polite\");\n this.feedBackDiv.setAttribute(\"role\", \"status\");\n this.containerDiv.appendChild(this.feedBackDiv);\n }\n\n randomizeAnswers() {\n // Makes the ordering of the answer choices random\n var currentIndex = this.indexArray.length,\n temporaryValue,\n randomIndex;\n // While there remain elements to shuffle...\n while (currentIndex !== 0) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n // And swap it with the current element.\n temporaryValue = this.indexArray[currentIndex];\n this.indexArray[currentIndex] = this.indexArray[randomIndex];\n this.indexArray[randomIndex] = temporaryValue;\n var temporaryFeedback = this.feedbackList[currentIndex];\n this.feedbackList[currentIndex] = this.feedbackList[randomIndex];\n this.feedbackList[randomIndex] = temporaryFeedback;\n }\n }\n\n /*===================================\n === Checking/loading from storage ===\n ===================================*/\n restoreAnswers(data) {\n // Restore answers from storage retrieval done in RunestoneBase\n // sometimes data.answer can be null\n if (!data.answer) {\n data.answer = \"\";\n }\n var answers = data.answer.split(\",\");\n for (var a = 0; a < answers.length; a++) {\n var index = answers[a];\n for (var b = 0; b < this.optionArray.length; b++) {\n if (this.optionArray[b].input.value == index) {\n this.optionArray[b].input.checked = true;\n }\n }\n }\n if (this.multipleanswers) {\n this.processMCMASubmission(false);\n } else {\n this.processMCMFSubmission(false);\n }\n }\n\n checkLocalStorage() {\n // Repopulates MCMA questions with a user's previous answers,\n // which were stored into local storage.\n var storedData;\n var answers;\n if (this.graderactive) {\n return;\n }\n var len = localStorage.length;\n if (len > 0) {\n var ex = localStorage.getItem(this.localStorageKey());\n if (ex !== null) {\n try {\n storedData = JSON.parse(ex);\n answers = storedData.answer.split(\",\");\n } catch (err) {\n // error while parsing; likely due to bad value stored in storage\n console.log(err.message);\n localStorage.removeItem(this.localStorageKey());\n return;\n }\n for (var a = 0; a < answers.length; a++) {\n var index = answers[a];\n for (var b = 0; b < this.optionArray.length; b++) {\n if (this.optionArray[b].input.value == index) {\n this.optionArray[b].input.checked = true;\n }\n }\n }\n if (this.useRunestoneServices) {\n this.enableMCComparison();\n this.getSubmittedOpts(); // to populate givenlog for logging\n if (this.multipleanswers) {\n this.logMCMAsubmission();\n } else {\n this.logMCMFsubmission();\n }\n }\n }\n }\n }\n\n setLocalStorage(data) {\n var timeStamp = new Date();\n var storageObj = {\n answer: data.answer,\n timestamp: timeStamp,\n correct: data.correct,\n };\n localStorage.setItem(\n this.localStorageKey(),\n JSON.stringify(storageObj)\n );\n }\n\n /*===============================\n === Processing MC Submissions ===\n ===============================*/\n processMCMASubmission(logFlag) {\n // Called when the submit button is clicked\n this.getSubmittedOpts(); // make sure this.givenArray is populated\n this.scoreMCMASubmission();\n this.setLocalStorage({\n correct: this.correct ? \"T\" : \"F\",\n answer: this.givenArray.join(\",\"),\n });\n if (logFlag) {\n this.logMCMAsubmission();\n }\n if (!eBookConfig.peer || eBookConfig.isInstructor) {\n this.renderMCMAFeedBack();\n if (this.useRunestoneServices) {\n this.enableMCComparison();\n }\n } else {\n // acknowledge submission\n if (eBookConfig.peer &&\n eBookConfig.peerMode === \"async\" &&\n typeof studentVoteCount !== \"undefined\" &&\n studentVoteCount > 1) {\n this.renderMCMAFeedBack();\n } else {\n this.feedBackDiv.innerHTML = \"

            Your answer has been recorded

            \";\n this.feedBackDiv.className = \"alert alert-info\";\n }\n }\n this.didSubmit = true;\n }\n\n getSubmittedOpts() {\n var given;\n this.singlefeedback = \"\"; // Used for MCMF questions\n this.feedbackString = \"\"; // Used for MCMA questions\n this.givenArray = [];\n this.givenlog = \"\";\n var buttonObjs = this.optsForm.elements.group1;\n for (var i = 0; i < buttonObjs.length; i++) {\n if (buttonObjs[i].checked) {\n given = buttonObjs[i].value;\n this.givenArray.push(given);\n this.feedbackString += `
          1. ${this.feedbackList[i]\n }
          2. `;\n this.givenlog += given + \",\";\n this.singlefeedback = this.feedbackList[i];\n }\n }\n this.givenArray.sort();\n }\n\n checkCurrentAnswer() {\n this.getSubmittedOpts();\n if (this.givenArray.length === 0) {\n return;\n }\n if (this.multipleanswers) {\n this.scoreMCMASubmission();\n } else {\n this.scoreMCMFSubmission();\n }\n }\n\n async logCurrentAnswer(sid) {\n if (this.multipleanswers) {\n await this.logMCMAsubmission(sid);\n } else {\n await this.logMCMFsubmission(sid);\n }\n }\n\n renderFeedback() {\n if (this.multipleanswers) {\n this.renderMCMAFeedBack();\n } else {\n this.renderMCMFFeedback();\n }\n this.queueMathJax(this.feedBackDiv);\n }\n scoreMCMASubmission() {\n this.correctCount = 0;\n var correctIndex = 0;\n var givenIndex = 0;\n while (\n correctIndex < this.correctIndexList.length &&\n givenIndex < this.givenArray.length\n ) {\n if (\n this.givenArray[givenIndex] <\n this.correctIndexList[correctIndex]\n ) {\n givenIndex++;\n } else if (\n this.givenArray[givenIndex] ==\n this.correctIndexList[correctIndex]\n ) {\n this.correctCount++;\n givenIndex++;\n correctIndex++;\n } else {\n correctIndex++;\n }\n }\n var numGiven = this.givenArray.length;\n var numCorrect = this.correctCount;\n var numNeeded = this.correctList.length;\n this.answer = this.givenArray.join(\",\");\n this.correct = numCorrect === numNeeded && numNeeded === numGiven;\n if (numGiven === numNeeded) {\n this.percent = numCorrect / numNeeded;\n } else {\n this.percent = numCorrect / Math.max(numGiven, numNeeded);\n }\n }\n\n async logMCMAsubmission(sid) {\n var answer = this.answer || \"\";\n var correct = this.correct || false;\n var logAnswer =\n \"answer:\" + answer + \":\" + (correct == true ? \"correct\" : \"no\");\n let data = {\n event: \"mChoice\",\n act: logAnswer,\n answer: answer,\n correct: correct,\n div_id: this.divid,\n };\n if (eBookConfig.peer && typeof studentVoteCount !== \"undefined\") {\n data.act = data.act + `:vote${studentVoteCount}`;\n }\n if (typeof sid !== \"undefined\") {\n data.sid = sid;\n }\n await this.logBookEvent(data);\n }\n\n renderMCMAFeedBack() {\n var answerStr = \"answers\";\n var numGiven = this.givenArray.length;\n if (numGiven === 1) {\n answerStr = \"answer\";\n }\n var numCorrect = this.correctCount;\n var numNeeded = this.correctList.length;\n var feedbackText = this.feedbackString;\n if (this.correct) {\n this.feedBackDiv.innerHTML = `✔️
              ${feedbackText}`;\n this.feedBackDiv.className = \"alert alert-info\";\n } else {\n this.feedBackDiv.innerHTML =\n `✖️ You gave ${numGiven} ${answerStr} and got ${numCorrect} correct of ${numNeeded} needed.
                ${feedbackText}`;\n this.feedBackDiv.className = \"alert alert-danger\";\n }\n }\n\n processMCMFSubmission(logFlag) {\n // Called when the submit button is clicked\n this.getSubmittedOpts(); // make sure this.givenArray is populated\n this.scoreMCMFSubmission();\n this.setLocalStorage({\n correct: this.correct ? \"T\" : \"F\",\n answer: this.givenArray.join(\",\"),\n });\n if (logFlag) {\n this.logMCMFsubmission();\n }\n if (!eBookConfig.peer || eBookConfig.isInstructor) {\n this.renderMCMFFeedback();\n if (this.useRunestoneServices) {\n this.enableMCComparison();\n }\n } else {\n if (eBookConfig.peer &&\n eBookConfig.peerMode === \"async\" &&\n typeof studentVoteCount !== \"undefined\" &&\n studentVoteCount > 1) {\n this.renderMCMAFeedBack();\n } else {\n this.feedBackDiv.innerHTML = \"

                Your answer has been recorded

                \";\n this.feedBackDiv.className = \"alert alert-info\";\n }\n }\n this.didSubmit = true;\n }\n\n scoreMCMFSubmission() {\n this.answer = this.givenArray[0];\n if (this.givenArray[0] == this.correctIndexList[0]) {\n this.correct = true;\n this.percent = 1.0;\n } else if (this.givenArray[0] != null) {\n // if given is null then the question wasn\"t answered and should be counted as skipped\n this.correct = false;\n this.percent = 0.0;\n }\n }\n\n async logMCMFsubmission(sid) {\n // If there's no answer provided (the array is empty), use a blank for the answer.\n var answer = this.givenArray[0] || \"\";\n var correct =\n this.givenArray[0] == this.correctIndexList[0] ? \"T\" : \"F\";\n var logAnswer =\n \"answer:\" + answer + \":\" + (correct == \"T\" ? \"correct\" : \"no\"); // backward compatible\n let data = {\n event: \"mChoice\",\n act: logAnswer,\n answer: answer,\n correct: correct,\n div_id: this.divid,\n };\n if (eBookConfig.peer && typeof studentVoteCount !== \"undefined\") {\n data.act = data.act + `:vote${studentVoteCount}`;\n }\n if (typeof sid !== \"undefined\") {\n data.sid = sid;\n }\n await this.logBookEvent(data);\n }\n\n renderMCMFFeedback() {\n let correct = this.givenArray[0] == this.correctIndexList[0];\n let feedbackText = this.singlefeedback;\n\n if (correct) {\n this.feedBackDiv.innerHTML = \"✔️ \" + feedbackText;\n this.feedBackDiv.className = \"alert alert-info\"; // use blue for better red/green blue color blindness\n } else {\n if (feedbackText == null) {\n feedbackText = \"\";\n }\n this.feedBackDiv.innerHTML = \"✖️ \" + feedbackText;\n this.feedBackDiv.className = \"alert alert-danger\";\n }\n }\n enableMCComparison() {\n if (eBookConfig.enableCompareMe) {\n this.compareButton.disabled = false;\n }\n }\n instructorMchoiceModal(data) {\n // data.reslist -- student and their answers\n // data.answerDict -- answers and count\n // data.correct - correct answer\n var res = \"\";\n for (var i in data) {\n res +=\n \"\";\n }\n res += \"
                StudentAnswer(s)
                \" +\n data[i][0] +\n \"\" +\n data[i][1] +\n \"
                \";\n return res;\n }\n compareModal(data, status, whatever) {\n var datadict = data.detail;\n var answers = datadict.answerDict;\n var misc = datadict.misc;\n var kl = Object.keys(answers).sort();\n var body = \"\";\n body += \"\";\n var theClass = \"\";\n for (var k in kl) {\n if (kl[k] === misc.correct) {\n theClass = \"success\";\n } else {\n theClass = \"info\";\n }\n body +=\n \"\";\n }\n body += \"
                AnswerPercent
                \" + kl[k] + \"\";\n var pct = answers[kl[k]] + \"%\";\n body += \"
                \";\n body +=\n \"
                \" +\n pct;\n body += \"
                \";\n body += \"
                \";\n if (misc.yourpct !== \"unavailable\") {\n body +=\n \"

                You have \" +\n misc.yourpct +\n \"% correct for all questions

                \";\n }\n if (datadict.reslist !== undefined) {\n body += this.instructorMchoiceModal(datadict.reslist);\n }\n // Create a simple modal without jQuery/Bootstrap\n const overlay = document.createElement(\"div\");\n overlay.style.position = \"fixed\";\n overlay.style.inset = \"0\";\n overlay.style.background = \"rgba(0,0,0,0.5)\";\n overlay.style.zIndex = \"9999\";\n\n const dialog = document.createElement(\"div\");\n dialog.style.maxWidth = \"720px\";\n dialog.style.margin = \"10vh auto\";\n dialog.style.background = \"#fff\";\n dialog.style.borderRadius = \"6px\";\n dialog.style.boxShadow = \"0 2px 12px rgba(0,0,0,0.3)\";\n dialog.style.padding = \"16px\";\n\n const header = document.createElement(\"div\");\n const closeBtn = document.createElement(\"button\");\n closeBtn.type = \"button\";\n closeBtn.textContent = \"×\";\n closeBtn.setAttribute(\"aria-label\", \"Close\");\n closeBtn.style.float = \"right\";\n closeBtn.className = \"btn btn-light\";\n closeBtn.onclick = function () {\n document.body.removeChild(overlay);\n };\n const title = document.createElement(\"h4\");\n title.className = \"modal-title\";\n title.textContent = \"Distribution of Answers\";\n header.appendChild(closeBtn);\n header.appendChild(title);\n\n const modalBody = document.createElement(\"div\");\n modalBody.innerHTML = body;\n\n dialog.appendChild(header);\n dialog.appendChild(modalBody);\n overlay.appendChild(dialog);\n document.body.appendChild(overlay);\n }\n // _`compareAnswers`\n async compareAnswers() {\n var data = {};\n data.div_id = this.divid;\n data.course_name = eBookConfig.course;\n try {\n const params = new URLSearchParams(data);\n const resp = await fetch(`${eBookConfig.new_server_prefix}/assessment/getaggregateresults?${params.toString()}`);\n const json = await resp.json();\n this.compareModal(json);\n } catch (e) {\n console.error(\"Error fetching aggregate results:\", e);\n }\n }\n\n disableInteraction() {\n for (var i = 0; i < this.optionArray.length; i++) {\n this.optionArray[i].input.disabled = true;\n }\n }\n\n enableInteraction() {\n for (var i = 0; i < this.optionArray.length; i++) {\n this.optionArray[i].input.disabled = false;\n }\n }\n}\n\n/*=================================\n== Find the custom HTML tags and ==\n== execute our code on them ==\n=================================*/\ndocument.addEventListener(\"runestone:login-complete\", function () {\n document.querySelectorAll(\"[data-component=multiplechoice]\").forEach(function (el, index) {\n // MC\n var opts = {\n orig: el,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n };\n if (!el.closest(\"[data-component=timedAssessment]\")) {\n // If this element exists within a timed component, don't render it here\n window.componentMap[el.id] = new MultipleChoice(opts);\n }\n });\n});\n","import MultipleChoice from \"./mchoice.js\";\n\nexport default class TimedMC extends MultipleChoice {\n constructor(opts) {\n super(opts);\n this.containerDiv.classList.add(\"runestone\");\n this.needsReinitialization = true;\n this.renderTimedIcon(this.MCContainer);\n this.hideButtons(); // Don't show per-question buttons in a timed assessment\n }\n\n renderTimedIcon(component) {\n // renders the clock icon on timed components. The component parameter\n // is the element that the icon should be appended to.\n var timeIconDiv = document.createElement(\"div\");\n var timeIcon = document.createElement(\"img\");\n timeIcon.src = \"../_static/clock.png\";\n timeIcon.style.width = \"15px\";\n timeIcon.style.height = \"15px\";\n timeIconDiv.className = \"timeTip\";\n timeIconDiv.title = \"\";\n timeIconDiv.appendChild(timeIcon);\n if (component) {\n if (component.firstChild) {\n component.insertBefore(timeIconDiv, component.firstChild);\n } else {\n component.appendChild(timeIconDiv);\n }\n }\n }\n hideButtons() {\n //Just hiding the buttons doesn't prevent submitting the form when entering is clicked\n //We need to completely disable the buttons\n if (this.submitButton) {\n this.submitButton.setAttribute(\"disabled\", \"true\");\n this.submitButton.style.display = \"none\";\n }\n if (this.compareButton) {\n this.compareButton.style.display = \"none\";\n }\n }\n\n // These methods override the methods in the base class. Called from renderFeedback()\n //\n renderMCMAFeedBack() {\n this.feedbackTimedMC();\n }\n renderMCMFFeedback(whatever, whateverr) {\n this.feedbackTimedMC();\n }\n feedbackTimedMC() {\n for (var i = 0; i < this.indexArray.length; i++) {\n var tmpindex = this.indexArray[i];\n this.feedBackEachArray[i].innerHTML =\n String.fromCharCode(65 + i) + \". \" + this.feedbackList[i];\n var tmpid = this.answerList[tmpindex].id;\n if (this.correctList.indexOf(tmpid) >= 0) {\n this.feedBackEachArray[i].classList.add(\n \"alert\",\n \"alert-success\"\n );\n } else {\n this.feedBackEachArray[i].classList.add(\n \"alert\",\n \"alert-danger\"\n );\n }\n }\n }\n renderMCFormOpts() {\n super.renderMCFormOpts();\n this.feedBackEachArray = [];\n for (var j = 0; j < this.answerList.length; j++) {\n var k = this.indexArray[j];\n var feedBackEach = document.createElement(\"div\");\n feedBackEach.id = this.divid + \"_eachFeedback_\" + k;\n feedBackEach.classList.add(\"eachFeedback\");\n this.feedBackEachArray.push(feedBackEach);\n this.optsForm.appendChild(feedBackEach);\n }\n }\n checkCorrectTimedMCMA() {\n if (\n this.correctCount === this.correctList.length &&\n this.correctList.length === this.givenArray.length\n ) {\n this.correct = true;\n } else if (this.givenArray.length !== 0) {\n this.correct = false;\n } else {\n // question was skipped\n this.correct = null;\n }\n switch (this.correct) {\n case true:\n return \"T\";\n case false:\n return \"F\";\n default:\n return null;\n }\n }\n checkCorrectTimedMCMF() {\n // Returns if the question was correct, incorrect, or skipped (return null in the last case)\n switch (this.correct) {\n case true:\n return \"T\";\n case false:\n return \"F\";\n default:\n return null;\n }\n }\n checkCorrectTimed() {\n if (this.multipleanswers) {\n return this.checkCorrectTimedMCMA();\n } else {\n return this.checkCorrectTimedMCMF();\n }\n }\n hideFeedback() {\n for (var i = 0; i < this.feedBackEachArray.length; i++) {\n this.feedBackEachArray[i].style.display = \"none\";\n }\n }\n\n reinitializeListeners() {\n let self = this;\n let answerFunc = function () {\n self.isAnswered = true;\n };\n for (let opt of this.optionArray) {\n opt.input.onclick = answerFunc;\n }\n }\n}\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\n\nwindow.component_factory.multiplechoice = function (opts) {\n if (opts.timed) {\n return new TimedMC(opts);\n } else {\n return new MultipleChoice(opts);\n }\n};\n"],"names":["MultipleChoice","constructor","opts","super","orig","this","origElem","useRunestoneServices","multipleanswers","divid","id","parseBooleanAttribute","children","childNodes","random","correct","didSubmit","answerList","correctList","correctIndexList","feedbackList","question","caption","findAnswers","findQuestion","findFeedbacks","createCorrectList","createMCForm","addCaption","checkServer","queueMathJax","containerDiv","Prism","highlightAllUnder","exStatement","parentElement","querySelector","delimiter","i","length","nodeName","outerHTML","temp","innerHTML","split","ChildAnswerList","child","nodeType","Node","ELEMENT_NODE","matches","push","j","answer_id","is_correct","hasAttribute","answer_object","content","renderMCContainer","renderMCForm","renderMCfeedbackDiv","replaceWith","document","createElement","questionDiv","appendChild","className","origClass","getAttribute","classList","add","filter","Boolean","optsForm","method","action","onsubmit","optsFieldSet","setAttribute","renderMCFormOpts","renderMCFormButtons","legend","textContent","optionArray","input_type","indexArray","randomizeAnswers","self","answerFunc","isAnswered","k","optid","label","prefix","startsWith","slice","String","fromCharCode","charCodeAt","optObj","input","onclick","submitButton","name","type","addEventListener","processMCMASubmission","bind","ev","preventDefault","processMCMFSubmission","eBookConfig","peer","compareButton","disabled","compareAnswers","feedBackDiv","temporaryValue","randomIndex","currentIndex","Math","floor","temporaryFeedback","restoreAnswers","data","answer","answers","a","index","b","value","checked","checkLocalStorage","graderactive","localStorage","ex","getItem","localStorageKey","JSON","parse","err","console","log","message","removeItem","enableMCComparison","getSubmittedOpts","logMCMAsubmission","logMCMFsubmission","setLocalStorage","timeStamp","Date","storageObj","timestamp","setItem","stringify","logFlag","scoreMCMASubmission","givenArray","join","isInstructor","renderMCMAFeedBack","peerMode","studentVoteCount","given","singlefeedback","feedbackString","givenlog","buttonObjs","elements","group1","sort","checkCurrentAnswer","scoreMCMFSubmission","logCurrentAnswer","sid","renderFeedback","renderMCMFFeedback","correctCount","correctIndex","givenIndex","numGiven","numCorrect","numNeeded","percent","max","event","act","div_id","logBookEvent","answerStr","feedbackText","enableCompareMe","instructorMchoiceModal","res","compareModal","status","whatever","datadict","detail","answerDict","misc","kl","Object","keys","body","theClass","pct","yourpct","undefined","reslist","overlay","style","position","inset","background","zIndex","dialog","maxWidth","margin","borderRadius","boxShadow","padding","header","closeBtn","float","removeChild","title","modalBody","course_name","course","params","URLSearchParams","resp","fetch","new_server_prefix","toString","json","e","error","disableInteraction","enableInteraction","querySelectorAll","forEach","el","closest","window","componentMap","TimedMC","needsReinitialization","renderTimedIcon","MCContainer","hideButtons","component","timeIconDiv","timeIcon","src","width","height","firstChild","insertBefore","display","feedbackTimedMC","whateverr","tmpindex","feedBackEachArray","tmpid","indexOf","feedBackEach","checkCorrectTimedMCMA","checkCorrectTimedMCMF","checkCorrectTimed","hideFeedback","reinitializeListeners","opt","component_factory","multiplechoice","timed"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/919.237aced0c044e4b6.js.map.gz b/_static/919.237aced0c044e4b6.js.map.gz new file mode 100644 index 0000000..229d120 Binary files /dev/null and b/_static/919.237aced0c044e4b6.js.map.gz differ diff --git a/_static/_runestone-services.xml b/_static/_runestone-services.xml new file mode 100644 index 0000000..7c4cb61 --- /dev/null +++ b/_static/_runestone-services.xml @@ -0,0 +1,14 @@ + + + + prefix-runtime.42217a82c75796c8.bundle.js + prefix-723.3e6434f80549315a.bundle.js + prefix-runestone.7e141ad8414abf4a.bundle.js + + + prefix-723.3bccd435914aa0ff.css + prefix-runestone.f4ab138da65f4203.css + + https://runestone.academy/cdn/runestone/ + 7.11.5 + diff --git a/_static/b70781972ce7320b.woff2 b/_static/b70781972ce7320b.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/_static/b70781972ce7320b.woff2 differ diff --git a/_static/prefix-115.83df5da0966564d5.css b/_static/prefix-115.83df5da0966564d5.css new file mode 100644 index 0000000..93d9aae --- /dev/null +++ b/_static/prefix-115.83df5da0966564d5.css @@ -0,0 +1,2 @@ +.selectwidthauto{display:inline-block!important;margin:5px;width:auto!important}input.input-validation-error{border:1px solid #e80c4d}.dark-mode .fillintheblank_section input[type=text]{background-color:#333;color:unset}.ptx-runestone-container .fitb-feedback{margin-bottom:0;margin-top:10px}.ptx-runestone-container .fitb-feedback:empty{margin-top:0}.mchoice label p{display:inline;font-weight:400!important}.mchoice label pre{font-weight:400}.mchoice fieldset{margin-bottom:.5em}.mchoice fieldset legend{font-size:small;margin-bottom:.5em}.multiplechoice_section label>.para,.timedAssessment .mchoice label>.para{display:inline}label.mchoice-option{display:block}.ptx-runestone-container input.mchoice-input{margin-right:.5em;vertical-align:top}.mchoice .alert{margin-bottom:0;margin-top:10px}div.journal div.latexoutput{background-color:var(--outerBackground,#eee);border-radius:5px;margin-bottom:10px;padding:1em}.shortanswer_section .alert{margin-bottom:0}.shortanswer__timestamp{color:var(--grayToWhite,#333);font-size:.9em}.journal textarea{background-color:#fff;background:linear-gradient(#fff,#fff) padding-box,linear-gradient(90deg,#eaeef2,#eaeef2) border-box;border:1px solid #d0d7de;border-radius:8px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:1rem;line-height:1.5;max-width:100%;min-height:6rem;overflow:hidden;padding:.75rem .9rem;resize:none;transition:border-color .15s ease,box-shadow .15s ease;width:100%}.journal textarea:focus{border-color:#0969da;box-shadow:0 0 0 3px rgba(9,105,218,.15);outline:none}.clickable{cursor:pointer}.clickable:has(code){display:inline-block;padding:3px}.clickable-clicked:has(code){box-shadow:0 0 2px 2px rgba(0,100,0,.75)}.clickable-clicked{background-color:var(--clickableBgColor)}.clickable-clicked td{background-color:#dad6c1;box-shadow:none}table{border-collapse:collapse}td.clickable,th.clickable{border:1px solid #000}td.clickable-clicked{background-color:#dad6c1;box-shadow:none}td img{margin:5px}.clickable-clicked th,th.clickable-clicked{background-color:#dad6c1;box-shadow:none}.clickable-incorrect,.clickable-incorrect td,.clickable-incorrect th{background-color:var(--clickableIncorrectBgColor);border:1px solid red!important}img.clickable-incorrect{box-shadow:0 0 2px 2px rgba(100,0,0,.75)}.clickable-incorrect:has(code){box-shadow:0 0 2px 2px rgba(251,0,0,.75)}:root{--clickableBgColor:#ff0;--clickableIncorrectBgColor:#fcc}:root.dark-mode{--clickableBgColor:#3c5624;--clickableIncorrectBgColor:#562c2c;.clickable-clicked:has(code):not(.clickable-incorrect){box-shadow:0 0 2px 2px rgba(251,255,21,.75)}}.ptx-runestone-container .rsdraggable,.runestone-sphinx .rsdraggable{background-color:var(--questionBgColor,#efefff);border:1px solid var(--componentBorderColor,#efefff);box-sizing:border-box;display:inline;float:left;margin-left:1%;margin-right:1%;margin-top:5px;min-width:28%;padding-bottom:10px;text-align:left;vertical-align:top}.ptx-runestone-container .dnd-button-container,.runestone-sphinx .dnd-button-container{display:flex;justify-content:center;margin-top:1em;width:100%}.ptx-runestone-container .drag-button,.runestone-sphinx .drag-button{display:inline-block}.ptx-runestone-container .drag-reset,.runestone-sphinx .drag-reset{background-color:#474949;color:#fff}.ptx-runestone-container .drag-reset:hover,.runestone-sphinx .drag-reset:hover{background-color:#000;color:#fff}.ptx-runestone-container .drop-incorrect,.runestone-sphinx .drop-incorrect{background-color:var(--draggableIncorrectBg,#f2dede)!important;border:1px solid var(--draggableIncorrectBorder,red)!important}.ptx-runestone-container .drag-reset:enabled,.runestone-sphinx .drag-reset:enabled{background-color:#474949;color:#fff}.ptx-runestone-container .draggable-drag,.runestone-sphinx .draggable-drag{background-color:var(--draggableBgColor);border:1px solid #d3d3d3;border-radius:10px;cursor:grab;display:block;margin-top:5px;padding:10px}.ptx-runestone-container .draggable-feedback,.runestone-sphinx .draggable-feedback{clear:both;margin-bottom:0;margin-top:10px;text-align:left!important}.ptx-runestone-container .draggable-drop,.runestone-sphinx .draggable-drop{background-color:var(--dropableBgColor);border:1px solid #d3d3d3;border-radius:10px;cursor:grab;display:block;margin-top:5px;padding:10px}.ptx-runestone-container .draggable-container,.runestone-sphinx .draggable-container{text-align:center}.ptx-runestone-container .possibleDrop,.runestone-sphinx .possibleDrop{background-color:#ccc;border-color:#000}.ptx-runestone-container .draggable-drop .MathJax,.ptx-runestone-container .draggable-drop .process-math,.runestone-sphinx .draggable-drop .MathJax,.runestone-sphinx .draggable-drop .process-math{cursor:not-allowed;pointer-events:none}.ptx-runestone-container .vh-dnd-error,.runestone-sphinx .vh-dnd-error{clip:rect(0,0,0,0);border:0;height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.ptx-runestone-container .cardsort-statement,.runestone-sphinx .cardsort-statement{background-color:var(--questionBgColor);margin-bottom:10px;padding:10px;text-align:left}.ptx-runestone-container .parsons-container,.runestone-sphinx .parsons-container{clear:both}.ptx-runestone-container .parsons .sortable-code-container,.runestone-sphinx .parsons .sortable-code-container{text-align:center}.ptx-runestone-container .parsons .sortable-code-container:not(.block),.runestone-sphinx .parsons .sortable-code-container:not(.block){-webkit-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}.ptx-runestone-container .parsons .sortable-code,.runestone-sphinx .parsons .sortable-code{display:inline-block;margin:0 15px;padding-left:0;position:static;text-align:left;vertical-align:top}.ptx-runestone-container .parsons .answer,.ptx-runestone-container .parsons .answer1,.ptx-runestone-container .parsons .answer2,.ptx-runestone-container .parsons .answer3,.ptx-runestone-container .parsons .answer4,.ptx-runestone-container .parsons .source,.runestone-sphinx .parsons .answer,.runestone-sphinx .parsons .answer1,.runestone-sphinx .parsons .answer2,.runestone-sphinx .parsons .answer3,.runestone-sphinx .parsons .answer4,.runestone-sphinx .parsons .source{background-color:var(--questionBgColor,#efefff);border:1px solid var(--componentBorderColor,#efefff);font-size:100%;list-style:none;margin-left:0;padding-bottom:10px;padding-left:0;position:relative}.ptx-runestone-container .parsons .source,.runestone-sphinx .parsons .source{background-color:var(--questionBgColor,#efefff)}.ptx-runestone-container .parsons .answer,.runestone-sphinx .parsons .answer{background-color:var(--parsonsBgColor);border-color:var(--parsonsBorderColor)}.ptx-runestone-container .parsons .answer.incorrect,.runestone-sphinx .parsons .answer.incorrect{background-color:var(--parsonsIncorrectBgColor);border-color:var(--parsonsIncorrectBorderColor)}.ptx-runestone-container .parsons .answer.correct,.runestone-sphinx .parsons .answer.correct{background-color:var(--parsonsCorrectBgColor);border-color:var(--parsonsCorrectBorderColor)}.ptx-runestone-container .parsons .answer1,.runestone-sphinx .parsons .answer1{background:linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box;background-color:var(--parsonsBgColor);background-origin:padding-box;background-position:30px 0;background-size:1px 100%;border-color:var(--parsonsBorderColor)}.ptx-runestone-container .parsons .answer1.incorrect,.runestone-sphinx .parsons .answer1.incorrect{background:linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsIncorrectBgColor);background-origin:padding-box;background-position:30px 0;background-size:1px 100%;border-color:var(--parsonsIncorrectBorderColor)}.ptx-runestone-container .parsons .answer1.correct,.runestone-sphinx .parsons .answer1.correct{background:linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsCorrectBgColor);background-origin:padding-box;background-position:30px 0;background-size:1px 100%;border-color:var(--parsonsCorrectBorderColor)}.ptx-runestone-container .parsons .answer2,.runestone-sphinx .parsons .answer2{background:linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box;background-color:var(--parsonsBgColor);background-origin:padding-box,padding-box;background-position:30px 0,60px 0;background-size:1px 100%,1px 100%;border-color:var(--parsonsBorderColor)}.ptx-runestone-container .parsons .answer2.incorrect,.runestone-sphinx .parsons .answer2.incorrect{background:linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsIncorrectBgColor);background-origin:padding-box,padding-box;background-position:30px 0,60px 0;background-size:1px 100%,1px 100%;border-color:var(--parsonsIncorrectBorderColor)}.ptx-runestone-container .parsons .answer2.correct,.runestone-sphinx .parsons .answer2.correct{background:linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsCorrectBgColor);background-origin:padding-box,padding-box;background-position:30px 0,60px 0;background-size:1px 100%,1px 100%;border-color:var(--parsonsCorrectBorderColor)}.ptx-runestone-container .parsons .answer3,.runestone-sphinx .parsons .answer3{background:linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box;background-color:var(--parsonsBgColor);background-origin:padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0;background-size:1px 100%,1px 100%,1px 100%;border-color:var(--parsonsBorderColor)}.ptx-runestone-container .parsons .answer3.incorrect,.runestone-sphinx .parsons .answer3.incorrect{background:linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsIncorrectBgColor);background-origin:padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0;background-size:1px 100%,1px 100%,1px 100%;border-color:var(--parsonsIncorrectBorderColor)}.ptx-runestone-container .parsons .answer3.correct,.runestone-sphinx .parsons .answer3.correct{background:linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsCorrectBgColor);background-origin:padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0;background-size:1px 100%,1px 100%,1px 100%;border-color:var(--parsonsCorrectBorderColor)}.ptx-runestone-container .parsons .answer4,.runestone-sphinx .parsons .answer4{background:linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box;background-color:var(--parsonsBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsBorderColor)}.ptx-runestone-container .parsons .answer4.incorrect,.runestone-sphinx .parsons .answer4.incorrect{background:linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsIncorrectBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsIncorrectBorderColor)}.ptx-runestone-container .parsons .answer4.correct,.runestone-sphinx .parsons .answer4.correct{background:linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsCorrectBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsCorrectBorderColor)}.ptx-runestone-container .parsons .answer5,.runestone-sphinx .parsons .answer5{background:linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box;background-color:var(--parsonsBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0,150px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsBorderColor)}.ptx-runestone-container .parsons .answer5.incorrect,.runestone-sphinx .parsons .answer5.incorrect{background:linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsIncorrectBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0,150px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsIncorrectBorderColor)}.ptx-runestone-container .parsons .answer5.correct,.runestone-sphinx .parsons .answer5.correct{background:linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsCorrectBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0,150px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsCorrectBorderColor)}.ptx-runestone-container .parsons .answer6,.runestone-sphinx .parsons .answer6{background:linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box;background-color:var(--parsonsBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0,150px 0,180px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsBorderColor)}.ptx-runestone-container .parsons .answer6.incorrect,.runestone-sphinx .parsons .answer6.incorrect{background:linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsIncorrectBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0,150px 0,180px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsIncorrectBorderColor)}.ptx-runestone-container .parsons .answer6.correct,.runestone-sphinx .parsons .answer6.correct{background:linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsCorrectBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0,150px 0,180px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsCorrectBorderColor)}.ptx-runestone-container .parsons .block,.runestone-sphinx .parsons .block{background-color:var(--background,#efefef);border:1px solid #d3d3d3;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;cursor:move;margin-top:5px;overflow:hidden;padding:5px 10px;position:absolute}.ptx-runestone-container .parsons .block.disabled,.runestone-sphinx .parsons .block.disabled{opacity:.3}.ptx-runestone-container .parsons .block.down,.runestone-sphinx .parsons .block.down{border:2px solid #000;padding:4px 9px}.ptx-runestone-container .parsons .block.up,.runestone-sphinx .parsons .block.up{background-color:#fff;border:2px solid #000;box-shadow:3px 3px 4px #000;padding:4px 9px}.ptx-runestone-container .parsons,.runestone-sphinx .parsons{display:block}.ptx-runestone-container .parsons .block,.runestone-sphinx .parsons .block{clear:both;float:left}.ptx-runestone-container .parsons .sortable-code code,.runestone-sphinx .parsons .sortable-code code{background-color:transparent;clear:both;float:left;white-space:pre}.ptx-runestone-container .parsons .sortable-code code:empty,.runestone-sphinx .parsons .sortable-code code:empty{height:1.25em}.ptx-runestone-container .parsons .block p,.runestone-sphinx .parsons .block p{margin:0}.ptx-runestone-container .parsons .block,.ptx-runestone-container .parsons .block:after,.ptx-runestone-container .parsons .block:before,.runestone-sphinx .parsons .block,.runestone-sphinx .parsons .block:after,.runestone-sphinx .parsons .block:before{box-sizing:content-box}.ptx-runestone-container .parsons .indent1,.runestone-sphinx .parsons .indent1{margin-left:30px}.ptx-runestone-container .parsons .indent2,.runestone-sphinx .parsons .indent2{margin-left:60px}.ptx-runestone-container .parsons .indent3,.runestone-sphinx .parsons .indent3{margin-left:90px}.ptx-runestone-container .parsons .indent4,.runestone-sphinx .parsons .indent4{margin-left:120px}.ptx-runestone-container .parsons .indent5,.runestone-sphinx .parsons .indent5{margin-left:150px}.ptx-runestone-container .parsons .indent6,.runestone-sphinx .parsons .indent6{margin-left:180px}.ptx-runestone-container .parsons .indent7,.runestone-sphinx .parsons .indent7{margin-left:210px}.ptx-runestone-container .parsons .indent8,.runestone-sphinx .parsons .indent8{margin-left:240px}.ptx-runestone-container .parsons .correct,.runestone-sphinx .parsons .correct{background:none;background-color:var(--parsonsCorrectBgColor);border:1px solid #d6e9c6}.ptx-runestone-container .parsons .indentLeft,.ptx-runestone-container .parsons .indentRight,.runestone-sphinx .parsons .indentLeft,.runestone-sphinx .parsons .indentRight{background-color:#fff0b3;border:2px solid #fc0;padding:4px 9px}.ptx-runestone-container .parsons .indentLeft,.runestone-sphinx .parsons .indentLeft{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSI2MDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGZpbGw9IiNGQzAiIGQ9Ik0xMiAwSDB2NjAwaDEyVjMxMEwyIDMwMGwxMC0xMHoiLz48cGF0aCBkPSJtNSAzMDAgNy03di0zTDIgMzAwbDEwIDEwdi0zeiIvPjwvc3ZnPg==),url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSI2MDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Ik0xMCAzMDd2M0wwIDMwMGwxMC0xMHYzbC03IDd6Ii8+PHBhdGggZmlsbD0iI0ZDMCIgZD0iTTEyIDMwOXYtMThsLTkgOXoiLz48cGF0aCBmaWxsPSIjRkMwIiBkPSJNMTAgMGgydjYwMGgtMnoiLz48L3N2Zz4=);background-position:0,100%;background-repeat:no-repeat,no-repeat}.ptx-runestone-container .parsons .indentRight,.runestone-sphinx .parsons .indentRight{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSI2MDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Im05IDMwMC03LTd2LTNsMTAgMTAtMTAgMTB2LTN6Ii8+PHBhdGggZmlsbD0iI0ZDMCIgZD0ibTkgMzAwLTktOXYxOHoiLz48cGF0aCBmaWxsPSIjRkMwIiBkPSJNMCAwaDJ2NjAwSDB6Ii8+PC9zdmc+),url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSI2MDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGZpbGw9IiNGQzAiIGQ9Im0wIDI5MCAxMCAxMC0xMCAxMHYyOTBoMTJWMEgweiIvPjxwYXRoIGQ9Ik0wIDMwN3YzbDEwLTEwLTEwLTEwdjNsNyA3eiIvPjwvc3ZnPg==);background-position:0,100%;background-repeat:no-repeat,no-repeat}.ptx-runestone-container .parsons .incorrectPosition,.runestone-sphinx .parsons .incorrectPosition{background-color:#ffbaba;border:1px solid red}.ptx-runestone-container .parsons .paired,.runestone-sphinx .parsons .paired{background-color:transparent;border-color:#b8b8f2;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;border-style:solid;border-width:1px 11px;margin-top:5px;overflow:hidden;position:absolute}.ptx-runestone-container .parsons,.runestone-sphinx .parsons{border-left:0;border-radius:0;border-right:0}.ptx-runestone-container .parsons .parsons-text,.runestone-sphinx .parsons .parsons-text{margin-left:auto;margin-right:auto;max-width:var(--contentWidthRegular)}.ptx-runestone-container .parsons .parsons-img,.runestone-sphinx .parsons .parsons-img{display:inline-block;text-align:center;width:100%}.ptx-runestone-container .parsons .parsons-controls,.runestone-sphinx .parsons .parsons-controls{margin-left:auto;margin-right:auto;margin-top:10px;max-width:var(--contentWidthRegular);text-align:center}.ptx-runestone-container .parsons [role=tooltip],.runestone-sphinx .parsons [role=tooltip]{font-style:italic;margin:5px auto;max-width:var(--contentWidthRegular);padding:0 10px;text-align:center;top:0}.ptx-runestone-container .block-label,.runestone-sphinx .block-label{color:#7e7ee7;font-size:90%;vertical-align:top;white-space:pre}.ptx-runestone-container .right-label,.runestone-sphinx .right-label{padding:.2em 0 .3em .6em}.ptx-runestone-container .left-label,.runestone-sphinx .left-label{padding:.2em .6em .3em 0}.ptx-runestone-container .labels,.runestone-sphinx .labels{display:inline-block;padding-top:2px;vertical-align:top}.ptx-runestone-container .runestone .lines,.runestone-sphinx .runestone .lines{align-self:left;display:inline-block}.ptx-runestone-container .border_left,.runestone-sphinx .border_left{border-left:1px solid #b0b0b0}.ptx-runestone-container .block,.runestone-sphinx .block{align-content:stretch;align-items:stretch;display:flex}.ptx-runestone-container .cd_section,.ptx-runestone-container .parsons,.ptx-runestone-container .parsons .sortable-code-container,.runestone-sphinx .cd_section,.runestone-sphinx .parsons,.runestone-sphinx .parsons .sortable-code-container{max-width:none}.ptx-runestone-container #timed_Test .pagination,.runestone-sphinx #timed_Test .pagination{margin:5px 0}.ptx-runestone-container .parsons .block code,.runestone-sphinx .parsons .block code{color:#000}.ptx-runestone-container .parsons .placeholder-block.disabled.block,.runestone-sphinx .parsons .placeholder-block.disabled.block{background-color:#fff;border-style:dashed;font-style:italic;opacity:1;padding:20px 10px}.ptx-runestone-container .parsons .settled-block.disabled.block,.runestone-sphinx .parsons .settled-block.disabled.block{background-color:#afe1af;border:1px solid #000;opacity:1}.ptx-runestone-container .parsons .settled-block.disabled.block:hover .settled-tooltip,.runestone-sphinx .parsons .settled-block.disabled.block:hover .settled-tooltip{opacity:1;visibility:visible}.ptx-runestone-container .parsons .settled-block.disabled.block .settled-tooltip,.runestone-sphinx .parsons .settled-block.disabled.block .settled-tooltip{background-color:#555;border-radius:6px;color:#fff;font-size:.75rem;left:100%;opacity:0;padding:2px 8px;position:sticky;text-align:center;transition:opacity .6s;vertical-align:middle;visibility:hidden;z-index:1}.ptx-runestone-container .parsons .settled-block .block-label,.runestone-sphinx .parsons .settled-block .block-label{color:transparent}.ptx-runestone-container .parsons .alert,.runestone-sphinx .parsons .alert{margin-bottom:0;margin-top:10px}.ptx-runestone-container .parsons .placeholder-block .lines,.ptx-runestone-container .parsons .placeholder-block.hide,.ptx-runestone-container .placeholder-block .labels,.runestone-sphinx .parsons .placeholder-block .lines,.runestone-sphinx .parsons .placeholder-block.hide,.runestone-sphinx .placeholder-block .labels{display:none}.ptx-runestone-container .settled-block .labels .block-label,.runestone-sphinx .settled-block .labels .block-label{color:transparent}:root.dark-mode .ptx-runestone-container .parsons .block:has(code[class*=language-]){background:#141414}.prettyprint{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun{color:#660}.pln{color:#000}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec{color:#606}pre.prettyprint{border:1px solid #888;padding:2px}@media print{.str{color:#060}.kwd{color:#006;font-weight:700}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:700}.lit{color:#044}.pun{color:#440}.pln{color:#000}.tag{color:#006;font-weight:700}.atn{color:#404}.atv{color:#060}}}.ptx-runestone-container *,.runestone-sphinx *{box-sizing:border-box}.ptx-runestone-container body,.runestone-sphinx body{font-family:sans-serif;margin:0;padding:20px}.ptx-runestone-container h2,.runestone-sphinx h2{margin-bottom:.5em}.ptx-runestone-container [data-component=matching],.runestone-sphinx [data-component=matching]{font-family:sans-serif;margin:2rem 0}.ptx-runestone-container .matching-workspace,.runestone-sphinx .matching-workspace{background:var(--componentBgColor);display:flex;justify-content:space-between;margin:0 auto 1rem;max-width:1000px;position:relative;width:100%}.ptx-runestone-container .left-column,.ptx-runestone-container .right-column,.runestone-sphinx .left-column,.runestone-sphinx .right-column{align-items:center;display:flex;flex-direction:column;gap:12px;justify-content:center;max-width:25vw;padding:10px;position:relative;z-index:1}.ptx-runestone-container .left-column img,.ptx-runestone-container .right-column img,.runestone-sphinx .left-column img,.runestone-sphinx .right-column img{max-width:25vw}.ptx-runestone-container .box,.runestone-sphinx .box{align-items:center;background:var(--dropableBgColor,#f9f9f9);border:2px solid var(--boxBorderColor);border-radius:8px;cursor:grab;display:inline-flex;font-weight:700;justify-content:center;max-width:100%;min-height:50px;min-width:120px;padding:10px 14px;text-align:center;touch-action:none;user-select:none}.ptx-runestone-container .box,.ptx-runestone-container .left-column,.ptx-runestone-container .matching-workspace,.ptx-runestone-container .right-column,.ptx-runestone-container body,.runestone-sphinx .box,.runestone-sphinx .left-column,.runestone-sphinx .matching-workspace,.runestone-sphinx .right-column,.runestone-sphinx body{user-select:none;-webkit-user-select:none}.ptx-runestone-container .box mjx-container,.runestone-sphinx .box mjx-container{font-size:1em}.ptx-runestone-container .box:focus,.runestone-sphinx .box:focus{outline:3px solid #3498db}.ptx-runestone-container .box.selected,.runestone-sphinx .box.selected{outline:3px dashed #27ae60}.ptx-runestone-container .connector-svg,.runestone-sphinx .connector-svg{background:var(--componentBgColor);height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:0}.ptx-runestone-container .line,.runestone-sphinx .line{stroke:var(--dragLineColor);stroke-width:3;cursor:pointer;pointer-events:auto;transition:stroke .2s ease,stroke-width .2s ease}.ptx-runestone-container .line.correct,.runestone-sphinx .line.correct{stroke:green;stroke-width:3}.ptx-runestone-container .line.incorrect,.runestone-sphinx .line.incorrect{stroke:#bf1521;stroke-width:2;stroke-dasharray:5 5}.ptx-runestone-container .line.highlighted,.runestone-sphinx .line.highlighted{stroke:#3cd6e7;stroke-width:3}.ptx-runestone-container .line.faded,.runestone-sphinx .line.faded{stroke:#ccc;stroke-width:1}.ptx-runestone-container .line:focus,.ptx-runestone-container .line:hover,.runestone-sphinx .line:focus,.runestone-sphinx .line:hover{stroke:#3498db;stroke-dasharray:6 4;stroke-width:5;outline:none}.ptx-runestone-container .conn-list,.runestone-sphinx .conn-list{background:var(--componentBgColor);border:1px solid #ccc;border-radius:6px;font-size:14px;margin:0 auto 1rem;max-width:800px;padding:10px}.ptx-runestone-container .conn-entry,.runestone-sphinx .conn-entry{font-family:monospace;margin:4px 0}.ptx-runestone-container button,.runestone-sphinx button{border:none;border-radius:6px;cursor:grab;display:inline-block;font-size:1rem;margin:.5rem;padding:8px 16px;transition:background .2s ease-in-out}.ptx-runestone-container button:hover,.runestone-sphinx button:hover{background:#2980b9}.ptx-runestone-container .aria-live,.runestone-sphinx .aria-live{height:1px;left:-9999px;overflow:hidden;position:absolute;top:auto;width:1px}.ptx-runestone-container .control-div,.runestone-sphinx .control-div{align-items:center;display:flex;gap:10px;justify-content:center;margin-top:1rem}.ptx-runestone-container .control-div .help-button,.runestone-sphinx .control-div .help-button{background:#2c3e50;border-radius:50%;color:#ecf0f1;cursor:pointer;font-size:1.2rem;height:32px;line-height:32px;padding:0;text-align:center;width:32px}.ptx-runestone-container .control-div .help-button:hover,.runestone-sphinx .control-div .help-button:hover{background:#34495e}.ptx-runestone-container .help-modal,.runestone-sphinx .help-modal{align-items:center;background:rgba(0,0,0,.5);display:none;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%;z-index:10}.ptx-runestone-container .help-modal-content,.runestone-sphinx .help-modal-content{background-color:var(--questionBgColor);border-radius:6px;max-height:80%;max-width:80%;overflow:auto;padding:1rem 1.5rem;position:relative}.ptx-runestone-container .help-modal-content .help-close,.runestone-sphinx .help-modal-content .help-close{background:transparent;border:none;color:red;cursor:pointer;font-size:1.5rem;position:absolute;right:.5rem;top:.5rem}.ptx-runestone-container .help-modal-content .help-text,.runestone-sphinx .help-modal-content .help-text{font-size:1rem;line-height:1.4;margin-top:1.5rem}.ptx-runestone-container .match_question,.runestone-sphinx .match_question{background-color:var(--questionBgColor);margin-bottom:10px;padding:10px}.ptx-runestone-container .match_feedback,.runestone-sphinx .match_feedback{background-color:var(--parsonsIncorrectBgColor);border-radius:5px;margin-bottom:10px;margin-top:10px;padding:10px}:root{--draggableBgColor:#efefef;--dropableBgColor:#ddd;--draggableIncorrectBorder:red;--draggableIncorrectBg:#f2dede;--dragLineColor:#000;--boxBorderColor:#000}:root.dark-mode,[data-theme=dark]{--draggableBgColor:#393434;--dropableBgColor:#2a2d30;--draggableIncorrectBorder:red;--draggableIncorrectBg:#6d2d2d;--dragLineColor:#fff;--boxBorderColor:#fff}#component-preview{margin-right:20px;max-height:100%;overflow-y:scroll;padding-top:60px;position:fixed;right:0;top:0}.toggle-preview{background-color:azure;border:4px solid;border-radius:10px;box-shadow:10px 5px 5px gray;padding-top:10px}.ptx-runestone-container ul#pageNums,.ptx-runestone-container ul#pageNums li,.runestone-sphinx ul#pageNums,.runestone-sphinx ul#pageNums li{padding:10px 0;text-align:center}.ptx-runestone-container .pagination>li>a:hover,.runestone-sphinx .pagination>li>a:hover{background-color:#eee!important;color:#000!important}.ptx-runestone-container .flagBtn,.runestone-sphinx .flagBtn{background-color:#ed9c59!important;border:3px solid #ce5718;border-radius:5px;color:#030201!important;cursor:pointer;display:ruby;font-size:15px;height:115;text-align:center;text-decoration:none;width:150}.ptx-runestone-container .pagination>.active>a,.ptx-runestone-container .pagination>.active>span,.runestone-sphinx .pagination>.active>a,.runestone-sphinx .pagination>.active>span{background-color:#428bca!important;color:#fff!important}.ptx-runestone-container .col-md-6-override,.runestone-sphinx .col-md-6-override{max-width:100%!important;text-align:center!important}.ptx-runestone-container .pagination>.answered>a,.ptx-runestone-container .pagination>.answered>span,.runestone-sphinx .pagination>.answered>a,.runestone-sphinx .pagination>.answered>span{background-color:#eee;color:#000}.ptx-runestone-container .pagination>.broken>a,.ptx-runestone-container .pagination>.broken>span,.runestone-sphinx .pagination>.broken>a,.runestone-sphinx .pagination>.broken>span{background-color:#f99;color:#000}.ptx-runestone-container .pagination>.toolate>a,.ptx-runestone-container .pagination>.toolate>span,.runestone-sphinx .pagination>.toolate>a,.runestone-sphinx .pagination>.toolate>span{background-color:#eccb36;color:#000}.ptx-runestone-container .pagination>.flagcolor>a,.ptx-runestone-container .pagination>.flagcolor>span,.runestone-sphinx .pagination>.flagcolor>a,.runestone-sphinx .pagination>.flagcolor>span{background-color:#ed9c59;color:#000}.ptx-runestone-container p.examwarning,.runestone-sphinx p.examwarning{background-color:hsla(0,78%,78%,.822);border:2px solid #000;border-radius:5px;margin-left:auto;margin-right:auto;padding:5px;width:50%}.ptx-runestone-container .pagination>.correctCount>a,.ptx-runestone-container .pagination>.correctCount>span,.runestone-sphinx .pagination>.correctCount>a,.runestone-sphinx .pagination>.correctCount>span{background-color:#dff0d8;border-color:#000;color:#000}.ptx-runestone-container .pagination>.skippedCount>a,.ptx-runestone-container .pagination>.skippedCount>span,.runestone-sphinx .pagination>.skippedCount>a,.runestone-sphinx .pagination>.skippedCount>span{background-color:#fcf8e3;border-color:#000;color:#000}.ptx-runestone-container .pagination>.incorrectCount>a,.ptx-runestone-container .pagination>.incorrectCount>span,.runestone-sphinx .pagination>.incorrectCount>a,.runestone-sphinx .pagination>.incorrectCount>span{background-color:#f2dede;border-color:#000;color:#000}.ptx-runestone-container .switchcontainer,.runestone-sphinx .switchcontainer{height:1000px;overflow:auto} +/*# sourceMappingURL=prefix-115.83df5da0966564d5.css.map*/ \ No newline at end of file diff --git a/_static/prefix-115.83df5da0966564d5.css.gz b/_static/prefix-115.83df5da0966564d5.css.gz new file mode 100644 index 0000000..541a1bb Binary files /dev/null and b/_static/prefix-115.83df5da0966564d5.css.gz differ diff --git a/_static/prefix-115.83df5da0966564d5.css.map b/_static/prefix-115.83df5da0966564d5.css.map new file mode 100644 index 0000000..14b94c1 --- /dev/null +++ b/_static/prefix-115.83df5da0966564d5.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-115.83df5da0966564d5.css","mappings":"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","sources":["webpack://WebComponents/./runestone/fitb/css/fitb.css","webpack://WebComponents/./runestone/mchoice/css/mchoice.css","webpack://WebComponents/./runestone/shortanswer/css/shortanswer.css","webpack://WebComponents/./runestone/clickableArea/css/clickable.css","webpack://WebComponents/./runestone/dragndrop/css/dragndrop.less","webpack://WebComponents/./runestone/dragndrop/css/dragndrop.css","webpack://WebComponents/./runestone/parsons/css/parsons.less","webpack://WebComponents/./runestone/parsons/css/parsons.css","webpack://WebComponents/./runestone/parsons/css/prettify.css","webpack://WebComponents/./runestone/matching/css/matching.less","webpack://WebComponents/./runestone/matching/css/matching.css","webpack://WebComponents/./runestone/common/css/variables.less","webpack://WebComponents/./runestone/selectquestion/css/selectquestion.css","webpack://WebComponents/./runestone/timed/css/timed.less","webpack://WebComponents/./runestone/timed/css/timed.css"],"sourcesContent":[".selectwidthauto {\n width:auto !important;\n display: inline-block !important;\n margin: 5px;\n}\n\ninput.input-validation-error {\n border: 1px solid #e80c4d;\n}\n\n\n.dark-mode .fillintheblank_section input[type=\"text\"] {\n color: unset;\n background-color: #333;\n}\n\n.ptx-runestone-container .fitb-feedback {\n margin-top: 10px;\n margin-bottom: 0;\n}\n\n.ptx-runestone-container .fitb-feedback:empty {\n margin-top: 0;\n}",".mchoice label p {\n display: inline;\n font-weight: normal !important;\n}\n\n.mchoice label pre {\n font-weight: normal;\n}\n\n.mchoice fieldset {\n margin-bottom: 0.5em;\n}\n\n.mchoice fieldset legend {\n font-size: small;\n margin-bottom: 0.5em;\n}\n\n.multiplechoice_section label > .para {\n display: inline;\n}\n\n/* The timed assessment strips off the container with the .multiplechoice_section class,\n so we need to apply the same styles to the .timedAssessment class */\n.timedAssessment .mchoice label > .para {\n display: inline;\n}\n\nlabel.mchoice-option {\n display: block;\n}\n\n.ptx-runestone-container input.mchoice-input {\n vertical-align: top;\n margin-right: 0.5em;\n}\n\n.mchoice .alert {\n margin-top: 10px;\n margin-bottom: 0;\n}","div.journal div.latexoutput {\n background-color: var(--outerBackground, #eeeeee);\n padding: 1em;\n margin-bottom: 10px;\n border-radius: 5px;\n}\n\n\n.shortanswer_section .alert {\n margin-bottom: 0;\n}\n\n.shortanswer__timestamp {\n font-size: 0.9em;\n color: var(--grayToWhite, #333);\n}\n\n.journal textarea {\n width: 100%;\n max-width: 100%;\n min-height: 6rem;\n\n padding: 0.75rem 0.9rem;\n font-size: 1rem;\n line-height: 1.5;\n\n border-radius: 8px;\n border: 1px solid #d0d7de;\n background-color: #fff;\n\n transition:\n border-color 0.15s ease,\n box-shadow 0.15s ease;\n\n resize: none;\n overflow: hidden;\n\n font-family: system-ui, -apple-system, BlinkMacSystemFont,\n \"Segoe UI\", Roboto, sans-serif;\n background:\n linear-gradient(#fff, #fff) padding-box,\n linear-gradient(to right, #eaeef2, #eaeef2) border-box;\n}\n\n.journal textarea:focus {\n outline: none;\n border-color: #0969da;\n box-shadow: 0 0 0 3px rgba(9, 105, 218, 0.15);\n}",".clickable {\n cursor: pointer;\n}\n\n.clickable:has(code) {\n padding: 3px;\n display: inline-block;\n}\n\n.clickable-clicked:has(code) {\n box-shadow: 0px 0px 2px 2px rgba(0,100,0,0.75);\n}\n\n.clickable-clicked {\n background-color: var(--clickableBgColor);\n}\n\n.clickable-clicked td {\n background-color: #dad6c1;\n box-shadow: initial;\n}\n\ntable {\n border-collapse: collapse;\n}\n\nth.clickable, td.clickable {\n border: 1px solid black;\n}\n\ntd.clickable-clicked{\n background-color: #dad6c1;\n box-shadow: initial;\n}\n\ntd img {\n margin: 5px;\n}\n\n.clickable-clicked th {\n background-color: #dad6c1;\n box-shadow: initial;\n}\n\nth.clickable-clicked{\n background-color: #dad6c1;\n box-shadow: initial;\n}\n\n.clickable-incorrect,\n.clickable-incorrect th,\n.clickable-incorrect td {\n border: 1px solid red !important;\n background-color: var(--clickableIncorrectBgColor);\n}\n\nimg.clickable-incorrect {\n box-shadow: 0px 0px 2px 2px rgba(100,0,0,0.75);\n}\n\n.clickable-incorrect:has(code) {\n box-shadow: 0px 0px 2px 2px rgba(251, 0, 0, 0.75);\n}\n\n:root {\n --clickableBgColor: yellow;\n --clickableIncorrectBgColor: #ffcccc;\n}\n\n:root.dark-mode {\n --clickableBgColor: rgb(60, 86, 36);\n --clickableIncorrectBgColor: #562c2c;\n\n .clickable-clicked:has(code):not(.clickable-incorrect) {\n box-shadow: 0px 0px 2px 2px rgba(251, 255, 21, 0.75);\n }\n}\n",".ptx-runestone-container,.runestone-sphinx {\n @import (less) url(\"./dragndrop.css\");\n}\n\n@import (less) url(\"../../common/css/variables.less\");",".rsdraggable {\n margin-left: 1%;\n margin-right: 1%;\n margin-top: 5px;\n display: inline;\n float: left;\n text-align: left;\n vertical-align: top;\n background-color: var(--questionBgColor, #efefff);\n padding-bottom: 10px;\n min-width: 28%;\n border: 1px solid var(--componentBorderColor, #efefff);\n box-sizing: border-box;\n}\n\n.dnd-button-container {\n display: flex;\n justify-content: center;\n width: 100%;\n margin-top: 1em;\n}\n\n.drag-button {\n display: inline-block;\n}\n\n.drag-reset {\n background-color: #474949;\n color: white;\n}\n\n.drag-reset:hover {\n background-color: black;\n color: white;\n}\n\n.drop-incorrect {\n border: 1px solid var(--draggableIncorrectBorder, red) !important;\n background-color: var(--draggableIncorrectBg, #f2dede) !important;\n}\n\n.drag-reset:enabled {\n background-color: #474949;\n color: white;\n}\n\n.draggable-drag {\n border-radius: 10px;\n display: block;\n background-color: var(--draggableBgColor);\n border: 1px solid lightgray;\n padding: 10px;\n margin-top: 5px;\n cursor: grab;\n}\n\n.draggable-feedback {\n text-align: left !important;\n clear: both;\n margin-bottom: 0;\n margin-top: 10px;\n}\n\n.draggable-drop {\n border-radius: 10px;\n display: block;\n background-color: var(--dropableBgColor);\n border: 1px solid lightgray;\n padding: 10px;\n margin-top: 5px;\n cursor: grab;\n}\n\n.draggable-container {\n text-align: center;\n}\n\n.possibleDrop {\n border-color: #000000;\n background-color: #CCCCCC;\n}\n\n/*\n * This is a hack to allow us to drop on the drop target when\n * the drop area contains mathjax or or other child elements.\n*/\n.draggable-drop .process-math,\n.draggable-drop .MathJax {\n pointer-events: none;\n cursor: not-allowed;\n}\n\n/* Hide the error message from people but let screen readers see it */\n.vh-dnd-error {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.cardsort-statement {\n text-align: left;\n background-color: var(--questionBgColor);\n padding: 10px;\n margin-bottom: 10px;\n}",".ptx-runestone-container,.runestone-sphinx {\n @import (less) url(\"./parsons.css\");\n\n}\n\n/* make entire block background match background of code */\n:root.dark-mode {\n .ptx-runestone-container .parsons .block:has(code[class*=language-]) {\n background: hsl(0, 0%, 8%);\n }\n}",".parsons-container {\n clear: both;\n}\n\n.parsons .sortable-code-container {\n text-align: center;\n}\n.parsons .sortable-code-container:not(.block) {\n /* Remove text highlighting in widget */\n -webkit-user-select: none;\n -moz-user-select: -moz-none;\n -ms-user-select: none;\n user-select: none;\n}\n.parsons .sortable-code {\n position: static;\n padding-left: 0px;\n margin: 0px 15px;\n display: inline-block;\n text-align: left;\n vertical-align: top;\n}\n.parsons .source,\n.parsons .answer,\n.parsons .answer1,\n.parsons .answer2,\n.parsons .answer3,\n.parsons .answer4 {\n position: relative;\n font-size: 100%;\n list-style: none;\n background-color: var(--questionBgColor, #efefff);\n padding-bottom: 10px;\n padding-left: 0;\n margin-left: 0;\n border: 1px solid var(--componentBorderColor, #efefff);\n}\n.parsons .source {\n background-color: var(--questionBgColor, #efefff);\n}\n.parsons .answer {\n background-color: var(--parsonsBgColor);\n border-color: var(--parsonsBorderColor);\n}\n.parsons .answer.incorrect {\n background-color: var(--parsonsIncorrectBgColor);\n border-color: var(--parsonsIncorrectBorderColor);\n}\n.parsons .answer.correct {\n background-color: var(--parsonsCorrectBgColor);\n border-color: var(--parsonsCorrectBorderColor);\n}\n.parsons .answer1 {\n background: linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box;\n background-size: 1px 100%;\n background-position: 30px 0;\n background-origin: padding-box;\n background-color: var(--parsonsBgColor);\n border-color: var(--parsonsBorderColor);\n}\n.parsons .answer1.incorrect {\n background: linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%;\n background-position: 30px 0;\n background-origin: padding-box;\n background-color: var(--parsonsIncorrectBgColor);\n border-color: var(--parsonsIncorrectBorderColor);\n}\n.parsons .answer1.correct {\n background: linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%;\n background-position: 30px 0;\n background-origin: padding-box;\n background-color: var(--parsonsCorrectBgColor);\n border-color: var(--parsonsCorrectBorderColor);\n}\n.parsons .answer2 {\n background: linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0;\n background-origin: padding-box, padding-box;\n background-color: var(--parsonsBgColor);\n border-color: var(--parsonsBorderColor);\n}\n.parsons .answer2.incorrect {\n background: linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0;\n background-origin: padding-box, padding-box;\n background-color: var(--parsonsIncorrectBgColor);\n border-color: var(--parsonsIncorrectBorderColor);\n}\n.parsons .answer2.correct {\n background: linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0;\n background-origin: padding-box, padding-box;\n background-color: var(--parsonsCorrectBgColor);\n border-color: var(--parsonsCorrectBorderColor);\n}\n.parsons .answer3 {\n background: linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0;\n background-origin: padding-box, padding-box, padding-box;\n background-color: var(--parsonsBgColor);\n border-color: var(--parsonsBorderColor);\n}\n.parsons .answer3.incorrect {\n background: linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0;\n background-origin: padding-box, padding-box, padding-box;\n background-color: var(--parsonsIncorrectBgColor);\n border-color: var(--parsonsIncorrectBorderColor);\n}\n.parsons .answer3.correct {\n background: linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0;\n background-origin: padding-box, padding-box, padding-box;\n background-color: var(--parsonsCorrectBgColor);\n border-color: var(--parsonsCorrectBorderColor);\n}\n.parsons .answer4 {\n background: linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsBgColor);\n border-color: var(--parsonsBorderColor);\n}\n.parsons .answer4.incorrect {\n background: linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsIncorrectBgColor);\n border-color: var(--parsonsIncorrectBorderColor);\n}\n.parsons .answer4.correct {\n background: linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsCorrectBgColor);\n border-color: var(--parsonsCorrectBorderColor);\n}\n /* The following styles are for the 5th and 6th indentation levels, if applicable */\n.parsons .answer5 {\n background: linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0, 150px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsBgColor);\n border-color: var(--parsonsBorderColor);\n}\n.parsons .answer5.incorrect {\n background: linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0, 150px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsIncorrectBgColor);\n border-color: var(--parsonsIncorrectBorderColor);\n}\n.parsons .answer5.correct {\n background: linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0, 150px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsCorrectBgColor);\n border-color: var(--parsonsCorrectBorderColor);\n}\n.parsons .answer6 {\n background: linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0, 150px 0, 180px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsBgColor);\n border-color: var(--parsonsBorderColor);\n}\n.parsons .answer6.incorrect {\n background: linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0, 150px 0, 180px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsIncorrectBgColor);\n border-color: var(--parsonsIncorrectBorderColor);\n}\n.parsons .answer6.correct {\n background: linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0, 150px 0, 180px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsCorrectBgColor);\n border-color: var(--parsonsCorrectBorderColor);\n}\n.parsons .block {\n position: absolute;\n -moz-border-radius: 10px;\n -webkit-border-radius: 10px;\n border-radius: 10px;\n background-color: var(--background, #efefef);\n border: 1px solid #d3d3d3;\n padding: 5px 10px;\n margin-top: 5px;\n overflow: hidden;\n cursor: move;\n}\n.parsons .block.disabled {\n opacity: 0.3;\n}\n.parsons .block.down {\n border: 2px solid black;\n padding: 4px 9px;\n}\n.parsons .block.up {\n border: 2px solid black;\n padding: 4px 9px;\n background-color: white;\n box-shadow: 3px 3px 4px black;\n}\n.parsons {\n display: block;\n}\n.parsons .block {\n clear: both;\n float: left;\n /*background-color: transparent;*/\n}\n\n.parsons .sortable-code code {\n clear: both;\n float: left;\n background-color: transparent;\n white-space: pre;\n}\n\n.parsons .sortable-code code:empty {\n height: 1.25em; /* force some height for empty lines */\n}\n\n.parsons .block p {\n margin: 0;\n}\n.parsons .block,\n.parsons .block:before,\n.parsons .block:after {\n box-sizing: content-box;\n}\n.parsons .indent1 {\n margin-left: 30px;\n}\n.parsons .indent2 {\n margin-left: 60px;\n}\n.parsons .indent3 {\n margin-left: 90px;\n}\n.parsons .indent4 {\n margin-left: 120px;\n}\n.parsons .indent5 {\n margin-left: 150px;\n}\n.parsons .indent6 {\n margin-left: 180px;\n}\n.parsons .indent7 {\n margin-left: 210px;\n}\n.parsons .indent8 {\n margin-left: 240px;\n}\n.parsons .correct {\n border: 1px solid #d6e9c6;\n background: none;\n background-color: var(--parsonsCorrectBgColor);\n}\n.parsons .indentLeft,\n.parsons .indentRight {\n border: 2px solid #ffcc00;\n padding: 4px 9px;\n background-color: #fff0b3;\n}\n.parsons .indentLeft {\n background-image: url(\"./images/parsons-ll.svg\"),\n url(\"./images/parsons-rl.svg\");\n background-repeat: no-repeat, no-repeat;\n background-position: left center, right center;\n}\n.parsons .indentRight {\n background-image: url(\"./images/parsons-lr.svg\"),\n url(\"./images/parsons-rr.svg\");\n background-repeat: no-repeat, no-repeat;\n background-position: left center, right center;\n}\n.parsons .incorrectPosition {\n background-color: #ffbaba;\n border: 1px solid red;\n}\n.parsons .paired {\n position: absolute;\n -moz-border-radius: 10px;\n -webkit-border-radius: 10px;\n border-radius: 10px;\n background-color: transparent;\n border-left: 11px solid #b8b8f2;\n border-right: 11px solid #b8b8f2;\n border-top: 1px solid #b8b8f2;\n border-bottom: 1px solid #b8b8f2;\n margin-top: 5px;\n overflow: hidden;\n}\n.parsons {\n border-left: 0;\n border-right: 0;\n border-radius: 0;\n}\n.parsons .parsons-text {\n max-width: var(--contentWidthRegular);\n margin-left: auto;\n margin-right: auto;\n}\n\n.parsons .parsons-img {\n display: inline-block;\n text-align: center;\n width: 100%;\n}\n\n.parsons .parsons-controls {\n max-width: var(--contentWidthRegular);\n margin-left: auto;\n margin-right: auto;\n text-align: center;\n margin-top: 10px;\n}\n\n.parsons [role=\"tooltip\"] {\n max-width: var(--contentWidthRegular);\n margin-left: auto;\n margin-right: auto;\n margin-top: 5px;\n margin-bottom: 5px;\n padding: 0px 10px;\n top: 0;\n text-align: center;\n font-style: italic;\n}\n\n.block-label {\n font-size: 90%;\n color: #7e7ee7;\n vertical-align: top;\n white-space: pre;\n}\n.right-label {\n padding: 0.2em 0em 0.3em 0.6em;\n}\n.left-label {\n padding: 0.2em 0.6em 0.3em 0em;\n}\n\n.labels {\n padding-top: 2px;\n display: inline-block;\n vertical-align: top;\n}\n\n.runestone .lines {\n display: inline-block;\n align-self: left;\n}\n\n.border_left {\n border-left: 1px solid #b0b0b0;\n}\n\n.block {\n display: flex;\n align-items: stretch;\n align-content: stretch;\n}\n\n.parsons,\n.parsons .sortable-code-container,\n.cd_section {\n max-width: none;\n}\n\n#timed_Test .pagination {\n margin: 5px 0;\n}\n\n/* override red from bootstrap */\n.parsons .block code {\n color: black;\n}\n\n/* CodeTailor-related CSS for Parsons START */\n.parsons .placeholder-block.disabled.block {\n font-style: italic;\n background-color: white;\n border-style: dashed;\n padding: 20px 10px;\n opacity: 1;\n}\n\n.parsons .settled-block.disabled.block {\n border: 1px solid black;\n background-color: #afe1af;\n opacity: 1;\n}\n\n.parsons .settled-block.disabled.block:hover .settled-tooltip {\n visibility: visible;\n opacity: 1;\n}\n\n.parsons .settled-block.disabled.block .settled-tooltip {\n visibility: hidden;\n position: sticky;\n background-color: #555;\n font-size: 0.75rem;\n color: #fff;\n text-align: center;\n padding: 2px 8px;\n border-radius: 6px;\n z-index: 1;\n opacity: 0;\n transition: opacity .6s;\n left: 100%; \n vertical-align: middle; \n}\n.parsons .settled-block .block-label {\n color: transparent;\n}\n\n.parsons .alert {\n margin-top: 10px;\n margin-bottom: 0;\n}\n\n\n.parsons .placeholder-block .lines {\n display: none;\n}\n\n.parsons .placeholder-block.hide {\n display: none;\n}\n\n\n.placeholder-block .labels {\n display: none;\n}\n\n.settled-block .labels .block-label {\n color:transparent;\n}\n/* CodeTailor-related CSS for Parsons END */",".prettyprint {\n .str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun{color:#660}.pln{color:#000}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec{color:#606}pre.prettyprint{padding:2px;border:1px solid #888}@media print{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun{color:#440}.pln{color:#000}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}\n}",".ptx-runestone-container,\n.runestone-sphinx {\n @import (less) url(\"./matching.css\");\n}\n\n@import (less) url(\"../../common/css/variables.less\");","* {\n box-sizing: border-box;\n}\n\nbody {\n font-family: sans-serif;\n padding: 20px;\n margin: 0;\n}\n\nh2 {\n margin-bottom: 0.5em;\n}\n\n/* Main wrapper for each matching component */\n[data-component=\"matching\"] {\n margin: 2rem 0;\n font-family: sans-serif;\n}\n\n.matching-workspace {\n display: flex;\n justify-content: space-between;\n position: relative;\n max-width: 1000px;\n width: 100%;\n margin: 0 auto 1rem;\n background: var(--componentBgColor);\n}\n\n.left-column,\n.right-column {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 12px;\n padding: 10px;\n position: relative;\n z-index: 1;\n max-width: 25vw;\n}\n\n\n.left-column img,\n.right-column img {\n max-width: 25vw;\n /* Ensure images do not exceed 25% of the viewport width */\n}\n\n.box {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 120px;\n padding: 10px 14px;\n min-height: 50px;\n max-width: 100%;\n background: var(--dropableBgColor, #f9f9f9);\n border: 2px solid var(--boxBorderColor);\n border-radius: 8px;\n text-align: center;\n font-weight: bold;\n user-select: none;\n cursor: grab;\n text-align: center;\n touch-action: none;\n /* Prevents scrolling during tap+drag */\n}\n\n.matching-workspace,\n.left-column,\n.right-column,\n.box,\nbody {\n user-select: none;\n -webkit-user-select: none; /* for iOS/Safari */\n}\n\n.box mjx-container {\n font-size: 1em;\n}\n\n.box:focus {\n outline: 3px solid #3498db;\n}\n\n.box.selected {\n outline: 3px dashed #27ae60;\n}\n\n.connector-svg {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 0;\n background: var(--componentBgColor);\n}\n\n.line {\n stroke: var(--dragLineColor);\n ;\n stroke-width: 3;\n cursor: pointer;\n pointer-events: auto;\n transition: stroke 0.2s ease, stroke-width 0.2s ease;\n}\n\n.line.correct {\n stroke: green;\n stroke-width: 3;\n}\n\n.line.incorrect {\n stroke: #bf1521;\n stroke-width: 2;\n stroke-dasharray: 5 5;\n}\n\n.line.highlighted {\n stroke: #3cd6e7;\n stroke-width: 3;\n}\n\n.line.faded {\n stroke: #ccc;\n stroke-width: 1;\n}\n\n.line:focus,\n.line:hover {\n stroke: #3498db;\n stroke-dasharray: 6 4;\n /* 6px dash, 4px gap */\n stroke-width: 5;\n outline: none;\n}\n\n.conn-list {\n max-width: 800px;\n margin: 0 auto 1rem;\n padding: 10px;\n background: var(--componentBgColor);\n border: 1px solid #ccc;\n border-radius: 6px;\n font-size: 14px;\n}\n\n.conn-entry {\n margin: 4px 0;\n font-family: monospace;\n}\n\nbutton {\n display: inline-block;\n margin: 0.5rem;\n font-size: 1rem;\n padding: 8px 16px;\n border: none;\n border-radius: 6px;\n cursor: grab;\n transition: background 0.2s ease-in-out;\n}\n\nbutton:hover {\n background: #2980b9;\n}\n\n.aria-live {\n position: absolute;\n left: -9999px;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n}\n\n.control-div {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 10px;\n margin-top: 1rem;\n}\n\n.control-div .help-button {\n background: #2c3e50;\n color: #ecf0f1;\n width: 32px;\n height: 32px;\n padding: 0;\n border-radius: 50%;\n font-size: 1.2rem;\n line-height: 32px;\n text-align: center;\n cursor: pointer;\n}\n\n.control-div .help-button:hover {\n background: #34495e;\n}\n\n/* modal overlay */\n.help-modal {\n display: none;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n align-items: center;\n justify-content: center;\n z-index: 10;\n}\n\n/* modal content box */\n.help-modal-content {\n\n background-color: var(--questionBgColor);\n padding: 1rem 1.5rem;\n border-radius: 6px;\n max-width: 80%;\n max-height: 80%;\n overflow: auto;\n position: relative;\n}\n\n/* close button */\n.help-modal-content .help-close {\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n background: transparent;\n border: none;\n font-size: 1.5rem;\n cursor: pointer;\n color: red;\n}\n\n/* help text */\n.help-modal-content .help-text {\n margin-top: 1.5rem;\n font-size: 1rem;\n line-height: 1.4;\n}\n\n.match_question {\n background-color: var(--questionBgColor);\n padding: 10px;\n margin-bottom: 10px;\n}\n\n.match_feedback {\n background-color: var(--parsonsIncorrectBgColor);\n padding: 10px;\n margin-top: 10px;\n margin-bottom: 10px;\n border-radius: 5px;\n}",":root {\n --draggableBgColor: #EFEFEF;\n --dropableBgColor: #DDDDDD;\n --draggableIncorrectBorder: red;\n --draggableIncorrectBg: #f2dede;\n --dragLineColor: #000000;\n --boxBorderColor: #000000;\n\n}\n\n:root.dark-mode,\n[data-theme=\"dark\"] {\n --draggableBgColor: #393434;\n --dropableBgColor: #2a2d30;\n --draggableIncorrectBorder: red;\n --draggableIncorrectBg: #6d2d2d;\n --dragLineColor: #ffffff;\n --boxBorderColor: #ffffff;\n\n}\n","#component-preview {\n margin-right: 20px;\n position: fixed;\n right: 0px;\n max-height: 100%;\n overflow-y: scroll;\n top: 0px;\n padding-top: 60px;\n}\n\n.toggle-preview {\n border: 4px solid;\n border-radius: 10px;\n background-color: azure;\n padding-top: 10px;\n box-shadow: 10px 5px 5px gray;\n}\n",".ptx-runestone-container,.runestone-sphinx {\n @import (less) url(\"./timed.css\");\n}\n","/* TIMED ASSESSMENT BUTTON STYLES */\nul#pageNums,\nul#pageNums li {\n text-align: center;\n padding: 10px 0;\n}\n\n.pagination>li>a:hover {\n background-color: #eee !important;\n color: #000 !important;\n}\n\n.flagBtn {\n /* documentation */\n background-color: #ED9C59 !important;\n border: 3px solid #CE5718;\n border-radius: 5px;\n color: #030201 !important;\n cursor: pointer;\n width: 150;\n height: 115;\n text-align: center;\n text-decoration: none;\n display: ruby;\n font-size: 15px;\n}\n\n/* The following override styles in Bootstrap distribution file (bootstrap.min.css) */\n\n.pagination>.active>a,\n.pagination>.active>span {\n background-color: #428bca !important;\n color: #ffffff !important;\n}\n\n.col-md-6-override {\n text-align: center !important;\n max-width: 100% !important;\n}\n\n/* end */\n\n.pagination>.answered>a,\n.pagination>.answered>span {\n background-color: #eee;\n color: #000;\n}\n\n.pagination>.broken>a,\n.pagination>.broken>span {\n background-color: #f99;\n color: #000;\n}\n\n.pagination>.toolate>a,\n.pagination>.toolate>span {\n background-color: rgb(236, 203, 54);\n color: #000;\n}\n\n.pagination>.flagcolor>a,\n.pagination>.flagcolor>span {\n background-color: #ED9C59;\n color: #000;\n}\n\np.examwarning {\n width: 50%;\n margin-left: auto;\n margin-right: auto;\n background-color: rgba(243, 156, 156, 0.822);\n border: solid black;\n border-radius: 5px;\n border-width: 2px;\n padding: 5px;\n}\n\n.pagination>.correctCount>a,\n.pagination>.correctCount>span {\n background-color: #dff0d8;\n color: #000000;\n border-color: #000000;\n}\n\n.pagination>.skippedCount>a,\n.pagination>.skippedCount>span {\n background-color: #fcf8e3;\n color: #000000;\n border-color: #000000;\n}\n\n.pagination>.incorrectCount>a,\n.pagination>.incorrectCount>span {\n background-color: #f2dede;\n color: #000000;\n border-color: #000000;\n}\n\n.switchcontainer {\n height: 1000px;\n overflow: auto;\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-115.83df5da0966564d5.css.map.gz b/_static/prefix-115.83df5da0966564d5.css.map.gz new file mode 100644 index 0000000..79b5afd Binary files /dev/null and b/_static/prefix-115.83df5da0966564d5.css.map.gz differ diff --git a/_static/prefix-131.b184379d0dc5871b.css b/_static/prefix-131.b184379d0dc5871b.css new file mode 100644 index 0000000..22e40cb --- /dev/null +++ b/_static/prefix-131.b184379d0dc5871b.css @@ -0,0 +1,2 @@ +:root{--button-color:#298ba8;--active-color:#007aff}.jdragging{filter:alpha(opacity=20);opacity:.2}.jupload{background-color:hsla(0,0%,90%,.1);background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7emlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTctMTItMzFUMjI6NDM6MzBaPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTgtMDEtMDFUMjA6MDM6MjNaPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wMS0wMVQyMDowMzoyM1o8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6ZDE3NGVkY2UtNWZkNC0wODRkLTkzNzAtZDRhODVmMzdkNjdiPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjBmYzcxZDEyLTg1MGUtY2E0NS05MzE4LWRhYjI5YWZhMmQ4MjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjBmYzcxZDEyLTg1MGUtY2E0NS05MzE4LWRhYjI5YWZhMmQ4MjwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDowZmM3MWQxMi04NTBlLWNhNDUtOTMxOC1kYWIyOWFmYTJkODI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTctMTItMzFUMjI6NDM6MzBaPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk2MTA5Y2Y0LTEwM2ItNTc0Ny1hZWE3LWI5NDMxOWY0NWFkZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wMS0wMVQyMDowMjoyMFo8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6ZDE3NGVkY2UtNWZkNC0wODRkLTkzNzAtZDRhODVmMzdkNjdiPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTAxLTAxVDIwOjAzOjIzWjwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj44MDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj44MDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+tc8AsgAAACBjSFJN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);background-position:50%;background-repeat:no-repeat;background-size:100px;border:1px dotted #eee;box-sizing:border-box;cursor:pointer;min-height:180px;width:100%}.jremove{filter:alpha(opacity=20);opacity:.2}.fade-in{animation:fade-in 2s forwards}.fade-out{animation:fade-out 1s forwards}.slide-left-in{animation:slide-left-in .4s forwards}.slide-left-out{animation:slide-left-out .4s forwards}.slide-right-in{animation:slide-right-in .4s forwards}.slide-right-out{animation:slide-right-out .4s forwards}.slide-top-in{animation:slide-top-in .4s forwards}.slide-top-out{animation:slide-top-out .2s forwards}.slide-bottom-in{animation:slide-bottom-in .4s forwards}.slide-bottom-out{animation:slide-bottom-out .1s forwards}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-out{0%{opacity:1}to{opacity:0}}@-webkit-keyframes fade-out{0%{opacity:1}to{opacity:0}}@keyframes slide-left-in{0%{transform:translateX(-100%)}to{transform:translateX(0)}}@-webkit-keyframes slide-left-in{0%{transform:translateX(-100%)}to{-webkit-transform:translateX(0)}}@keyframes slide-left-out{0%{transform:translateX(0)}to{transform:translateX(-100%)}}@-webkit-keyframes slide-left-out{0%{-webkit-transform:translateX(0)}to{-webkit-transform:translateX(-100%)}}@keyframes slide-right-in{0%{transform:translateX(100%)}to{transform:translateX(0)}}@-webkit-keyframes slide-right-in{0%{transform:translateX(100%)}to{-webkit-transform:translateX(0)}}@keyframes slide-right-out{0%{transform:translateX(0)}to{transform:translateX(100%)}}@-webkit-keyframes slide-right-out{0%{-webkit-transform:translateX(0)}to{-webkit-transform:translateX(100%)}}@keyframes slide-top-in{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@-webkit-keyframes slide-top-in{0%{transform:translateY(-100%)}to{-webkit-transform:translateY(0)}}@keyframes slide-top-out{0%{transform:translateY(0)}to{transform:translateY(-100%)}}@-webkit-keyframes slide-top-out{0%{-webkit-transform:translateY(0)}to{-webkit-transform:translateY(-100%)}}@keyframes slide-bottom-in{0%{transform:translateY(100%)}to{transform:translateY(0)}}@-webkit-keyframes slide-bottom-in{0%{transform:translateY(100%)}to{-webkit-transform:translateY(0)}}@keyframes slide-bottom-out{0%{transform:translateY(0)}to{transform:translateY(100%)}}@-webkit-keyframes slide-bottom-out{0%{-webkit-transform:translateY(0)}to{-webkit-transform:translateY(100%)}}@supports (-webkit-overflow-scrolling:touch){.app .options input:checked:before{top:-12px}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jbutton{-webkit-font-smoothing:antialiased;border:1px solid #ddd;border-radius:4px;cursor:pointer;display:inline-flex;line-height:24px;padding:4px 20px 4px 10px}.jbutton.blue{background-color:#1a73e8;border:1px solid transparent;color:#fff}.jbutton:before{color:#999;content:attr(data-icon);font-family:Material icons;font-size:24px;height:24px;line-height:24px;margin-right:2px;width:24px}.jbutton.blue:before{color:#fff}.jbutton:hover{background-color:#eee}.jbutton.blue:hover{background-color:#1a73e8;opacity:.8}.jcalendar{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-tap-highlight-color:transparent;box-sizing:border-box;display:none;min-width:280px;position:relative;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:9000}.jcalendar-focus{display:block}.jcalendar-backdrop{background-color:rgba(0,0,0,.5);border:0;display:none;left:0;min-height:100%;min-width:100%;padding:0;position:fixed;top:0;z-index:9000}.jcalendar-container{box-sizing:border-box;position:relative}.jcalendar-content{background-color:#fff;-webkit-box-shadow:1px 1px 5px 0 rgba(0,0,0,.39);-moz-box-shadow:1px 1px 5px 0 rgba(0,0,0,.39);box-shadow:1px 1px 5px 0 rgba(0,0,0,.39);position:absolute;z-index:9001}.jcalendar-table>table{background-color:#fff;width:100%}.jcalendar-table>table>tbody td{box-sizing:border-box;cursor:pointer;font-size:.9em;padding:9px}.jcalendar-table>table>thead{cursor:pointer}.jcalendar-header{text-align:center}.jcalendar-header span{font-size:1.1em;font-weight:700;margin-right:4px}.jcalendar-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M15.41 16.59 10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z'/%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3C/svg%3E")}.jcalendar-next,.jcalendar-prev{background-position:50%;background-repeat:no-repeat;cursor:pointer}.jcalendar-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M8.59 16.59 13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z'/%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3C/svg%3E")}.jcalendar-weekday{background-color:#fcfcfc;font-weight:600;padding:14px}.jcalendar thead td{height:40px;padding:10px}.jcalendar tfoot td{padding:10px}.jcalendar-months td,.jcalendar-years td{height:24px}.jcalendar-input{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='gray'%3E%3Cpath d='M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E");background-position:top 50% right 5px;background-repeat:no-repeat;box-sizing:border-box;padding-right:18px}.jcalendar-done{background-color:#fff;-webkit-box-shadow:1px 1px 5px 0 rgba(0,0,0,.39);-moz-box-shadow:1px 1px 5px 0 rgba(0,0,0,.39);box-shadow:1px 1px 5px 0 rgba(0,0,0,.39)}.jcalendar-update{background-color:#fff;border:1px solid #ccc;border-radius:4px;padding:5px;width:100%}.jcalendar select{border:0;display:inline-block;font-size:1.1em;margin-right:10px;padding:4px;text-align:center;user-select:none;width:55px}.jcalendar select:first-child{margin-right:2px}.jcalendar-selected{background-color:#eee}.jcalendar-confirm,.jcalendar-reset{color:var(--active-color);cursor:pointer;text-transform:uppercase}.jcalendar-controls{align-items:center;border-bottom:1px solid #ddd;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;justify-content:space-between;padding:15px;vertical-align:middle}.jcalendar-controls div{font-weight:700}.jcalendar-fullsize{left:0;position:fixed;top:0;width:100%}.jcalendar-fullsize .jcalendar-content{bottom:0;left:0;position:fixed;width:100%}.jcalendar-focus.jcalendar-fullsize .jcalendar-backdrop{display:block}.jcalendar-sunday{color:red}.jcalendar-disabled{color:#ccc}.jcolor{display:none;outline:none;position:absolute}.jcolor-content{-webkit-font-smoothing:antialiased;background-color:#fff;-webkit-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2);box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2);box-sizing:border-box;font-size:.875rem;left:0;letter-spacing:.2px;position:absolute;user-select:none;z-index:9000}.jcolor-content table{box-sizing:border-box;padding:7px}.jcolor-focus{display:block}.jcolor table{height:100%;width:100%}.jcolor td{border:2px solid #fff}.jcolor-selected{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z' fill='%23fff'/%3E%3C/svg%3E");background-position:0 0;background-repeat:no-repeat;background-size:cover;border:2px solid #000!important}.jcolor-fullscreen{border-radius:0;bottom:0;box-sizing:border-box;max-height:250px;position:fixed;width:100%}.jcolor-close{-webkit-box-shadow:1px 0 1px 0 rgba(0,0,0,.39);-moz-box-shadow:1px 0 1px 0 rgba(0,0,0,.39);box-shadow:1px 0 1px 0 rgba(0,0,0,.39);box-sizing:border-box;color:var(--active-color);display:none;font-size:1em;font-weight:700;padding:15px;text-align:right;text-transform:uppercase;width:100%}.jcolor-fullscreen .jcolor-close{display:block}.jcolor-backdrop{-webkit-touch-callout:none;background-color:rgba(0,0,0,.5);border:0;display:none;left:0;min-height:100%;min-width:100%;padding:0;position:fixed;top:0;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:8000}.jcontextmenu{background:#fff;border:1px solid #c6c6c6;-webkit-box-shadow:2px 2px 2px 0 #8f9091;-moz-box-shadow:2px 2px 2px 0 #8f9091;box-shadow:2px 2px 2px 0 #8f9091;color:#555;display:none;font-size:11px;margin:0;outline:none;padding:4px 0;position:fixed;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:10000}.jcontextmenu.jcontextmenu-focus{display:inline-block}.jcontextmenu>div{box-sizing:border-box;cursor:default;display:block;font-family:sans-serif;font-size:11px;padding:8px 8px 8px 28px;position:relative;width:250px}.jcontextmenu>div a{color:#555;text-decoration:none}.jcontextmenu>div span{float:right;margin-right:10px}.jcontextmenu .contextmenu-disabled{color:#a1a192}.jcontextmenu>div:not(.contextmenu-line):hover{background:#ebebeb}.jcontextmenu>div.contextmenu-line{border-top:1px solid #e9e9e9;margin-top:5px;padding:2px}.jcontextmenu hr{border:1px solid #e9e9e9;border-bottom:0;margin-bottom:5px;margin-top:5px}.jdialog{-ms-flex-align:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center;background-color:rgba(0,0,0,.5);display:flex;left:0;min-height:100%;position:fixed;top:0;-webkit-transition-duration:.1s;transition-duration:.1s;width:100%;z-index:10000}.jdialog .jdialog-container{background-color:#fff;border-radius:10px;box-sizing:border-box;margin:0 auto;max-width:280px;opacity:0;transition:opacity .2s;-webkit-transition:opacity .2s;vertical-align:middle;width:100%}.jdialog .jdialog-header{padding:10px;text-align:center}.jdialog .jdialog-header .jdialog-title{font-size:1em;font-weight:700;padding:8px}.jdialog .jdialog-header .jdialog-message{padding:4px}.jdialog .jdialog-footer{align-content:stretch;align-items:center;border-top:1px solid #ccc;display:flex;flex-wrap:wrap;text-align:center}.jdialog .jdialog-footer>div{border-left:1px solid #ccc;padding:4px;text-align:center;width:100%}.jdialog .jdialog-footer>div:first-child{border-left:0}.jdialog .jdialog-footer input{background-color:transparent;border:0;color:var(--active-color);margin:0;outline:none;width:100%}.jdropdown{-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;background:#fff;box-sizing:border-box;cursor:pointer;display:inline-block;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jdropdown-header::placeholder{color:#000}.jdropdown-backdrop{background-color:rgba(0,0,0,.5);border:0;display:none;left:0;min-height:100%;min-width:100%;padding:0;position:fixed;top:0;z-index:8000}.jdropdown-focus{position:relative}.jdropdown-focus .jdropdown-container{transform:translateZ(0)}.jdropdown-focus .jdropdown-header{outline:5px auto -webkit-focus-ring-color}.jdropdown-container-header{margin:0;padding:0;position:relative}.jdropdown-header{appearance:none;-webkit-appearance:none;-moz-appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='m7 10 5 5 5-5H7z' fill='gray'/%3E%3C/svg%3E");background-position:top 50% right 5px;background-repeat:no-repeat;box-sizing:border-box;cursor:pointer;padding-right:24px;text-overflow:ellipsis;width:100%}.jdropdown-insert-button{display:none;font-size:1.4em;position:absolute;right:30px;text-transform:uppercase;top:4px}.jdropdown-container{min-width:inherit;position:absolute;transform:translate3d(-10000px,0,0);z-index:9001}.jdropdown-close{color:var(--active-color);display:none;font-size:1em;font-weight:700;padding:15px;text-align:right;text-transform:uppercase}.jdropdown-content{box-sizing:border-box;margin:0;min-width:inherit}.jdropdown-item{align-items:center;color:#000;display:flex;overflow-x:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.jdropdown-image{border-radius:20px;height:32px;margin-right:10px;width:32px}.jdropdown-image-small{height:24px;width:24px}.jdropdown-title{display:block;font-size:.7em;overflow-x:hidden;text-overflow:ellipsis}.jdropdown-default .jdropdown-header{border:1px solid #ccc;padding:5px 16px 5px 10px}.jdropdown-default .jdropdown-container{background-color:#fff}.jdropdown-default.jdropdown-focus.jdropdown-insert .jdropdown-header{padding-right:50px}.jdropdown-default.jdropdown-focus.jdropdown-insert .jdropdown-insert-button{display:block}.jdropdown-default .jdropdown-content{background-color:#fff;border:1px solid #8fb1e3;box-sizing:border-box;margin:0;max-height:215px;min-height:10px;min-width:inherit;overflow-y:auto}.jdropdown-default .jdropdown-item{padding:4px 40px 4px 8px}.jdropdown-default .jdropdown-cursor,.jdropdown-default .jdropdown-item:hover{background-color:#1f93ff;color:#fff}.jdropdown-default .jdropdown-selected{background-color:#1f93ff;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik05IDE2LjE3IDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=);background-position:top 50% right 5px;background-repeat:no-repeat;color:#fff}.jdropdown-default .jdropdown-group{margin-top:5px}.jdropdown-default .jdropdown-group .jdropdown-item{padding-left:16px}.jdropdown-default .jdropdown-group-name{font-weight:700;padding-left:8px}.jdropdown-picker.jdropdown-focus .jdropdown-header{outline:none}.jdropdown-picker.jdropdown-focus .jdropdown-backdrop{display:block}.jdropdown-picker .jdropdown-container{background-color:#fff;border-bottom:1px solid #e6e6e8;bottom:0;box-sizing:border-box;left:0;position:fixed;width:100%}.jdropdown-picker .jdropdown-close{background-color:#fff;-webkit-box-shadow:0 -1px 5px 0 rgba(0,0,0,.39);-moz-box-shadow:0 -1px 5px 0 rgba(0,0,0,.39);box-shadow:0 -1px 5px 0 rgba(0,0,0,.39);display:block}.jdropdown-picker .jdropdown-content{background-color:#fafafa;border-top:1px solid #e6e6e8;height:280px;overflow-y:scroll}.jdropdown-picker .jdropdown-group-name{display:block;font-weight:700;text-align:center}.jdropdown-picker .jdropdown-group-name,.jdropdown-picker .jdropdown-item{border-bottom:1px solid #e6e6e8;font-size:1em;padding:10px 20px;text-transform:uppercase}.jdropdown-picker .jdropdown-selected{background-color:#1f93ff;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik05IDE2LjE3IDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=);background-position:top 50% right 15px;background-repeat:no-repeat;color:#fff}.jdropdown-picker .jdropdown-cursor{background-color:#1f93ff;color:#fff}.jdropdown-searchbar.jdropdown-focus{background-color:#fafafa;height:100%;left:0;overflow-y:scroll;padding:0;position:fixed;top:0;width:100%;z-index:9001}.jdropdown-searchbar.jdropdown-focus .jdropdown-container-header{background-color:#fff;box-shadow:0 1px 2px rgba(0,0,0,.1);padding:10px}.jdropdown-searchbar.jdropdown-focus .jdropdown-header{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0E2LjQ3MSA2LjQ3MSAwIDAgMCAxNiA5LjUgNi41IDYuNSAwIDEgMCA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiIgZmlsbD0iI2U2ZTZlOCIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);background-position-x:0;background-position-y:40%;background-repeat:no-repeat;border:0;outline:none;padding-left:30px!important;padding-right:60px!important}.jdropdown-searchbar.jdropdown-focus .jdropdown-close{display:block}.jdropdown-searchbar .jdropdown-container{width:100%}.jdropdown-searchbar .jdropdown-close{position:fixed;right:0;top:0}.jdropdown-searchbar .jdropdown-content{margin-top:10px}.jdropdown-searchbar .jdropdown-group{background-color:#fff;margin-bottom:15px;margin-top:10px}.jdropdown-searchbar .jdropdown-group-name{border-bottom:1px solid #e6e6e8;border-top:1px solid #e6e6e8;font-weight:700;padding:10px 10px 10px 12px}.jdropdown-searchbar .jdropdown-group-arrow{background-repeat:no-repeat;float:right;height:24px;width:24px}.jdropdown-searchbar .jdropdown-group-arrow-down{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZD0iTTcuNDEgOC41OSAxMiAxMy4xN2w0LjU5LTQuNThMMTggMTBsLTYgNi02LTYgMS40MS0xLjQxeiIvPjxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMFYweiIvPjwvc3ZnPg==)}.jdropdown-searchbar .jdropdown-group-arrow-up{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZD0iTTcuNDEgMTUuNDEgMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0bC02LTYtNiA2eiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4=)}.jdropdown-searchbar .jdropdown-item{background-color:#fff;border-bottom:1px solid #e6e6e8;font-size:.9em;padding:10px 40px 10px 15px}.jdropdown-searchbar .jdropdown-description{max-width:calc(100% - 20px);overflow:hidden;text-overflow:ellipsis}.jdropdown-searchbar .jdropdown-content>.jdropdown-item:first-child{border-top:1px solid #e6e6e8}.jdropdown-searchbar .jdropdown-selected{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik05IDE2LjE3IDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiIGZpbGw9IiMwMDdhZmYiLz48L3N2Zz4=);background-position:top 50% right 15px;background-repeat:no-repeat}.jdropdown-list .jdropdown-container{display:block}.jdropdown-list .jdropdown-header{display:none}.jdropdown-list .jdropdown-group{background-color:#fff}.jdropdown-list .jdropdown-group-name{border-bottom:1px solid #e6e6e8;font-weight:700;padding-bottom:10px;padding-top:10px}.jdropdown-list .jdropdown-item{background-color:#fff;border-bottom:1px solid #e6e6e8;padding:10px 40px 10px 10px}.jdropdown-list .jdropdown-selected{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik05IDE2LjE3IDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiIGZpbGw9IiMwMDdhZmYiLz48L3N2Zz4=);background-position:top 50% right 10px;background-repeat:no-repeat}@media only screen and (max-device-width:800px){.jdropdown-list{border:0;padding:0;width:100%!important}.jdropdown-list .jdropdown-container{min-width:100%}}.app .jdropdown-item{text-transform:uppercase}.jeditor-container{border:1px solid #ccc}.jeditor-dragging{border:1px dashed #000}.jeditor-container.jeditor-padding{padding:10px}.jeditor{outline:none;word-break:break-word}.jeditor-container.jeditor-padding .jeditor{margin-bottom:10px;min-height:120px;padding:10px}.jeditor-toolbar{-webkit-align-items:center;align-items:center;border:none;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);cursor:pointer;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;margin:0 0 5px;padding:5px;white-space:nowrap}.jeditor-toolbar .jeditor-toolbar-group{background-color:#f3f3f3}.jeditor-toolbar div{padding:4px}.jeditor-toolbar div.jeditor-toolbar-button{padding-left:20px;padding-right:20px}.jeditor-toolbar div{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jeditor-toolbar div i{color:#777;display:block;font-size:20px;height:20px;line-height:20px;width:20px}.jeditor-toolbar select{background-color:transparent;border:0;border-radius:4px;display:block;height:32px;margin:1px;outline:none;padding:0 5px}.jeditor-toolbar .jtoolbar-divisor{background-color:#f2f2f2;height:28px;margin:4px;padding:0;width:2px}.jeditor-toolbar select option{background-color:#fff;padding:20px}.jeditor-toolbar div:hover,.toolbar select:hover{background-color:#f2f2f2;border-radius:2px}.jeditor-toolbar div:hover i{color:#222}.jeditor-toolbar div.selected{background-color:#cecece}.jeditor-thumbs{display:inline-block;margin-right:5px}.jeditor-thumbs-container{margin-top:15px}.jeditor-thumbs .close{height:1px;position:absolute}.jeditor-thumbs .close i{color:#fff;left:72px;position:relative;text-shadow:0 0 2px #000;top:5px}.jeditor-thumbs img{border:1px solid #eee;height:100px;width:100px}.jeditor-users{background-color:#fff;border:1px solid #ccc;max-height:220px;overflow-y:scroll;padding-bottom:5px;padding-top:5px;position:absolute}.jeditor-users>div{align-items:center;display:flex;min-width:220px;padding:5px 10px}.jeditor-users>div:hover{background-color:#efefef}.jeditor-users>div img{border-radius:12px;height:24px;margin-right:5px;width:24px}.snippet{border:1px solid #eee;cursor:pointer;margin-top:15px;position:relative}.snippet:focus{outline:none}.snippet img{float:left;margin-bottom:10px;margin-right:10px;max-width:120px;width:25%}.snippet .snippet-title{font-size:1.4em;margin-top:15px}.snippet .snippet-description{font-size:1em;margin-top:5px}.snippet .snippet-host{color:#777;font-size:.8em;margin-bottom:10px;margin-top:10px;text-align:right;text-transform:uppercase}.snippet .snippet-url{display:none}.jeditor .snippet:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");content:"";cursor:pointer;font-size:24px;height:24px;margin:14px;position:absolute;right:0;text-shadow:0 0 5px #fff;top:0;width:24px}.snippet div,.snippet img{-webkit-user-drag:none;-khtml-user-drag:none;-moz-user-drag:none;-o-user-drag:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none}.jeditor img{border:2px solid transparent;box-sizing:border-box}.jeditor img:focus{border:2px solid #0096fd}.jeditor .pdf{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' style='enable-background:new 0 0 512 512' xml:space='preserve'%3E%3Cpath style='fill:%23c30b15' d='M511.344 274.266c.426-6.035.656-12.123.656-18.266C512 114.615 397.385 0 256 0S0 114.615 0 256c0 117.769 79.53 216.949 187.809 246.801l323.535-228.535z'/%3E%3Cpath style='fill:%2385080e' d='M511.344 274.266 314.991 77.913 119.096 434.087l68.714 68.714C209.522 508.787 232.385 512 256 512c135.243 0 245.976-104.875 255.344-237.734z'/%3E%3Cpath style='fill:%23fff' d='m278.328 333.913-22.617-256H119.096v233.739z'/%3E%3Cpath style='fill:%23e8e6e6' d='M392.904 311.652V155.826l-55.652-22.261-22.261-55.652h-59.28l.356 256z'/%3E%3Cpath style='fill:%23fff' d='M314.991 155.826V77.913l77.913 77.913z'/%3E%3Cpath style='fill:%23fc0f1a' d='M119.096 311.652h273.809v122.435H119.096z'/%3E%3Cpath style='fill:%23fff' d='M204.871 346.387c13.547 0 21.341 6.659 21.341 18.465 0 12.412-7.795 19.601-21.341 19.601h-9.611v14.909h-13.471v-52.975h23.082zm-9.611 27.471h8.93c5.904 0 9.308-2.952 9.308-8.552 0-5.525-3.406-8.324-9.308-8.324h-8.93v16.876zM257.928 346.387c16.649 0 28.152 10.746 28.152 26.487 0 15.666-11.655 26.488-28.683 26.488h-22.25v-52.975h22.781zm-9.309 42.228h9.611c8.249 0 14.151-6.357 14.151-15.665 0-9.384-6.205-15.817-14.757-15.817h-9.006v31.482zM308.563 356.982v12.26h23.763v10.596h-23.763v19.525h-13.471v-52.975h39.277v10.595h-25.806v-.001z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:cover;height:60px;width:60px}.jloading{background-color:rgba(0,0,0,.7);bottom:0;left:0;position:fixed;right:0;top:0;width:100%;z-index:10001}.jloading:after{-webkit-animation:spin .8s linear infinite;animation:spin .8s linear infinite;border:4px solid #fff;border-radius:50%;border-top-color:transparent;content:"";display:block;height:40px;margin:50vh auto 0;width:40px}.jloading.spin{background-color:transparent}.jloading.spin:after{border-color:transparent #aaa #aaa;margin:80px auto 0}.jlogin{border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;box-sizing:border-box;font-size:1em;margin:0 auto;vertical-align:middle;width:100%}.jlogin-fullscreen{background-color:#fff;height:100%;left:0;position:absolute;top:0;width:100%;z-index:9000}.jlogin>form{margin:0 auto;max-width:480px;padding:20px}.jlogin>form>div{margin-bottom:10px}.jlogin label{display:block}.jlogin>form>div>input{margin:0;outline:none;padding:15px;width:100%}.jlogin input[type=checkbox]{float:left}.jlogin input[type=button]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--button-color);border:1px solid var(--button-color);color:#fff;cursor:pointer;padding:10px}.jlogin span{margin:0 auto}.jlogin img{max-width:220px;text-align:center}.jlogin .jlogin-logo{padding:20px;text-align:center}.jlogin .captcha{border:1px solid #ccc;display:block;margin-bottom:4px;margin-top:4px;width:100%}.jlogin .facebookButton{background-color:var(--button-color);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M19 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h7.621v-6.961h-2.343v-2.725h2.343V9.309c0-2.324 1.421-3.591 3.495-3.591.699-.002 1.397.034 2.092.105v2.43H16.78c-1.13 0-1.35.534-1.35 1.322v1.735h2.7l-.351 2.725h-2.365V21H19a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2z' fill='%23fff'/%3E%3C/svg%3E");background-position:10px 40%;background-repeat:no-repeat;border:1px solid var(--button-color);color:#fff;cursor:pointer;padding:10px;text-align:center}.jlogin .rememberButton{display:none;padding:10px}.jlogin .cancelButton,.jlogin .newProfileButton,.jlogin .requestButton{cursor:pointer;padding:20px 20px 0;text-align:center}.jlogin-captcha img{min-width:280px}.jlogin-loading:before{animation:loading 2s linear infinite;background-color:var(--button-color);content:"";display:block;height:4px;left:0;position:fixed;top:0;width:200px}@keyframes loading{0%{left:-200px;width:30%}50%{width:30%}70%{width:70%}80%{left:50%}95%{left:120%}to{left:100%}}@media only screen and (max-device-width:800px){.jsuites *{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}html.jsuites{height:100%}.jsuites body{background-color:#fff;height:100%;line-height:1.4;margin:0;min-height:100%;padding:0;width:100%}.jsuites body,.jsuites div,.jsuites input,.jsuites select,.jsuites textarea{font-family:-apple-system,SF UI Text,Helvetica Neue,Helvetica,Arial,sans-serif!important}}.japp{background-color:#fafafa;box-sizing:border-box;height:100%;overflow:scroll}.jwarning:before{background-color:red;color:#fff;content:"No internet connection";font-size:.55em;left:0;padding:2px;position:fixed;text-align:center;top:0;width:100%;z-index:20000}.japp button{background-color:transparent;border:1px solid var(--active-color);border-radius:4px;color:var(--active-color);outline:none;padding:4px;width:100%}.japp button:active{border:1px solid #000;color:#000}.japp .red{border-color:1px solid red;color:red}.japp .link{color:var(--active-color);cursor:pointer}.japp .uppercase{text-transform:uppercase}.japp .navbar{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:#fff;box-shadow:0 1px 2px rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;height:44px;margin:0;position:fixed;top:0;-webkit-transform:translateZ(0);transform:translateZ(0);width:100%;z-index:500}.jwarning .navbar{top:16px}.japp .navbar-container{align-items:center;-webkit-box-sizing:border-box;box-sizing:border-box;display:flex;-webkit-flex-flow:row wrap;height:100%;justify-content:space-between;left:0;padding:0 8px;position:absolute;top:0;vertical-align:middle;width:100%}.japp .navbar-container div{text-align:center}.japp .navbar-container div.title{display:flex}.japp .navbar-container div.title div{line-height:24px}.japp .navbar-container div.icon{width:24px}.japp .navbar-container div i{display:block}.japp .navbar-container div img{display:block;height:28px}.japp .navbar-container div.title div img{border-radius:12px;height:24px;margin-right:6px;width:24px}.japp .navbar .icon{color:var(--active-color)}.japp .title{font-size:1.2em}.japp .block{box-sizing:border-box;color:#6d6d72;font-size:.9em;padding:15px}.japp .block-title{color:#6d6d72;font-size:.9em;line-height:17px;line-height:1;margin:25px 15px 10px;overflow:hidden;position:relative;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.japp .block-strong{background-color:#fff;color:#000}.japp .block-border{border-bottom:1px solid #ddd;border-top:1px solid #ddd}.japp .block-footer{color:#6d6d72;font-size:.7em;padding:15px;text-transform:uppercase}.japp .block-collapse{max-height:100px;overflow-y:hidden}.japp .block-instruction{color:#6d6d72;font-size:.7em;padding:15px;text-align:center;text-transform:uppercase}.japp .pages{align-items:flex-start;display:flex;flex-wrap:nowrap;height:100%}.japp .page{box-sizing:border-box;min-height:100%;min-width:100%;overflow-y:auto;padding-bottom:45px;padding-top:45px}.warning .page{padding-top:60px}.japp .progressbar-container{margin:5px 0 15px}.japp .progressbar{border:1px solid var(--active-color);border-radius:1px;width:100%}.japp .progressbar-title{display:flex;justify-content:space-between;margin-bottom:2px;text-transform:uppercase}.japp .progressbar div{background-color:var(--active-color);height:4px;width:0}.japp .panel{background:#fff;box-shadow:0 -1px 2px rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;height:100vh;left:0;margin:0;max-width:220px;padding:4px;position:fixed;top:0;width:60vw;z-index:1003}.japp .panel-left{-webkit-box-shadow:0 2px 15px -5px rgba(0,0,0,.7);box-shadow:0 2px 15px -5px rgba(0,0,0,.7)}.japp .panel a{color:var(--active-color)}.japp .jtoolbar{background:#f7f7f8;bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.1);left:0;margin:0;padding:4px;position:fixed;z-index:500}.japp .jtoolbar,.japp .jtoolbar>div{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.japp .jtoolbar>div{align-items:center;cursor:pointer;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;justify-content:space-evenly;vertical-align:middle}.japp .jtoolbar>div>div{flex:1;margin:auto;text-align:center}.japp .jtoolbar a{display:inline-block;text-decoration:none}.japp .jtoolbar i{color:#929292}.japp .jtoolbar span{color:#929292;display:block;font-size:.7em}.japp .jtoolbar .selected a,.japp .jtoolbar .selected i,.japp .jtoolbar .selected span{color:var(--active-color)}.japp .options{background-color:#fff;border-bottom:1px solid #e6e6e8;border-top:1px solid #e6e6e8;margin-top:10px;padding-left:15px}.japp .options:empty{display:none}.japp .options .option{align-items:center;border-bottom:1px solid #e6e6e8;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row nowrap;flex-wrap:nowrap;font-size:1em;justify-content:space-between;overflow-x:hidden;padding-bottom:10px;padding-top:10px;text-transform:uppercase;vertical-align:middle}.japp .options .option:last-child{border-bottom:0}.japp .options label{width:100%}.japp .options input[type=text],.japp .options textarea{border:1px solid transparent;box-sizing:border-box;font-size:1em;margin:0;outline:none;padding:0;width:100%}.japp .options textarea{height:100px}.japp .options input[type=checkbox],.japp .options input[type=radio]{visibility:hidden}.japp .options input[type=checkbox]~i,.japp .options input[type=radio]~i{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik05IDE2LjE3IDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiIGZpbGw9IiMwMDdhZmYiLz48L3N2Zz4=);background-repeat:no-repeat;content:"";height:24px;line-height:24px;margin-right:10px;visibility:hidden;width:24px}.japp .options input[type=checkbox]:checked~i,.japp .options input[type=radio]:checked~i{visibility:visible}.japp .options .jdropdown{display:block}.japp .options .jdropdown .jdropdown-header{border:0;border-bottom:1px solid #e6e6e8;padding:15px;text-transform:uppercase}.japp .options .jdropdown:last-child .jdropdown-header{border-bottom:0}.japp .options .jdropdown-searchbar.jdropdown-focus .jdropdown-header{border:0;padding:5px}.japp .options .icon{border-radius:20px;color:#929292;float:left;margin-right:10px;max-height:40px;max-width:40px}.japp .options .option .option-actions{display:flex;transform:translateX(100%);width:0}.japp .options .option .option-actions>div{padding-right:5px}.japp .options .option .option-actions>div>i{background-color:red;border-radius:30px;color:#fff;font-size:24px;height:40px;line-height:40px;text-align:center;width:40px}.japp .options .option .option-actions.small>div>i{background-color:transparent;border-radius:24px;color:#000;font-size:24px;height:24px;line-height:24px;width:24px}.japp .options .option-title{display:block;font-size:1em;padding-bottom:10px;padding-top:10px;text-transform:uppercase;vertical-align:center}.japp .options .option-title:after{content:"\e313";float:right;font-family:material icons;font-size:24px;height:24px;line-height:24px;margin-right:10px;width:24px}.japp .options .option-title.selected:after{content:"\e316"}.japp .options .option-title.selected~div{display:block}.japp .options .option-group{background-color:#fff;border-top:1px solid #e6e6e8;display:none}.japp .options .option-link:after{color:var(--active-color);content:"\e315";display:block;float:right;font-family:material icons;font-size:24px;height:24px;line-height:24px;margin-right:10px;width:24px}.japp .options .option-header{flex-grow:10;overflow:hidden;padding-left:10px;padding-right:10px;text-overflow:ellipsis;white-space:nowrap}.japp .options .option .option-name{font-size:1em;overflow:hidden;text-overflow:ellipsis;width:100%}.japp .options .option .option-small{color:#6d6d72;display:block;font-size:.7em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.japp .options .option .option-image img{border-radius:20px;display:block;height:40px;width:40px}.japp .options .option .option-image-small img{border-radius:50px;display:block;height:auto;width:24px}.japp .options .option .option-image .option-badge{margin:28px}.japp .options .option .option-image .option-badge,.japp .options .option .option-image-small .option-badge{background-color:red;border-radius:16px;color:#fff;font-size:7px;height:16px;line-height:16px;position:absolute;text-align:center;width:16px}.japp .options .option .option-image-small .option-badge{margin:12px}.japp .options .option .option-badge.solid{background-color:red;color:red}.japp .options .option .option-badge.solid-green{background-color:green;color:green}.japp .options .option .option-badge:empty{display:none}.japp .options .option .option-date{color:#888;float:right;font-size:.6em;margin-right:15px;white-space:nowrap}.japp .options .option .option-right{margin-right:15px}.japp .options .option .option-badget{background-color:red;border-radius:12px;color:#fff;font-size:.7em;height:24px;line-height:24px;text-align:center;width:24px}.japp .options .option .option-badget:empty{display:none}.japp .jbadge{display:inline-block;left:-12px;position:relative;top:-12px}.japp .jbadge>div{background-color:red;border-radius:16px;color:#fff;font-size:8px;height:16px;line-height:16px;position:absolute;text-align:center;width:16px}.japp .jbadge>div:empty{display:none}.japp .picker{background-color:#fff;border-bottom:1px solid #e6e6e8;border-top:1px solid #e6e6e8;bottom:0;margin-top:10px;padding-left:15px;position:absolute;width:100%;z-index:700}.japp .picker .picker-options{-webkit-mask-image:linear-gradient(180deg,#000,rgba(0,0,0,.2)),linear-gradient(0deg,#000,rgba(0,0,0,.2));-webkit-mask-position:center bottom,top center;-webkit-mask-repeat:no-repeat;-webkit-mask-size:100% 50%;overflow-y:scroll;padding-bottom:100px;padding-top:100px}.japp .picker label{display:block;padding-bottom:10px;padding-top:10px}.japp .picker .picker-selected{border-bottom:1px solid #e6e6e8;border-top:1px solid #e6e6e8}.japp .picker input{display:none}.japp .top-search{border-bottom:1px solid #ddd;margin:0;padding:10px}.japp .top-search input{background-color:#e6e6e6;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='gray'%3E%3Cpath d='M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");background-position:5px;background-repeat:no-repeat;border:0;border-radius:4px;outline:none;padding-left:32px;width:100%}.japp .searchbar-container i{color:#bbb;margin-left:8px;margin-top:5px;position:absolute}.japp .range{-webkit-appearance:none;margin:18px 0;width:100%}.japp .range:focus{outline:none}.japp .range::-webkit-slider-runnable-track{animation:.2s;background:#ccc;border-radius:1.3px;cursor:pointer;height:4px;width:100%}.japp .range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background:#fff;border:0;border-radius:24px;box-shadow:0 1px 3px 1px #bbb;cursor:pointer;height:24px;margin-top:-10px;width:24px}.japp .range::-moz-range-track{animation:.2s;background:#ccc;border-radius:1.3px;cursor:pointer;width:100%}.japp .range::-moz-range-thumb{background:#fff;border:0;border-radius:24px;box-shadow:0 1px 3px 1px #bbb;cursor:pointer;height:24px;width:24px}.japp .range::-ms-track{animation:.2s;background:transparent;border-color:transparent;border-radius:1.3px;border-width:16px 0;color:transparent;cursor:pointer;width:100%}.japp .range::-ms-fill-lower,.japp .range::-ms-fill-upper{background:#ccc;height:5px}.japp .range::-ms-thumb{background:#fff;border:0;border-radius:24px;box-shadow:0 1px 3px 1px #bbb;cursor:pointer;height:24px;width:24px}.japp .range:focus::-ms-fill-lower,.japp .range:focus::-ms-fill-upper{background:#ccc}.jactionsheet{-ms-flex-align:baseline;-webkit-box-align:baseline;-webkit-align-items:baseline;align-items:baseline;background-color:rgba(0,0,0,.5);bottom:0;display:flex;left:0;min-height:100%;position:fixed;-webkit-transition-duration:.2s;transition-duration:.2s;width:100%;z-index:10000}.jactionsheet .jactionsheet-content{align-self:flex-end;width:100%}.jactionsheet .jactionsheet-title{font-size:1em;font-weight:700;padding:8px}.jactionsheet .jactionsheet-message{padding:4px}.jactionsheet .jactionsheet-group{background-color:#fff;border-radius:5px;box-sizing:border-box;margin:10px}.jactionsheet .jactionsheet-group>div{border-top:1px solid #ccc;font-size:1.4em;font-weight:700;padding:4px;text-align:center;width:100%}.jactionsheet .jactionsheet-group>div:first-child{border-top:0}.jactionsheet .jactionsheet-group input{background-color:transparent;border:0;color:var(--active-color);font-size:1em;margin:0;outline:none;width:100%}.jactionsheet .jactionsheet-group input.jactionsheet-cancel{color:red}.jtoggle{-webkit-tap-highlight-color:transparent;cursor:pointer}.jtoggle,.jtoggle i{display:inline-block}.jtoggle i{background:#e6e6e6!important;border-radius:23px;height:27px!important;margin-right:.5rem;position:relative;transition:all .3s linear;vertical-align:text-bottom;visibility:visible!important;width:46px!important}.jtoggle i:before{transform:translate3d(2px,2px,0) scaleX(1);transition:all .25s linear;width:42px}.jtoggle i:after,.jtoggle i:before{background-color:#fff;border-radius:11px;content:"";height:22px;left:0;position:absolute}.jtoggle i:after{box-shadow:0 2px 2px rgba(0,0,0,.24);transform:translate3d(2px,2px,0);transition:all .2s ease-in-out;width:22px}.jtoggle:active i:after{transform:translate3d(2px,2px,0);width:28px}.jtoggle:active input:checked+i:after{transform:translate3d(16px,2px,0)}.jtoggle input{display:none}.jtoggle input:checked+i{background-color:#4bd763!important}.jtoggle input:checked+i:before{transform:translate3d(18px,2px,0) scale3d(0,0,0)}.jtoggle input:checked+i:after{transform:translate3d(22px,2px,0)}.japp .options input::-webkit-input-placeholder{text-transform:uppercase}.japp .options input::-moz-placeholder{text-transform:uppercase}.japp .options input:-ms-input-placeholder{text-transform:uppercase}.japp .options input:-moz-placeholder{text-transform:uppercase}::placeholder{color:#ccc;opacity:1}:-ms-input-placeholder{color:#ccc}::-ms-input-placeholder{color:#ccc}::-webkit-input-placeholder{color:#ccc}.jmodal{background-color:#fff;border:1px solid #ccc;border-radius:5px;-webkit-box-shadow:0 2px 10px rgba(0,0,0,.2);-moz-box-shadow:0 2px 10px rgba(0,0,0,.2);box-sizing:border-box;height:60%;left:50%;padding-top:50px;position:fixed;top:50%;transform:translate(-50%,-50%);width:60%;z-index:9002}.jmodal:before{background:#e3e3e3;background:-webkit-gradient(linear,left top,left bottom,from(#ededed),to(#e3e3e3));background:-moz-linear-gradient(top,#ededed,#e3e3e3);box-sizing:border-box;content:attr(title);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ededed",endColorstr="#e3e3e3");font-size:1.2em;left:0;padding:15px;position:absolute;top:0;width:100%}.jmodal_content{max-height:100%;overflow-y:auto;padding:20px}.jmodal.no-title{padding-top:0}.jmodal.no-title:before{display:none}.jmodal:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");content:"";cursor:pointer;font-size:24px;height:24px;margin:14px;position:absolute;right:0;text-shadow:0 0 5px #fff;top:0;width:24px}.jmodal_fullscreen{border-radius:0;height:100%!important;left:0;top:0;transform:none;width:100%!important}.jmodal_backdrop{-webkit-touch-callout:none;background-color:rgba(0,0,0,.5);border:0;display:none;left:0;min-height:100%;min-width:100%;padding:0;position:fixed;top:0;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:8000}.jnotification{-webkit-box-sizing:border-box;box-sizing:border-box;padding:10px;position:fixed;z-index:10000}.jnotification-container{border-radius:8px;-webkit-box-shadow:0 2px 15px -5px rgba(0,0,0,.7);box-shadow:0 2px 15px -5px rgba(0,0,0,.7);padding:12px}.jnotification-close{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='gray'%3E%3Cpath d='M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");content:"";cursor:pointer;font-size:20px;height:20px;width:20px}.jnotification-title{font-weight:700}.jnotification-header{padding-bottom:5px}.jnotification-header:empty{display:none}.jnotification-image{margin-right:5px}.jnotification-image:empty{display:none}.jnotification-image img{width:24px}.jnotification-name{flex:1;font-size:.9em;letter-spacing:.1em;text-transform:uppercase}@media (min-width:320px) and (max-width:800px){.jnotification{top:0;width:100%}.jnotification-container{background:hsla(0,0%,100%,.95);border:1px solid #eee}}@media (min-width:801px){.jnotification{bottom:0}.jnotification-container{background-color:#000;background:#5c5c5c;background:linear-gradient(0deg,#5c5c5c,#4d4d4d);color:#fff;margin:30px;padding:20px;width:320px}}.jnotification-header{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:flex-start;justify-content:flex-start}.jrating{display:flex}.jrating>div{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='m22 9.24-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z' fill='gray'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");height:24px;line-height:24px;width:24px}.jrating .jrating-over{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");opacity:.7}.jrating .jrating-selected{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='red'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E")}.jslider{margin-bottom:10px;margin-top:10px}.jslider-container img{margin-bottom:5px;margin-right:5px;width:60px}.jslider-attach{cursor:pointer}.jslider-left:before{content:"arrow_back_ios";left:10px}.jslider-left:before,.jslider-right:after{color:#fff;font-family:Material Icons;font-size:30px;height:30px;position:fixed;text-align:center;text-shadow:0 0 0 #000;width:30px}.jslider-right:after{content:"arrow_forward_ios";right:5px}.jslider-close{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='%23fff'%3E%3Cpath d='M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");cursor:pointer;display:none;height:24px;position:fixed;right:15px;top:15px;width:24px;z-index:3000}.jslider-preview{-ms-flex-align:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center;background-color:rgba(0,0,0,.9);box-sizing:border-box;display:flex;left:0;margin:0;min-height:100%;position:fixed;top:0;-webkit-transition-duration:.4s;transition-duration:.4s;width:100%;z-index:2000}.jslider-preview img{box-sizing:border-box;display:none;height:auto;margin:0 auto;max-width:100%;min-width:70%;vertical-align:middle}.jtabs{max-width:calc(100vw - 24px);position:relative}.jtabs>.jtabs-headers{display:flex;overflow-x:auto}.jtabs>.jtabs-headers>div{background-color:#f1f1f1;cursor:pointer;margin-bottom:1px;margin-left:1px;margin-right:1px;padding:6px 20px}.jtabs>.jtabs-headers>div.jtabs-selected{background-color:#e8e8e8;color:#000}.jtabs>.jtabs-content>div{display:none}.jtabs>.jtabs-content>div.jtabs-selected{display:block}.jtabs>.jtabs-border{background-color:#888;height:2px;position:absolute;transform-origin:left;transition:all .2s cubic-bezier(.4,0,.2,1);transition-property:color,left,transform}.jtabs .jtabs-add{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' width='24'%3E%3Cpath d='M19 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z' fill='%23bbb'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;cursor:pointer;height:24px;line-height:24px;margin:3px 3px 3px 10px;width:24px}.jtags{-ms-flex-pack:flex-start;border:1px solid #ccc;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;flex-wrap:wrap;-webkit-justify-content:space-between;justify-content:flex-start;padding:2px}.jtags>div{border-radius:1px;display:block;margin:2px;outline:none;padding:3px 22px 3px 10px;position:relative}.jtags>div:after{content:"x";cursor:pointer;display:none;font-size:11px;height:12px;position:absolute;right:4px;top:4px;width:12px}.jtags_label{background-color:#eee!important}.jtags_label:after{display:inline-block!important}.jtags_error:after{color:#fff!important}.jtags_error{background-color:#d93025!important;color:#fff}.jtags_search{background:#fff;border:none;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:4px;border-radius:4px;box-shadow:0 1px 2px 0 rgba(60,64,67,.302),0 2px 6px 2px rgba(60,64,67,.149);-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2);cursor:pointer;display:none;margin:0;min-width:300px;outline:none;padding:8px 0;position:absolute;-webkit-transition:opacity .218s;transition:opacity .218s;user-select:none;width:280px;width:auto}.jtags_search>div{-webkit-align-items:center;align-items:center;color:#333;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:flex;padding:5px 10px;user-select:none}.jtags_search>div:hover{background-color:#e8eaed}.jtags_search>div>img{border-radius:16px;height:32px;margin-right:2px;user-select:none;width:32px}.jtags_search>div>div{margin-left:2px;max-width:300px;overflow:hidden;text-overflow:ellipsis;user-select:none;white-space:nowrap}.jtags_search .selected{background-color:#e8eaed}:root{--jexcel-border-color:#000}.jexcel_container{box-sizing:border-box;display:inline-block;overscroll-behavior:contain;padding-right:2px}.jexcel_container.fullscreen{height:100%;left:0;position:fixed;top:0;width:100%;z-index:21}.jexcel_container.fullscreen .jexcel_content{background-color:#fff;height:100%;overflow:auto;width:100%}.jexcel_container.fullscreen.with-toolbar{height:calc(100% - 46px)}.jexcel_content{box-sizing:border-box;display:inline-block;padding-bottom:3px;padding-right:3px;position:relative;scrollbar-color:#666 transparent;scrollbar-width:thin}@supports (-moz-appearance:none){.jexcel_content{padding-right:10px}}.jexcel_content::-webkit-scrollbar{height:5px;width:5px}.jexcel_content::-webkit-scrollbar-track{background:#eee}.jexcel_content::-webkit-scrollbar-thumb{background:#666}.jexcel{background-color:#fff;border:0;border-collapse:separate;border-color:transparent #ccc #ccc transparent;empty-cells:show;table-layout:fixed;white-space:nowrap;width:0}.jexcel,.jexcel>thead>tr>td{border-style:solid;border-width:1px}.jexcel>thead>tr>td{background-color:#f3f3f3;border-color:#ccc transparent transparent #ccc;box-sizing:border-box;cursor:pointer;overflow:hidden;padding:2px;position:-webkit-sticky;position:sticky;top:0;z-index:20}.with-toolbar .jexcel>thead>tr>td{top:42px}.jexcel>thead.draggable>tr>td:before{bottom:0;content:"\00a0";cursor:move;height:3px;left:0;position:absolute;width:100%}.jexcel>thead.resizable>tr>td:after{content:"\00a0";cursor:col-resize;height:100%;position:absolute;right:0;top:0;width:3px}.jexcel>thead>tr>td.dragging{background-color:#fff;opacity:.5}.jexcel>thead>tr.jexcel_nested>td:after,.jexcel>thead>tr.jexcel_nested>td:before,.jexcel>thead>tr>td:first-child:after{cursor:default}.jexcel>thead>tr>td.selected{background-color:#dcdcdc}.jexcel>thead>tr>td.arrow-up{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='m7 14 5-5 5 5H7z' fill='gray'/%3E%3C/svg%3E")}.jexcel>thead>tr>td.arrow-down,.jexcel>thead>tr>td.arrow-up{background-position:center right 5px;background-repeat:no-repeat;text-decoration:underline}.jexcel>thead>tr>td.arrow-down{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='m7 10 5 5 5-5H7z' fill='gray'/%3E%3C/svg%3E")}.jexcel>tbody>tr>td:first-child{background-color:#f3f3f3;position:relative;text-align:center}.jexcel>tbody.resizable>tr>td:first-child:before{bottom:0;content:"\00a0";cursor:row-resize;height:3px;left:0;position:absolute;width:100%}.jexcel>tbody.draggable>tr>td:first-child:after{content:"\00a0";cursor:move;height:100%;position:absolute;right:0;top:0;width:3px}.jexcel>tbody>tr.dragging>td{background-color:#eee;opacity:.5}.jexcel>tbody>tr>td{border-color:#ccc transparent transparent #ccc;border-style:solid;border-width:1px;box-sizing:border-box;line-height:1em;padding:4px;white-space:nowrap}.jexcel>tbody>tr>td:last-child{overflow:hidden}.jexcel>tbody>tr>td>img{display:inline-block;max-width:100px}.jexcel>tbody>tr>td.readonly{color:rgba(0,0,0,.3)}.jexcel>tbody>tr.selected>td:first-child{background-color:#dcdcdc}.jexcel>tbody>tr>td>input,.jexcel>tbody>tr>td>select,.jexcel>tbody>tr>td>textarea{background-color:transparent;border:0;border-radius:0;box-sizing:border-box;margin:0;outline:0;padding:0;width:100%}.jexcel>tbody>tr>td>textarea{padding-top:6px!important;resize:none}.jexcel>tbody>tr>td>input[type=checkbox],.jexcel>tbody>tr>td>input[type=radio]{margin-top:2px;width:12px}.jexcel>tbody>tr>td>select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTcgMTAgNSA1IDUtNXoiLz48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PC9zdmc+);background-position-x:100%;background-position-y:40%;background-repeat:no-repeat}.jexcel>tbody>tr>td.jexcel_dropdown{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='m7 10 5 5 5-5H7z' fill='%23d3d3d3'/%3E%3C/svg%3E");background-position:top 50% right 5px;background-repeat:no-repeat;overflow-x:hidden;text-overflow:ellipsis}.jexcel>tbody>tr>td.jexcel_dropdown.jexcel_comments{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='m7 10 5 5 5-5H7z' fill='%23d3d3d3'/%3E%3C/svg%3E") top 50% right 5px no-repeat,url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII=) 100% 0 no-repeat}.jexcel>tbody>tr>td>.color{height:10px;margin:auto;width:90%}.jexcel>tbody>tr>td>a{text-decoration:underline}.jexcel>tbody>tr>td.highlight>a{color:blue;cursor:pointer}.jexcel .highlight{background-color:rgba(0,0,0,.05)}.jexcel .highlight-top{border-top:1px solid #000;box-shadow:0 -1px #ccc}.jexcel .highlight-left{border-left:1px solid #000;box-shadow:-1px 0 #ccc}.jexcel .highlight-right{border-right:1px solid #000}.jexcel .highlight-bottom{border-bottom:1px solid #000}.jexcel .highlight-top.highlight-left{box-shadow:-1px -1px #ccc;-webkit-box-shadow:-1px -1px #ccc;-moz-box-shadow:-1px -1px #ccc}.jexcel .highlight-selected{background-color:transparent}.jexcel .selection{background-color:rgba(0,0,0,.05)}.jexcel .selection-left{border-left:1px dotted #000}.jexcel .selection-right{border-right:1px dotted #000}.jexcel .selection-top{border-top:1px dotted #000}.jexcel .selection-bottom{border-bottom:1px dotted #000}.jexcel_corner{background-color:#000;border:1px solid #fff;box-sizing:initial;cursor:crosshair;height:1px;left:-2000px;padding:2px;position:absolute;top:-2000px;width:1px;z-index:30}.jexcel .editor{box-sizing:border-box;outline:0 solid transparent;overflow:visible;overflow:visible!important;padding:0;text-align:left;white-space:nowrap}.jexcel .editor>input{padding-left:4px}.jexcel .editor .jupload{-webkit-font-smoothing:antialiased;background-color:#fff;-webkit-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2);box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2);font-size:.875rem;letter-spacing:.2px;margin-top:2px;min-height:225px;padding:10px;position:fixed;top:100%;user-select:none;width:300px;z-index:40}.jexcel .editor .jupload img{height:auto;width:100%}.jexcel .editor .jclose:after{content:"close";cursor:pointer;font-family:Material icons;font-size:24px;height:24px;line-height:24px;margin:10px;position:absolute;right:0;text-shadow:0 0 5px #fff;top:0;width:24px}.jexcel,.jexcel td,.jexcel_corner{-webkit-touch-callout:none;-webkit-user-drag:none;-khtml-user-drag:none;-moz-user-drag:none;-o-user-drag:none;user-drag:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jexcel_textarea{height:1px;left:-999px;top:-999px;width:1px}.jexcel .dragline,.jexcel_textarea{position:absolute}.jexcel .dragline div{height:5px;position:relative;top:-6px;width:22px}.jexcel .dragline div:hover{cursor:move}.jexcel .onDrag{background-color:rgba(0,0,0,.6)}.jexcel .error{border:1px solid red}.jexcel thead td.resizing{border-right-color:red!important;border-right-style:dotted!important}.jexcel tbody tr.resizing>td{border-bottom-color:red!important;border-bottom-style:dotted!important}.jexcel tbody td.resizing{border-right-color:red!important;border-right-style:dotted!important}.jexcel .jdropdown-header{border:0!important;height:100%!important;outline:none!important;padding:0 0 0 8px!important;width:100%!important}.jexcel .jdropdown-container{margin-top:1px}.jexcel .jdropdown-container-header{height:inherit;margin:0;padding:0}.jexcel .jdropdown-picker{border:0!important;height:inherit;padding:0!important;width:inherit}.jexcel .jexcel_comments{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII=);background-position:100% 0;background-repeat:no-repeat}.jexcel .sp-replacer{border:0;margin:2px}.jexcel>thead>tr.jexcel_filter>td>input{border:0;outline:none;width:100%}.jexcel_about{display:none;float:right;font-size:.7em;letter-spacing:1px;padding:2px;text-transform:uppercase}.jexcel_about a{color:#ccc;text-decoration:none}.jexcel_about img{display:none}.jexcel_filter{display:flex;justify-content:space-between;margin-bottom:4px}.jexcel_filter>div{align-items:center;padding:8px}.jexcel_pagination{align-items:center;display:flex;justify-content:space-between}.jexcel_pagination>div{display:flex;padding:10px}.jexcel_pagination>div:last-child{padding-right:10px;padding-top:10px}.jexcel_pagination>div>div{border:1px solid #ccc;box-sizing:border-box;cursor:pointer;height:36px;line-height:34px;margin-left:2px;text-align:center;width:36px}.jexcel_page{font-size:.8em}.jexcel_page_selected{background-color:#f3f3f3;font-weight:700}.jexcel_toolbar{background-color:#f3f3f3;border:1px solid #ccc;display:flex;margin:0 2px 4px 1px;padding:4px;position:sticky;top:0;z-index:21}.jexcel_toolbar:empty{display:none}.jexcel_toolbar i.jexcel_toolbar_item{cursor:pointer;display:inline-block;height:24px;padding:4px;width:24px}.jexcel_toolbar i.jexcel_toolbar_item:hover{background-color:#ddd}.jexcel_toolbar select.jexcel_toolbar_item{background-color:transparent;border:0;display:inline-block;margin-left:2px;margin-right:2px;padding-right:10px}.jexcel .dragging-left{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='m14 7-5 5 5 5V7z'/%3E%3Cpath fill='none' d='M24 0v24H0V0h24z'/%3E%3C/svg%3E");background-position:top 50% left 0;background-repeat:no-repeat}.jexcel .dragging-right{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='m10 17 5-5-5-5v10z'/%3E%3Cpath fill='none' d='M0 24V0h24v24H0z'/%3E%3C/svg%3E");background-position:top 50% right 0;background-repeat:no-repeat}.jexcel_tabs>.jexcel_tab{display:none}.jexcel_tabs>.jexcel_tab_link{background-color:#f3f3f3;cursor:pointer;display:inline-block;margin-bottom:5px;margin-right:5px;padding:10px 20px}.jexcel_tabs>.jexcel_tab_link.selected{background-color:#ddd}.jexcel_hidden_index>colgroup>col:first-child,.jexcel_hidden_index>tbody>tr>td:first-child,.jexcel_hidden_index>thead>tr>td:first-child{display:none} +/*# sourceMappingURL=prefix-131.b184379d0dc5871b.css.map*/ \ No newline at end of file diff --git a/_static/prefix-131.b184379d0dc5871b.css.gz b/_static/prefix-131.b184379d0dc5871b.css.gz new file mode 100644 index 0000000..1299085 Binary files /dev/null and b/_static/prefix-131.b184379d0dc5871b.css.gz differ diff --git a/_static/prefix-131.b184379d0dc5871b.css.map b/_static/prefix-131.b184379d0dc5871b.css.map new file mode 100644 index 0000000..27d28b8 --- /dev/null +++ b/_static/prefix-131.b184379d0dc5871b.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-131.b184379d0dc5871b.css","mappings":"AAcA,MACI,sBAAuB,CACvB,sBACJ,CAEA,WAEI,wBAAyB,CADzB,UAEJ,CAEA,SAKI,kCAA0C,CAJ1C,wusBAAyusB,CAGzusB,uBAA2B,CAF3B,2BAA4B,CAC5B,qBAAsB,CAGtB,sBAAuB,CAEvB,qBAAsB,CADtB,cAAe,CAGf,gBAAgB,CADhB,UAEJ,CAEA,SAEI,wBAAyB,CADzB,UAEJ,CAGA,SACI,6BACJ,CAEA,UACI,8BACJ,CAEA,eACI,oCACJ,CAEA,gBACI,qCACJ,CAEA,gBACI,qCACJ,CAEA,iBACI,sCACJ,CAEA,cACI,mCACJ,CAEA,eACI,oCACJ,CAEA,iBACI,sCACJ,CAEA,kBACI,uCACJ,CAGA,mBACI,GAAK,SAAY,CACjB,GAAO,SAAc,CACzB,CAEA,2BACI,GAAK,SAAY,CACjB,GAAO,SAAc,CACzB,CAEA,oBACI,GAAK,SAAc,CACnB,GAAO,SAAY,CACvB,CAEA,4BACI,GAAK,SAAc,CACnB,GAAO,SAAY,CACvB,CAGA,yBACI,GAAK,2BAA8B,CACnC,GAAO,uBAA2B,CACtC,CAEA,iCACI,GAAK,2BAA8B,CACnC,GAAO,+BAAmC,CAC9C,CAEA,0BACI,GAAK,uBAA2B,CAChC,GAAO,2BAA8B,CACzC,CAEA,kCACI,GAAK,+BAAmC,CACxC,GAAO,mCAAsC,CACjD,CAGA,0BACI,GAAK,0BAA6B,CAClC,GAAO,uBAA2B,CACtC,CAEA,kCAEI,GAAK,0BAA6B,CAClC,GAAO,+BAAmC,CAC9C,CAEA,2BACI,GAAK,uBAA2B,CAChC,GAAO,0BAA6B,CACxC,CAEA,mCACI,GAAK,+BAAmC,CACxC,GAAO,kCAAqC,CAChD,CAGA,wBACI,GAAK,2BAA8B,CACnC,GAAO,uBAA2B,CACtC,CAEA,gCACI,GAAK,2BAA8B,CACnC,GAAO,+BAAmC,CAC9C,CAEA,yBACI,GAAK,uBAA2B,CAChC,GAAO,2BAA8B,CACzC,CAEA,iCACI,GAAK,+BAAmC,CACxC,GAAO,mCAAsC,CACjD,CAGA,2BACI,GAAK,0BAA6B,CAClC,GAAO,uBAA2B,CACtC,CAEA,mCACI,GAAK,0BAA6B,CAClC,GAAO,+BAAmC,CAC9C,CAEA,4BACI,GAAK,uBAA2B,CAChC,GAAO,0BAA6B,CACxC,CAEA,oCACI,GAAK,+BAAmC,CACxC,GAAO,kCAAqC,CAChD,CAGA,6CACI,mCACI,SACJ,CACJ,CAEA,wBACI,GACI,8BACJ,CACA,GACI,+BACJ,CACJ,CAEA,gBACI,GACI,sBACJ,CACA,GACI,uBACJ,CACJ,CAEA,cACI,0BAA2B,CAC3B,wBAAyB,CACzB,uBAAwB,CACxB,qBAAsB,CACtB,oBAAqB,CACrB,gBACJ,CAEA,SASI,kCAAmC,CALnC,qBAAqB,CAErB,iBAAiB,CACjB,cAAc,CAFd,mBAAmB,CAGnB,gBAAiB,CALjB,yBAOJ,CAEA,cAGI,wBAAwB,CAFxB,4BAA4B,CAC5B,UAEJ,CAEA,gBAOI,UAAW,CANX,uBAAwB,CAKxB,0BAA6B,CAF7B,cAAe,CADf,WAAY,CAEZ,gBAAiB,CAGjB,gBAAgB,CANhB,UAOJ,CAEA,qBACI,UACJ,CAEA,eACI,qBACJ,CAEA,oBACI,wBAAyB,CACzB,UACJ,CAQA,WAKI,0BAA2B,CAM3B,yCAA0C,CAC1C,uCAAwC,CARxC,qBAAqB,CADrB,YAAY,CAUZ,eAAe,CAZf,iBAAiB,CAKjB,wBAAyB,CACzB,uBAAwB,CACxB,qBAAsB,CACtB,oBAAqB,CACrB,gBAAiB,CARjB,YAYJ,CAEA,iBACI,aACJ,CAEA,oBAOI,+BAAgC,CAChC,QAAU,CAEV,YAAY,CAPZ,MAAQ,CAGR,eAAe,CADf,cAAc,CAId,SAAW,CARX,cAAc,CACd,KAAO,CAEP,YAOJ,CAEA,qBAEI,qBAAqB,CADrB,iBAEJ,CAEA,mBAMI,qBAAqB,CAHrB,gDAAoD,CACpD,6CAAiD,CACjD,wCAA4C,CAJ5C,iBAAiB,CACjB,YAKJ,CAEA,uBAEI,qBAAqB,CADrB,UAEJ,CAEA,gCACI,qBAAqB,CACrB,cAAc,CAEd,cAAe,CADf,WAEJ,CAEA,6BACI,cACJ,CAEA,kBACI,iBACJ,CAEA,uBAEI,eAAe,CACf,eAAgB,CAFhB,gBAGJ,CAEA,gBAEI,yPAGJ,CAEA,gCAJI,uBAA0B,CAC1B,2BAA2B,CAH3B,cAWJ,CALA,gBAEI,uPAGJ,CAEA,mBAEI,wBAAyB,CADzB,eAAgB,CAEhB,YACJ,CAEA,oBAEI,WAAW,CADX,YAEJ,CAEA,oBACI,YACJ,CAEA,yCACI,WACJ,CAEA,iBAEI,6UAA+T,CAC/T,qCAAqC,CACrC,2BAA2B,CAC3B,qBAAsB,CAJtB,kBAKJ,CAEA,gBAII,qBAAqB,CAHrB,gDAAoD,CACpD,6CAAiD,CACjD,wCAEJ,CAEA,kBAEI,qBAAqB,CADrB,qBAAqB,CAErB,iBAAiB,CACjB,WAAW,CACX,UACJ,CAEA,kBAGI,QAAU,CADV,oBAAoB,CAIpB,eAAe,CAEf,iBAAiB,CAJjB,WAAW,CACX,iBAAiB,CAEjB,gBAAgB,CANhB,UAQJ,CAEA,8BAEI,gBACJ,CAEA,oBACI,qBACJ,CAEA,oCAGI,yBAA0B,CAD1B,cAAc,CADd,wBAGJ,CAEA,oBAeI,kBAAkB,CAElB,4BAA4B,CAd5B,6BAA8B,CAC9B,qBAAsB,CAGtB,mBAAoB,CACpB,gBAAiB,CACjB,mBAAoB,CACpB,oBAAqB,CACrB,YAAa,CAEb,0BAA2B,CAC3B,6BAA8B,CAb9B,YAAY,CAIZ,qBAaJ,CAEA,wBACI,eACJ,CAEA,oBAII,MAAQ,CAHR,cAAc,CAEd,KAAO,CADP,UAGJ,CAEA,uCAKI,QAAU,CADV,MAAQ,CAFR,cAAc,CACd,UAGJ,CAEA,wDACI,aACJ,CAEA,kBACI,SACJ,CACA,oBACI,UACJ,CAEA,QAEI,YAAa,CACb,YAAa,CAFb,iBAGJ,CAEA,gBAKI,kCAAmC,CAOnC,qBAAqB,CAJrB,yBAA0B,CAC1B,iBAAkB,CAClB,8GAAoH,CACpH,sGAA4G,CAE5G,qBAAsB,CAPtB,iBAAkB,CAJlB,MAAS,CAKT,mBAAoB,CANpB,iBAAkB,CAGlB,gBAAiB,CADjB,YAWJ,CAEA,sBAEI,qBAAsB,CADtB,WAEJ,CAEA,cACI,aACJ,CAEA,cAEI,WAAW,CADX,UAEJ,CAEA,WACI,qBACJ,CAEA,iBAKI,8PAAoQ,CADpQ,uBAAuB,CAFvB,2BAA2B,CAC3B,qBAAsB,CAFtB,+BAKJ,CAEA,mBAKI,eAAkB,CAHlB,QAAW,CAIX,qBAAsB,CAFtB,gBAAgB,CAHhB,cAAe,CAEf,UAIJ,CAEA,cAQI,8CAAoD,CACpD,2CAAiD,CACjD,sCAA4C,CAE5C,qBAAsB,CATtB,yBAA0B,CAF1B,YAAa,CACb,aAAc,CAKd,eAAiB,CADjB,YAAa,CADb,gBAAiB,CADjB,wBAAyB,CAOzB,UAEJ,CAEA,iCACI,aACJ,CAEA,iBAYE,0BAA2B,CANzB,+BAAiC,CACjC,QAAW,CAGX,YAAa,CAPb,MAAS,CAET,eAAgB,CADhB,cAAe,CAIf,SAAY,CAPZ,cAAe,CACf,KAAQ,CAWR,wBAAyB,CACxB,uBAAwB,CACtB,qBAAsB,CACrB,oBAAqB,CACjB,gBAAiB,CARzB,YAUJ,CAQA,cAGI,eAAe,CASf,wBAAyB,CAHzB,wCAA0D,CAC1D,qCAAuD,CACvD,gCAAkD,CAPlD,UAAW,CAcX,YAAY,CAbZ,cAAe,CAWf,QAAU,CACV,YAAY,CAFZ,aAAkB,CAdlB,cAAc,CAKd,wBAAyB,CACzB,qBAAsB,CACtB,gBAAiB,CANjB,aAiBJ,CAEA,iCACI,oBACJ,CAEA,kBACI,qBAAsB,CAKtB,cAAe,CAJf,aAAc,CAMd,sBAAsB,CADtB,cAAe,CAJf,wBAAyB,CAEzB,iBAAkB,CADlB,WAKJ,CAEA,oBACI,UAAW,CACX,oBACJ,CAEA,uBACI,WAAY,CACZ,iBACJ,CAEA,oCACI,aACJ,CAEA,+CACI,kBACJ,CAEA,mCACI,4BAA6B,CAC7B,cAAc,CACd,WACJ,CAEA,iBACI,wBAAyB,CACzB,eAAgB,CAEhB,iBAAiB,CADjB,cAEJ,CAQA,SAaI,qBAAsB,CAEtB,wBAAyB,CADzB,0BAA2B,CAG3B,kBAAmB,CARnB,+BAAgC,CAGhC,YAAa,CATb,MAAO,CAGP,eAAe,CAJf,cAAc,CAEd,KAAM,CAMN,+BAAgC,CAChC,uBAAwB,CANxB,UAAW,CAEX,aAWJ,CAEA,4BAOI,qBAAqB,CACrB,kBAAkB,CAJlB,qBAAsB,CACtB,aAAa,CAFb,eAAe,CAOf,SAAU,CACV,sBAAuB,CACvB,8BAA+B,CAN/B,qBAAqB,CAJrB,UAWJ,CAEA,yBAEI,YAAY,CACZ,iBACJ,CAEA,wCAEI,aAAa,CACb,eAAgB,CAChB,WACJ,CAEA,0CAEI,WACJ,CAEA,yBAKI,qBAAsB,CACtB,kBAAmB,CAJnB,yBAA0B,CAC1B,YAAa,CACb,cAAe,CAGf,iBACJ,CAEA,6BAGI,0BAA0B,CAD1B,WAAW,CAEX,iBAAiB,CACjB,UACJ,CACA,yCAEI,aACJ,CAEA,+BAII,4BAA6B,CAF7B,QAAW,CAGX,yBAA0B,CAF1B,QAAW,CAIX,YAAa,CADb,UAEJ,CAUA,WAGI,0BAA2B,CAQ3B,uCAAwC,CADxC,eAAe,CADf,qBAAsB,CAPtB,cAAc,CAUd,oBAAqB,CARrB,wBAAyB,CACzB,uBAAwB,CACxB,qBAAsB,CACtB,oBAAqB,CACrB,gBAKJ,CAEA,+BAEI,UACJ,CAEA,oBAOI,+BAAgC,CAChC,QAAU,CAGV,YAAY,CAPZ,MAAQ,CAER,eAAe,CADf,cAAc,CAId,SAAW,CAPX,cAAc,CACd,KAAO,CAOP,YAEJ,CAEA,iBAEI,iBACJ,CAEA,sCAEI,uBACJ,CAEA,mCAEI,yCACJ,CAEA,4BAGI,QAAU,CADV,SAAW,CAEX,iBACJ,CAEA,kBAGI,eAAgB,CAOhB,uBAAwB,CACxB,oBAAqB,CALrB,6NAAuO,CADvO,qCAAqC,CADrC,2BAA4B,CAK5B,qBAAsB,CADtB,cAAc,CAId,kBAAkB,CALlB,sBAAuB,CALvB,UAWJ,CAEA,yBAOI,YAAY,CALZ,eAAgB,CAEhB,iBAAiB,CACjB,UAAW,CAFX,wBAAyB,CAGzB,OAEJ,CAEA,qBAEI,iBAAkB,CAElB,iBAAiB,CADjB,mCAAoC,CAEpC,YACJ,CAEA,iBAII,yBAA0B,CAF1B,YAAY,CACZ,aAAa,CAKb,eAAgB,CADhB,YAAY,CADZ,gBAAgB,CADhB,wBAIJ,CAEA,mBAII,qBAAqB,CADrB,QAAU,CADV,iBAGJ,CAMA,gBAQI,kBAAmB,CAFnB,UAAW,CACX,YAAa,CAFb,iBAAkB,CAFlB,eAAgB,CAChB,sBAAuB,CAFvB,kBAOJ,CAEA,iBAKI,kBAAkB,CADlB,WAAY,CAFZ,iBAAiB,CACjB,UAGJ,CAEA,uBAGI,WAAW,CADX,UAEJ,CAEA,iBAKI,aAAc,CAHd,cAAgB,CAEhB,iBAAkB,CADlB,sBAGJ,CAIA,qCAEI,qBAAqB,CAGrB,yBACJ,CAEA,wCAEI,qBACJ,CAEA,sEACI,kBACJ,CAEA,6EACI,aACJ,CAEA,sCAKI,qBAAqB,CAFrB,wBAAwB,CAGxB,qBAAqB,CAFrB,QAAU,CAIV,gBAAgB,CADhB,eAAe,CALf,iBAAiB,CAOjB,eACJ,CAEA,mCAII,wBACJ,CAQA,8EAEI,wBAAwB,CACxB,UACJ,CAEA,uCAKI,wBAAwB,CAHxB,gSAAmU,CAEnU,qCAAqC,CADrC,2BAA2B,CAG3B,UACJ,CAEA,oCAEI,cACJ,CAEA,oDAEI,iBACJ,CAEA,yCAGI,eAAgB,CADhB,gBAEJ,CAKA,oDACI,YACJ,CAEA,sDACI,aACJ,CAEA,uCAOI,qBAAqB,CAFrB,+BAA+B,CAF/B,QAAU,CAKV,qBAAsB,CAJtB,MAAQ,CAFR,cAAc,CAId,UAGJ,CAEA,mCAKI,qBAAqB,CAHrB,+CAAqD,CACrD,4CAAkD,CAClD,uCAA6C,CAE7C,aACJ,CAEA,qCAII,wBAAwB,CACxB,4BAA4B,CAF5B,YAAY,CADZ,iBAIJ,CAEA,wCAMI,aAAc,CAKd,eAAgB,CADhB,iBAEJ,CAEA,0EAPI,+BAAgC,CALhC,aAAc,CAOd,iBAAkB,CANlB,wBAoBJ,CAEA,sCAKI,wBAAwB,CAHxB,gSAAmU,CAEnU,sCAAsC,CADtC,2BAA2B,CAG3B,UACJ,CAEA,oCAEI,wBAAwB,CACxB,UACJ,CAIA,qCAOI,wBAAwB,CADxB,WAAW,CAFX,MAAQ,CAMR,iBAAiB,CAFjB,SAAW,CANX,cAAc,CACd,KAAO,CAEP,UAAU,CAIV,YAEJ,CAEA,iEAGI,qBAAqB,CACrB,mCAAoC,CAFpC,YAGJ,CAEA,uDAMI,gfAAqjB,CAFrjB,uBAAyB,CACzB,yBAA0B,CAF1B,2BAA4B,CAD5B,QAAW,CAOX,YAAa,CAFb,2BAA6B,CAC7B,4BAEJ,CAEA,sDAEI,aACJ,CAEA,0CAEI,UACJ,CAEA,sCAEI,cAAc,CAEd,OAAS,CADT,KAEJ,CAEA,wCAEI,eACJ,CAEA,sCAII,qBAAqB,CADrB,kBAAkB,CADlB,eAGJ,CAEA,2CAGI,+BAAgC,CADhC,4BAA6B,CAI7B,eAAgB,CADhB,2BAEJ,CAEA,4CAKI,2BAA2B,CAH3B,WAAW,CAEX,WAAW,CADX,UAGJ,CAEA,iDAEI,4RACJ,CAEA,+CAEI,4QACJ,CAEA,qCAOI,qBAAqB,CAHrB,+BAAgC,CAIhC,cAAe,CAFf,2BAGJ,CAEA,4CAGI,2BAA4B,CAD5B,eAAgB,CADhB,sBAGJ,CAEA,oEAEI,4BACJ,CAEA,yCAEI,oSAAmU,CAEnU,sCAAsC,CADtC,2BAEJ,CAQA,qCAEI,aACJ,CAEA,kCAEI,YACJ,CAEA,iCAEI,qBACJ,CAEA,sCAEI,+BAAgC,CAGhC,eAAgB,CADhB,mBAAmB,CADnB,gBAGJ,CAEA,gCAOI,qBAAqB,CAHrB,+BAAgC,CAEhC,2BAEJ,CAEA,oCAEI,oSAAmU,CAEnU,sCAAsC,CADtC,2BAEJ,CAEA,gDAEI,gBAGI,QAAU,CACV,SAAW,CAFX,oBAGJ,CAEA,qCAEI,cACJ,CACJ,CAEA,qBACI,wBACJ,CAUC,mBACG,qBACJ,CAEA,kBACK,sBACL,CAEA,mCACI,YACJ,CAEA,SACI,YAAY,CACZ,qBAEJ,CAEA,4CAEI,kBAAkB,CADlB,gBAAgB,CAEhB,YACJ,CAEA,iBAMI,0BAA2B,CAC3B,kBAAmB,CACnB,WAAY,CACZ,yBAA0B,CAQ1B,iBAAiB,CANjB,yGAA+G,CAC/G,iGAAuG,CAXvG,cAAe,CACf,0BAA2B,CAC3B,2BAA4B,CAC5B,0BAA2B,CAC3B,mBAAoB,CASpB,cAAiB,CACjB,WAAY,CACZ,kBAEJ,CAEA,wCACI,wBACJ,CAEA,qBACI,WACJ,CAEA,4CACI,iBAAiB,CACjB,kBACJ,CAEA,qBACI,wBAAyB,CACzB,qBAAsB,CACtB,oBAAqB,CACrB,gBACJ,CAEA,uBAMI,UAAU,CALV,aAAa,CACb,cAAc,CAEd,WAAW,CACX,gBAAgB,CAFhB,UAIJ,CAEA,wBAEI,4BAA4B,CAD5B,QAAU,CAQV,iBAAiB,CAHjB,aAAa,CACb,WAAW,CAGX,UAAU,CAFV,YAAY,CAHZ,aAMJ,CAEA,mCAKI,wBAAyB,CAHzB,WAAY,CAEZ,UAAW,CADX,SAAY,CAFZ,SAKJ,CAEA,+BACI,qBAAqB,CACrB,YACJ,CAEA,iDACI,wBAAwB,CACxB,iBACJ,CAEA,6BACI,UACJ,CAEA,8BACI,wBACJ,CAEA,gBACI,oBAAoB,CACpB,gBACJ,CAEA,0BACI,eACJ,CAEA,uBAEI,UAAU,CADV,iBAEJ,CAEA,yBACI,UAAU,CAIV,SAAS,CAFT,iBAAiB,CADjB,wBAA6B,CAE7B,OAEJ,CAEA,oBACI,qBAAqB,CAErB,YAAY,CADZ,WAEJ,CAEA,eAGI,qBAAqB,CADrB,qBAAqB,CAIrB,gBAAgB,CAChB,iBAAiB,CAFjB,kBAAkB,CADlB,eAAe,CAHf,iBAOJ,CAEA,mBAGI,kBAAkB,CADlB,YAAY,CAEZ,eAAe,CAGf,gBACJ,CAEA,yBAEI,wBACJ,CAEA,uBAII,kBAAkB,CADlB,WAAW,CAEX,gBAAgB,CAHhB,UAIJ,CAIA,SAGI,qBAAsB,CADtB,cAAc,CADd,eAAe,CAGf,iBACJ,CAEA,eACI,YACJ,CAEA,aAGI,UAAU,CAEV,kBAAkB,CADlB,iBAAiB,CAFjB,eAAe,CADf,SAKJ,CAEA,wBAEI,eAAe,CADf,eAEJ,CAEA,8BAEI,aAAa,CADb,cAEJ,CAEA,uBAKI,UAAU,CADV,cAAe,CAFf,kBAAkB,CADlB,eAAe,CAKf,gBAAgB,CAHhB,wBAIJ,CAEA,sBACI,YACJ,CAEA,wBAEI,oSAA2S,CAD3S,UAAU,CASV,cAAc,CAHd,cAAc,CAEd,WAAW,CAHX,WAAW,CAHX,iBAAiB,CAEjB,OAAO,CAMP,wBAA6B,CAP7B,KAAK,CAIL,UAIJ,CAEA,0BAOI,sBAAuB,CACvB,qBAAsB,CACtB,mBAAoB,CACpB,iBAAkB,CATlB,wBAAyB,CACzB,uBAAwB,CACxB,qBAAsB,CACtB,mBAAoB,CACpB,gBAMJ,CAEA,aACI,4BAA4B,CAC5B,qBACJ,CAEA,mBACI,wBACJ,CAEA,cACI,w8CAAwwD,CACxwD,2BAA4B,CAC5B,qBAAsB,CAEtB,WAAW,CADX,UAEJ,CAYA,UAQI,+BAAiC,CADjC,QAAQ,CAHR,MAAM,CAHN,cAAc,CAId,OAAO,CACP,KAAK,CAHL,UAAU,CADV,aAOJ,CAEA,gBAYI,0CAA2C,CAC3C,kCAAmC,CAHnC,qBAAgB,CAChB,iBAAiB,CADjB,4BAAgB,CAThB,UAAU,CACV,aAAa,CAIb,WAAW,CAFX,kBAAe,CACf,UASJ,CAEA,eACI,4BACJ,CAEA,qBAII,kCAA4B,CAF5B,kBAGJ,CAGA,QAKI,iBAAkB,CAClB,yBAA0B,CAC1B,sBAAuB,CALvB,qBAAsB,CAMtB,aAAa,CALb,aAAa,CACb,qBAAqB,CAHrB,UAQJ,CAEA,mBAMI,qBAAqB,CADrB,WAAW,CAFX,MAAQ,CAFR,iBAAiB,CACjB,KAAO,CAEP,UAAU,CAGV,YACJ,CAEA,aAGI,aAAc,CAFd,eAAe,CACf,YAEJ,CAEA,iBACI,kBACJ,CAEA,cACI,aACJ,CAEA,uBAII,QAAU,CAFV,YAAY,CACZ,YAAY,CAFZ,UAIJ,CAEA,6BACI,UACJ,CAEA,2BAMI,uBAAwB,CACxB,oBAAqB,CACrB,eAAgB,CANhB,oCAAqC,CACrC,oCAAqC,CACrC,UAAW,CACX,cAAc,CAJd,YAQJ,CAEA,aAEI,aACJ,CACA,YAGI,eAAe,CADf,iBAEJ,CAEA,qBAGI,YAAY,CADZ,iBAEJ,CAEA,iBAKI,qBAAqB,CACrB,aAAa,CAFb,iBAAiB,CADjB,cAAc,CADd,UAKJ,CAEA,wBAGI,oCAAqC,CAKrC,uZAA4c,CAC5c,4BAA4B,CAF5B,2BAA2B,CAH3B,oCAAqC,CACrC,UAAW,CAKX,cAAc,CARd,YAAY,CAIZ,iBAKJ,CAEA,wBAGI,YAAY,CADZ,YAEJ,CAEA,uEAKI,cAAc,CAFd,mBAAkB,CAClB,iBAEJ,CAEA,oBACI,eACJ,CAEA,uBASI,oCAAqC,CADrC,oCAAqC,CAPrC,UAAW,CACX,aAAc,CAKd,UAAW,CAFX,MAAS,CAFT,cAAe,CACf,KAAQ,CAER,WAIJ,CAEA,mBACI,GAAO,WAAY,CAAE,SAAY,CACjC,IAAM,SAAY,CAClB,IAAM,SAAY,CAClB,IAAM,QAAW,CACjB,IAAM,SAAY,CAClB,GAAK,SAAY,CACrB,CAEA,gDAEI,WACI,uCAAwC,CACxC,0BACJ,CAEA,aACI,WACJ,CAEA,cAQI,qBAAqB,CAJrB,WAAW,CAEX,eAAe,CALf,QAAU,CAIV,eAAe,CAHf,SAAW,CACX,UAMJ,CAEA,4EAJI,wFAMJ,CACJ,CAEA,MAKI,wBAAwB,CAFxB,qBAAsB,CADtB,WAAW,CAEX,eAEJ,CAEA,iBAEI,oBAAoB,CACpB,UAAU,CAFV,gCAAgC,CAShC,eAAgB,CAHhB,MAAQ,CAHR,WAAW,CACX,cAAc,CAMd,iBAAiB,CALjB,KAAO,CAGP,UAAU,CADV,aAIJ,CAkCA,aAKI,4BAA6B,CAF7B,oCAAqC,CAFrC,iBAAkB,CAGlB,yBAA0B,CAG1B,YAAa,CADb,WAAY,CAJZ,UAMJ,CAEA,oBACI,qBAAsB,CACtB,UACJ,CAEA,WAEI,0BAA2B,CAD3B,SAEJ,CAEA,YACI,yBAA0B,CAC1B,cACJ,CAEA,iBACI,wBACJ,CAIA,cAMI,kCAAmC,CAGnC,0BAA2B,CAI3B,qBAAsB,CACtB,mCAAoC,CANpC,6BAA8B,CAE9B,qBAAsB,CAEtB,WAAY,CAPZ,QAAS,CAJT,cAAc,CACd,KAAM,CAKN,+BAAqC,CAIrC,uBAA6B,CAR7B,UAAW,CACX,WAWJ,CAEA,kBACI,QACJ,CAEA,wBAeI,kBAAkB,CARlB,6BAA8B,CAC9B,qBAAsB,CAGtB,YAAa,CAEb,0BAA2B,CAP3B,WAAY,CAQZ,6BAA8B,CAX9B,MAAO,CAFP,aAAc,CACd,iBAAkB,CAElB,KAAM,CAKN,qBAAqB,CAJrB,UAWJ,CAEA,4BACI,iBACJ,CAEA,kCACI,YACJ,CAEA,sCAEI,gBACJ,CAEA,iCACI,UACJ,CAEA,8BACI,aACJ,CAEA,gCAEI,aAAa,CADb,WAEJ,CAEA,0CACI,kBAAkB,CAElB,WAAW,CACX,gBAAgB,CAFhB,UAGJ,CAEA,oBACI,yBACJ,CAEA,aACI,eACJ,CAEA,aAII,qBAAsB,CAFtB,aAAc,CACd,cAAe,CAFf,YAIJ,CAEA,mBAEI,aAAc,CAQd,cAAe,CANf,gBAAiB,CAKjB,aAAc,CANd,qBAAsB,CAGtB,eAAgB,CADhB,iBAAkB,CAGlB,sBAAuB,CAPvB,wBAAyB,CAMzB,kBAIJ,CAEA,oBACI,qBAAqB,CACrB,UACJ,CAEA,oBAEI,4BAA4B,CAD5B,yBAEJ,CAEA,oBAGI,aAAc,CACd,cAAe,CAFf,YAAY,CADf,wBAID,CAEA,sBACI,gBAAgB,CAChB,iBACJ,CAEA,yBAGI,aAAc,CACd,cAAe,CAFf,YAAY,CAGZ,iBAAiB,CAJjB,wBAKJ,CAEA,aAGI,sBAAuB,CAFvB,YAAa,CACb,gBAAiB,CAEjB,WACJ,CAEA,YAKI,qBAAsB,CAFtB,eAAgB,CAChB,cAAe,CAEf,eAAgB,CAJhB,mBAAoB,CADpB,gBAWJ,CAEA,eACI,gBACJ,CAEA,6BAII,iBACJ,CAEA,mBAEI,oCAAoC,CACpC,iBAAiB,CAFjB,UAGJ,CAEA,yBAGI,YAAY,CACZ,6BAA6B,CAH7B,iBAAiB,CACjB,wBAGJ,CAEA,uBACI,oCAAoC,CACpC,UAAU,CACV,OACJ,CAEA,aAQI,eAAgB,CAIhB,oCAAqC,CAFrC,6BAA8B,CAC9B,qBAAsB,CAJtB,YAAY,CAJZ,MAAO,CACP,QAAS,CAET,eAAe,CAOf,WAAW,CAZX,cAAc,CACd,KAAM,CAGN,UAAU,CAIV,YAKJ,CAEA,kBACI,iDAAwD,CACxD,yCACJ,CAEA,eACI,yBACJ,CAIA,gBAOI,kBAAmB,CAJnB,QAAS,CAQT,oCAAqC,CANrC,MAAO,CADP,QAAS,CAQT,WAAW,CAVX,cAAc,CAMd,WAKJ,CAEA,oCANI,6BAA8B,CAC9B,qBAAsB,CAJtB,UA0BJ,CAjBA,oBAcI,kBAAkB,CAElB,cAAc,CAVd,mBAAoB,CACpB,gBAAiB,CACjB,mBAAoB,CACpB,oBAAqB,CACrB,YAAa,CAEb,0BAA2B,CAC3B,4BAA6B,CAT7B,qBAaJ,CAEA,wBAGI,MAAM,CACN,WAAW,CAFX,iBAGJ,CAEA,kBAGI,oBAAoB,CADpB,oBAEJ,CAEA,kBAEI,aACJ,CAEA,qBAII,aAAa,CADb,aAAa,CADb,cAGJ,CAEA,uFAII,yBACJ,CAKA,eAEI,qBAAqB,CAErB,+BAA+B,CAD/B,4BAA4B,CAG5B,eAAe,CADf,iBAEJ,CAEA,qBAEI,YACJ,CAEA,uBAqBI,kBAAkB,CAflB,+BAA+B,CAG/B,6BAA8B,CAC9B,qBAAsB,CAGtB,mBAAoB,CACpB,gBAAiB,CACjB,mBAAoB,CACpB,oBAAqB,CACrB,YAAa,CAEb,4BAA6B,CAG7B,gBAAgB,CAjBhB,aAAa,CAeb,6BAA8B,CAb9B,iBAAiB,CAJjB,mBAAmB,CADnB,gBAAgB,CAEhB,wBAAwB,CAOxB,qBAYJ,CAEA,kCAEI,eACJ,CAEA,qBAEI,UACJ,CAEA,wDAGI,4BAA4B,CAK5B,qBAAqB,CAJrB,aAAa,CACb,QAAU,CAHV,YAAY,CAIZ,SAAW,CACX,UAEJ,CAEA,wBAEI,YACJ,CAEA,qEAEI,iBACJ,CAEA,yEAEI,oSAAmU,CACnU,2BAA4B,CAC5B,UAAU,CAKV,WAAW,CAFX,gBAAgB,CADhB,iBAAiB,CADjB,iBAAkB,CAGlB,UAEJ,CAEA,yFAEI,kBACJ,CAEA,0BACI,aACJ,CAEA,4CACI,QAAW,CACX,+BAAgC,CAChC,YAAa,CACb,wBACJ,CAEA,uDACI,eACJ,CAEA,sEACI,QAAU,CACV,WACJ,CAEA,qBAKI,kBAAkB,CAClB,aAAa,CALb,UAAU,CACV,iBAAiB,CAEjB,eAAe,CADf,cAIJ,CAEA,uCACI,YAAY,CACZ,0BAA2B,CAC3B,OACJ,CAEA,2CACI,iBACJ,CAEA,6CAQI,oBAAoB,CADpB,kBAAkB,CAJlB,UAAU,CACV,cAAc,CAFd,WAAW,CAGX,gBAAgB,CAChB,iBAAiB,CALjB,UAQJ,CAEA,mDAQI,4BAA4B,CAD5B,kBAAkB,CALlB,UAAU,CAGV,cAAc,CADd,WAAW,CAEX,gBAAgB,CAHhB,UAMJ,CAEA,6BACI,aAAa,CAIb,aAAa,CAFb,mBAAmB,CADnB,gBAAgB,CAEhB,wBAAwB,CAExB,qBACJ,CAEA,mCACI,eAAe,CAIf,WAAW,CAHX,0BAA6B,CAC7B,cAAc,CAId,WAAW,CACX,gBAAgB,CAJhB,iBAAiB,CAEjB,UAGJ,CAEA,4CAEI,eACJ,CAEA,0CACI,aACJ,CAEA,6BAEI,qBAAqB,CADrB,4BAA4B,CAE5B,YACJ,CAEA,kCAGI,yBAAyB,CAFzB,eAAe,CASf,aAAa,CAJb,WAAW,CAJX,0BAA6B,CAE7B,cAAc,CAId,WAAW,CACX,gBAAgB,CAJhB,iBAAiB,CAEjB,UAIJ,CAEA,8BAGI,YAAY,CAEZ,eAAgB,CAJhB,iBAAiB,CACjB,kBAAkB,CAIlB,sBAAuB,CAFvB,kBAGJ,CAEA,oCACI,aAAa,CAGb,eAAgB,CAFhB,sBAAuB,CACvB,UAEJ,CAEA,qCAEI,aAAc,CAId,aAAa,CALb,cAAe,CAGf,eAAgB,CADhB,sBAAuB,CAEvB,kBAEJ,CAEA,yCAGI,kBAAkB,CAClB,aAAa,CAFb,WAAW,CADX,UAIJ,CAEA,+CAGI,kBAAkB,CAClB,aAAa,CAFb,WAAW,CADX,UAIJ,CAEA,mDAUI,WACJ,CAEA,4GAXI,oBAAqB,CAKrB,kBAAmB,CAJnB,UAAW,CAMX,aAAc,CAJd,WAAY,CACZ,gBAAiB,CALjB,iBAAkB,CAOlB,iBAAkB,CAJlB,UAoBJ,CAXA,yDAUI,WACJ,CAEA,2CACI,oBAAqB,CACrB,SACJ,CAEA,iDACI,sBAAuB,CACvB,WACJ,CAEA,2CACI,YACJ,CAEA,oCAGI,UAAU,CAFV,WAAW,CACX,cAAe,CAEf,iBAAiB,CACjB,kBACJ,CAEA,qCACI,iBACJ,CAEA,sCACI,oBAAoB,CACpB,kBAAkB,CAKlB,UAAU,CADV,cAAe,CAFf,WAAW,CACX,gBAAgB,CAGhB,iBAAiB,CALjB,UAMJ,CAEA,4CACI,YACJ,CAIA,cAGI,oBAAoB,CAEpB,UAAU,CAHV,iBAAiB,CAEjB,SAEJ,CAEA,kBAEI,oBAAoB,CAKpB,kBAAkB,CAJlB,UAAU,CAMV,aAAa,CAJb,WAAW,CACX,gBAAgB,CAIhB,iBAAiB,CAFjB,iBAAiB,CAJjB,UAOJ,CAEA,wBAEI,YACJ,CAIA,cAEI,qBAAqB,CAErB,+BAA+B,CAD/B,4BAA4B,CAK5B,QAAU,CAFV,eAAe,CADf,iBAAiB,CAEjB,iBAAiB,CAEjB,UAAU,CACV,WACJ,CAEA,8BAEI,wGAAqI,CAGrI,8CAAgD,CADhD,6BAA8B,CAD9B,0BAA2B,CAG3B,iBAAiB,CAEjB,oBAAoB,CADpB,iBAEJ,CAEA,oBAEI,aAAc,CAEd,mBAAoB,CADpB,gBAEJ,CAEA,+BAGI,+BAA+B,CAD/B,4BAEJ,CAEA,oBAEI,YACJ,CAIA,kBAGI,4BAA4B,CAF5B,QAAU,CACV,YAEJ,CAEA,wBACI,wBAAyB,CAIzB,qZAA4b,CAE5b,uBAA+B,CAD/B,2BAA4B,CAJ5B,QAAW,CACX,iBAAkB,CAClB,YAAa,CAIb,iBAAkB,CAClB,UACJ,CAEA,6BAII,UAAU,CADV,eAAe,CADf,cAAc,CADd,iBAIJ,CAIA,aAEE,uBAAwB,CACxB,aAAc,CACd,UACF,CAEA,mBAEE,YACF,CAEA,4CAKI,aAAe,CACf,eAAgB,CAChB,mBAAoB,CAHpB,cAAe,CADf,UAAW,CADX,UAMJ,CAEA,mCAEI,uBAAuB,CACvB,eAAe,CAGf,eAAe,CAIf,QAAU,CAFV,kBAAkB,CAGlB,6BAA+B,CAJ/B,cAAc,CAFd,WAAW,CAIX,gBAAgB,CALhB,UAQJ,CAEA,+BAII,aAAc,CACd,eAAe,CACf,mBAAmB,CAHnB,cAAc,CADd,UAKJ,CAEA,+BAII,eAAe,CAGf,QAAU,CADV,kBAAkB,CAElB,6BAA+B,CAH/B,cAAc,CAFd,WAAW,CADX,UAOJ,CAEA,wBAII,aAAe,CACf,sBAAuB,CACvB,wBAAyB,CAGzB,mBAAmB,CAFnB,mBAAoB,CACpB,iBAAkB,CALlB,cAAe,CADf,UAQJ,CAQA,0DAEI,eAAe,CACf,UACJ,CAEA,wBAGI,eAAe,CAGf,QAAU,CADV,kBAAkB,CAElB,6BAA+B,CAH/B,cAAc,CAFd,WAAW,CADX,UAOJ,CAOA,sEAEE,eACF,CAKA,cAaI,uBAAwB,CAExB,0BAA2B,CAD3B,4BAA6B,CAG7B,oBAAqB,CARrB,+BAAgC,CALhC,QAAS,CAQT,YAAa,CATb,MAAO,CAGP,eAAe,CAJf,cAAc,CAQd,+BAAgC,CAChC,uBAAwB,CANxB,UAAW,CAEX,aAWJ,CAEA,oCAGI,mBAAoB,CADpB,UAEJ,CAEA,kCAEI,aAAa,CACb,eAAgB,CAChB,WACJ,CAEA,oCAEI,WACJ,CAEA,kCAII,qBAAqB,CACrB,iBAAiB,CAHjB,qBAAsB,CACtB,WAGJ,CAEA,sCAKI,yBAAyB,CAHzB,eAAe,CACf,eAAgB,CAChB,WAAW,CAEX,iBAAiB,CACjB,UACJ,CACA,kDAEI,YACJ,CAEA,wCAII,4BAA4B,CAF5B,QAAU,CAGV,yBAAyB,CAGzB,aAAa,CALb,QAAU,CAIV,YAAY,CADZ,UAGJ,CAEA,4DAEI,SACJ,CAIA,SAGI,uCAAwC,CADxC,cAEJ,CAEA,oBALI,oBAgBJ,CAXA,WASI,4BAA8B,CAL9B,kBAAmB,CAInB,qBAAuB,CALvB,kBAAmB,CAFnB,iBAAkB,CAKlB,yBAA2B,CAD3B,0BAA2B,CAK3B,4BAA8B,CAH9B,oBAIJ,CAEA,kBAQE,0CAAoD,CACpD,0BAA4B,CAL5B,UAMF,CAEA,mCANE,qBAAsB,CACtB,kBAAmB,CANnB,UAAW,CAIX,WAAY,CAFZ,MAAO,CADP,iBAqBF,CAXA,iBAQE,oCAAyC,CACzC,gCAAmC,CACnC,8BAAgC,CANhC,UAOF,CAEA,wBAEE,gCAAmC,CADnC,UAEF,CAEA,sCACI,iCACJ,CAEA,eACI,YACJ,CAEA,yBACI,kCACJ,CAEA,gCACI,gDACJ,CAEA,+BACI,iCACJ,CAIA,gDAEI,wBACJ,CAEA,uCAEI,wBACJ,CAEA,2CAEI,wBACJ,CAEA,sCAEI,wBACJ,CAEA,cAEI,UAAc,CACd,SACJ,CAEA,uBAEI,UACJ,CAEA,wBAEI,UACJ,CAEA,4BAEI,UACJ,CAGA,QASI,qBAAqB,CADrB,qBAAqB,CAMrB,iBAAiB,CARjB,4CAA6C,CAC7C,yCAA0C,CAI1C,qBAAsB,CANtB,UAAU,CAFV,QAAQ,CASR,gBAAgB,CAXhB,cAAc,CACd,OAAO,CAQP,8BAAgC,CANhC,SAAS,CAST,YAEJ,CAEA,eAQI,kBAAmB,CAEnB,kFAAuF,CACvF,oDAAyD,CAJzD,qBAAsB,CAFtB,mBAAmB,CAInB,gGAAkG,CAGlG,eAAe,CATf,MAAM,CAGN,YAAY,CALZ,iBAAiB,CACjB,KAAK,CAEL,UASJ,CAEA,gBAGI,eAAe,CADf,eAAe,CADf,YAGJ,CACA,iBACI,aACJ,CAEA,wBACI,YACJ,CAEA,cAEI,oSAA2S,CAD3S,UAAU,CASV,cAAc,CAHd,cAAc,CAEd,WAAW,CAHX,WAAW,CAHX,iBAAiB,CAEjB,OAAO,CAMP,wBAA6B,CAP7B,KAAK,CAIL,UAIJ,CAEA,mBAMI,eAAkB,CAJlB,qBAAuB,CAEvB,MAAS,CADT,KAAQ,CAER,cAAe,CAJf,oBAMJ,CAGA,iBAYE,0BAA2B,CANzB,+BAAiC,CACjC,QAAW,CAGX,YAAa,CAPb,MAAS,CAET,eAAgB,CADhB,cAAe,CAIf,SAAY,CAPZ,cAAe,CACf,KAAQ,CAWR,wBAAyB,CACxB,uBAAwB,CACtB,qBAAsB,CACrB,oBAAqB,CACjB,gBAAiB,CARzB,YAUJ,CAGA,eAGI,6BAA8B,CAC9B,qBAAsB,CACtB,YAAa,CAJb,cAAe,CACf,aAIJ,CAEA,yBAII,iBAAkB,CAHlB,iDAAwD,CACxD,yCAAgD,CAChD,YAEJ,CAEA,qBAEI,oUAAuT,CADvT,UAAW,CAKX,cAAe,CAHf,cAAe,CAEf,WAAY,CADZ,UAGJ,CAEA,qBACI,eACJ,CAEA,sBAEI,kBACJ,CAEA,4BACI,YACJ,CAEA,qBACI,gBACJ,CAEA,2BACI,YACJ,CAEA,yBACI,UACJ,CAEA,oBAGI,MAAO,CADP,cAAgB,CAEhB,mBAAqB,CAHrB,wBAIJ,CAEA,+CACI,eACI,KAAQ,CACR,UACJ,CACA,yBACI,8BAAkC,CAClC,qBACJ,CACJ,CAEA,yBACI,eACI,QACJ,CACA,yBACI,qBAAsB,CACtB,kBAA4B,CAC5B,gDAA6E,CAC7E,UAAW,CAEX,WAAY,CACZ,YAAa,CAFb,WAGJ,CACJ,CAEA,sBAKI,sBAAuB,CAEvB,mBAAoB,CAEpB,wBAAyB,CAEzB,qBAAsB,CADtB,0BAA2B,CAE3B,kBAAmB,CAXnB,mBAAoB,CACpB,oBAAqB,CACrB,mBAAoB,CACpB,YAAa,CAEb,kCAAmC,CAEnC,0BAKJ,CAEA,SACI,YACJ,CACA,aAII,0YAAqZ,CAFrZ,WAAW,CACX,gBAAgB,CAFhB,UAIJ,CAEA,uBACI,gUAAuV,CACvV,UACJ,CAEA,2BACI,2UACJ,CAWA,SAEI,kBAAkB,CADlB,eAEJ,CAEA,uBAGI,iBAAiB,CADjB,gBAAgB,CADhB,UAGJ,CAEA,gBACI,cACJ,CAEA,qBAGI,wBAAwB,CADxB,SASJ,CAEA,0CATI,UAAW,CAGX,0BAA6B,CAC7B,cAAe,CAFf,WAAY,CALZ,cAAe,CASf,iBAAkB,CADlB,sBAA6B,CAJ7B,UAmBJ,CAXA,qBAGI,2BAA4B,CAD5B,SASJ,CAEA,eAGI,kTAAwT,CAKxT,cAAc,CADd,YAAY,CALZ,WAAW,CAEX,cAAc,CAEd,UAAU,CADV,QAAQ,CAJR,UAAU,CAQV,YACJ,CAEA,iBAcI,qBAAsB,CAEtB,wBAAyB,CADzB,0BAA2B,CAG3B,kBAAmB,CARnB,+BAAgC,CAFhC,qBAAqB,CAKrB,YAAa,CAXb,MAAM,CAKN,QAAU,CAFV,eAAe,CAJf,cAAc,CAEd,KAAK,CAQL,+BAAgC,CAChC,uBAAwB,CARxB,UAAW,CAEX,YAaJ,CAEA,qBAII,qBAAsB,CAGtB,YAAY,CAJZ,WAAW,CAEX,aAAa,CAHb,cAAc,CADd,aAAa,CAKb,qBAEJ,CAGA,OACI,4BAA6B,CAC7B,iBACJ,CACA,sBACI,YAAa,CACb,eACJ,CAEA,0BAOI,wBAAyB,CACzB,cAAe,CAFf,iBAAkB,CAFlB,eAAgB,CAChB,gBAAiB,CAFjB,gBAMJ,CAEA,yCACI,wBAAyB,CACzB,UACJ,CAEA,0BACI,YACJ,CAEA,yCACI,aACJ,CAEA,qBAGI,qBAAsB,CADtB,UAAW,CADX,iBAAkB,CAGlB,qBAAsB,CACtB,0CAA6C,CAC7C,wCACJ,CAEA,kBACI,0TAAwU,CAExU,uBAA2B,CAC3B,2BAA4B,CAF5B,cAAe,CAIf,WAAY,CACZ,gBAAiB,CAEjB,uBAAiB,CAJjB,UAKJ,CAEA,OAMI,wBAAyB,CAIzB,qBAAsB,CATtB,YAAa,CAEb,sBAAuB,CACvB,0BAA2B,CAC3B,kBAAmB,CAHnB,cAAe,CAKf,qCAAsC,CACtC,0BAA2B,CAC3B,WAEJ,CAEA,WAKI,iBAAkB,CAElB,aAAc,CADd,UAAW,CAEX,YAAa,CALb,yBAAmB,CACnB,iBAKJ,CAEA,iBACI,WAAY,CAMZ,cAAe,CAEf,YAAa,CADb,cAAe,CAFf,WAAY,CAJZ,iBAAkB,CAElB,SAAU,CADV,OAAQ,CAER,UAKJ,CAEA,aACI,+BACJ,CAEA,mBACI,8BACJ,CAEA,mBACI,oBACJ,CAEA,aACI,kCAAoC,CACpC,UACJ,CAGA,cAcI,eAAgB,CAVhB,WAAY,CAWZ,+BAAgC,CAVhC,yBAA0B,CAC1B,iBAAkB,CAHlB,4EAAgF,CAOhF,2CAA6C,CAC7C,mCAAqC,CAKrC,cAAe,CAdf,YAAa,CAeb,QAAS,CACT,eAAgB,CAChB,YAAa,CAXb,aAAc,CAPd,iBAAkB,CAWlB,gCAAiC,CACjC,wBAAyB,CAQzB,gBAAiB,CAdjB,WAAY,CAaZ,UAEJ,CAEA,kBAQI,0BAA2B,CAC3B,kBAAmB,CARnB,UAAW,CACX,cAAe,CACf,mBAAoB,CACpB,oBAAqB,CACrB,YAAa,CACb,gBAAiB,CACjB,gBAGJ,CAEA,wBACI,wBACJ,CAEA,sBAII,kBAAmB,CAFnB,WAAY,CAGZ,gBAAiB,CAFjB,gBAAiB,CAFjB,UAKJ,CAEA,sBAGI,eAAgB,CAChB,eAAgB,CAHhB,eAAgB,CAChB,sBAAuB,CAIvB,gBAAiB,CADjB,kBAEJ,CAEA,wBACI,wBACJ,CCrqGA,MACI,0BACJ,CAEA,kBAGI,qBAAsB,CAFtB,oBAAoB,CAGpB,2BAA4B,CAF5B,iBAGJ,CAEA,6BAKI,WAAW,CAFX,MAAQ,CAFR,cAAc,CACd,KAAO,CAEP,UAAU,CAEV,UACJ,CAEA,6CAII,qBAAwB,CADxB,WAAW,CAFX,aAAa,CACb,UAGJ,CAEA,0CACI,wBACJ,CAEA,gBAEI,qBAAsB,CADtB,oBAAoB,CAGpB,kBAAkB,CADlB,iBAAiB,CAEjB,iBAAiB,CAEjB,gCAAiC,CADjC,oBAEJ,CAEA,iCACI,gBAAkB,kBAAoB,CAC1C,CAEA,mCAEI,UAAW,CADX,SAEJ,CAEA,yCACI,eACJ,CAEA,yCACE,eACF,CAEA,QAMI,qBAAqB,CADrB,QAAU,CAJV,wBAAwB,CAWxB,8CAA4B,CAR5B,gBAAgB,CAFhB,kBAAkB,CAClB,kBAAmB,CAInB,OAMJ,CAEA,4BAHI,kBAA4B,CAA5B,gBAkBJ,CAfA,oBAMI,wBAAwB,CADxB,8CAAmC,CAInC,qBAAsB,CADtB,cAAc,CAEd,eAAgB,CAHhB,WAAW,CAIX,uBAAwB,CACxB,eAAgB,CAChB,KAAM,CACN,UACJ,CAEA,kCAEI,QACJ,CAEA,qCAMI,QAAU,CAJV,eAAe,CAMf,WAAW,CAJX,UAAU,CAGV,MAAQ,CAFR,iBAAiB,CAFjB,UAMJ,CAEA,oCAEI,eAAe,CAMf,iBAAiB,CAJjB,WAAW,CACX,iBAAiB,CAEjB,OAAS,CADT,KAAO,CAHP,SAMJ,CAEA,6BAEI,qBAAqB,CACrB,UACJ,CAEA,uHAII,cACJ,CAEA,6BAEI,wBACJ,CAEA,6BAII,6NAEJ,CAEA,4DALI,oCAAoC,CADpC,2BAA2B,CAG3B,yBASJ,CANA,+BAII,6NAEJ,CAEA,gCAGI,wBAAwB,CADxB,iBAAiB,CAEjB,iBACJ,CAEA,iDAMI,QAAU,CAJV,eAAe,CAMf,iBAAiB,CAJjB,UAAU,CAGV,MAAQ,CAFR,iBAAiB,CAFjB,UAMJ,CAEA,gDAEI,eAAe,CAMf,WAAW,CAJX,WAAW,CACX,iBAAiB,CAEjB,OAAS,CADT,KAAO,CAHP,SAMJ,CAEA,6BAEI,qBAAqB,CACrB,UACJ,CAEA,oBAKI,8CAAmC,CAAnC,kBAAmC,CAAnC,gBAAmC,CAGnC,qBAAsB,CACtB,eAAe,CAHf,WAAW,CACX,kBAGJ,CAEA,+BAEI,eACJ,CAEA,wBAEI,oBAAoB,CACpB,eACJ,CAEA,6BAEI,oBACJ,CACA,yCAEI,wBACJ,CACA,kFAUI,4BAA4B,CAN5B,QAAU,CACV,eAAiB,CAMjB,qBAAsB,CAHtB,QAAU,CAFV,SAAW,CAGX,SAAW,CAFX,UAKJ,CAEA,6BAGI,yBAA0B,CAD1B,WAEJ,CAOA,+EAGI,cAAc,CADd,UAEJ,CAEA,2BAEI,uBAAwB,CACxB,oBAAqB,CACrB,eAAgB,CAIhB,gOAA6Q,CAF7Q,0BAA2B,CAC3B,yBAA0B,CAF1B,2BAIJ,CAEA,oCAII,kOAA4O,CAD5O,qCAAqC,CADrC,2BAA4B,CAI5B,iBAAiB,CADjB,sBAEJ,CAEA,oDAEI,67EACJ,CAEA,2BAGI,WAAW,CACX,WAAW,CAFX,SAGJ,CAEA,sBACI,yBACJ,CAEA,gCACI,UAAW,CACX,cACJ,CAEA,mBACI,gCACJ,CAEA,uBACI,yBAAyB,CACzB,sBACJ,CAEA,wBACI,0BAA0B,CAC1B,sBACJ,CAEA,yBACI,2BACJ,CAEA,0BACI,4BACJ,CAEA,sCACI,yBAA0B,CAC1B,iCAAkC,CAClC,8BACJ,CAEA,4BAEI,4BACJ,CACA,mBAEI,gCACJ,CACA,wBAEI,2BACJ,CACA,yBAEI,4BACJ,CACA,uBAEI,0BACJ,CACA,0BAEI,6BACJ,CACA,eAGI,qBAA8B,CAG9B,qBAAoC,CAIpC,kBAAmB,CADnB,gBAAgB,CALhB,UAAW,CAIX,YAAY,CAIZ,WAAY,CAVZ,iBAAiB,CAKjB,WAAW,CAFX,SAAU,CAMV,UAEJ,CAEA,gBAOI,qBAAsB,CALtB,2BAA6B,CAC7B,gBAAgB,CAKhB,0BAA2B,CAF3B,SAAW,CADX,eAAe,CADf,kBAKJ,CAEA,sBAEI,gBACJ,CAEA,yBAMI,kCAAmC,CAQnC,qBAAqB,CALrB,yBAA0B,CAC1B,iBAAkB,CAClB,8GAAoH,CACpH,sGAA4G,CAL5G,iBAAkB,CAClB,mBAAoB,CASpB,cAAc,CADd,gBAAgB,CAHhB,YAAY,CAXZ,cAAc,CACd,QAAQ,CAER,gBAAgB,CAUhB,WAAW,CAXX,UAcJ,CAEA,6BAGI,WAAW,CADX,UAEJ,CAEA,8BAMI,eAAe,CAMf,cAAc,CALd,0BAA4B,CAC5B,cAAc,CAEd,WAAW,CACX,gBAAgB,CANhB,WAAW,CAHX,iBAAiB,CAEjB,OAAO,CASP,wBAA6B,CAV7B,KAAK,CAML,UAKJ,CAEA,kCAEE,0BAA2B,CAM3B,sBAAuB,CACvB,qBAAsB,CACtB,mBAAoB,CACpB,iBAAkB,CAClB,cAAe,CATf,wBAAyB,CACzB,uBAAwB,CACxB,qBAAsB,CACtB,oBAAqB,CACrB,gBAMF,CAEA,iBAMI,UAAU,CAFV,WAAW,CADX,UAAU,CAEV,SAEJ,CACA,mCANI,iBASJ,CACA,sBAII,UAAU,CAFV,iBAAiB,CACjB,QAAQ,CAER,UACJ,CACA,4BAEI,WACJ,CAEA,gBAEI,+BACJ,CAEA,eAEI,oBACJ,CAEA,0BAGI,gCAAiC,CADjC,mCAEJ,CAEA,6BAGI,iCAAkC,CADlC,oCAEJ,CAEA,0BAGI,gCAAiC,CADjC,mCAEJ,CAEA,0BAEI,kBAAqB,CAGrB,qBAAsB,CAFtB,sBAAuB,CAIvB,2BAA2B,CAH3B,oBAIJ,CAEA,6BAEI,cACJ,CAEA,oCAGI,cAAe,CADf,QAAW,CADX,SAGJ,CAEA,0BAEI,kBAAqB,CAGrB,cAAc,CAFd,mBAAsB,CACtB,aAEJ,CAEA,yBAEI,8rEAAgsE,CAEhsE,0BAA8B,CAD9B,2BAEJ,CAEA,qBAGI,QAAU,CADV,UAEJ,CAEA,wCAEI,QAAU,CAEV,YAAY,CADZ,UAEJ,CAEA,cAMI,YAAa,CALb,WAAY,CACZ,cAAgB,CAGhB,kBAAmB,CAFnB,WAAY,CACZ,wBAGJ,CACA,gBACI,UAAW,CACX,oBACJ,CAEA,kBACI,YACJ,CAEA,eAEI,YAAY,CACZ,6BAA6B,CAC7B,iBACJ,CAEA,mBAGI,kBAAkB,CADlB,WAEJ,CAEA,mBAII,kBAAkB,CAFlB,YAAY,CACZ,6BAEJ,CAEA,uBAEI,YAAY,CACZ,YACJ,CAEA,kCAEI,kBAAkB,CAClB,gBACJ,CAEA,2BAMI,qBAAqB,CACrB,qBAAsB,CAEtB,cAAc,CALd,WAAW,CACX,gBAAgB,CAGhB,eAAe,CANf,iBAAiB,CACjB,UAOJ,CAEA,aAEI,cACJ,CAEA,sBAGI,wBAAwB,CADxB,eAEJ,CAEA,gBAGI,wBAAwB,CACxB,qBAAqB,CAFrB,YAAY,CAIZ,oBAAsB,CADtB,WAAW,CAEX,eAAe,CACf,KAAO,CACP,UACJ,CAEA,sBAEI,YACJ,CAEA,sCAKI,cAAc,CACd,oBAAoB,CAHpB,WAAW,CACX,WAAW,CAFX,UAKJ,CAEA,4CAEI,qBACJ,CAEA,2CAMI,4BAA4B,CAD5B,QAAU,CADV,oBAAoB,CAFpB,eAAe,CACf,gBAAgB,CAIhB,kBACJ,CAEA,uBAII,kNAA0N,CAD1N,kCAAoC,CADpC,2BAGJ,CAEA,wBAII,oNAA2N,CAD3N,mCAAqC,CADrC,2BAGJ,CAEA,yBAEI,YACJ,CAEA,8BAQI,wBAAwB,CACxB,cAAc,CAPd,oBAAoB,CAKpB,iBAAiB,CADjB,gBAAgB,CADhB,iBAKJ,CAEA,uCAEI,qBACJ,CAEA,wIAII,YACJ","sources":["webpack://WebComponents/./node_modules/jsuites/dist/jsuites.css","webpack://WebComponents/./node_modules/jexcel/dist/jexcel.css"],"sourcesContent":["\r\n/**\r\n * (c) jSuites Javascript Web Components\r\n *\r\n * Author: Paul Hodel \r\n * Website: https://bossanova.uk/jsuites/\r\n * Description: Create amazing web based applications.\r\n *\r\n * MIT License\r\n *\r\n */\r\n\r\n/** General **/\r\n\r\n:root {\r\n --button-color: #298BA8; \r\n --active-color: #007aff;\r\n}\r\n\r\n.jdragging {\r\n opacity:0.2;\r\n filter: alpha(opacity=20);\r\n}\r\n\r\n.jupload {\r\n background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7emlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTctMTItMzFUMjI6NDM6MzBaPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTgtMDEtMDFUMjA6MDM6MjNaPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wMS0wMVQyMDowMzoyM1o8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6ZDE3NGVkY2UtNWZkNC0wODRkLTkzNzAtZDRhODVmMzdkNjdiPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjBmYzcxZDEyLTg1MGUtY2E0NS05MzE4LWRhYjI5YWZhMmQ4MjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjBmYzcxZDEyLTg1MGUtY2E0NS05MzE4LWRhYjI5YWZhMmQ4MjwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDowZmM3MWQxMi04NTBlLWNhNDUtOTMxOC1kYWIyOWFmYTJkODI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTctMTItMzFUMjI6NDM6MzBaPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk2MTA5Y2Y0LTEwM2ItNTc0Ny1hZWE3LWI5NDMxOWY0NWFkZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wMS0wMVQyMDowMjoyMFo8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6ZDE3NGVkY2UtNWZkNC0wODRkLTkzNzAtZDRhODVmMzdkNjdiPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTAxLTAxVDIwOjAzOjIzWjwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj44MDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj44MDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+tc8AsgAAACBjSFJN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);\r\n background-repeat: no-repeat;\r\n background-size: 100px;\r\n background-position: center;\r\n background-color: rgba(230, 230, 230, 0.1);\r\n border: 1px dotted #eee;\r\n cursor: pointer;\r\n box-sizing: border-box;\r\n width:100%;\r\n min-height:180px;\r\n}\r\n\r\n.jremove {\r\n opacity: 0.2;\r\n filter: alpha(opacity=20);\r\n}\r\n\r\n/** Animations **/\r\n.fade-in {\r\n animation: fade-in 2s forwards;\r\n}\r\n\r\n.fade-out {\r\n animation: fade-out 1s forwards;\r\n}\r\n\r\n.slide-left-in {\r\n animation: slide-left-in 0.4s forwards;\r\n}\r\n\r\n.slide-left-out {\r\n animation: slide-left-out 0.4s forwards;\r\n}\r\n\r\n.slide-right-in {\r\n animation: slide-right-in 0.4s forwards;\r\n}\r\n\r\n.slide-right-out {\r\n animation: slide-right-out 0.4s forwards;\r\n}\r\n\r\n.slide-top-in {\r\n animation: slide-top-in 0.4s forwards;\r\n}\r\n\r\n.slide-top-out {\r\n animation: slide-top-out 0.2s forwards;\r\n}\r\n\r\n.slide-bottom-in {\r\n animation: slide-bottom-in 0.4s forwards;\r\n}\r\n\r\n.slide-bottom-out {\r\n animation: slide-bottom-out 0.1s forwards;\r\n}\r\n\r\n/** Fadein and Fadeout **/\r\n@keyframes fade-in {\r\n 0% { opacity: 0; }\r\n 100% { opacity: 100; }\r\n}\r\n\r\n@-webkit-keyframes fade-in {\r\n 0% { opacity: 0; }\r\n 100% { opacity: 100; }\r\n}\r\n\r\n@keyframes fade-out {\r\n 0% { opacity: 100; }\r\n 100% { opacity: 0; }\r\n}\r\n\r\n@-webkit-keyframes fade-out {\r\n 0% { opacity: 100; }\r\n 100% { opacity: 0; }\r\n}\r\n\r\n/** Keyframes Left to Right **/\r\n@keyframes slide-left-in {\r\n 0% { transform: translateX(-100%); }\r\n 100% { transform: translateX(0%); }\r\n}\r\n\r\n@-webkit-keyframes slide-left-in {\r\n 0% { transform: translateX(-100%); }\r\n 100% { -webkit-transform: translateX(0%); }\r\n}\r\n \r\n@keyframes slide-left-out {\r\n 0% { transform: translateX(0%); }\r\n 100% { transform: translateX(-100%); }\r\n}\r\n\r\n@-webkit-keyframes slide-left-out {\r\n 0% { -webkit-transform: translateX(0%); }\r\n 100% { -webkit-transform: translateX(-100%); }\r\n}\r\n\r\n/** Keyframes Right to Left **/\r\n@keyframes slide-right-in {\r\n 0% { transform: translateX(100%); }\r\n 100% { transform: translateX(0%); }\r\n}\r\n\r\n@-webkit-keyframes slide-right-in\r\n{\r\n 0% { transform: translateX(100%); }\r\n 100% { -webkit-transform: translateX(0%); }\r\n}\r\n \r\n@keyframes slide-right-out {\r\n 0% { transform: translateX(0%); }\r\n 100% { transform: translateX(100%); }\r\n}\r\n\r\n@-webkit-keyframes slide-right-out {\r\n 0% { -webkit-transform: translateX(0%); }\r\n 100% { -webkit-transform: translateX(100%); }\r\n}\r\n\r\n/** Keyframes Top to Bottom **/\r\n@keyframes slide-top-in {\r\n 0% { transform: translateY(-100%); }\r\n 100% { transform: translateY(0%); }\r\n}\r\n\r\n@-webkit-keyframes slide-top-in {\r\n 0% { transform: translateY(-100%); }\r\n 100% { -webkit-transform: translateY(0%); }\r\n}\r\n \r\n@keyframes slide-top-out {\r\n 0% { transform: translateY(0%); }\r\n 100% { transform: translateY(-100%); }\r\n}\r\n\r\n@-webkit-keyframes slide-top-out {\r\n 0% { -webkit-transform: translateY(0%); }\r\n 100% { -webkit-transform: translateY(-100%); }\r\n}\r\n\r\n/** Keyframes Bottom to Top **/\r\n@keyframes slide-bottom-in {\r\n 0% { transform: translateY(100%); }\r\n 100% { transform: translateY(0%); }\r\n}\r\n\r\n@-webkit-keyframes slide-bottom-in {\r\n 0% { transform: translateY(100%); }\r\n 100% { -webkit-transform: translateY(0%); }\r\n}\r\n \r\n@keyframes slide-bottom-out {\r\n 0% { transform: translateY(0%); }\r\n 100% { transform: translateY(100%); }\r\n}\r\n\r\n@-webkit-keyframes slide-bottom-out {\r\n 0% { -webkit-transform: translateY(0%); }\r\n 100% { -webkit-transform: translateY(100%); }\r\n}\r\n\r\n\r\n@supports (-webkit-overflow-scrolling: touch) {\r\n .app .options input:checked:before {\r\n top:-12px;\r\n }\r\n}\r\n\r\n@-webkit-keyframes spin {\r\n from {\r\n -webkit-transform:rotate(0deg);\r\n }\r\n to {\r\n -webkit-transform:rotate(360deg);\r\n }\r\n}\r\n\r\n@keyframes spin {\r\n from {\r\n transform:rotate(0deg);\r\n }\r\n to {\r\n transform:rotate(360deg);\r\n }\r\n}\r\n\r\n.unselectable {\r\n -webkit-touch-callout: none;\r\n -webkit-user-select: none;\r\n -khtml-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n}\r\n\r\n.jbutton {\r\n padding:4px;\r\n padding-left:10px;\r\n padding-right:20px;\r\n border:1px solid #ddd;\r\n display:inline-flex;\r\n border-radius:4px;\r\n cursor:pointer;\r\n line-height: 24px;\r\n -webkit-font-smoothing: antialiased;\r\n}\r\n\r\n.jbutton.blue {\r\n border:1px solid transparent;\r\n color:#fff;\r\n background-color:#1a73e8;\r\n}\r\n\r\n.jbutton::before {\r\n content: attr(data-icon);\r\n width: 24px;\r\n height: 24px;\r\n font-size: 24px;\r\n line-height: 24px;\r\n font-family: 'Material icons';\r\n color: #999;\r\n margin-right:2px;\r\n}\r\n\r\n.jbutton.blue::before {\r\n color: #fff;\r\n}\r\n\r\n.jbutton:hover {\r\n background-color: #eee;\r\n}\r\n\r\n.jbutton.blue:hover {\r\n background-color: #1a73e8;\r\n opacity: 0.8;\r\n}\r\n\r\n/**\n * Date & Datetime picker v1.0.1\n * Author: paul.hodel@gmail.com\n * https://github.com/paulhodel/jtools\n */\n \n.jcalendar {\n position:relative;\n z-index:9000;\n display:none;\n box-sizing:border-box;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n -webkit-tap-highlight-color: transparent;\n min-width:280px;\n}\n\n.jcalendar-focus {\n display:block;\n}\n\n.jcalendar-backdrop {\n position:fixed;\n top:0px;\n left:0px;\n z-index:9000;\n min-width:100%;\n min-height:100%;\n background-color:rgba(0,0,0,0.5);\n border:0px;\n padding:0px;\n display:none;\n}\n\n.jcalendar-container {\n position:relative;\n box-sizing:border-box;\n}\n\n.jcalendar-content {\n position:absolute;\n z-index:9001;\n -webkit-box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.39);\n -moz-box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.39);\n box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.39);\n background-color:#fff;\n}\n\n.jcalendar-table > table {\n width:100%;\n background-color:#fff;\n}\n\n.jcalendar-table > table > tbody td {\n box-sizing:border-box;\n cursor:pointer;\n padding:9px;\n font-size:0.9em;\n}\n\n.jcalendar-table > table > thead {\n cursor:pointer;\n}\n\n.jcalendar-header {\n text-align:center;\n}\n\n.jcalendar-header span {\n margin-right:4px;\n font-size:1.1em;\n font-weight:bold;\n}\n\n.jcalendar-prev {\n cursor:pointer;\n background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z' fill='%23000' /%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3C/svg%3E\");\n background-position:center;\n background-repeat:no-repeat;\n}\n\n.jcalendar-next {\n cursor:pointer;\n background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z' fill='%23000' /%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3C/svg%3E\");\n background-position:center;\n background-repeat:no-repeat;\n}\n\n.jcalendar-weekday {\n font-weight: 600;\n background-color: #fcfcfc;\n padding: 14px;\n}\n\n.jcalendar thead td {\n padding:10px;\n height:40px;\n}\n\n.jcalendar tfoot td {\n padding:10px;\n}\n\n.jcalendar-months td, .jcalendar-years td {\n height:24px;\n} \n\n.jcalendar-input {\n padding-right:18px;\n background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='gray'%3E%3Cpath d='M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E\");\n background-position:top 50% right 5px;\n background-repeat:no-repeat;\n box-sizing: border-box;\n}\n\n.jcalendar-done {\n -webkit-box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.39);\n -moz-box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.39);\n box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.39);\n background-color:#fff;\n}\n\n.jcalendar-update {\n border:1px solid #ccc;\n background-color:#fff;\n border-radius:4px;\n padding:5px;\n width:100%;\n}\n\n.jcalendar select {\n width:55px;\n display:inline-block;\n border:0px;\n padding:4px;\n text-align:center;\n font-size:1.1em;\n user-select:none;\n margin-right:10px;\n}\n\n.jcalendar select:first-child\n{\n margin-right:2px;\n}\n\n.jcalendar-selected {\n background-color:#eee;\n}\n\n.jcalendar-reset, .jcalendar-confirm {\n text-transform:uppercase;\n cursor:pointer;\n color: var(--active-color);\n}\n\n.jcalendar-controls {\n padding:15px;\n\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n vertical-align:middle;\n\n display: -webkit-box;\n display: -moz-box;\n display: -ms-flexbox;\n display: -webkit-flex;\n display: flex;\n\n -webkit-flex-flow: row wrap;\n justify-content: space-between;\n align-items:center;\n\n border-bottom:1px solid #ddd;\n}\n\n.jcalendar-controls div {\n font-weight:bold;\n}\n\n.jcalendar-fullsize {\n position:fixed;\n width:100%;\n top:0px;\n left:0px;\n}\n\n.jcalendar-fullsize .jcalendar-content\n{\n position:fixed;\n width:100%;\n left:0px;\n bottom:0px;\n}\n\n.jcalendar-focus.jcalendar-fullsize .jcalendar-backdrop {\n display:block;\n}\n\n.jcalendar-sunday {\n color: red;\n}\n.jcalendar-disabled {\n color: #ccc;\n}\r\n\r\n.jcolor {\r\n position: absolute;\r\n display: none;\r\n outline: none;\r\n}\r\n\r\n.jcolor-content {\r\n position: absolute;\r\n left: 0px;\r\n z-index: 9000;\r\n user-select: none;\r\n -webkit-font-smoothing: antialiased;\r\n font-size: .875rem;\r\n letter-spacing: .2px;\r\n -webkit-border-radius: 4px;\r\n border-radius: 4px;\r\n -webkit-box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);\r\n box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);\r\n background-color:#fff;\r\n box-sizing: border-box;\r\n}\r\n\r\n.jcolor-content table {\r\n padding: 7px;\r\n box-sizing: border-box;\r\n}\r\n\r\n.jcolor-focus {\r\n display:block;\r\n}\r\n\r\n.jcolor table {\r\n width:100%;\r\n height:100%;\r\n}\r\n\r\n.jcolor td {\r\n border:2px solid #fff;\r\n}\r\n\r\n.jcolor-selected {\r\n border:2px solid #000 !important;\r\n background-repeat:no-repeat;\r\n background-size: cover;\r\n background-position:0 0;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z' fill='white'/%3E%3C/svg%3E\");\r\n}\r\n\r\n.jcolor-fullscreen {\r\n position: fixed;\r\n bottom: 0px;\r\n width:100%;\r\n max-height:250px;\r\n border-radius: 0px;\r\n box-sizing: border-box;\r\n}\r\n\r\n.jcolor-close {\r\n display: none;\r\n font-size: 1em;\r\n color: var(--active-color);\r\n text-transform: uppercase;\r\n text-align: right;\r\n padding: 15px;\r\n font-weight: bold;\r\n -webkit-box-shadow: 1px 0px 1px 0px rgba(0,0,0,0.39);\r\n -moz-box-shadow: 1px 0px 1px 0px rgba(0,0,0,0.39);\r\n box-shadow: 1px 0px 1px 0px rgba(0,0,0,0.39);\r\n width: 100%;\r\n box-sizing: border-box;\r\n}\r\n\r\n.jcolor-fullscreen .jcolor-close {\r\n display: block;\r\n}\r\n\r\n.jcolor-backdrop {\r\n position: fixed;\r\n top: 0px;\r\n left: 0px;\r\n min-width: 100%;\r\n min-height: 100%;\r\n background-color: rgba(0,0,0,0.5);\r\n border: 0px;\r\n padding: 0px;\r\n z-index: 8000;\r\n display: none;\r\n \r\n -webkit-touch-callout: none; /* iOS Safari */\r\n -webkit-user-select: none; /* Safari */\r\n -khtml-user-select: none; /* Konqueror HTML */\r\n -moz-user-select: none; /* Firefox */\r\n -ms-user-select: none; /* Internet Explorer/Edge */\r\n user-select: none; /* Non-prefixed version, currently\r\n supported by Chrome and Opera */\r\n}\r\n\r\n/**\r\n * Contextmenu v1.0.1\r\n * Author: paul.hodel@gmail.com\r\n * https://github.com/paulhodel/jsuites\r\n */\r\n \r\n.jcontextmenu {\r\n position:fixed;\r\n z-index:10000;\r\n background:#fff;\r\n color: #555;\r\n font-size: 11px;\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n user-select: none;\r\n -webkit-box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1);\r\n -moz-box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1);\r\n box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1);\r\n border: 1px solid #C6C6C6;\r\n padding: 0px;\r\n padding-top:4px;\r\n padding-bottom:4px;\r\n margin:0px;\r\n outline:none;\r\n display:none;\r\n}\r\n\r\n.jcontextmenu.jcontextmenu-focus {\r\n display:inline-block;\r\n}\r\n\r\n.jcontextmenu > div {\r\n box-sizing: border-box;\r\n display: block;\r\n padding: 8px 8px 8px 28px;\r\n width: 250px;\r\n position: relative;\r\n cursor: default;\r\n font-size: 11px;\r\n font-family:sans-serif;\r\n}\r\n\r\n.jcontextmenu > div a {\r\n color: #555;\r\n text-decoration: none;\r\n}\r\n\r\n.jcontextmenu > div span {\r\n float: right;\r\n margin-right:10px;\r\n}\r\n\r\n.jcontextmenu .contextmenu-disabled {\r\n color: #a1a192;\r\n}\r\n\r\n.jcontextmenu > div:not(.contextmenu-line):hover {\r\n background: #ebebeb;\r\n}\r\n\r\n.jcontextmenu > div.contextmenu-line {\r\n border-top: 1px solid #e9e9e9;\r\n margin-top:5px;\r\n padding:2px;\r\n}\r\n\r\n.jcontextmenu hr {\r\n border: 1px solid #e9e9e9;\r\n border-bottom: 0;\r\n margin-top:5px;\r\n margin-bottom:5px;\r\n}\r\n\r\n/**\r\n * Dialog v1.0.1\r\n * Author: paul.hodel@gmail.com\r\n * https://github.com/paulhodel/jtools\r\n */\r\n \r\n.jdialog\r\n{\r\n position:fixed;\r\n left: 0;\r\n top: 0;\r\n width: 100%;\r\n min-height:100%;\r\n z-index:10000;\r\n\r\n background-color:rgba(0,0,0,0.5);\r\n -webkit-transition-duration: .1s;\r\n transition-duration: .1s;\r\n display: flex;\r\n -ms-flex-align: center;\r\n -webkit-align-items: center;\r\n -webkit-box-align: center;\r\n\r\n align-items: center;\r\n}\r\n\r\n.jdialog .jdialog-container\r\n{\r\n width:100%;\r\n max-width:280px;\r\n box-sizing: border-box;\r\n margin:0 auto;\r\n vertical-align:middle;\r\n background-color:#fff;\r\n border-radius:10px;\r\n\r\n opacity: 0;\r\n transition: opacity .2s;\r\n -webkit-transition: opacity .2s;\r\n}\r\n\r\n.jdialog .jdialog-header\r\n{\r\n padding:10px;\r\n text-align:center;\r\n}\r\n\r\n.jdialog .jdialog-header .jdialog-title\r\n{\r\n font-size:1em;\r\n font-weight:bold;\r\n padding:8px;\r\n}\r\n\r\n.jdialog .jdialog-header .jdialog-message\r\n{\r\n padding: 4px;\r\n}\r\n\r\n.jdialog .jdialog-footer\r\n{\r\n border-top: 1px solid #ccc;\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-content: stretch;\r\n align-items: center;\r\n text-align: center;\r\n}\r\n\r\n.jdialog .jdialog-footer > div\r\n{\r\n padding:4px;\r\n border-left:1px solid #ccc;\r\n text-align:center;\r\n width:100%;\r\n}\r\n.jdialog .jdialog-footer > div:first-child\r\n{\r\n border-left:0px;\r\n}\r\n\r\n.jdialog .jdialog-footer input\r\n{\r\n border: 0px;\r\n margin: 0px;\r\n background-color: transparent;\r\n color: var(--active-color);\r\n width: 100%;\r\n outline: none;\r\n}\r\n\r\n/**\n * (c) 2013 jDropdown\n * http://www.github.com/paulhodel/jdropdown\n *\n * @author: Paul Hodel \n * @description: Custom dropdowns\n */\n\n.jdropdown\n{\n cursor:pointer;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n box-sizing: border-box;\n background:#fff;\n -webkit-tap-highlight-color: transparent;\n display: inline-block;\n}\n\n.jdropdown-header::placeholder\n{\n color:#000;\n}\n\n.jdropdown-backdrop\n{\n position:fixed;\n top:0px;\n left:0px;\n min-width:100%;\n min-height:100%;\n background-color:rgba(0,0,0,0.5);\n border:0px;\n padding:0px;\n z-index:8000;\n display:none;\n}\n\n.jdropdown-focus\n{\n position:relative;\n}\n\n.jdropdown-focus .jdropdown-container\n{\n transform: translate3d(0,0,0);\n}\n\n.jdropdown-focus .jdropdown-header\n{\n outline:auto 5px -webkit-focus-ring-color;\n}\n\n.jdropdown-container-header\n{\n padding:0px;\n margin:0px;\n position:relative;\n}\n\n.jdropdown-header\n{\n width:100%;\n appearance: none;\n background-repeat: no-repeat;\n background-position:top 50% right 5px;\n background-image: url(\"data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='gray'/%3E%3C/svg%3E\");\n text-overflow: ellipsis;\n cursor:pointer;\n box-sizing: border-box;\n -webkit-appearance: none;\n -moz-appearance: none;\n padding-right:24px;\n}\n\n.jdropdown-insert-button\n{\n font-size: 1.4em;\n text-transform: uppercase;\n position:absolute;\n right: 30px;\n top: 4px;\n display:none;\n}\n\n.jdropdown-container\n{\n min-width: inherit;\n transform: translate3d(-10000px,0,0);\n position:absolute;\n z-index:9001;\n}\n\n.jdropdown-close\n{\n display:none;\n font-size:1em;\n color: var(--active-color);\n text-transform:uppercase;\n text-align:right;\n padding:15px;\n font-weight:bold;\n}\n\n.jdropdown-content\n{\n min-width:inherit;\n margin:0px;\n box-sizing:border-box;\n}\n\n.jdropdown-content:empty\n{\n}\n\n.jdropdown-item\n{\n white-space: nowrap;\n text-align: left;\n text-overflow: ellipsis;\n overflow-x: hidden;\n color: #000;\n display: flex;\n align-items: center;\n}\n\n.jdropdown-image\n{\n margin-right:10px;\n width: 32px;\n height: 32px;\n border-radius:20px;\n}\n\n.jdropdown-image-small\n{\n width:24px;\n height:24px;\n}\n\n.jdropdown-title\n{\n font-size: 0.7em;\n text-overflow: ellipsis;\n overflow-x: hidden;\n display: block;\n}\n\n/** Default visual **/\n\n.jdropdown-default .jdropdown-header\n{\n border:1px solid #ccc;\n padding:5px;\n padding-left:10px;\n padding-right:16px;\n}\n\n.jdropdown-default .jdropdown-container\n{\n background-color:#fff;\n}\n\n.jdropdown-default.jdropdown-focus.jdropdown-insert .jdropdown-header {\n padding-right:50px;\n}\n\n.jdropdown-default.jdropdown-focus.jdropdown-insert .jdropdown-insert-button {\n display:block;\n}\n\n.jdropdown-default .jdropdown-content\n{\n min-width:inherit;\n border:1px solid #8fb1e3;\n margin:0px;\n background-color:#fff;\n box-sizing:border-box;\n min-height:10px;\n max-height:215px;\n overflow-y:auto;\n}\n\n.jdropdown-default .jdropdown-item\n{\n padding:4px;\n padding-left:8px;\n padding-right:40px;\n}\n\n.jdropdown-default .jdropdown-item:hover\n{\n background-color:#1f93ff;\n color:#fff;\n}\n\n.jdropdown-default .jdropdown-cursor\n{\n background-color:#1f93ff;\n color:#fff;\n}\n\n.jdropdown-default .jdropdown-selected\n{\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIiAvPjxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiIGZpbGw9IndoaXRlIiAvPjwvc3ZnPgo=');\n background-repeat:no-repeat;\n background-position:top 50% right 5px;\n background-color:#1f93ff;\n color:#fff;\n}\n\n.jdropdown-default .jdropdown-group\n{\n margin-top:5px;\n}\n\n.jdropdown-default .jdropdown-group .jdropdown-item\n{\n padding-left:16px;\n}\n\n.jdropdown-default .jdropdown-group-name\n{\n padding-left:8px;\n font-weight:bold;\n}\n\n\n/** Default render for mobile **/\n\n.jdropdown-picker.jdropdown-focus .jdropdown-header {\n outline: none;\n}\n\n.jdropdown-picker.jdropdown-focus .jdropdown-backdrop {\n display:block;\n}\n\n.jdropdown-picker .jdropdown-container\n{\n position:fixed;\n bottom:0px;\n left:0px;\n border-bottom:1px solid #e6e6e8;\n width:100%;\n background-color:#fff;\n box-sizing: border-box;\n}\n\n.jdropdown-picker .jdropdown-close\n{\n -webkit-box-shadow: 0px -1px 5px 0px rgba(0,0,0,0.39);\n -moz-box-shadow: 0px -1px 5px 0px rgba(0,0,0,0.39);\n box-shadow: 0px -1px 5px 0px rgba(0,0,0,0.39);\n background-color:#fff;\n display:block;\n}\n\n.jdropdown-picker .jdropdown-content\n{\n overflow-y:scroll;\n height:280px;\n background-color:#fafafa;\n border-top:1px solid #e6e6e8;\n}\n\n.jdropdown-picker .jdropdown-group-name\n{\n font-size: 1em;\n text-transform: uppercase;\n padding-top:10px;\n padding-bottom:10px;\n display: block;\n border-bottom: 1px solid #e6e6e8;\n padding-left:20px;\n padding-right:20px;\n text-align:center;\n font-weight:bold;\n}\n\n.jdropdown-picker .jdropdown-item\n{\n font-size: 1em;\n text-transform: uppercase;\n padding-top:10px;\n padding-bottom:10px;\n border-bottom: 1px solid #e6e6e8;\n padding-left:20px;\n padding-right:20px;\n}\n\n.jdropdown-picker .jdropdown-selected\n{\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIiAvPjxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiIGZpbGw9IndoaXRlIiAvPjwvc3ZnPgo=');\n background-repeat:no-repeat;\n background-position:top 50% right 15px;\n background-color:#1f93ff;\n color:#fff;\n}\n\n.jdropdown-picker .jdropdown-cursor\n{\n background-color:#1f93ff;\n color:#fff;\n}\n\n/** Default render for mobile searchbar **/\n\n.jdropdown-searchbar.jdropdown-focus\n{\n position:fixed;\n top:0px;\n left:0px;\n width:100%;\n height:100%;\n background-color:#fafafa;\n padding:0px;\n z-index:9001;\n overflow-y:scroll;\n}\n\n.jdropdown-searchbar.jdropdown-focus .jdropdown-container-header\n{\n padding:10px;\n background-color:#fff;\n box-shadow: 0 1px 2px rgba(0,0,0,.1);\n}\n\n.jdropdown-searchbar.jdropdown-focus .jdropdown-header\n{\n border: 0px;\n background-repeat: no-repeat;\n background-position-x: 0%;\n background-position-y: 40%;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiIGZpbGw9IiNlNmU2ZTgiLz48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PC9zdmc+);\n padding-left: 30px !important;\n padding-right: 60px !important;\n outline: none;\n}\n\n.jdropdown-searchbar.jdropdown-focus .jdropdown-close\n{\n display:block;\n}\n\n.jdropdown-searchbar .jdropdown-container\n{\n width:100%;\n}\n\n.jdropdown-searchbar .jdropdown-close\n{\n position:fixed;\n top:0px;\n right:0px;\n}\n\n.jdropdown-searchbar .jdropdown-content\n{\n margin-top:10px;\n}\n\n.jdropdown-searchbar .jdropdown-group\n{\n margin-top:10px;\n margin-bottom:15px;\n background-color:#fff;\n}\n\n.jdropdown-searchbar .jdropdown-group-name\n{\n border-top: 1px solid #e6e6e8;\n border-bottom: 1px solid #e6e6e8;\n padding:10px;\n padding-left:12px;\n font-weight:bold;\n}\n\n.jdropdown-searchbar .jdropdown-group-arrow\n{\n float:right;\n width:24px;\n height:24px;\n background-repeat:no-repeat;\n}\n\n.jdropdown-searchbar .jdropdown-group-arrow-down\n{\n background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNy40MSA4LjU5TDEyIDEzLjE3bDQuNTktNC41OEwxOCAxMGwtNiA2LTYtNiAxLjQxLTEuNDF6Ii8+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgwVjB6Ii8+PC9zdmc+);\n}\n\n.jdropdown-searchbar .jdropdown-group-arrow-up\n{\n background-image: url(data:image/svg+xml;base64,CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTcuNDEgMTUuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0bC02LTYtNiA2eiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n}\n\n.jdropdown-searchbar .jdropdown-item\n{\n padding-top:10px;\n padding-bottom:10px;\n border-bottom: 1px solid #e6e6e8;\n padding-left:15px;\n padding-right:40px;\n background-color:#fff;\n font-size:0.9em;\n}\n\n.jdropdown-searchbar .jdropdown-description {\n text-overflow: ellipsis;\n overflow: hidden;\n max-width: calc(100% - 20px);\n}\n\n.jdropdown-searchbar .jdropdown-content > .jdropdown-item:first-child\n{\n border-top: 1px solid #e6e6e8;\n}\n\n.jdropdown-searchbar .jdropdown-selected\n{\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIgZmlsbD0iIzAwN2FmZiIvPjwvc3ZnPg==');\n background-repeat:no-repeat;\n background-position:top 50% right 15px;\n}\n\n/** List render **/\n\n.jdropdown-list\n{\n}\n\n.jdropdown-list .jdropdown-container\n{\n display:block;\n}\n\n.jdropdown-list .jdropdown-header\n{\n display:none;\n}\n\n.jdropdown-list .jdropdown-group\n{\n background-color:#fff;\n}\n\n.jdropdown-list .jdropdown-group-name\n{\n border-bottom: 1px solid #e6e6e8;\n padding-top:10px;\n padding-bottom:10px;\n font-weight:bold;\n}\n\n.jdropdown-list .jdropdown-item\n{\n padding-top:10px;\n padding-bottom:10px;\n border-bottom: 1px solid #e6e6e8;\n padding-left:10px;\n padding-right:40px;\n background-color:#fff;\n}\n\n.jdropdown-list .jdropdown-selected\n{\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIgZmlsbD0iIzAwN2FmZiIvPjwvc3ZnPg==');\n background-repeat:no-repeat;\n background-position:top 50% right 10px;\n}\n\n@media only screen and (max-device-width : 800px)\n{\n .jdropdown-list\n {\n width:100% !important;\n border:0px;\n padding:0px;\n }\n\n .jdropdown-list .jdropdown-container\n {\n min-width:100%;\n }\n}\n\n.app .jdropdown-item {\n text-transform:uppercase;\n}\r\n\r\n/**\r\n * (c) jTools Text Editor\r\n * https://github.com/paulhodel/jtools\r\n *\r\n * @author: Paul Hodel \r\n * @description: Inline richtext editor\r\n */\r\n\r\n .jeditor-container {\r\n border:1px solid #ccc;\r\n}\r\n\r\n.jeditor-dragging {\r\n border:1px dashed #000;\r\n}\r\n\r\n.jeditor-container.jeditor-padding {\r\n padding:10px;\r\n}\r\n\r\n.jeditor {\r\n outline:none;\r\n word-break: break-word;\r\n\r\n}\r\n\r\n.jeditor-container.jeditor-padding .jeditor {\r\n min-height:120px;\r\n margin-bottom:10px;\r\n padding:10px;\r\n}\r\n\r\n.jeditor-toolbar {\r\n cursor: pointer;\r\n display: -webkit-inline-box;\r\n display: -webkit-inline-flex;\r\n display: -ms-inline-flexbox;\r\n display: inline-flex;\r\n -webkit-align-items: center;\r\n align-items: center;\r\n border: none;\r\n -webkit-border-radius: 2px;\r\n border-radius: 2px;\r\n -webkit-box-shadow: 0 4px 5px 0 rgba(0,0,0,0.14), 0 1px 10px 0 rgba(0,0,0,0.12), 0 2px 4px -1px rgba(0,0,0,0.2);\r\n box-shadow: 0 4px 5px 0 rgba(0,0,0,0.14), 0 1px 10px 0 rgba(0,0,0,0.12), 0 2px 4px -1px rgba(0,0,0,0.2);\r\n margin: 0px;\r\n margin-bottom:5px;\r\n padding: 5px;\r\n white-space: nowrap;\r\n border-radius:2px;\r\n}\r\n\r\n.jeditor-toolbar .jeditor-toolbar-group {\r\n background-color:#f3f3f3;\r\n}\r\n\r\n.jeditor-toolbar div {\r\n padding:4px;\r\n}\r\n\r\n.jeditor-toolbar div.jeditor-toolbar-button {\r\n padding-left:20px;\r\n padding-right:20px;\r\n}\r\n\r\n.jeditor-toolbar div {\r\n -webkit-user-select: none; /* Chrome all / Safari all */\r\n -moz-user-select: none; /* Firefox all */\r\n -ms-user-select: none; /* IE 10+ */\r\n user-select: none; /* Likely future */ \r\n}\r\n\r\n.jeditor-toolbar div i {\r\n display:block;\r\n font-size:20px;\r\n width:20px;\r\n height:20px;\r\n line-height:20px;\r\n color:#777;\r\n}\r\n\r\n.jeditor-toolbar select {\r\n border:0px;\r\n background-color:transparent;\r\n padding:0px;\r\n padding-left:5px;\r\n padding-right:5px;\r\n display:block;\r\n height:32px;\r\n outline:none;\r\n border-radius:4px;\r\n margin:1px;\r\n}\r\n\r\n.jeditor-toolbar .jtoolbar-divisor {\r\n width: 2px;\r\n height: 28px;\r\n padding: 0px;\r\n margin: 4px;\r\n background-color: #f2f2f2;\r\n}\r\n\r\n.jeditor-toolbar select option {\r\n background-color:#fff;\r\n padding:20px;\r\n}\r\n\r\n.jeditor-toolbar div:hover, .toolbar select:hover {\r\n background-color:#f2f2f2;\r\n border-radius:2px;\r\n}\r\n\r\n.jeditor-toolbar div:hover i {\r\n color:#222;\r\n}\r\n\r\n.jeditor-toolbar div.selected {\r\n background-color:#cecece;\r\n}\r\n\r\n.jeditor-thumbs {\r\n display:inline-block;\r\n margin-right:5px;\r\n}\r\n\r\n.jeditor-thumbs-container {\r\n margin-top:15px;\r\n}\r\n\r\n.jeditor-thumbs .close {\r\n position:absolute;\r\n height:1px;\r\n}\r\n\r\n.jeditor-thumbs .close i {\r\n color:#fff;\r\n text-shadow: 0px 0px 2px #000;\r\n position:relative;\r\n top:5px;\r\n left:72px;\r\n}\r\n\r\n.jeditor-thumbs img {\r\n border:1px solid #eee;\r\n width:100px;\r\n height:100px;\r\n}\r\n\r\n.jeditor-users {\r\n position:absolute;\r\n border:1px solid #ccc;\r\n background-color:#fff;\r\n padding-top:5px;\r\n padding-bottom:5px;\r\n max-height:220px;\r\n overflow-y:scroll;\r\n}\r\n\r\n.jeditor-users > div\r\n{\r\n display:flex;\r\n align-items:center;\r\n min-width:220px;\r\n padding:10px;\r\n padding-top:5px;\r\n padding-bottom:5px;\r\n}\r\n\r\n.jeditor-users > div:hover\r\n{\r\n background-color:#efefef;\r\n}\r\n\r\n.jeditor-users > div img\r\n{\r\n width:24px;\r\n height:24px;\r\n border-radius:12px;\r\n margin-right:5px;\r\n}\r\n\r\n/** Snippet **/\r\n\r\n.snippet {\r\n margin-top:15px;\r\n cursor:pointer;\r\n border: 1px solid #eee;\r\n position:relative;\r\n}\r\n\r\n.snippet:focus {\r\n outline: none;\r\n}\r\n\r\n.snippet img {\r\n width:25%;\r\n max-width:120px;\r\n float:left;\r\n margin-right:10px;\r\n margin-bottom:10px;\r\n}\r\n\r\n.snippet .snippet-title {\r\n margin-top:15px;\r\n font-size:1.4em;\r\n}\r\n\r\n.snippet .snippet-description {\r\n margin-top:5px;\r\n font-size:1em;\r\n}\r\n\r\n.snippet .snippet-host {\r\n margin-top:10px;\r\n margin-bottom:10px;\r\n text-transform:uppercase;\r\n font-size:0.8em;\r\n color:#777;\r\n text-align:right;\r\n}\r\n\r\n.snippet .snippet-url {\r\n display:none;\r\n}\r\n\r\n.jeditor .snippet:after {\r\n content:'';\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E\");\r\n position:absolute;\r\n top:0;\r\n right:0;\r\n margin:14px;\r\n font-size:24px;\r\n width:24px;\r\n height:24px;\r\n cursor:pointer;\r\n text-shadow: 0px 0px 5px #fff;\r\n}\r\n\r\n.snippet div, .snippet img {\r\n -webkit-user-select: none;\r\n -khtml-user-select: none;\r\n -moz-user-select: none;\r\n -o-user-select: none;\r\n user-select: none;\r\n\r\n -webkit-user-drag: none;\r\n -khtml-user-drag: none;\r\n -moz-user-drag: none;\r\n -o-user-drag: none;\r\n}\r\n\r\n.jeditor img {\r\n border:2px solid transparent;\r\n box-sizing: border-box;\r\n}\r\n\r\n.jeditor img:focus {\r\n border:2px solid #0096FD;\r\n}\r\n\r\n.jeditor .pdf {\r\n background-image: url(\"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 512 512' style='enable-background:new 0 0 512 512;' xml:space='preserve'%3E%3Cpath style='fill:%23C30B15;' d='M511.344,274.266C511.77,268.231,512,262.143,512,256C512,114.615,397.385,0,256,0S0,114.615,0,256 c0,117.769,79.53,216.949,187.809,246.801L511.344,274.266z'/%3E%3Cpath style='fill:%2385080E;' d='M511.344,274.266L314.991,77.913L119.096,434.087l68.714,68.714C209.522,508.787,232.385,512,256,512 C391.243,512,501.976,407.125,511.344,274.266z'/%3E%3Cpolygon style='fill:%23FFFFFF;' points='278.328,333.913 255.711,77.913 119.096,77.913 119.096,311.652 '/%3E%3Cpolygon style='fill:%23E8E6E6;' points='392.904,311.652 392.904,155.826 337.252,133.565 314.991,77.913 255.711,77.913 256.067,333.913 '/%3E%3Cpolygon style='fill:%23FFFFFF;' points='314.991,155.826 314.991,77.913 392.904,155.826 '/%3E%3Crect x='119.096' y='311.652' style='fill:%23FC0F1A;' width='273.809' height='122.435'/%3E%3Cg%3E%3Cpath style='fill:%23FFFFFF;' d='M204.871,346.387c13.547,0,21.341,6.659,21.341,18.465c0,12.412-7.795,19.601-21.341,19.601h-9.611 v14.909h-13.471v-52.975L204.871,346.387L204.871,346.387z M195.26,373.858h8.93c5.904,0,9.308-2.952,9.308-8.552 c0-5.525-3.406-8.324-9.308-8.324h-8.93V373.858z'/%3E%3Cpath style='fill:%23FFFFFF;' d='M257.928,346.387c16.649,0,28.152,10.746,28.152,26.487c0,15.666-11.655,26.488-28.683,26.488 h-22.25v-52.975H257.928z M248.619,388.615h9.611c8.249,0,14.151-6.357,14.151-15.665c0-9.384-6.205-15.817-14.757-15.817h-9.006 V388.615z'/%3E%3Cpath style='fill:%23FFFFFF;' d='M308.563,356.982v12.26h23.763v10.596h-23.763v19.525h-13.471v-52.975h39.277v10.595h-25.806 V356.982z'/%3E%3C/g%3E%3C/svg%3E%0A\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n width:60px;\r\n height:60px;\r\n}\r\n\r\n\r\n\r\n/**\r\n * (c) jLoading\r\n * https://github.com/paulhodel/jtools\r\n *\r\n * @author: Paul Hodel \r\n * @description: Page loading spin\r\n */\r\n\r\n.jloading {\r\n position:fixed;\r\n z-index:10001;\r\n width:100%;\r\n left:0;\r\n right:0;\r\n top:0;\r\n bottom:0;\r\n background-color: rgba(0,0,0,0.7);\r\n}\r\n\r\n.jloading::after {\r\n content:'';\r\n display:block;\r\n margin:0 auto;\r\n margin-top:50vh;\r\n width:40px;\r\n height:40px;\r\n border-style:solid;\r\n border-color:white;\r\n border-top-color:transparent;\r\n border-width:4px;\r\n border-radius:50%;\r\n -webkit-animation: spin .8s linear infinite;\r\n animation: spin .8s linear infinite;\r\n}\r\n\r\n.jloading.spin {\r\n background-color:transparent;\r\n}\r\n\r\n.jloading.spin::after {\r\n margin:0 auto;\r\n margin-top:80px;\r\n border-color:#aaa;\r\n border-top-color:transparent;\r\n}\r\n\r\n\r\n.jlogin {\r\n width: 100%;\r\n box-sizing: border-box;\r\n margin:0 auto;\r\n vertical-align:middle;\r\n border-radius: 5px;\r\n -webkit-border-radius: 5px;\r\n -moz-border-radius: 5px;\r\n font-size:1em;\r\n}\r\n\r\n.jlogin-fullscreen {\r\n position:absolute;\r\n top:0px;\r\n left:0px;\r\n width:100%;\r\n height:100%;\r\n background-color:#fff;\r\n z-index:9000;\r\n}\r\n\r\n.jlogin > form {\r\n max-width:480px;\r\n padding:20px;\r\n margin: 0 auto;\r\n}\r\n\r\n.jlogin > form > div {\r\n margin-bottom:10px;\r\n}\r\n\r\n.jlogin label {\r\n display:block;\r\n}\r\n\r\n.jlogin > form > div > input {\r\n width:100%;\r\n outline:none;\r\n padding:15px;\r\n margin:0px;\r\n}\r\n\r\n.jlogin input[type='checkbox'] {\r\n float:left;\r\n}\r\n\r\n.jlogin input[type='button'] {\r\n padding:10px;\r\n background-color: var(--button-color);\r\n border: 1px solid var(--button-color);\r\n color: #fff;\r\n cursor:pointer;\r\n -webkit-appearance: none;\r\n -moz-appearance: none;\r\n appearance: none;\r\n}\r\n\r\n.jlogin span\r\n{\r\n margin:0 auto;\r\n}\r\n.jlogin img\r\n{\r\n text-align:center;\r\n max-width:220px;\r\n}\r\n\r\n.jlogin .jlogin-logo\r\n{\r\n text-align:center;\r\n padding:20px;\r\n}\r\n\r\n.jlogin .captcha\r\n{\r\n width:100%;\r\n margin-top:4px;\r\n margin-bottom:4px;\r\n border:1px solid #ccc;\r\n display:block;\r\n}\r\n\r\n.jlogin .facebookButton\r\n{\r\n padding:10px;\r\n background-color: var(--button-color);\r\n border: 1px solid var(--button-color);\r\n color: #fff;\r\n text-align:center;\r\n background-repeat:no-repeat;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24px' height='24px'%3E%3Cpath d='M19,3H5C3.895,3,3,3.895,3,5v14c0,1.105,0.895,2,2,2h7.621v-6.961h-2.343v-2.725h2.343V9.309 c0-2.324,1.421-3.591,3.495-3.591c0.699-0.002,1.397,0.034,2.092,0.105v2.43h-1.428c-1.13,0-1.35,0.534-1.35,1.322v1.735h2.7 l-0.351,2.725h-2.365V21H19c1.105,0,2-0.895,2-2V5C21,3.895,20.105,3,19,3z' fill='white'/%3E%3C/svg%3E%0A\");\r\n background-position:10px 40%;\r\n cursor:pointer;\r\n}\r\n\r\n.jlogin .rememberButton\r\n{\r\n padding:10px;\r\n display:none;\r\n}\r\n\r\n.jlogin .requestButton, .jlogin .cancelButton, .jlogin .newProfileButton\r\n{\r\n padding:20px;\r\n padding-bottom:0px;\r\n text-align:center;\r\n cursor:pointer;\r\n}\r\n\r\n.jlogin-captcha img {\r\n min-width:280px;\r\n}\r\n\r\n.jlogin-loading:before {\r\n content: \"\";\r\n display: block;\r\n position: fixed;\r\n top: 0px;\r\n left: 0px;\r\n width: 200px;\r\n height: 4px;\r\n background-color: var(--button-color);\r\n animation: loading 2s linear infinite;\r\n}\r\n\r\n@keyframes loading {\r\n from { left: -200px; width: 30%; }\r\n 50% { width: 30%; }\r\n 70% { width: 70%; }\r\n 80% { left: 50%; }\r\n 95% { left: 120%; }\r\n to { left: 100%; }\r\n}\r\n\r\n@media only screen and (max-device-width : 800px)\r\n{\r\n .jsuites * {\r\n -webkit-tap-highlight-color: transparent;\r\n -webkit-touch-callout: none;\r\n }\r\n\r\n html.jsuites {\r\n height:100%;\r\n }\r\n\r\n .jsuites body {\r\n margin:0px;\r\n padding:0px;\r\n width:100%;\r\n height:100%;\r\n min-height:100%;\r\n line-height:1.4;\r\n font-family:-apple-system,SF UI Text,Helvetica Neue,Helvetica,Arial,sans-serif !important;\r\n background-color:#fff;\r\n }\r\n\r\n .jsuites input, .jsuites select, .jsuites textarea, .jsuites div {\r\n font-family:-apple-system,SF UI Text,Helvetica Neue,Helvetica,Arial,sans-serif !important;\r\n }\r\n}\r\n\r\n.japp\r\n{\r\n height:100%;\r\n box-sizing: border-box;\r\n overflow:scroll;\r\n background-color:#fafafa;\r\n}\r\n\r\n.jwarning::before {\r\n content:'No internet connection';\r\n background-color:red;\r\n color:#fff;\r\n padding:2px;\r\n position:fixed;\r\n top:0px;\r\n left:0px;\r\n z-index:20000;\r\n width:100%;\r\n font-size:0.55em;\r\n text-align:center;\r\n}\r\n\r\n/*\r\n.japp .activeHighLight\r\n{\r\n color:var(--active-color);\r\n}\r\n\r\n.japp .active a, .japp .active span, .japp .active i\r\n{\r\n color:var(--active-color);\r\n}\r\n\r\n.japp .no-padding\r\n{\r\n padding:0px;\r\n}\r\n\r\n.japp .action\r\n{\r\n color:var(--active-color);\r\n cursor:pointer;\r\n}\r\n\r\n\r\n.japp i.action\r\n{\r\n position:absolute;\r\n right:0px;\r\n margin-right:15px;\r\n cursor:pointer;\r\n}\r\n*/\r\n\r\n.japp button {\r\n border-radius: 4px;\r\n width: 100%;\r\n border: 1px solid var(--active-color);\r\n color: var(--active-color);\r\n background-color: transparent;\r\n padding: 4px;\r\n outline: none;\r\n}\r\n\r\n.japp button:active {\r\n border: 1px solid #000;\r\n color: #000;\r\n}\r\n\r\n.japp .red {\r\n color: red;\r\n border-color: 1px solid red;\r\n}\r\n\r\n.japp .link {\r\n color: var(--active-color);\r\n cursor: pointer;\r\n}\r\n\r\n.japp .uppercase {\r\n text-transform: uppercase;\r\n}\r\n\r\n/** Navbar **/\r\n\r\n.japp .navbar {\r\n position:fixed;\r\n top: 0;\r\n width: 100%;\r\n z-index: 500;\r\n margin: 0;\r\n -webkit-backface-visibility: hidden;\r\n -webkit-transform: translate3d(0,0,0);\r\n -webkit-box-sizing: border-box;\r\n backface-visibility: hidden;\r\n box-sizing: border-box;\r\n transform: translate3d(0,0,0);\r\n height: 44px;\r\n background-color: #fff;\r\n box-shadow: 0 1px 2px rgba(0,0,0,.1);\r\n}\r\n\r\n.jwarning .navbar {\r\n top:16px;\r\n}\r\n\r\n.japp .navbar-container {\r\n padding: 0 8px;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n width: 100%;\r\n height: 100%;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n vertical-align:middle;\r\n\r\n display: flex;\r\n\r\n -webkit-flex-flow: row wrap;\r\n justify-content: space-between;\r\n align-items:center;\r\n}\r\n\r\n.japp .navbar-container div {\r\n text-align:center;\r\n}\r\n\r\n.japp .navbar-container div.title {\r\n display: flex;\r\n}\r\n\r\n.japp .navbar-container div.title div\r\n{\r\n line-height:24px;\r\n}\r\n\r\n.japp .navbar-container div.icon {\r\n width:24px;\r\n}\r\n\r\n.japp .navbar-container div i {\r\n display:block;\r\n}\r\n\r\n.japp .navbar-container div img {\r\n height:28px;\r\n display:block;\r\n}\r\n\r\n.japp .navbar-container div.title div img {\r\n border-radius:12px;\r\n width:24px;\r\n height:24px;\r\n margin-right:6px;\r\n}\r\n\r\n.japp .navbar .icon {\r\n color:var(--active-color);\r\n}\r\n\r\n.japp .title {\r\n font-size:1.2em;\r\n}\r\n\r\n.japp .block {\r\n padding:15px;\r\n color: #6d6d72;\r\n font-size:0.9em;\r\n box-sizing: border-box;\r\n}\r\n\r\n.japp .block-title {\r\n text-transform: uppercase;\r\n color: #6d6d72;\r\n margin: 25px 15px 10px;\r\n line-height: 17px;\r\n position: relative;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n line-height: 1;\r\n font-size:0.9em;\r\n}\r\n\r\n.japp .block-strong {\r\n background-color:#fff;\r\n color: #000;\r\n}\r\n\r\n.japp .block-border {\r\n border-top:1px solid #ddd;\r\n border-bottom:1px solid #ddd; \r\n}\r\n\r\n.japp .block-footer {\r\n\ttext-transform: uppercase;\r\n padding:15px;\r\n color: #6d6d72;\r\n font-size:0.7em;\r\n}\r\n\r\n.japp .block-collapse {\r\n max-height:100px;\r\n overflow-y:hidden;\r\n}\r\n\r\n.japp .block-instruction {\r\n text-transform: uppercase;\r\n padding:15px;\r\n color: #6d6d72;\r\n font-size:0.7em;\r\n text-align:center;\r\n}\r\n\r\n.japp .pages {\r\n display: flex;\r\n flex-wrap: nowrap;\r\n align-items: flex-start;\r\n height: 100%;\r\n}\r\n\r\n.japp .page {\r\n padding-top: 45px;\r\n padding-bottom: 45px;\r\n min-height: 100%;\r\n min-width: 100%;\r\n box-sizing: border-box;\r\n overflow-y: auto;\r\n /*will-change: scroll-position;\r\n -webkit-overflow-scrolling: touch;\r\n -webkit-transform: translateZ(0px);\r\n -webkit-transform: translate3d(0,0,0);\r\n -webkit-perspective: 1000;*/\r\n}\r\n\r\n.warning .page {\r\n padding-top: 60px;\r\n}\r\n\r\n.japp .progressbar-container {\r\n margin: 15px;\r\n margin-left: 0px;\r\n margin-right: 0px;\r\n margin-top: 5px;\r\n}\r\n\r\n.japp .progressbar {\r\n width:100%;\r\n border:1px solid var(--active-color);\r\n border-radius:1px;\r\n}\r\n\r\n.japp .progressbar-title {\r\n margin-bottom:2px;\r\n text-transform:uppercase;\r\n display:flex;\r\n justify-content:space-between;\r\n}\r\n\r\n.japp .progressbar div {\r\n background-color:var(--active-color);\r\n height:4px;\r\n width:0%;\r\n}\r\n\r\n.japp .panel {\r\n position:fixed;\r\n top: 0;\r\n left: 0;\r\n margin: 0;\r\n width:60vw;\r\n max-width:220px;\r\n height:100vh;\r\n background: #fff;\r\n z-index: 1003;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n box-shadow: 0 -1px 2px rgba(0,0,0,.1);\r\n padding:4px;\r\n}\r\n\r\n.japp .panel-left {\r\n -webkit-box-shadow: 0px 2px 15px -5px rgba(0, 0, 0, 0.7);\r\n box-shadow: 0px 2px 15px -5px rgba(0, 0, 0, 0.7);\r\n}\r\n\r\n.japp .panel a {\r\n color:var(--active-color);\r\n}\r\n\r\n/** Toolbar **/\r\n\r\n.japp .jtoolbar\r\n{\r\n position:fixed;\r\n bottom: 0;\r\n margin: 0;\r\n left: 0;\r\n width: 100%;\r\n background: #f7f7f8;\r\n z-index: 500;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n box-shadow: 0 -1px 2px rgba(0,0,0,.1);\r\n padding:4px;\r\n}\r\n\r\n.japp .jtoolbar > div\r\n{\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n vertical-align:middle;\r\n\r\n display: -webkit-box;\r\n display: -moz-box;\r\n display: -ms-flexbox;\r\n display: -webkit-flex;\r\n display: flex;\r\n\r\n -webkit-flex-flow: row wrap;\r\n justify-content: space-evenly;\r\n align-items:center;\r\n width: 100%;\r\n cursor:pointer;\r\n}\r\n\r\n.japp .jtoolbar > div > div\r\n{\r\n text-align:center;\r\n flex:1;\r\n margin:auto;\r\n}\r\n\r\n.japp .jtoolbar a\r\n{\r\n text-decoration:none;\r\n display:inline-block;\r\n}\r\n\r\n.japp .jtoolbar i\r\n{\r\n color:#929292;\r\n}\r\n\r\n.japp .jtoolbar span\r\n{\r\n font-size:0.7em;\r\n display:block;\r\n color:#929292;\r\n}\r\n\r\n.japp .jtoolbar .selected a,\r\n.japp .jtoolbar .selected i,\r\n.japp .jtoolbar .selected span\r\n{\r\n color:var(--active-color);\r\n}\r\n\r\n\r\n/** Options **/\r\n\r\n.japp .options\r\n{\r\n background-color:#fff;\r\n border-top:1px solid #e6e6e8;\r\n border-bottom:1px solid #e6e6e8;\r\n padding-left:15px;\r\n margin-top:10px;\r\n}\r\n\r\n.japp .options:empty\r\n{\r\n display:none;\r\n}\r\n\r\n.japp .options .option\r\n{\r\n padding-top:10px;\r\n padding-bottom:10px;\r\n text-transform:uppercase;\r\n font-size:1em;\r\n border-bottom:1px solid #e6e6e8;\r\n overflow-x:hidden;\r\n\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n vertical-align:middle;\r\n\r\n display: -webkit-box;\r\n display: -moz-box;\r\n display: -ms-flexbox;\r\n display: -webkit-flex;\r\n display: flex;\r\n\r\n -webkit-flex-flow: row nowrap;\r\n justify-content: space-between;\r\n align-items:center;\r\n flex-wrap:nowrap;\r\n}\r\n\r\n.japp .options .option:last-child\r\n{\r\n border-bottom:0px;\r\n}\r\n\r\n.japp .options label\r\n{\r\n width:100%;\r\n}\r\n\r\n.japp .options input[type='text'], .japp .options textarea\r\n{\r\n outline:none;\r\n border:1px solid transparent;\r\n font-size:1em;\r\n margin:0px;\r\n padding:0px;\r\n width:100%;\r\n box-sizing:border-box;\r\n}\r\n\r\n.japp .options textarea\r\n{\r\n height:100px;\r\n}\r\n\r\n.japp .options input[type='checkbox'], .japp .options input[type='radio']\r\n{\r\n visibility: hidden;\r\n}\r\n\r\n.japp .options input[type='checkbox'] ~ i, .japp .options input[type='radio'] ~ i\r\n{\r\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIgZmlsbD0iIzAwN2FmZiIvPjwvc3ZnPg==');\r\n background-repeat: no-repeat;\r\n content:'';\r\n visibility: hidden;\r\n margin-right:10px;\r\n line-height:24px;\r\n width:24px;\r\n height:24px;\r\n}\r\n\r\n.japp .options input[type='checkbox']:checked ~ i, .japp .options input[type='radio']:checked ~ i\r\n{\r\n visibility: visible;\r\n}\r\n\r\n.japp .options .jdropdown {\r\n display: block;\r\n}\r\n\r\n.japp .options .jdropdown .jdropdown-header {\r\n border: 0px;\r\n border-bottom: 1px solid #e6e6e8;\r\n padding: 15px;\r\n text-transform: uppercase;\r\n}\r\n\r\n.japp .options .jdropdown:last-child .jdropdown-header {\r\n border-bottom: 0px;\r\n}\r\n\r\n.japp .options .jdropdown-searchbar.jdropdown-focus .jdropdown-header {\r\n border:0px;\r\n padding: 5px;\r\n} \r\n\r\n.japp .options .icon {\r\n float:left;\r\n margin-right:10px;\r\n max-width:40px;\r\n max-height:40px;\r\n border-radius:20px;\r\n color:#929292;\r\n}\r\n\r\n.japp .options .option .option-actions {\r\n display:flex;\r\n transform: translateX(100%);\r\n width:0px;\r\n}\r\n\r\n.japp .options .option .option-actions > div {\r\n padding-right:5px;\r\n}\r\n\r\n.japp .options .option .option-actions > div > i {\r\n width:40px;\r\n height:40px;\r\n color:#fff;\r\n font-size:24px;\r\n line-height:40px;\r\n text-align:center;\r\n border-radius:30px;\r\n background-color:red;\r\n}\r\n\r\n.japp .options .option .option-actions.small > div > i\r\n{\r\n color:#000;\r\n width:24px;\r\n height:24px;\r\n font-size:24px;\r\n line-height:24px;\r\n border-radius:24px;\r\n background-color:transparent;\r\n}\r\n\r\n.japp .options .option-title {\r\n display:block;\r\n padding-top:10px;\r\n padding-bottom:10px;\r\n text-transform:uppercase;\r\n font-size:1em;\r\n vertical-align:center;\r\n}\r\n\r\n.japp .options .option-title::after {\r\n content:'\\e313';\r\n font-family: 'material icons';\r\n font-size:24px;\r\n margin-right:10px;\r\n float:right;\r\n width:24px;\r\n height:24px;\r\n line-height:24px;\r\n}\r\n\r\n.japp .options .option-title.selected::after\r\n{\r\n content:'\\e316';\r\n}\r\n\r\n.japp .options .option-title.selected ~ div {\r\n display:block;\r\n}\r\n\r\n.japp .options .option-group {\r\n border-top:1px solid #e6e6e8;\r\n background-color:#fff;\r\n display:none;\r\n}\r\n\r\n.japp .options .option-link:after {\r\n content:'\\e315';\r\n font-family: 'material icons';\r\n color:var(--active-color);\r\n font-size:24px;\r\n margin-right:10px;\r\n float:right;\r\n width:24px;\r\n height:24px;\r\n line-height:24px;\r\n display:block;\r\n}\r\n\r\n.japp .options .option-header {\r\n padding-left:10px;\r\n padding-right:10px;\r\n flex-grow:10;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.japp .options .option .option-name {\r\n font-size:1em;\r\n text-overflow: ellipsis;\r\n width: 100%;\r\n overflow: hidden;\r\n}\r\n\r\n.japp .options .option .option-small {\r\n font-size:0.7em;\r\n color: #6d6d72;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n display:block;\r\n}\r\n\r\n.japp .options .option .option-image img {\r\n width:40px;\r\n height:40px;\r\n border-radius:20px;\r\n display:block;\r\n}\r\n\r\n.japp .options .option .option-image-small img {\r\n width:24px;\r\n height:auto;\r\n border-radius:50px;\r\n display:block;\r\n}\r\n\r\n.japp .options .option .option-image .option-badge {\r\n position: absolute;\r\n background-color: red;\r\n color: #fff;\r\n width: 16px;\r\n height: 16px;\r\n line-height: 16px;\r\n border-radius: 16px;\r\n text-align: center;\r\n font-size: 7px;\r\n margin: 28px;\r\n}\r\n\r\n.japp .options .option .option-image-small .option-badge {\r\n position: absolute;\r\n background-color: red;\r\n color: #fff;\r\n width: 16px;\r\n height: 16px;\r\n line-height: 16px;\r\n border-radius: 16px;\r\n text-align: center;\r\n font-size: 7px;\r\n margin: 12px;\r\n}\r\n\r\n.japp .options .option .option-badge.solid {\r\n background-color: red;\r\n color: red;\r\n}\r\n\r\n.japp .options .option .option-badge.solid-green {\r\n background-color: green;\r\n color: green;\r\n}\r\n\r\n.japp .options .option .option-badge:empty {\r\n display:none;\r\n}\r\n\r\n.japp .options .option .option-date {\r\n float:right;\r\n font-size:0.6em;\r\n color:#888;\r\n margin-right:15px;\r\n white-space: nowrap;\r\n}\r\n\r\n.japp .options .option .option-right {\r\n margin-right:15px;\r\n}\r\n\r\n.japp .options .option .option-badget {\r\n background-color:red;\r\n border-radius:12px;\r\n width:24px;\r\n height:24px;\r\n line-height:24px;\r\n font-size:0.7em;\r\n color:#fff;\r\n text-align:center;\r\n}\r\n\r\n.japp .options .option .option-badget:empty {\r\n display:none;\r\n}\r\n\r\n/** Badge **/\r\n\r\n.japp .jbadge\r\n{\r\n position:relative;\r\n display:inline-block;\r\n top:-12px;\r\n left:-12px;\r\n}\r\n\r\n.japp .jbadge > div\r\n{\r\n background-color:red;\r\n color:#fff;\r\n width:16px;\r\n height:16px;\r\n line-height:16px;\r\n border-radius:16px;\r\n text-align:center;\r\n font-size:8px;\r\n position:absolute;\r\n}\r\n\r\n.japp .jbadge > div:empty\r\n{\r\n display:none;\r\n}\r\n\r\n/** Picker **/\r\n\r\n.japp .picker \r\n{\r\n background-color:#fff;\r\n border-top:1px solid #e6e6e8;\r\n border-bottom:1px solid #e6e6e8;\r\n padding-left:15px;\r\n margin-top:10px;\r\n position:absolute;\r\n bottom:0px;\r\n width:100%;\r\n z-index:700;\r\n}\r\n\r\n.japp .picker .picker-options\r\n{\r\n -webkit-mask-image: linear-gradient(to bottom, rgba(0,0,0,1), rgba(0,0,0,.2)), linear-gradient(to top, rgba(0,0,0,1), rgba(0,0,0,.2));\r\n -webkit-mask-size: 100% 50%;\r\n -webkit-mask-repeat: no-repeat;\r\n -webkit-mask-position: center bottom, top center;\r\n overflow-y:scroll;\r\n padding-top:100px;\r\n padding-bottom:100px;\r\n}\r\n\r\n.japp .picker label\r\n{\r\n display: block;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n}\r\n\r\n.japp .picker .picker-selected\r\n{\r\n border-top:1px solid #e6e6e8;\r\n border-bottom:1px solid #e6e6e8;\r\n}\r\n\r\n.japp .picker input\r\n{\r\n display:none;\r\n}\r\n\r\n/** Topsearch **/\r\n\r\n.japp .top-search {\r\n margin:0px;\r\n padding:10px;\r\n border-bottom:1px solid #ddd; \r\n}\r\n\r\n.japp .top-search input {\r\n background-color: #e6e6e6;\r\n border: 0px;\r\n border-radius: 4px;\r\n outline: none;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='gray'%3E%3Cpath d='M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E\");\r\n background-repeat: no-repeat;\r\n background-position: 5px center;\r\n padding-left: 32px;\r\n width: 100%;\r\n}\r\n\r\n.japp .searchbar-container i {\r\n position:absolute;\r\n margin-top:5px;\r\n margin-left:8px;\r\n color:#bbb;\r\n}\r\n\r\n/** Range **/\r\n\r\n.japp .range\r\n{\r\n -webkit-appearance: none;\r\n margin: 18px 0;\r\n width: 100%;\r\n}\r\n\r\n.japp .range:focus\r\n{\r\n outline: none;\r\n}\r\n\r\n.japp .range::-webkit-slider-runnable-track\r\n{\r\n width: 100%;\r\n height: 4px;\r\n cursor: pointer;\r\n animation: 0.2s;\r\n background: #ccc;\r\n border-radius: 1.3px;\r\n}\r\n\r\n.japp .range::-webkit-slider-thumb\r\n{\r\n -webkit-appearance:none;\r\n appearance:none;\r\n width:24px;\r\n height:24px;\r\n background:#fff;\r\n cursor:pointer;\r\n border-radius:24px;\r\n margin-top:-10px;\r\n border:0px;\r\n box-shadow:0px 1px 3px 1px #bbb;\r\n}\r\n\r\n.japp .range::-moz-range-track\r\n{\r\n width:100%;\r\n cursor:pointer;\r\n animation:0.2s;\r\n background:#ccc;\r\n border-radius:1.3px;\r\n}\r\n\r\n.japp .range::-moz-range-thumb\r\n{\r\n width:24px;\r\n height:24px;\r\n background:#fff;\r\n cursor:pointer;\r\n border-radius:24px;\r\n border:0px;\r\n box-shadow:0px 1px 3px 1px #bbb;\r\n}\r\n\r\n.japp .range::-ms-track\r\n{\r\n width: 100%;\r\n cursor: pointer;\r\n animation: 0.2s;\r\n background: transparent;\r\n border-color: transparent;\r\n border-width: 16px 0;\r\n color: transparent;\r\n border-radius:1.3px;\r\n}\r\n\r\n.japp .range::-ms-fill-lower\r\n{\r\n background:#ccc;\r\n height:5px;\r\n}\r\n\r\n.japp .range::-ms-fill-upper\r\n{\r\n background:#ccc;\r\n height:5px;\r\n}\r\n\r\n.japp .range::-ms-thumb {\r\n width:24px;\r\n height:24px;\r\n background:#fff;\r\n cursor:pointer;\r\n border-radius:24px;\r\n border:0px;\r\n box-shadow:0px 1px 3px 1px #bbb;\r\n}\r\n\r\n.japp .range:focus::-ms-fill-lower\r\n{\r\n background: #ccc;\r\n}\r\n\r\n.japp .range:focus::-ms-fill-upper\r\n{\r\n background: #ccc;\r\n}\r\n\r\n\r\n/** Actionsheet **/\r\n\r\n.jactionsheet\r\n{\r\n position:fixed;\r\n left: 0;\r\n bottom: 0;\r\n width: 100%;\r\n min-height:100%;\r\n z-index:10000;\r\n\r\n background-color:rgba(0,0,0,0.5);\r\n -webkit-transition-duration: .2s;\r\n transition-duration: .2s;\r\n display: flex;\r\n -ms-flex-align: baseline;\r\n -webkit-align-items: baseline;\r\n -webkit-box-align: baseline;\r\n\r\n align-items: baseline;\r\n}\r\n\r\n.jactionsheet .jactionsheet-content\r\n{\r\n width:100%;\r\n align-self: flex-end;\r\n}\r\n\r\n.jactionsheet .jactionsheet-title\r\n{\r\n font-size:1em;\r\n font-weight:bold;\r\n padding:8px;\r\n}\r\n\r\n.jactionsheet .jactionsheet-message\r\n{\r\n padding:4px;\r\n}\r\n\r\n.jactionsheet .jactionsheet-group\r\n{\r\n box-sizing: border-box;\r\n margin:10px;\r\n background-color:#fff;\r\n border-radius:5px;\r\n}\r\n\r\n.jactionsheet .jactionsheet-group > div\r\n{\r\n font-size:1.4em;\r\n font-weight:bold;\r\n padding:4px;\r\n border-top:1px solid #ccc;\r\n text-align:center;\r\n width:100%;\r\n}\r\n.jactionsheet .jactionsheet-group > div:first-child\r\n{\r\n border-top:0px;\r\n}\r\n\r\n.jactionsheet .jactionsheet-group input\r\n{\r\n border:0px;\r\n margin:0px;\r\n background-color:transparent;\r\n color:var(--active-color);\r\n width:100%;\r\n outline:none;\r\n font-size:1em;\r\n}\r\n\r\n.jactionsheet .jactionsheet-group input.jactionsheet-cancel\r\n{\r\n color:red;\r\n}\r\n\r\n/** Toggle **/\r\n\r\n.jtoggle {\r\n display: inline-block;\r\n cursor: pointer;\r\n -webkit-tap-highlight-color: transparent;\r\n}\r\n\r\n.jtoggle i {\r\n position: relative;\r\n display: inline-block;\r\n margin-right: .5rem;\r\n border-radius: 23px;\r\n vertical-align: text-bottom;\r\n transition: all 0.3s linear;\r\n width: 46px !important;\r\n height: 27px !important;\r\n background: #e6e6e6 !important;\r\n visibility: visible !important;\r\n}\r\n\r\n.jtoggle i::before {\r\n content: \"\";\r\n position: absolute;\r\n left: 0;\r\n width: 42px;\r\n height: 22px;\r\n background-color: #fff;\r\n border-radius: 11px;\r\n transform: translate3d(2px, 2px, 0) scale3d(1, 1, 1);\r\n transition: all 0.25s linear;\r\n}\r\n\r\n.jtoggle i::after {\r\n content: \"\";\r\n position: absolute;\r\n left: 0;\r\n width: 22px;\r\n height: 22px;\r\n background-color: #fff;\r\n border-radius: 11px;\r\n box-shadow: 0 2px 2px rgba(0, 0, 0, 0.24);\r\n transform: translate3d(2px, 2px, 0);\r\n transition: all 0.2s ease-in-out;\r\n}\r\n\r\n.jtoggle:active i::after {\r\n width: 28px;\r\n transform: translate3d(2px, 2px, 0);\r\n}\r\n\r\n.jtoggle:active input:checked + i::after {\r\n transform: translate3d(16px, 2px, 0);\r\n}\r\n\r\n.jtoggle input {\r\n display: none;\r\n}\r\n\r\n.jtoggle input:checked + i {\r\n background-color: #4BD763 !important;\r\n}\r\n\r\n.jtoggle input:checked + i::before {\r\n transform: translate3d(18px, 2px, 0) scale3d(0, 0, 0);\r\n}\r\n\r\n.jtoggle input:checked + i::after {\r\n transform: translate3d(22px, 2px, 0);\r\n}\r\n\r\n/** Placeholders **/\r\n\r\n.japp .options input::-webkit-input-placeholder\r\n{\r\n text-transform:uppercase;\r\n}\r\n\r\n.japp .options input::-moz-placeholder\r\n{\r\n text-transform:uppercase;\r\n}\r\n\r\n.japp .options input:-ms-input-placeholder\r\n{\r\n text-transform:uppercase;\r\n}\r\n\r\n.japp .options input:-moz-placeholder\r\n{\r\n text-transform:uppercase;\r\n}\r\n\r\n::placeholder\r\n{\r\n color: #cccccc;\r\n opacity: 1;\r\n}\r\n\r\n:-ms-input-placeholder\r\n{\r\n color: #cccccc;\r\n}\r\n\r\n::-ms-input-placeholder\r\n{\r\n color: #cccccc;\r\n}\r\n\r\n::-webkit-input-placeholder\r\n{\r\n color: #cccccc;\r\n}\r\n\r\n\r\n.jmodal {\r\n position:fixed;\r\n top:50%;\r\n left:50%;\r\n width:60%;\r\n height:60%;\r\n -webkit-box-shadow: 0 2px 10px rgba(0,0,0,.2);\r\n -moz-box-shadow: 0 2px 10px rgba(0,0,0,.2);\r\n border:1px solid #ccc;\r\n background-color:#fff;\r\n transform: translate(-50%, -50%);\r\n box-sizing: border-box;\r\n padding-top:50px;\r\n z-index:9002;\r\n border-radius:5px;\r\n}\r\n\r\n.jmodal:before {\r\n position:absolute;\r\n top:0;\r\n left:0;\r\n width:100%;\r\n content:attr(title);\r\n padding:15px;\r\n box-sizing: border-box;\r\n background: #e3e3e3;\r\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#e3e3e3');\r\n background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#e3e3e3));\r\n background: -moz-linear-gradient(top, #ededed, #e3e3e3);\r\n font-size:1.2em;\r\n}\r\n\r\n.jmodal_content {\r\n padding:20px;\r\n overflow-y:auto;\r\n max-height:100%;\r\n}\r\n.jmodal.no-title {\r\n padding-top:0px;\r\n}\r\n\r\n.jmodal.no-title:before {\r\n display:none;\r\n}\r\n\r\n.jmodal:after {\r\n content:'';\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E\");\r\n position:absolute;\r\n top:0;\r\n right:0;\r\n margin:14px;\r\n font-size:24px;\r\n width:24px;\r\n height:24px;\r\n cursor:pointer;\r\n text-shadow: 0px 0px 5px #fff;\r\n}\r\n\r\n.jmodal_fullscreen {\r\n width: 100% !important;\r\n height: 100% !important;\r\n top: 0px;\r\n left: 0px;\r\n transform: none;\r\n border-radius: 0px;\r\n}\r\n\r\n\r\n.jmodal_backdrop {\r\n position: fixed;\r\n top: 0px;\r\n left: 0px;\r\n min-width: 100%;\r\n min-height: 100%;\r\n background-color: rgba(0,0,0,0.5);\r\n border: 0px;\r\n padding: 0px;\r\n z-index: 8000;\r\n display: none;\r\n\r\n -webkit-touch-callout: none; /* iOS Safari */\r\n -webkit-user-select: none; /* Safari */\r\n -khtml-user-select: none; /* Konqueror HTML */\r\n -moz-user-select: none; /* Firefox */\r\n -ms-user-select: none; /* Internet Explorer/Edge */\r\n user-select: none; /* Non-prefixed version, currently\r\n supported by Chrome and Opera */\r\n}\r\n\r\n\r\n.jnotification {\r\n position: fixed;\r\n z-index: 10000;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n padding: 10px;\r\n}\r\n\r\n.jnotification-container {\r\n -webkit-box-shadow: 0px 2px 15px -5px rgba(0, 0, 0, 0.7);\r\n box-shadow: 0px 2px 15px -5px rgba(0, 0, 0, 0.7);\r\n padding: 12px;\r\n border-radius: 8px;\r\n}\r\n\r\n.jnotification-close {\r\n content: '';\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='gray'%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E\");\r\n font-size: 20px;\r\n width: 20px;\r\n height: 20px;\r\n cursor: pointer;\r\n}\r\n\r\n.jnotification-title {\r\n font-weight: bold;\r\n}\r\n\r\n.jnotification-header {\r\n display: flex;\r\n padding-bottom: 5px;\r\n}\r\n\r\n.jnotification-header:empty {\r\n display: none;\r\n}\r\n\r\n.jnotification-image {\r\n margin-right: 5px;\r\n}\r\n\r\n.jnotification-image:empty {\r\n display: none;\r\n}\r\n\r\n.jnotification-image img {\r\n width: 24px;\r\n}\r\n\r\n.jnotification-name {\r\n text-transform: uppercase;\r\n font-size: 0.9em;\r\n flex: 1;\r\n letter-spacing: 0.1em;\r\n}\r\n\r\n@media (min-width: 320px) and (max-width: 800px) {\r\n .jnotification {\r\n top: 0px;\r\n width: 100%;\r\n }\r\n .jnotification-container {\r\n background: rgba(255,255,255,0.95);\r\n border: 1px solid #eee;\r\n }\r\n}\r\n\r\n@media (min-width: 801px) {\r\n .jnotification {\r\n bottom: 0px;\r\n }\r\n .jnotification-container {\r\n background-color: #000;\r\n background: rgba(92,92,92,1);\r\n background: linear-gradient(0deg, rgba(92,92,92,1) 0%, rgba(77,77,77,1) 100%);\r\n color: #fff;\r\n width: 320px;\r\n margin: 30px;\r\n padding: 20px;\r\n }\r\n}\r\n\r\n.jnotification-header {\r\n display: -webkit-box;\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-pack: start;\r\n -webkit-justify-content: flex-start;\r\n -ms-flex-pack: start;\r\n justify-content: flex-start;\r\n -webkit-box-align: center;\r\n -webkit-align-items: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n}\r\n\r\n.jrating {\n display:flex;\n}\n.jrating > div {\n width:24px;\n height:24px;\n line-height:24px;\n background-image: url(\"data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z' fill='gray'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E\");\n}\n\n.jrating .jrating-over {\n background-image: url(\"data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='black'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E\");\n opacity: 0.7;\n}\n\n.jrating .jrating-selected {\n background-image: url(\"data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='red'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E\");\n}\n\r\n\r\n/**\r\n * (c) Image slider\r\n * https://github.com/paulhodel/jtools\r\n *\r\n * @author: Paul Hodel \r\n * @description: Image Slider\r\n */\r\n\r\n.jslider {\r\n margin-top:10px;\r\n margin-bottom:10px;\r\n}\r\n\r\n.jslider-container img {\r\n width:60px;\r\n margin-right:5px;\r\n margin-bottom:5px;\r\n}\r\n\r\n.jslider-attach {\r\n cursor:pointer;\r\n}\r\n\r\n.jslider-left::before {\r\n position: fixed;\r\n left: 10px;\r\n content:'arrow_back_ios';\r\n color: #fff;\r\n width: 30px;\r\n height: 30px;\r\n font-family: 'Material Icons';\r\n font-size: 30px;\r\n text-shadow: 0px 0px 0px #000;\r\n text-align: center;\r\n}\r\n\r\n.jslider-right::after {\r\n position: fixed;\r\n right: 5px;\r\n content: 'arrow_forward_ios';\r\n color: #fff;\r\n width: 30px;\r\n height: 30px;\r\n font-family: 'Material Icons';\r\n font-size: 30px;\r\n text-shadow: 0px 0px 0px #000;\r\n text-align: center;\r\n}\r\n\r\n.jslider-close {\r\n width:24px;\r\n height:24px;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E\");\r\n position:fixed;\r\n top:15px;\r\n right:15px;\r\n display:none;\r\n cursor:pointer;\r\n z-index:3000;\r\n}\r\n\r\n.jslider-preview {\r\n position:fixed;\r\n left:0;\r\n top:0;\r\n width: 100%;\r\n min-height:100%;\r\n z-index:2000;\r\n margin:0px;\r\n box-sizing:border-box;\r\n\r\n background-color:rgba(0,0,0,0.9);\r\n -webkit-transition-duration: .4s;\r\n transition-duration: .4s;\r\n display: flex;\r\n -ms-flex-align: center;\r\n -webkit-align-items: center;\r\n -webkit-box-align: center;\r\n\r\n align-items: center;\r\n}\r\n\r\n.jslider-preview img {\r\n min-width:70%;\r\n max-width:100%;\r\n height:auto;\r\n box-sizing: border-box;\r\n margin:0 auto;\r\n vertical-align:middle;\r\n display:none;\r\n}\r\n\r\n\r\n.jtabs {\r\n max-width: calc(100vw - 24px);\r\n position: relative;\r\n}\r\n.jtabs > .jtabs-headers {\r\n display: flex;\r\n overflow-x: auto;\r\n}\r\n\r\n.jtabs > .jtabs-headers > div {\r\n padding: 6px;\r\n padding-left: 20px;\r\n padding-right: 20px;\r\n margin-left: 1px;\r\n margin-right: 1px;\r\n margin-bottom: 1px;\r\n background-color: #f1f1f1;\r\n cursor: pointer;\r\n}\r\n\r\n.jtabs > .jtabs-headers > div.jtabs-selected {\r\n background-color: #e8e8e8;\r\n color: #000;\r\n}\r\n\r\n.jtabs > .jtabs-content > div {\r\n display: none;\r\n}\r\n\r\n.jtabs > .jtabs-content > div.jtabs-selected {\r\n display: block;\r\n}\r\n\r\n.jtabs > .jtabs-border {\r\n position: absolute;\r\n height: 2px;\r\n background-color: #888;\r\n transform-origin: left;\r\n transition: all .2s cubic-bezier(0.4,0,0.2,1);\r\n transition-property: color,left,transform;\r\n}\r\n\r\n.jtabs .jtabs-add {\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 0 24 24' width='24'%3E%3Cpath d='M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z' fill='%23bbbbbb'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E\");\r\n cursor: pointer;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n width: 24px;\r\n height: 24px;\r\n line-height: 24px;\r\n margin: 3px;\r\n margin-left: 10px;\r\n}\r\n\r\n.jtags {\r\n display: flex;\r\n flex-wrap: wrap;\r\n -ms-flex-direction: row;\r\n -webkit-flex-direction: row;\r\n flex-direction: row;\r\n -ms-flex-pack: flex-start;\r\n -webkit-justify-content: space-between;\r\n justify-content: flex-start;\r\n padding: 2px;\r\n border: 1px solid #ccc;\r\n} \r\n\r\n.jtags > div {\r\n padding: 3px;\r\n padding-left: 10px;\r\n padding-right: 22px;\r\n position: relative;\r\n border-radius: 1px;\r\n margin: 2px;\r\n display: block;\r\n outline: none;\r\n}\r\n\r\n.jtags > div::after {\r\n content: 'x';\r\n position: absolute;\r\n top: 4px;\r\n right: 4px;\r\n width: 12px;\r\n height: 12px;\r\n cursor: pointer;\r\n font-size: 11px;\r\n display: none;\r\n}\r\n\r\n.jtags_label {\r\n background-color: #eeeeee !important;\r\n}\r\n\r\n.jtags_label::after {\r\n display: inline-block !important;\r\n}\r\n\r\n.jtags_error::after {\r\n color: #fff !important;\r\n}\r\n\r\n.jtags_error {\r\n background-color: #d93025 !important;\r\n color: #fff;\r\n}\r\n\r\n\r\n.jtags_search {\r\n position: absolute;\r\n display: none;\r\n box-shadow: 0 1px 2px 0 rgba(60,64,67,0.302), 0 2px 6px 2px rgba(60,64,67,0.149);\r\n border: none;\r\n -webkit-border-radius: 4px;\r\n border-radius: 4px;\r\n width: 280px;\r\n padding: 8px 0;\r\n\r\n -webkit-box-shadow: 0 2px 4px rgba(0,0,0,0.2);\r\n box-shadow: 0 2px 4px rgba(0,0,0,0.2);\r\n -webkit-transition: opacity .218s;\r\n transition: opacity .218s;\r\n background: #fff;\r\n border: 1px solid rgba(0,0,0,.2);\r\n cursor: pointer;\r\n margin: 0;\r\n min-width: 300px;\r\n outline: none;\r\n width: auto;\r\n user-select: none;\r\n}\r\n\r\n.jtags_search > div {\r\n color: #333;\r\n cursor: pointer;\r\n display: -webkit-box;\r\n display: -webkit-flex;\r\n display: flex;\r\n padding: 5px 10px;\r\n user-select: none;\r\n -webkit-align-items: center;\r\n align-items: center;\r\n}\r\n\r\n.jtags_search > div:hover {\r\n background-color: #e8eaed;\r\n}\r\n\r\n.jtags_search > div > img {\r\n width: 32px;\r\n height: 32px;\r\n user-select: none;\r\n border-radius: 16px;\r\n margin-right: 2px;\r\n}\r\n\r\n.jtags_search > div > div {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n margin-left: 2px;\r\n max-width: 300px;\r\n white-space: nowrap;\r\n user-select: none;\r\n}\r\n\r\n.jtags_search .selected {\r\n background-color: #e8eaed;\r\n}\r\n\r\n\r\n",":root {\n --jexcel-border-color:#000;\n}\n\n.jexcel_container {\n display:inline-block;\n padding-right:2px;\n box-sizing: border-box;\n overscroll-behavior: contain;\n}\n\n.jexcel_container.fullscreen {\n position:fixed;\n top:0px;\n left:0px;\n width:100%;\n height:100%;\n z-index:21;\n}\n\n.jexcel_container.fullscreen .jexcel_content {\n overflow:auto;\n width:100%;\n height:100%;\n background-color:#ffffff;\n}\n\n.jexcel_container.fullscreen.with-toolbar {\n height: calc(100% - 46px);\n}\n\n.jexcel_content {\n display:inline-block;\n box-sizing: border-box;\n padding-right:3px;\n padding-bottom:3px;\n position:relative;\n scrollbar-width: thin;\n scrollbar-color: #666 transparent;\n}\n\n@supports (-moz-appearance:none) {\n .jexcel_content { padding-right:10px; } \n}\n\n.jexcel_content::-webkit-scrollbar {\n width: 5px;\n height: 5px;\n}\n\n.jexcel_content::-webkit-scrollbar-track {\n background: #eee;\n}\n \n.jexcel_content::-webkit-scrollbar-thumb {\n background: #666; \n}\n\n.jexcel {\n border-collapse:separate;\n table-layout:fixed;\n white-space: nowrap;\n empty-cells:show;\n border:0px;\n background-color:#fff;\n width:0;\n\n border-top:1px solid transparent;\n border-left:1px solid transparent;\n border-right:1px solid #ccc;\n border-bottom:1px solid #ccc;\n}\n\n.jexcel > thead > tr > td\n{\n border-top:1px solid #ccc;\n border-left:1px solid #ccc;\n border-right:1px solid transparent;\n border-bottom:1px solid transparent;\n background-color:#f3f3f3;\n padding:2px;\n cursor:pointer;\n box-sizing: border-box;\n overflow: hidden;\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index:20;\n}\n\n.with-toolbar .jexcel > thead > tr > td\n{\n top:42px;\n}\n\n.jexcel > thead.draggable > tr > td::before\n{\n content:'\\00a0';\n width:100%;\n height:3px;\n position:absolute;\n bottom:0px;\n left:0px;\n cursor:move;\n}\n\n.jexcel > thead.resizable > tr > td::after\n{\n content:'\\00a0';\n width:3px;\n height:100%;\n position:absolute;\n top:0px;\n right:0px;\n cursor:col-resize;\n}\n\n.jexcel > thead > tr > td.dragging\n{\n background-color:#fff;\n opacity:0.5;\n}\n\n.jexcel > thead > tr > td:first-child:after,\n.jexcel > thead > tr.jexcel_nested > td::before,\n.jexcel > thead > tr.jexcel_nested > td::after\n{\n cursor:default;\n}\n\n.jexcel > thead > tr > td.selected\n{\n background-color:#dcdcdc;\n}\n\n.jexcel > thead > tr > td.arrow-up\n{\n background-repeat:no-repeat;\n background-position:center right 5px;\n background-image: url(\"data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 14l5-5 5 5H7z' fill='gray'/%3E%3C/svg%3E\");\n text-decoration:underline;\n}\n\n.jexcel > thead > tr > td.arrow-down\n{\n background-repeat:no-repeat;\n background-position:center right 5px;\n background-image: url(\"data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='gray'/%3E%3C/svg%3E\");\n text-decoration:underline;\n}\n\n.jexcel > tbody > tr > td:first-child\n{\n position:relative;\n background-color:#f3f3f3;\n text-align:center;\n}\n\n.jexcel > tbody.resizable > tr > td:first-child::before\n{\n content:'\\00a0';\n width:100%;\n height:3px;\n position:absolute;\n bottom:0px;\n left:0px;\n cursor:row-resize;\n}\n\n.jexcel > tbody.draggable > tr > td:first-child::after\n{\n content:'\\00a0';\n width:3px;\n height:100%;\n position:absolute;\n top:0px;\n right:0px;\n cursor:move;\n}\n\n.jexcel > tbody > tr.dragging > td\n{\n background-color:#eee;\n opacity:0.5;\n}\n\n.jexcel > tbody > tr > td\n{\n border-top:1px solid #ccc;\n border-left:1px solid #ccc;\n border-right:1px solid transparent;\n border-bottom:1px solid transparent;\n padding:4px;\n white-space: nowrap;\n box-sizing: border-box;\n line-height:1em;\n}\n\n.jexcel > tbody > tr > td:last-child\n{\n overflow:hidden;\n}\n\n.jexcel > tbody > tr > td > img\n{\n display:inline-block;\n max-width:100px;\n}\n\n.jexcel > tbody > tr > td.readonly\n{\n color:rgba(0,0,0,0.3)\n}\n.jexcel > tbody > tr.selected > td:first-child\n{\n background-color:#dcdcdc;\n}\n.jexcel > tbody > tr > td > select,\n.jexcel > tbody > tr > td > input,\n.jexcel > tbody > tr > td > textarea\n{\n border:0px;\n border-radius:0px;\n outline:0px;\n width:100%;\n margin:0px;\n padding:0px;\n background-color:transparent;\n box-sizing: border-box;\n}\n\n.jexcel > tbody > tr > td > textarea\n{\n resize: none;\n padding-top:6px !important;\n}\n\n.jexcel > tbody > tr > td > input[type=checkbox]\n{\n width:12px;\n margin-top:2px;\n}\n.jexcel > tbody > tr > td > input[type=radio]\n{\n width:12px;\n margin-top:2px;\n}\n\n.jexcel > tbody > tr > td > select\n{\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-repeat: no-repeat;\n background-position-x: 100%;\n background-position-y: 40%;\n background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSdibGFjaycgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyB3aWR0aD0nMjQnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PHBhdGggZD0nTTcgMTBsNSA1IDUtNXonLz48cGF0aCBkPSdNMCAwaDI0djI0SDB6JyBmaWxsPSdub25lJy8+PC9zdmc+);\n}\n\n.jexcel > tbody > tr > td.jexcel_dropdown\n{\n background-repeat: no-repeat;\n background-position:top 50% right 5px;\n background-image: url(\"data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='lightgray'/%3E%3C/svg%3E\");\n text-overflow: ellipsis;\n overflow-x:hidden;\n}\n\n.jexcel > tbody > tr > td.jexcel_dropdown.jexcel_comments\n{\n background:url(\"data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='lightgray'/%3E%3C/svg%3E\") top 50% right 5px no-repeat, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII=') top right no-repeat;\n}\n\n.jexcel > tbody > tr > td > .color\n{\n width:90%;\n height:10px;\n margin:auto;\n}\n\n.jexcel > tbody > tr > td > a {\n text-decoration: underline;\n}\n\n.jexcel > tbody > tr > td.highlight > a {\n color: blue;\n cursor: pointer;\n}\n\n.jexcel .highlight {\n background-color:rgba(0,0,0,0.05);\n}\n\n.jexcel .highlight-top {\n border-top:1px solid #000; /* var(--jexcel-border-color);*/\n box-shadow: 0px -1px #ccc;\n}\n\n.jexcel .highlight-left {\n border-left:1px solid #000; /* var(--jexcel-border-color);*/\n box-shadow: -1px 0px #ccc;\n}\n\n.jexcel .highlight-right {\n border-right:1px solid #000; /* var(--jexcel-border-color);*/\n}\n\n.jexcel .highlight-bottom {\n border-bottom:1px solid #000; /* var(--jexcel-border-color);*/\n}\n\n.jexcel .highlight-top.highlight-left {\n box-shadow: -1px -1px #ccc;\n -webkit-box-shadow: -1px -1px #ccc;\n -moz-box-shadow: -1px -1px #ccc;\n}\n\n.jexcel .highlight-selected\n{\n background-color:rgba(0,0,0,0.0);\n}\n.jexcel .selection\n{\n background-color:rgba(0,0,0,0.05);\n}\n.jexcel .selection-left\n{\n border-left:1px dotted #000;\n}\n.jexcel .selection-right\n{\n border-right:1px dotted #000;\n}\n.jexcel .selection-top\n{\n border-top:1px dotted #000;\n}\n.jexcel .selection-bottom\n{\n border-bottom:1px dotted #000;\n}\n.jexcel_corner\n{\n position:absolute;\n background-color: rgb(0, 0, 0);\n height: 1px;\n width: 1px;\n border: 1px solid rgb(255, 255, 255);\n top:-2000px;\n left:-2000px;\n cursor:crosshair;\n box-sizing: initial;\n z-index:30;\n padding: 2px;\n}\n\n.jexcel .editor\n{\n outline:0px solid transparent;\n overflow:visible;\n white-space: nowrap;\n text-align:left;\n padding:0px;\n box-sizing: border-box;\n overflow:visible !important;\n}\n\n.jexcel .editor > input\n{\n padding-left:4px;\n}\n\n.jexcel .editor .jupload\n{\n position:fixed;\n top:100%;\n z-index:40;\n user-select:none;\n -webkit-font-smoothing: antialiased;\n font-size: .875rem;\n letter-spacing: .2px;\n -webkit-border-radius: 4px;\n border-radius: 4px;\n -webkit-box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);\n box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);\n padding:10px;\n background-color:#fff;\n width:300px;\n min-height:225px;\n margin-top:2px;\n}\n\n.jexcel .editor .jupload img\n{\n width:100%;\n height:auto;\n}\n\n.jexcel .editor .jclose:after\n{\n position:absolute;\n top:0;\n right:0;\n margin:10px;\n content:'close';\n font-family:'Material icons';\n font-size:24px;\n width:24px;\n height:24px;\n line-height:24px;\n cursor:pointer;\n text-shadow: 0px 0px 5px #fff;\n}\n\n.jexcel, .jexcel td, .jexcel_corner\n{\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-user-drag: none;\n -khtml-user-drag: none;\n -moz-user-drag: none;\n -o-user-drag: none;\n user-drag: none;\n}\n\n.jexcel_textarea\n{\n position:absolute;\n top:-999px;\n left:-999px;\n width:1px;\n height:1px;\n}\n.jexcel .dragline\n{\n position:absolute;\n}\n.jexcel .dragline div\n{\n position:relative;\n top:-6px;\n height:5px;\n width:22px;\n}\n.jexcel .dragline div:hover\n{\n cursor:move;\n}\n\n.jexcel .onDrag\n{\n background-color:rgba(0,0,0,0.6);\n}\n\n.jexcel .error\n{\n border:1px solid red;\n}\n\n.jexcel thead td.resizing\n{\n border-right-style:dotted !important;\n border-right-color:red !important;\n}\n\n.jexcel tbody tr.resizing > td\n{\n border-bottom-style:dotted !important;\n border-bottom-color:red !important;\n}\n\n.jexcel tbody td.resizing\n{\n border-right-style:dotted !important;\n border-right-color:red !important;\n}\n\n.jexcel .jdropdown-header\n{\n border:0px !important;\n outline:none !important;\n width:100% !important;\n height:100% !important;\n padding:0px !important;\n padding-left:8px !important;\n}\n\n.jexcel .jdropdown-container\n{\n margin-top:1px;\n}\n\n.jexcel .jdropdown-container-header {\n padding: 0px;\n margin: 0px;\n height: inherit;\n}\n\n.jexcel .jdropdown-picker\n{\n border:0px !important;\n padding:0px !important;\n width:inherit;\n height:inherit;\n}\n\n.jexcel .jexcel_comments\n{\n background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII=');\n background-repeat: no-repeat;\n background-position: top right;\n}\n\n.jexcel .sp-replacer\n{\n margin: 2px;\n border:0px;\n}\n\n.jexcel > thead > tr.jexcel_filter > td > input\n{\n border:0px;\n width:100%;\n outline:none;\n}\n\n.jexcel_about {\n float: right;\n font-size: 0.7em;\n padding: 2px;\n text-transform: uppercase;\n letter-spacing: 1px;\n display: none;\n}\n.jexcel_about a {\n color: #ccc;\n text-decoration: none;\n}\n\n.jexcel_about img {\n display: none;\n}\n\n.jexcel_filter\n{\n display:flex;\n justify-content:space-between;\n margin-bottom:4px;\n}\n\n.jexcel_filter > div\n{\n padding:8px;\n align-items:center;\n}\n\n.jexcel_pagination\n{\n display:flex;\n justify-content:space-between;\n align-items:center;\n}\n\n.jexcel_pagination > div\n{\n display:flex;\n padding:10px;\n}\n\n.jexcel_pagination > div:last-child\n{\n padding-right:10px;\n padding-top:10px;\n}\n\n.jexcel_pagination > div > div\n{\n text-align:center;\n width:36px;\n height:36px;\n line-height:34px;\n border:1px solid #ccc;\n box-sizing: border-box;\n margin-left:2px;\n cursor:pointer;\n}\n\n.jexcel_page\n{\n font-size:0.8em;\n}\n\n.jexcel_page_selected\n{\n font-weight:bold;\n background-color:#f3f3f3;\n}\n\n.jexcel_toolbar\n{\n display:flex;\n background-color:#f3f3f3;\n border:1px solid #ccc;\n padding:4px;\n margin:0px 2px 4px 1px;\n position:sticky;\n top:0px;\n z-index:21;\n}\n\n.jexcel_toolbar:empty\n{\n display:none;\n}\n\n.jexcel_toolbar i.jexcel_toolbar_item \n{\n width:24px;\n height:24px;\n padding:4px;\n cursor:pointer;\n display:inline-block;\n}\n\n.jexcel_toolbar i.jexcel_toolbar_item:hover \n{\n background-color:#ddd;\n}\n\n.jexcel_toolbar select.jexcel_toolbar_item \n{\n margin-left:2px;\n margin-right:2px;\n display:inline-block;\n border:0px;\n background-color:transparent;\n padding-right:10px;\n}\n\n.jexcel .dragging-left\n{\n background-repeat: no-repeat;\n background-position:top 50% left 0px;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M14 7l-5 5 5 5V7z'/%3E%3Cpath fill='none' d='M24 0v24H0V0h24z'/%3E%3C/svg%3E\");\n}\n\n.jexcel .dragging-right\n{\n background-repeat: no-repeat;\n background-position:top 50% right 0px;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M10 17l5-5-5-5v10z'/%3E%3Cpath fill='none' d='M0 24V0h24v24H0z'/%3E%3C/svg%3E\");\n}\n\n.jexcel_tabs > .jexcel_tab\n{\n display:none;\n}\n\n.jexcel_tabs > .jexcel_tab_link\n{\n display:inline-block;\n padding:10px;\n padding-left:20px;\n padding-right:20px;\n margin-right:5px;\n margin-bottom:5px;\n background-color:#f3f3f3;\n cursor:pointer;\n}\n\n.jexcel_tabs > .jexcel_tab_link.selected\n{\n background-color:#ddd;\n}\n\n.jexcel_hidden_index > tbody > tr > td:first-child,\n.jexcel_hidden_index > thead > tr > td:first-child, \n.jexcel_hidden_index > colgroup > col:first-child\n{\n display:none;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-131.b184379d0dc5871b.css.map.gz b/_static/prefix-131.b184379d0dc5871b.css.map.gz new file mode 100644 index 0000000..90ab4b1 Binary files /dev/null and b/_static/prefix-131.b184379d0dc5871b.css.map.gz differ diff --git a/_static/prefix-168.1c4deaed00ca1f5e.css b/_static/prefix-168.1c4deaed00ca1f5e.css new file mode 100644 index 0000000..fe0b450 --- /dev/null +++ b/_static/prefix-168.1c4deaed00ca1f5e.css @@ -0,0 +1,2 @@ +.poll .poll-question{padding-bottom:10px}.poll .progress{height:25px;margin-top:-20px;width:350px}.poll .progress .progress-bar{color:#333;height:30px}.poll-text{float:left;font-size:12px;line-height:20px;margin:0 0 0 10px}.results-container{display:grid;grid-template-columns:2em 90%}.poll-option{margin-left:5px}.poll-option>.para:first-of-type{display:inline-block;padding-left:.5rem}.poll-results:not(:empty){margin-top:.5rem}label.poll-option{display:block;font-weight:400}.ptx-runestone-container input.poll-choice-input{margin-right:.5em;vertical-align:top} +/*# sourceMappingURL=prefix-168.1c4deaed00ca1f5e.css.map*/ \ No newline at end of file diff --git a/_static/prefix-168.1c4deaed00ca1f5e.css.gz b/_static/prefix-168.1c4deaed00ca1f5e.css.gz new file mode 100644 index 0000000..5e1ad25 Binary files /dev/null and b/_static/prefix-168.1c4deaed00ca1f5e.css.gz differ diff --git a/_static/prefix-168.1c4deaed00ca1f5e.css.map b/_static/prefix-168.1c4deaed00ca1f5e.css.map new file mode 100644 index 0000000..cba6480 --- /dev/null +++ b/_static/prefix-168.1c4deaed00ca1f5e.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-168.1c4deaed00ca1f5e.css","mappings":"AACA,qBACI,mBACJ,CAEA,gBAEI,WAAY,CACZ,gBAAiB,CAFjB,WAGJ,CAEA,8BAEI,UAAW,CADX,WAEJ,CAEA,WAII,UAAW,CAFX,cAAe,CACf,gBAAiB,CAFjB,iBAIJ,CAEA,mBACI,YAAa,CACb,6BACJ,CAEA,aACI,eACJ,CAEA,iCACI,oBAAqB,CACrB,kBACJ,CAEA,0BACI,gBACJ,CAEA,kBAEI,aAAc,CADd,eAEJ,CAEA,iDAEI,iBAAmB,CADnB,kBAEJ","sources":["webpack://WebComponents/./runestone/poll/css/poll.css"],"sourcesContent":["/* Styles for Runestone poll directive */\n.poll .poll-question {\n padding-bottom: 10px;\n}\n\n.poll .progress {\n width: 350px;\n height: 25px;\n margin-top: -20px;\n}\n\n.poll .progress .progress-bar {\n height: 30px;\n color: #333;\n}\n\n.poll-text {\n margin: 0 0 0 10px;\n font-size: 12px;\n line-height: 20px;\n float: left;\n}\n\n.results-container {\n display: grid;\n grid-template-columns: 2em 90%;\n}\n\n.poll-option {\n margin-left: 5px;\n}\n\n.poll-option > .para:first-of-type {\n display: inline-block;\n padding-left: 0.5rem;\n}\n\n.poll-results:not(:empty) {\n margin-top: 0.5rem;\n}\n\nlabel.poll-option {\n font-weight: normal;\n display: block;\n}\n\n.ptx-runestone-container input.poll-choice-input {\n vertical-align: top;\n margin-right: 0.5em;\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-168.1c4deaed00ca1f5e.css.map.gz b/_static/prefix-168.1c4deaed00ca1f5e.css.map.gz new file mode 100644 index 0000000..091852b Binary files /dev/null and b/_static/prefix-168.1c4deaed00ca1f5e.css.map.gz differ diff --git a/_static/prefix-186.0d47de180767fda9.css b/_static/prefix-186.0d47de180767fda9.css new file mode 100644 index 0000000..dfe583c --- /dev/null +++ b/_static/prefix-186.0d47de180767fda9.css @@ -0,0 +1,2 @@ +div.runestone .jexcel_container{max-height:550px;max-width:800px;overflow:scroll} +/*# sourceMappingURL=prefix-186.0d47de180767fda9.css.map*/ \ No newline at end of file diff --git a/_static/prefix-186.0d47de180767fda9.css.map b/_static/prefix-186.0d47de180767fda9.css.map new file mode 100644 index 0000000..7eff1da --- /dev/null +++ b/_static/prefix-186.0d47de180767fda9.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-186.0d47de180767fda9.css","mappings":"AAAA,gCACI,gBAAiB,CAEjB,eAAgB,CAChB,eACJ","sources":["webpack://WebComponents/./runestone/spreadsheet/css/spreadsheet.css"],"sourcesContent":["div.runestone .jexcel_container {\n max-height: 550px;\n overflow: scroll;\n max-width: 800px;\n overflow: scroll;\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-186.0d47de180767fda9.css.map.gz b/_static/prefix-186.0d47de180767fda9.css.map.gz new file mode 100644 index 0000000..7e3997f Binary files /dev/null and b/_static/prefix-186.0d47de180767fda9.css.map.gz differ diff --git a/_static/prefix-198.86b6b2a70a576922.css b/_static/prefix-198.86b6b2a70a576922.css new file mode 100644 index 0000000..da661aa --- /dev/null +++ b/_static/prefix-198.86b6b2a70a576922.css @@ -0,0 +1,2 @@ +.clickable{cursor:pointer}.clickable:has(code){display:inline-block;padding:3px}.clickable-clicked:has(code){box-shadow:0 0 2px 2px rgba(0,100,0,.75)}.clickable-clicked{background-color:var(--clickableBgColor)}.clickable-clicked td{background-color:#dad6c1;box-shadow:none}table{border-collapse:collapse}td.clickable,th.clickable{border:1px solid #000}td.clickable-clicked{background-color:#dad6c1;box-shadow:none}td img{margin:5px}.clickable-clicked th,th.clickable-clicked{background-color:#dad6c1;box-shadow:none}.clickable-incorrect,.clickable-incorrect td,.clickable-incorrect th{background-color:var(--clickableIncorrectBgColor);border:1px solid red!important}img.clickable-incorrect{box-shadow:0 0 2px 2px rgba(100,0,0,.75)}.clickable-incorrect:has(code){box-shadow:0 0 2px 2px rgba(251,0,0,.75)}:root{--clickableBgColor:#ff0;--clickableIncorrectBgColor:#fcc}:root.dark-mode{--clickableBgColor:#3c5624;--clickableIncorrectBgColor:#562c2c;.clickable-clicked:has(code):not(.clickable-incorrect){box-shadow:0 0 2px 2px rgba(251,255,21,.75)}} +/*# sourceMappingURL=prefix-198.86b6b2a70a576922.css.map*/ \ No newline at end of file diff --git a/_static/prefix-198.86b6b2a70a576922.css.gz b/_static/prefix-198.86b6b2a70a576922.css.gz new file mode 100644 index 0000000..6ea4f3e Binary files /dev/null and b/_static/prefix-198.86b6b2a70a576922.css.gz differ diff --git a/_static/prefix-198.86b6b2a70a576922.css.map b/_static/prefix-198.86b6b2a70a576922.css.map new file mode 100644 index 0000000..7a1aab0 --- /dev/null +++ b/_static/prefix-198.86b6b2a70a576922.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-198.86b6b2a70a576922.css","mappings":"AAAA,WACI,cACJ,CAEA,qBAEI,oBAAqB,CADrB,WAEJ,CAEA,6BACI,wCACJ,CAEA,mBACI,wCACJ,CAEA,sBACI,wBAAyB,CACzB,eACJ,CAEA,MACI,wBACJ,CAEA,0BACI,qBACJ,CAEA,qBACI,wBAAyB,CACzB,eACJ,CAEA,OACI,UACJ,CAOA,2CACI,wBAAyB,CACzB,eACJ,CAEA,qEAII,iDAAkD,CADlD,8BAEJ,CAEA,wBACI,wCACJ,CAEA,+BACI,wCACJ,CAEA,MACI,uBAA0B,CAC1B,gCACJ,CAEA,gBACI,0BAAmC,CACnC,mCAAoC,CAEpC,uDACI,2CACJ,CACJ","sources":["webpack://WebComponents/./runestone/clickableArea/css/clickable.css"],"sourcesContent":[".clickable {\n cursor: pointer;\n}\n\n.clickable:has(code) {\n padding: 3px;\n display: inline-block;\n}\n\n.clickable-clicked:has(code) {\n box-shadow: 0px 0px 2px 2px rgba(0,100,0,0.75);\n}\n\n.clickable-clicked {\n background-color: var(--clickableBgColor);\n}\n\n.clickable-clicked td {\n background-color: #dad6c1;\n box-shadow: initial;\n}\n\ntable {\n border-collapse: collapse;\n}\n\nth.clickable, td.clickable {\n border: 1px solid black;\n}\n\ntd.clickable-clicked{\n background-color: #dad6c1;\n box-shadow: initial;\n}\n\ntd img {\n margin: 5px;\n}\n\n.clickable-clicked th {\n background-color: #dad6c1;\n box-shadow: initial;\n}\n\nth.clickable-clicked{\n background-color: #dad6c1;\n box-shadow: initial;\n}\n\n.clickable-incorrect,\n.clickable-incorrect th,\n.clickable-incorrect td {\n border: 1px solid red !important;\n background-color: var(--clickableIncorrectBgColor);\n}\n\nimg.clickable-incorrect {\n box-shadow: 0px 0px 2px 2px rgba(100,0,0,0.75);\n}\n\n.clickable-incorrect:has(code) {\n box-shadow: 0px 0px 2px 2px rgba(251, 0, 0, 0.75);\n}\n\n:root {\n --clickableBgColor: yellow;\n --clickableIncorrectBgColor: #ffcccc;\n}\n\n:root.dark-mode {\n --clickableBgColor: rgb(60, 86, 36);\n --clickableIncorrectBgColor: #562c2c;\n\n .clickable-clicked:has(code):not(.clickable-incorrect) {\n box-shadow: 0px 0px 2px 2px rgba(251, 255, 21, 0.75);\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-198.86b6b2a70a576922.css.map.gz b/_static/prefix-198.86b6b2a70a576922.css.map.gz new file mode 100644 index 0000000..8578ddf Binary files /dev/null and b/_static/prefix-198.86b6b2a70a576922.css.map.gz differ diff --git a/_static/prefix-249.6ca19da539a8ed1a.css b/_static/prefix-249.6ca19da539a8ed1a.css new file mode 100644 index 0000000..20ec6f6 --- /dev/null +++ b/_static/prefix-249.6ca19da539a8ed1a.css @@ -0,0 +1,58 @@ +@charset "UTF-8"; +/*! + * Copyright (c) HANDSONCODE sp. z o. o. + * + * HANDSONTABLE is a software distributed by HANDSONCODE sp. z o. o., + * a Polish corporation, based in Gdynia, Poland, at 96/98 Aleja Zwycięstwa, + * registered with the National Court Register under number 538651, + * EU tax ID number: PL5862294002, share capital: PLN 62,800.00. + * + * This software is protected by applicable copyright laws, including + * international treaties, and dual-licensed – depending on whether + * your use is intended for or may result in commercial advantage + * or monetary compensation (commercial purposes), or not. + * + * If your use involves only such purposes as research, private study, + * evaluation and the like, you agree to be bound by the terms included + * in the "handsontable-non-commercial-license.pdf" file, available + * in the main directory of this software repository. + * + * By installing, copying, or otherwise using this software for + * commercial purposes, you agree to be bound by the terms included + * in the "handsontable-general-terms.pdf" file, available in the main + * directory of this software repository. + * + * HANDSONCODE PROVIDES THIS SOFTWARE ON AN "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND. IN NO EVENT + * AND UNDER NO LEGAL THEORY, SHALL HANDSONCODE BE LIABLE + * TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, + * INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING + * FROM USE OR INABILITY TO USE THIS SOFTWARE. + * + * Version: 7.2.2 + * Release date: 23/10/2019 (built at 21/10/2019 12:22:24) + */.handsontable .table td,.handsontable .table th{border-top:none}.handsontable tr{background:#fff}.handsontable td{background-color:inherit}.handsontable .table caption+thead tr:first-child td,.handsontable .table caption+thead tr:first-child th,.handsontable .table colgroup+thead tr:first-child td,.handsontable .table colgroup+thead tr:first-child th,.handsontable .table thead:first-child tr:first-child td,.handsontable .table thead:first-child tr:first-child th{border-top:1px solid #ccc}.handsontable .table-bordered{border:0;border-collapse:separate}.handsontable .table-bordered td,.handsontable .table-bordered th{border-left:none}.handsontable .table-bordered td:first-child,.handsontable .table-bordered th:first-child{border-left:1px solid #ccc}.handsontable .table>tbody>tr>td,.handsontable .table>tbody>tr>th,.handsontable .table>tfoot>tr>td,.handsontable .table>tfoot>tr>th,.handsontable .table>thead>tr>td,.handsontable .table>thead>tr>th{line-height:21px;padding:0 4px}.col-lg-1.handsontable,.col-lg-10.handsontable,.col-lg-11.handsontable,.col-lg-12.handsontable,.col-lg-2.handsontable,.col-lg-3.handsontable,.col-lg-4.handsontable,.col-lg-5.handsontable,.col-lg-6.handsontable,.col-lg-7.handsontable,.col-lg-8.handsontable,.col-lg-9.handsontable,.col-md-1.handsontable,.col-md-10.handsontable,.col-md-11.handsontable,.col-md-12.handsontable,.col-md-2.handsontable,.col-md-3.handsontable,.col-md-4.handsontable,.col-md-5.handsontable,.col-md-6.handsontable,.col-md-7.handsontable,.col-md-8.handsontable,.col-md-9.handsontable +.col-sm-1.handsontable,.col-sm-10.handsontable,.col-sm-11.handsontable,.col-sm-12.handsontable,.col-sm-2.handsontable,.col-sm-3.handsontable,.col-sm-4.handsontable,.col-sm-5.handsontable,.col-sm-6.handsontable,.col-sm-7.handsontable,.col-sm-8.handsontable,.col-sm-9.handsontable +.col-xs-1.handsontable,.col-xs-10.handsontable,.col-xs-11.handsontable,.col-xs-12.handsontable,.col-xs-2.handsontable,.col-xs-3.handsontable,.col-xs-4.handsontable,.col-xs-5.handsontable,.col-xs-6.handsontable,.col-xs-7.handsontable,.col-xs-8.handsontable,.col-xs-9.handsontable{padding-left:0;padding-right:0}.handsontable .table-striped>tbody>tr:nth-of-type(2n){background-color:#fff}.handsontable{position:relative}.handsontable .hide{display:none}.handsontable .relative{position:relative}.handsontable.htAutoSize{left:-99000px;position:absolute;top:-99000px;visibility:hidden}.handsontable .wtHider{width:0}.handsontable .wtSpreader{height:auto;position:relative;width:0}.handsontable div,.handsontable input,.handsontable table,.handsontable tbody,.handsontable td,.handsontable textarea,.handsontable th,.handsontable thead{box-sizing:content-box;-webkit-box-sizing:content-box;-moz-box-sizing:content-box}.handsontable input,.handsontable textarea{min-height:auto}.handsontable table.htCore{border-collapse:separate;border-spacing:0;border-width:0;cursor:default;margin:0;max-height:none;max-width:none;outline-width:0;table-layout:fixed;width:0}.handsontable col,.handsontable col.rowHeader{width:50px}.handsontable td,.handsontable th{background-clip:padding-box;background-color:#fff;border-bottom:1px solid #ccc;border-left-width:0;border-right:1px solid #ccc;border-top-width:0;empty-cells:show;height:22px;line-height:21px;outline-width:0;overflow:hidden;padding:0 4px;vertical-align:top;white-space:pre-line}.handsontable td.htInvalid{background-color:#ff4c42!important}.handsontable td.htNoWrap{white-space:nowrap}.handsontable th:last-child{border-bottom:1px solid #ccc;border-right:1px solid #ccc}.handsontable th.htNoFrame,.handsontable th:first-child.htNoFrame,.handsontable tr:first-child th.htNoFrame{background-color:#fff;border-color:#fff;border-left-width:0}.handsontable .htNoFrame+td,.handsontable .htNoFrame+th,.handsontable td:first-of-type,.handsontable th:first-child,.handsontable th:nth-child(2),.handsontable.htRowHeaders thead tr th:nth-child(2){border-left:1px solid #ccc}.handsontable tr:first-child td,.handsontable tr:first-child th{border-top:1px solid #ccc}.ht_master:not(.innerBorderLeft):not(.emptyColumns)~.handsontable tbody tr th,.ht_master:not(.innerBorderLeft):not(.emptyColumns)~.handsontable:not(.ht_clone_top) thead tr th:first-child{border-right-width:0}.ht_master:not(.innerBorderTop) thead tr.lastChild th,.ht_master:not(.innerBorderTop) thead tr:last-child th,.ht_master:not(.innerBorderTop)~.handsontable thead tr.lastChild th,.ht_master:not(.innerBorderTop)~.handsontable thead tr:last-child th{border-bottom-width:0}.handsontable th{background-color:#f0f0f0;color:#222;font-weight:400;text-align:center;white-space:nowrap}.handsontable thead th{padding:0}.handsontable th.active{background-color:#ccc}.handsontable thead th .relative{padding:2px 4px}#hot-display-license-info{color:#323232;font-family:Helvetica,Arial,sans-serif;font-size:10px;padding:5px 0 3px;text-align:left}#hot-display-license-info a{font-size:10px}.handsontable .manualColumnResizer{cursor:col-resize;height:25px;position:absolute;top:0;width:5px;z-index:210}.handsontable .manualRowResizer{cursor:row-resize;height:5px;left:0;position:absolute;width:50px;z-index:210}.handsontable .manualColumnResizer.active,.handsontable .manualColumnResizer:hover,.handsontable .manualRowResizer.active,.handsontable .manualRowResizer:hover{background-color:#34a9db}.handsontable .manualColumnResizerGuide{background-color:#34a9db;border-right:1px dashed #777;display:none;margin-left:5px;position:absolute;right:0;top:0;width:0}.handsontable .manualRowResizerGuide{background-color:#34a9db;border-bottom:1px dashed #777;bottom:0;display:none;height:0;left:0;margin-top:5px;position:absolute}.handsontable .manualColumnResizerGuide.active,.handsontable .manualRowResizerGuide.active{display:block;z-index:209}.handsontable .columnSorting{position:relative}.handsontable .columnSorting.sortAction:hover{cursor:pointer;text-decoration:underline}.handsontable span.colHeader{display:inline-block;line-height:1.1}.handsontable span.colHeader.columnSorting:before{background-position-x:right;background-repeat:no-repeat;background-size:contain;content:"";height:10px;margin-top:-6px;padding-left:8px;position:absolute;right:-9px;top:50%;width:5px}.handsontable span.colHeader.columnSorting.ascending:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFNJREFUeAHtzjkSgCAUBNHPgsoy97+ulGXRqJE5L+xkxoYt2UdsLb5bqFINz+aLuuLn5rIu2RkO3fZpWENimNgiw6iBYRTPMLJjGFxQZ1hxxb/xBI1qC8k39CdKAAAAAElFTkSuQmCC)}.handsontable span.colHeader.columnSorting.descending:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFJJREFUeAHtzjkSgCAQRNFmQYUZ7n9dKUvru0TmvPAn3br0QfgdZ5xx6x+rQn23GqTYnq1FDcnuzZIO2WmedVqIRVxgGKEyjNgYRjKGkZ1hFIZ3I70LyM0VtU8AAAAASUVORK5CYII=)}.htGhostTable .htCore span.colHeader.columnSorting:not(.indicatorDisabled):after{content:"*";display:inline-block;padding-right:20px;position:relative}.handsontable .wtBorder{font-size:0;position:absolute}.handsontable .wtBorder.hidden{display:none!important}.handsontable .wtBorder.current{z-index:10}.handsontable .wtBorder.area{z-index:8}.handsontable .wtBorder.fill{z-index:6}.handsontable td.area,.handsontable td.area-1,.handsontable td.area-2,.handsontable td.area-3,.handsontable td.area-4,.handsontable td.area-5,.handsontable td.area-6,.handsontable td.area-7{position:relative}.handsontable td.area-1:before,.handsontable td.area-2:before,.handsontable td.area-3:before,.handsontable td.area-4:before,.handsontable td.area-5:before,.handsontable td.area-6:before,.handsontable td.area-7:before,.handsontable td.area:before{background:#005eff;bottom:0;bottom:-100%\9;content:"";left:0;position:absolute;right:0;top:0}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.handsontable td.area-1:before,.handsontable td.area-2:before,.handsontable td.area-3:before,.handsontable td.area-4:before,.handsontable td.area-5:before,.handsontable td.area-6:before,.handsontable td.area-7:before,.handsontable td.area:before{bottom:-100%}}.handsontable td.area:before{opacity:.1}.handsontable td.area-1:before{opacity:.2}.handsontable td.area-2:before{opacity:.27}.handsontable td.area-3:before{opacity:.35}.handsontable td.area-4:before{opacity:.41}.handsontable td.area-5:before{opacity:.47}.handsontable td.area-6:before{opacity:.54}.handsontable td.area-7:before{opacity:.58}.handsontable tbody th.ht__highlight,.handsontable thead th.ht__highlight{background-color:#dcdcdc}.handsontable tbody th.ht__active_highlight,.handsontable thead th.ht__active_highlight{background-color:#8eb0e7;color:#000}.handsontable .wtBorder.corner{cursor:crosshair;font-size:0}.handsontable .htBorder.htFillBorder{background:red;height:1px;width:1px}.handsontableInput{background-color:#fff;border:none;border-radius:0;box-shadow:inset 0 0 0 2px #5292f7;color:#000;display:block;font-family:inherit;font-size:inherit;line-height:21px;margin:0;outline-width:0;padding:1px 5px 0;resize:none}.handsontableInputHolder{left:0;position:absolute;top:0;z-index:104}.htSelectEditor{-webkit-appearance:menulist-button!important;position:absolute;width:auto}.handsontable .htDimmed{color:#777}.handsontable .htSubmenu{position:relative}.handsontable .htSubmenu :after{color:#777;content:"\25B6";font-size:9px;position:absolute;right:5px}.handsontable .htLeft{text-align:left}.handsontable .htCenter{text-align:center}.handsontable .htRight{text-align:right}.handsontable .htJustify{text-align:justify}.handsontable .htTop{vertical-align:top}.handsontable .htMiddle{vertical-align:middle}.handsontable .htBottom{vertical-align:bottom}.handsontable .htPlaceholder{color:#999}.handsontable .htAutocompleteArrow{color:#eee;cursor:default;float:right;font-size:10px;text-align:center;width:16px}.handsontable td .htAutocompleteArrow:hover{color:#777}.handsontable td.area .htAutocompleteArrow{color:#d3d3d3}.handsontable .htCheckboxRendererInput{display:inline-block}.handsontable .htCheckboxRendererInput.noValue{opacity:.5}.handsontable .htCheckboxRendererLabel{cursor:pointer;display:inline-block;font-size:inherit;vertical-align:middle;width:100%}.handsontable .handsontable.ht_clone_top .wtHider{padding:0 0 5px}.handsontable .autocompleteEditor.handsontable{padding-right:17px}.handsontable .autocompleteEditor.handsontable.htMacScroll{padding-right:15px}.handsontable.listbox{margin:0}.handsontable.listbox .ht_master table{background:#fff;border:1px solid #ccc;border-collapse:separate}.handsontable.listbox td,.handsontable.listbox th,.handsontable.listbox tr:first-child td,.handsontable.listbox tr:first-child th,.handsontable.listbox tr:last-child th{border-color:transparent}.handsontable.listbox td,.handsontable.listbox th{text-overflow:ellipsis;white-space:nowrap}.handsontable.listbox td.htDimmed{color:inherit;cursor:default;font-style:inherit}.handsontable.listbox .wtBorder{visibility:hidden}.handsontable.listbox tr td.current,.handsontable.listbox tr:hover td{background:#eee}.ht_editor_hidden{z-index:-1}.ht_editor_visible{z-index:200}.ht_clone_master{z-index:100}.ht_clone_right{z-index:110}.ht_clone_left{z-index:120}.ht_clone_bottom{z-index:130}.ht_clone_bottom_right_corner{z-index:140}.ht_clone_bottom_left_corner{z-index:150}.ht_clone_top{z-index:160}.ht_clone_top_right_corner{z-index:170}.ht_clone_top_left_corner{z-index:180}.handsontable td.htSearchResult{background:#fcedd9;color:#583707}.htBordered{border-width:1px}.htBordered.htTopBorderSolid{border-top-color:#000;border-top-style:solid}.htBordered.htRightBorderSolid{border-right-color:#000;border-right-style:solid}.htBordered.htBottomBorderSolid{border-bottom-color:#000;border-bottom-style:solid}.htBordered.htLeftBorderSolid{border-left-color:#000;border-left-style:solid}.handsontable tbody tr th:nth-last-child(2){border-right:1px solid #ccc}.handsontable thead tr:nth-last-child(2) th.htGroupIndicatorContainer{border-bottom:1px solid #ccc;padding-bottom:5px}.ht_clone_top_left_corner thead tr th:nth-last-child(2){border-right:1px solid #ccc}.htCollapseButton{border:1px solid #f3f3f3;border-radius:5px;-webkit-box-shadow:1px 1px 3px rgba(0,0,0,.4);box-shadow:1px 1px 3px rgba(0,0,0,.4);cursor:pointer;height:10px;line-height:10px;margin-bottom:3px;position:relative;text-align:center;width:10px}.htCollapseButton:after{background:#ccc;bottom:10px;content:"";display:block;height:300%;margin-left:4px;position:absolute;width:1px}thead .htCollapseButton{background:#fff;position:absolute;right:5px;top:5px}thead .htCollapseButton:after{height:1px;right:10px;top:4px;width:700%}.handsontable tr th .htExpandButton{border:1px solid #f3f3f3;border-radius:5px;-webkit-box-shadow:1px 1px 3px rgba(0,0,0,.4);box-shadow:1px 1px 3px rgba(0,0,0,.4);cursor:pointer;display:none;height:10px;line-height:10px;position:absolute;text-align:center;top:0;width:10px}.handsontable thead tr th .htExpandButton{top:5px}.handsontable tr th .htExpandButton.clickable{display:block}.collapsibleIndicator{background:#eee;border:1px solid #a6a6a6;border-radius:10px;-webkit-box-shadow:0 0 0 6px #eee;-moz-box-shadow:0 0 0 6px #eee;box-shadow:0 0 0 6px #eee;color:#222;cursor:pointer;font-size:10px;height:10px;line-height:10px;position:absolute;right:5px;top:50%;transform:translateY(-50%);width:10px}.handsontable col.hidden{width:0!important}.handsontable table tr th.lightRightBorder{border-right:1px solid #e6e6e6}.handsontable tr.hidden,.handsontable tr.hidden td,.handsontable tr.hidden th{display:none}.ht_clone_bottom,.ht_clone_left,.ht_clone_top,.ht_master{overflow:hidden}.ht_master .wtHolder{overflow:auto}.handsontable .ht_clone_left thead,.handsontable .ht_master thead,.handsontable .ht_master tr th{visibility:hidden}.ht_clone_bottom .wtHolder,.ht_clone_left .wtHolder,.ht_clone_top .wtHolder{overflow:hidden}.handsontable.mobile,.handsontable.mobile .wtHolder{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-overflow-scrolling:touch;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.htMobileEditorContainer{-webkit-text-size-adjust:none;background:#f8f8f8;border:1px solid #ebebeb;border-radius:20px;box-sizing:border-box;-webkit-box-sizing:border-box;display:none;height:54pt;position:absolute;top:0;width:70%;z-index:999}.topLeftSelectionHandle-HitArea:not(.ht_master .topLeftSelectionHandle-HitArea),.topLeftSelectionHandle:not(.ht_master .topLeftSelectionHandle){z-index:9999}.bottomRightSelectionHandle,.bottomRightSelectionHandle-HitArea,.topLeftSelectionHandle,.topLeftSelectionHandle-HitArea{left:-10000px;top:-10000px}.htMobileEditorContainer.active{display:block}.htMobileEditorContainer .inputs{bottom:10pt;height:34pt;left:14px;position:absolute;right:210pt;top:10pt}.htMobileEditorContainer .inputs textarea{-webkit-appearance:none;border:1px solid #a1a1a1;bottom:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:13pt;left:14px;padding:7pt;position:absolute;right:14px;top:0}.htMobileEditorContainer .cellPointer{border-bottom:13pt solid #ebebeb;border-left:13pt solid transparent;border-right:13pt solid transparent;height:0;left:30px;position:absolute;top:-13pt;width:0}.htMobileEditorContainer .cellPointer.hidden{display:none}.htMobileEditorContainer .cellPointer:before{border-bottom:13pt solid #f8f8f8;border-left:13pt solid transparent;border-right:13pt solid transparent;content:"";display:block;height:0;left:-13pt;position:absolute;top:2px;width:0}.htMobileEditorContainer .moveHandle{bottom:0;cursor:move;left:5px;position:absolute;top:10pt;width:30px;z-index:9999}.htMobileEditorContainer .moveHandle:after{color:#ebebeb;content:"..\a..\a..\a..";display:inline-block;font-size:20pt;line-height:10px;margin-top:-8px;white-space:pre}.htMobileEditorContainer .positionControls{bottom:0;position:absolute;right:5pt;top:0;width:205pt}.htMobileEditorContainer .positionControls>div{float:left;height:100%;width:50pt}.htMobileEditorContainer .positionControls>div:after{content:" ";display:block;height:15pt;line-height:50pt;text-align:center;width:15pt}.htMobileEditorContainer .downButton:after,.htMobileEditorContainer .leftButton:after,.htMobileEditorContainer .rightButton:after,.htMobileEditorContainer .upButton:after{margin:21pt 0 0 21pt;transform-origin:5pt 5pt;-webkit-transform-origin:5pt 5pt}.htMobileEditorContainer .leftButton:after{border-left:2px solid #288ffe;border-top:2px solid #288ffe;-webkit-transform:rotate(-45deg)}.htMobileEditorContainer .leftButton:active:after{border-color:#cfcfcf}.htMobileEditorContainer .rightButton:after{border-left:2px solid #288ffe;border-top:2px solid #288ffe;-webkit-transform:rotate(135deg)}.htMobileEditorContainer .rightButton:active:after{border-color:#cfcfcf}.htMobileEditorContainer .upButton:after{border-left:2px solid #288ffe;border-top:2px solid #288ffe;-webkit-transform:rotate(45deg)}.htMobileEditorContainer .upButton:active:after{border-color:#cfcfcf}.htMobileEditorContainer .downButton:after{border-left:2px solid #288ffe;border-top:2px solid #288ffe;-webkit-transform:rotate(225deg)}.htMobileEditorContainer .downButton:active:after{border-color:#cfcfcf}.handsontable.hide-tween{-webkit-animation:opacity-hide .3s;animation:opacity-hide .3s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}.handsontable.show-tween{-webkit-animation:opacity-show .3s;animation:opacity-show .3s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards} + +/*! + * Pikaday + * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ + */.pika-single{background:#fff;border:1px solid;border-color:#ccc #ccc #bbb;color:#333;display:block;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;position:relative;z-index:9999}.pika-single:after,.pika-single:before{content:" ";display:table}.pika-single:after{clear:both}.pika-single{*zoom:1}.pika-single.is-hidden{display:none}.pika-single.is-bound{box-shadow:0 5px 15px -5px rgba(0,0,0,.5);position:absolute}.pika-lendar{float:left;margin:8px;width:240px}.pika-title{position:relative;text-align:center}.pika-label{background-color:#fff;display:inline-block;*display:inline;font-size:14px;font-weight:700;line-height:20px;margin:0;overflow:hidden;padding:5px 3px;position:relative;z-index:9999}.pika-title select{cursor:pointer;filter:alpha(opacity=0);left:0;margin:0;opacity:0;position:absolute;top:5px;z-index:9998}.pika-next,.pika-prev{background-color:transparent;background-position:50%;background-repeat:no-repeat;background-size:75% 75%;border:0;cursor:pointer;display:block;height:30px;opacity:.5;outline:none;overflow:hidden;padding:0;position:relative;*position:absolute;text-indent:20px;*top:0;white-space:nowrap;width:20px}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==);float:left;*left:0}.is-rtl .pika-prev,.pika-next{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=);float:right;*right:0}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-select{display:inline-block;*display:inline}.pika-table{border:0;border-collapse:collapse;border-spacing:0;width:100%}.pika-table td,.pika-table th{padding:0;width:14.285714285714286%}.pika-table th{color:#999;font-size:12px;font-weight:700;line-height:25px;text-align:center}.pika-button{background:#f5f5f5;border:0;box-sizing:border-box;-moz-box-sizing:border-box;color:#666;cursor:pointer;display:block;font-size:12px;line-height:15px;margin:0;outline:none;padding:5px;text-align:right;width:100%}.pika-week{color:#999;font-size:11px}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button{background:#3af;border-radius:3px;box-shadow:inset 0 1px 3px #178fe5;color:#fff;font-weight:700}.is-inrange .pika-button{background:#d5e9f7}.is-startrange .pika-button{background:#6cb31d;border-radius:3px;box-shadow:none;color:#fff}.is-endrange .pika-button{background:#3af;border-radius:3px;box-shadow:none;color:#fff}.is-disabled .pika-button,.is-outside-current-month .pika-button{color:#999;cursor:default;opacity:.3;pointer-events:none}.pika-button:hover{background:#ff8000;border-radius:3px;box-shadow:none;color:#fff}.pika-table abbr{border-bottom:none;cursor:help}.htCommentCell{position:relative}.htCommentCell:after{border-left:6px solid transparent;border-top:6px solid #000;content:"";position:absolute;right:0;top:0}.htComments{display:none;position:absolute;z-index:1059}.htCommentTextArea{-webkit-appearance:none;background-color:#fff;border:none;border-left:3px solid #ccc;box-shadow:0 1px 3px rgba(0,0,0,.118),0 1px 2px rgba(0,0,0,.239);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:12px;height:90px;outline:0!important;padding:5px;width:215px}.htCommentTextArea:focus{border-left:3px solid #5292f7;box-shadow:0 1px 3px rgba(0,0,0,.118),0 1px 2px rgba(0,0,0,.239),inset 0 0 0 1px #5292f7} + +/*! + * Handsontable ContextMenu + */.htContextMenu:not(.htGhostTable){display:none;position:absolute;z-index:1060}.htContextMenu .ht_clone_corner,.htContextMenu .ht_clone_left,.htContextMenu .ht_clone_top{display:none}.htContextMenu table.htCore{border-color:#ccc;border-style:solid;border-width:1px 2px 2px 1px}.htContextMenu .wtBorder{visibility:hidden}.htContextMenu table tbody tr td{background:#fff;border-width:0;cursor:pointer;overflow:hidden;padding:4px 6px 0;text-overflow:ellipsis;white-space:nowrap}.htContextMenu table tbody tr td:first-child{border:0}.htContextMenu table tbody tr td.htDimmed{color:#323232;font-style:normal}.htContextMenu table tbody tr td.current,.htContextMenu table tbody tr td.zeroclipboard-is-hover{background:#f3f3f3}.htContextMenu table tbody tr td.htSeparator{border-top:1px solid #e6e6e6;cursor:default;height:0;padding:0}.htContextMenu table tbody tr td.htDisabled{color:#999;cursor:default}.htContextMenu table tbody tr td.htDisabled:hover{background:#fff;color:#999;cursor:default}.htContextMenu table tbody tr.htHidden{display:none}.htContextMenu table tbody tr td .htItemWrapper{margin-left:10px;margin-right:6px}.htContextMenu table tbody tr td div span.selected{left:4px;margin-top:-2px;position:absolute}.htContextMenu .ht_master .wtHolder{overflow:hidden}textarea#HandsontableCopyPaste{opacity:0;outline:0 none!important;overflow:hidden;position:fixed!important;right:100%!important;top:0!important}.htRowHeaders .ht_master.innerBorderLeft~.ht_clone_left td:first-of-type,.htRowHeaders .ht_master.innerBorderLeft~.ht_clone_top_left_corner th:nth-child(2){border-left:0}.handsontable.ht__manualColumnMove.after-selection--columns thead th.ht__highlight{cursor:move;cursor:-moz-grab;cursor:-webkit-grab;cursor:grab}.handsontable.ht__manualColumnMove.on-moving--columns,.handsontable.ht__manualColumnMove.on-moving--columns thead th.ht__highlight{cursor:move;cursor:-moz-grabbing;cursor:-webkit-grabbing;cursor:grabbing}.handsontable.ht__manualColumnMove.on-moving--columns .manualColumnResizer{display:none}.handsontable .ht__manualColumnMove--backlight,.handsontable .ht__manualColumnMove--guideline{display:none;height:100%;position:absolute}.handsontable .ht__manualColumnMove--guideline{background:#757575;margin-left:-1px;top:0;width:2px;z-index:205}.handsontable .ht__manualColumnMove--backlight{background:#343434;background:rgba(52,52,52,.25);display:none;pointer-events:none;z-index:205}.handsontable.on-moving--columns .ht__manualColumnMove--backlight,.handsontable.on-moving--columns.show-ui .ht__manualColumnMove--guideline{display:block}.handsontable .wtHider{position:relative}.handsontable.ht__manualRowMove.after-selection--rows tbody th.ht__highlight{cursor:move;cursor:-moz-grab;cursor:-webkit-grab;cursor:grab}.handsontable.ht__manualRowMove.on-moving--rows,.handsontable.ht__manualRowMove.on-moving--rows tbody th.ht__highlight{cursor:move;cursor:-moz-grabbing;cursor:-webkit-grabbing;cursor:grabbing}.handsontable.ht__manualRowMove.on-moving--rows .manualRowResizer{display:none}.handsontable .ht__manualRowMove--backlight,.handsontable .ht__manualRowMove--guideline{display:none;position:absolute;width:100%}.handsontable .ht__manualRowMove--guideline{background:#757575;height:2px;left:0;margin-top:-1px;z-index:205}.handsontable .ht__manualRowMove--backlight{background:#343434;background:rgba(52,52,52,.25);display:none;pointer-events:none;z-index:205}.handsontable.on-moving--rows .ht__manualRowMove--backlight,.handsontable.on-moving--rows.show-ui .ht__manualRowMove--guideline{display:block}.handsontable tbody td[rowspan][class*=area][class*=highlight]:not([class*=fullySelectedMergedCell]):before{opacity:0}.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-0]:before,.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-multiple]:before{opacity:.1}.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-1]:before{opacity:.2}.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-2]:before{opacity:.27}.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-3]:before{opacity:.35}.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-4]:before{opacity:.41}.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-5]:before{opacity:.47}.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-6]:before{opacity:.54}.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-7]:before{opacity:.58} + +/*! + * Handsontable DropdownMenu + */.handsontable .changeType{background:#eee;border:1px solid #bbb;border-radius:2px;color:#bbb;float:right;font-size:9px;line-height:9px;margin:3px 1px 0 5px;padding:2px}.handsontable .changeType:before{content:"\25BC\ "}.handsontable .changeType:hover{border:1px solid #777;color:#777;cursor:pointer}.htDropdownMenu:not(.htGhostTable){display:none;position:absolute;z-index:1060}.htDropdownMenu .ht_clone_corner,.htDropdownMenu .ht_clone_left,.htDropdownMenu .ht_clone_top{display:none}.htDropdownMenu table.htCore{border-color:#bbb;border-style:solid;border-width:1px 2px 2px 1px}.htDropdownMenu .wtBorder{visibility:hidden}.htDropdownMenu table tbody tr td{background:#fff;border-width:0;cursor:pointer;overflow:hidden;padding:4px 6px 0;text-overflow:ellipsis;white-space:nowrap}.htDropdownMenu table tbody tr td:first-child{border:0}.htDropdownMenu table tbody tr td.htDimmed{color:#323232;font-style:normal}.htDropdownMenu table tbody tr td.current,.htDropdownMenu table tbody tr td.zeroclipboard-is-hover{background:#e9e9e9}.htDropdownMenu table tbody tr td.htSeparator{border-top:1px solid #e6e6e6;cursor:default;height:0;padding:0}.htDropdownMenu table tbody tr td.htDisabled{color:#999}.htDropdownMenu table tbody tr td.htDisabled:hover{background:#fff;color:#999;cursor:default}.htDropdownMenu:not(.htGhostTable) table tbody tr.htHidden{display:none}.htDropdownMenu table tbody tr td .htItemWrapper{margin-left:10px;margin-right:10px}.htDropdownMenu table tbody tr td div span.selected{left:4px;margin-top:-2px;position:absolute}.htDropdownMenu .ht_master .wtHolder{overflow:hidden}.handsontable span.colHeader.columnSorting:after{font-size:8px;height:8px;line-height:1.1;margin-top:-2px;padding-left:5px;position:absolute;right:-15px;text-decoration:underline;text-decoration:none;top:50%}.handsontable span.colHeader.columnSorting[class*=" sort-"]:after,.handsontable span.colHeader.columnSorting[class^=sort-]:after{content:"+"}.handsontable span.colHeader.columnSorting.sort-1:after{content:"1"}.handsontable span.colHeader.columnSorting.sort-2:after{content:"2"}.handsontable span.colHeader.columnSorting.sort-3:after{content:"3"}.handsontable span.colHeader.columnSorting.sort-4:after{content:"4"}.handsontable span.colHeader.columnSorting.sort-5:after{content:"5"}.handsontable span.colHeader.columnSorting.sort-6:after{content:"6"}.handsontable span.colHeader.columnSorting.sort-7:after{content:"7"}.htGhostTable th div button.changeType+span.colHeader.columnSorting:not(.indicatorDisabled){padding-right:5px} + +/*! + * Handsontable Filters + */.htFiltersConditionsMenu:not(.htGhostTable){display:none;position:absolute;z-index:1070}.htFiltersConditionsMenu .ht_clone_corner,.htFiltersConditionsMenu .ht_clone_left,.htFiltersConditionsMenu .ht_clone_top{display:none}.htFiltersConditionsMenu table.htCore{border-color:#bbb;border-style:solid;border-width:1px 2px 2px 1px}.htFiltersConditionsMenu .wtBorder{visibility:hidden}.htFiltersConditionsMenu table tbody tr td{background:#fff;border-width:0;cursor:pointer;overflow:hidden;padding:4px 6px 0;text-overflow:ellipsis;white-space:nowrap}.htFiltersConditionsMenu table tbody tr td:first-child{border:0}.htFiltersConditionsMenu table tbody tr td.htDimmed{color:#323232;font-style:normal}.htFiltersConditionsMenu table tbody tr td.current,.htFiltersConditionsMenu table tbody tr td.zeroclipboard-is-hover{background:#e9e9e9}.htFiltersConditionsMenu table tbody tr td.htSeparator{border-top:1px solid #e6e6e6;height:0;padding:0}.htFiltersConditionsMenu table tbody tr td.htDisabled{color:#999}.htFiltersConditionsMenu table tbody tr td.htDisabled:hover{background:#fff;color:#999;cursor:default}.htFiltersConditionsMenu table tbody tr td .htItemWrapper{margin-left:10px;margin-right:10px}.htFiltersConditionsMenu table tbody tr td div span.selected{left:4px;margin-top:-2px;position:absolute}.htFiltersConditionsMenu .ht_master .wtHolder{overflow:hidden}.handsontable .htMenuFiltering{border-bottom:1px dotted #ccc;height:135px;overflow:hidden}.handsontable .ht_master table td.htCustomMenuRenderer{background-color:#fff;cursor:auto}.handsontable .htFiltersMenuLabel{font-size:.75em}.handsontable .htFiltersMenuActionBar{padding-bottom:3px;padding-top:10px;text-align:center}.handsontable .htFiltersMenuCondition.border{border-bottom:1px dotted #ccc!important}.handsontable .htFiltersMenuCondition .htUIInput{padding:0 0 5px}.handsontable .htFiltersMenuValue{border-bottom:1px dotted #ccc!important}.handsontable .htFiltersMenuValue .htUIMultipleSelectSearch{padding:0}.handsontable .htFiltersMenuCondition .htUIInput input,.handsontable .htFiltersMenuValue .htUIMultipleSelectSearch input{box-sizing:border-box;font-family:inherit;font-size:.75em;padding:4px;width:100%}.htUIMultipleSelect .ht_master .wtHolder{overflow-y:scroll}.handsontable .htFiltersActive .changeType{background-color:#d2e0d9;border:1px solid #509272;color:#18804e}.handsontable .htUISelectAll{margin-right:10px}.handsontable .htUIClearAll,.handsontable .htUISelectAll{display:inline-block}.handsontable .htUIClearAll a,.handsontable .htUISelectAll a{color:#3283d8;font-size:.75em}.handsontable .htUISelectionControls{text-align:right}.handsontable .htCheckboxRendererInput{height:1em;margin:0 5px 0 0;vertical-align:middle}.handsontable .htUIInput{padding:3px 0 7px;position:relative;text-align:center}.handsontable .htUIInput input{border:1px solid #d2d1d1;border-radius:2px}.handsontable .htUIInput input:focus{outline:0}.handsontable .htUIInputIcon{position:absolute}.handsontable .htUIInput.htUIButton{cursor:pointer;display:inline-block}.handsontable .htUIInput.htUIButton input{background-color:#eee;color:#000;cursor:pointer;font-family:inherit;font-size:.7em;font-weight:700;height:19px;min-width:64px}.handsontable .htUIInput.htUIButton input:hover{border-color:#b9b9b9}.handsontable .htUIInput.htUIButtonOK{margin-right:10px}.handsontable .htUIInput.htUIButtonOK input{background-color:#0f9d58;border-color:#18804e;color:#fff}.handsontable .htUIInput.htUIButtonOK input:hover{border-color:#1a6f46}.handsontable .htUISelect{cursor:pointer;margin-bottom:7px;position:relative}.handsontable .htUISelectCaption{background-color:#e8e8e8;border:1px solid #d2d1d1;border-radius:2px;font-family:inherit;font-size:.7em;font-weight:700;overflow:hidden;padding:3px 20px 3px 10px;text-overflow:ellipsis;white-space:nowrap}.handsontable .htUISelectCaption:hover{background-color:#e8e8e8;border:1px solid #b9b9b9}.handsontable .htUISelectDropdown:after{content:"\25B2";font-size:7px;position:absolute;right:10px;top:0}.handsontable .htUISelectDropdown:before{content:"\25BC";font-size:7px;position:absolute;right:10px;top:8px}.handsontable .htUIMultipleSelect .handsontable .htCore{border:none}.handsontable .htUIMultipleSelect .handsontable .htCore td:hover{background-color:#f5f5f5}.handsontable .htUIMultipleSelectSearch input{border:1px solid #d2d1d1;border-radius:2px;padding:3px}.handsontable .htUIRadio{display:inline-block;height:100%;margin-right:5px}.handsontable .htUIRadio:last-child{margin-right:0}.handsontable .htUIRadio>input[type=radio]{margin-right:.5ex}.handsontable .htUIRadio label{vertical-align:middle}.handsontable .htFiltersMenuOperators{padding-bottom:5px}.handsontable.ganttChart tr:first-child th div.relative{padding-right:21px}.handsontable.ganttChart .colHeader{display:block}.handsontable.ganttChart td.rangeBar{background:#48b703;border-right-width:0;-webkit-box-shadow:inset 0 3px 0 #fff;-moz-box-shadow:inset 0 3px 0 #fff;box-shadow:inset 0 3px 0 #fff;position:relative}.handsontable.ganttChart td.rangeBar.last{border-right-width:1px}.handsontable.ganttChart td.rangeBar.area{background:#7ec481}.handsontable.ganttChart td.rangeBar.partial{background:#8edf5a}.handsontable.ganttChart td.rangeBar.area.partial{background:#a1d8ad}.handsontable thead th.hiddenHeader:not(:first-of-type){display:none}.handsontable th.ht_nestingLevels{padding-left:7px;text-align:left}.handsontable th div.ht_nestingLevels{display:inline-block;left:11px;position:absolute}.handsontable.innerBorderLeft th div.ht_nestingLevels,.handsontable.innerBorderLeft~.handsontable th div.ht_nestingLevels{right:10px}.handsontable th span.ht_nestingLevel{display:inline-block}.handsontable th span.ht_nestingLevel_empty{display:inline-block;float:left;height:1px;width:10px}.handsontable th span.ht_nestingLevel:after{bottom:3px;content:"\2510";display:inline-block;font-size:9px;position:relative}.handsontable th div.ht_nestingButton{cursor:pointer;display:inline-block;position:absolute;right:-2px}.handsontable th div.ht_nestingButton.ht_nestingExpand:after{content:"\002B"}.handsontable th div.ht_nestingButton.ht_nestingCollapse:after{content:"\002D"}.handsontable.innerBorderLeft th div.ht_nestingButton,.handsontable.innerBorderLeft~.handsontable th div.ht_nestingButton{right:0}.handsontable th.beforeHiddenColumn{position:relative}.handsontable th.afterHiddenColumn:before,.handsontable th.beforeHiddenColumn:after{color:#bbb;font-size:5pt;position:absolute;top:50%;transform:translateY(-50%)}.handsontable th.afterHiddenColumn{position:relative}.handsontable th.beforeHiddenColumn:after{content:"\25C0";right:1px}.handsontable th.afterHiddenColumn:before{content:"\25B6";left:1px}.handsontable td.firstVisibleColumn,.handsontable th.firstVisibleColumn{border-left:1px solid #ccc} + +/*! + * Handsontable HiddenRows + */.handsontable th.afterHiddenRow:after,.handsontable th.beforeHiddenRow:before{color:#bbb;font-size:6pt;left:2px;line-height:6pt;position:absolute}.handsontable th.afterHiddenRow,.handsontable th.beforeHiddenRow{position:relative}.handsontable th.beforeHiddenRow:before{bottom:2px;content:"\25B2"}.handsontable th.afterHiddenRow:after{content:"\25BC";top:2px}.handsontable.ht__selection--rows tbody th.afterHiddenRow.ht__highlight:after,.handsontable.ht__selection--rows tbody th.beforeHiddenRow.ht__highlight:before{color:#eee}.handsontable td.afterHiddenRow.firstVisibleRow,.handsontable th.afterHiddenRow.firstVisibleRow{border-top:1px solid #ccc} +/*# sourceMappingURL=prefix-249.6ca19da539a8ed1a.css.map*/ \ No newline at end of file diff --git a/_static/prefix-249.6ca19da539a8ed1a.css.gz b/_static/prefix-249.6ca19da539a8ed1a.css.gz new file mode 100644 index 0000000..0df3843 Binary files /dev/null and b/_static/prefix-249.6ca19da539a8ed1a.css.gz differ diff --git a/_static/prefix-249.6ca19da539a8ed1a.css.map b/_static/prefix-249.6ca19da539a8ed1a.css.map new file mode 100644 index 0000000..82cb69f --- /dev/null +++ b/_static/prefix-249.6ca19da539a8ed1a.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-249.6ca19da539a8ed1a.css","mappings":"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","sources":["webpack://WebComponents/./node_modules/handsontable/dist/handsontable.full.css"],"sourcesContent":["/*!\n * Copyright (c) HANDSONCODE sp. z o. o.\n * \n * HANDSONTABLE is a software distributed by HANDSONCODE sp. z o. o.,\n * a Polish corporation, based in Gdynia, Poland, at 96/98 Aleja Zwycięstwa,\n * registered with the National Court Register under number 538651,\n * EU tax ID number: PL5862294002, share capital: PLN 62,800.00.\n * \n * This software is protected by applicable copyright laws, including\n * international treaties, and dual-licensed – depending on whether\n * your use is intended for or may result in commercial advantage\n * or monetary compensation (commercial purposes), or not.\n * \n * If your use involves only such purposes as research, private study,\n * evaluation and the like, you agree to be bound by the terms included\n * in the \"handsontable-non-commercial-license.pdf\" file, available\n * in the main directory of this software repository.\n * \n * By installing, copying, or otherwise using this software for\n * commercial purposes, you agree to be bound by the terms included\n * in the \"handsontable-general-terms.pdf\" file, available in the main\n * directory of this software repository.\n * \n * HANDSONCODE PROVIDES THIS SOFTWARE ON AN \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND. IN NO EVENT\n * AND UNDER NO LEGAL THEORY, SHALL HANDSONCODE BE LIABLE\n * TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, INDIRECT, SPECIAL,\n * INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING\n * FROM USE OR INABILITY TO USE THIS SOFTWARE.\n * \n * Version: 7.2.2\n * Release date: 23/10/2019 (built at 21/10/2019 12:22:24)\n */\n/**\n * Fix for bootstrap styles\n */\n.handsontable .table th, .handsontable .table td {\n border-top: none;\n}\n\n.handsontable tr {\n background: #fff;\n}\n\n.handsontable td {\n background-color: inherit;\n}\n\n.handsontable .table caption + thead tr:first-child th,\n.handsontable .table caption + thead tr:first-child td,\n.handsontable .table colgroup + thead tr:first-child th,\n.handsontable .table colgroup + thead tr:first-child td,\n.handsontable .table thead:first-child tr:first-child th,\n.handsontable .table thead:first-child tr:first-child td {\n border-top: 1px solid #CCCCCC;\n}\n\n/* table-bordered */\n.handsontable .table-bordered {\n border: 0;\n border-collapse: separate;\n}\n\n.handsontable .table-bordered th,\n.handsontable .table-bordered td {\n border-left: none;\n}\n\n.handsontable .table-bordered th:first-child,\n.handsontable .table-bordered td:first-child {\n border-left: 1px solid #CCCCCC;\n}\n\n.handsontable .table > tbody > tr > td,\n.handsontable .table > tbody > tr > th,\n.handsontable .table > tfoot > tr > td,\n.handsontable .table > tfoot > tr > th,\n.handsontable .table > thead > tr > td,\n.handsontable .table > thead > tr > th {\n line-height: 21px;\n padding: 0 4px;\n}\n\n.col-lg-1.handsontable, .col-lg-10.handsontable, .col-lg-11.handsontable, .col-lg-12.handsontable,\n.col-lg-2.handsontable, .col-lg-3.handsontable, .col-lg-4.handsontable, .col-lg-5.handsontable, .col-lg-6.handsontable, .col-lg-7.handsontable, .col-lg-8.handsontable, .col-lg-9.handsontable,\n.col-md-1.handsontable, .col-md-10.handsontable, .col-md-11.handsontable, .col-md-12.handsontable,\n.col-md-2.handsontable, .col-md-3.handsontable, .col-md-4.handsontable, .col-md-5.handsontable, .col-md-6.handsontable, .col-md-7.handsontable, .col-md-8.handsontable, .col-md-9.handsontable\n.col-sm-1.handsontable, .col-sm-10.handsontable, .col-sm-11.handsontable, .col-sm-12.handsontable,\n.col-sm-2.handsontable, .col-sm-3.handsontable, .col-sm-4.handsontable, .col-sm-5.handsontable, .col-sm-6.handsontable, .col-sm-7.handsontable, .col-sm-8.handsontable, .col-sm-9.handsontable\n.col-xs-1.handsontable, .col-xs-10.handsontable, .col-xs-11.handsontable, .col-xs-12.handsontable,\n.col-xs-2.handsontable, .col-xs-3.handsontable, .col-xs-4.handsontable, .col-xs-5.handsontable, .col-xs-6.handsontable, .col-xs-7.handsontable, .col-xs-8.handsontable, .col-xs-9.handsontable {\n padding-left: 0;\n padding-right: 0;\n}\n\n.handsontable .table-striped > tbody > tr:nth-of-type(even) {\n background-color: #FFF;\n}\n\n.handsontable {\n position: relative;\n}\n\n.handsontable .hide {\n display: none;\n}\n\n.handsontable .relative {\n position: relative;\n}\n\n.handsontable.htAutoSize {\n visibility: hidden;\n left: -99000px;\n position: absolute;\n top: -99000px;\n}\n\n.handsontable .wtHider {\n width: 0;\n}\n\n.handsontable .wtSpreader {\n position: relative;\n width: 0; /*must be 0, otherwise blank space appears in scroll demo after scrolling max to the right */\n height: auto;\n}\n\n.handsontable table,\n.handsontable tbody,\n.handsontable thead,\n.handsontable td,\n.handsontable th,\n.handsontable input,\n.handsontable textarea,\n.handsontable div {\n box-sizing: content-box;\n -webkit-box-sizing: content-box;\n -moz-box-sizing: content-box;\n}\n\n.handsontable input,\n.handsontable textarea {\n min-height: initial;\n}\n\n.handsontable table.htCore {\n border-collapse: separate;\n /* it must be separate, otherwise there are offset miscalculations in WebKit: http://stackoverflow.com/questions/2655987/border-collapse-differences-in-ff-and-webkit */\n /* this actually only changes appearance of user selection - does not make text unselectable */\n /* -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -o-user-select: none;\n -ms-user-select: none;\n user-select: none; */ /* no browser supports unprefixed version */\n border-spacing: 0;\n margin: 0;\n border-width: 0;\n table-layout: fixed;\n width: 0;\n outline-width: 0;\n cursor: default;\n /* reset bootstrap table style. for more info see: https://github.com/handsontable/handsontable/issues/224 */\n max-width: none;\n max-height: none;\n}\n\n.handsontable col {\n width: 50px;\n}\n\n.handsontable col.rowHeader {\n width: 50px;\n}\n\n.handsontable th,\n.handsontable td {\n border-top-width: 0;\n border-left-width: 0;\n border-right: 1px solid #CCC;\n border-bottom: 1px solid #CCC;\n height: 22px;\n empty-cells: show;\n line-height: 21px;\n padding: 0 4px 0 4px;\n /* top, bottom padding different than 0 is handled poorly by FF with HTML5 doctype */\n background-color: #FFF;\n vertical-align: top;\n overflow: hidden;\n outline-width: 0;\n white-space: pre-line;\n /* preserve new line character in cell */\n background-clip: padding-box;\n}\n\n.handsontable td.htInvalid {\n background-color: #ff4c42 !important; /*gives priority over td.area selection background*/\n}\n\n.handsontable td.htNoWrap {\n white-space: nowrap;\n}\n\n.handsontable th:last-child {\n /*Foundation framework fix*/\n border-right: 1px solid #CCC;\n border-bottom: 1px solid #CCC;\n}\n\n.handsontable tr:first-child th.htNoFrame,\n.handsontable th:first-child.htNoFrame,\n.handsontable th.htNoFrame {\n border-left-width: 0;\n background-color: white;\n border-color: #FFF;\n}\n\n.handsontable th:first-child,\n.handsontable th:nth-child(2),\n.handsontable td:first-of-type,\n.handsontable .htNoFrame + th,\n.handsontable .htNoFrame + td {\n border-left: 1px solid #CCC;\n}\n\n.handsontable.htRowHeaders thead tr th:nth-child(2) {\n border-left: 1px solid #CCC;\n}\n\n.handsontable tr:first-child th,\n.handsontable tr:first-child td {\n border-top: 1px solid #CCC;\n}\n\n.ht_master:not(.innerBorderLeft):not(.emptyColumns) ~ .handsontable tbody tr th,\n.ht_master:not(.innerBorderLeft):not(.emptyColumns) ~ .handsontable:not(.ht_clone_top) thead tr th:first-child {\n border-right-width: 0;\n}\n\n.ht_master:not(.innerBorderTop) thead tr:last-child th,\n.ht_master:not(.innerBorderTop) ~ .handsontable thead tr:last-child th,\n.ht_master:not(.innerBorderTop) thead tr.lastChild th,\n.ht_master:not(.innerBorderTop) ~ .handsontable thead tr.lastChild th {\n border-bottom-width: 0;\n}\n\n.handsontable th {\n background-color: #f0f0f0;\n color: #222;\n text-align: center;\n font-weight: normal;\n white-space: nowrap;\n}\n\n.handsontable thead th {\n padding: 0;\n}\n\n.handsontable th.active {\n background-color: #CCC;\n}\n.handsontable thead th .relative {\n padding: 2px 4px;\n}\n\n#hot-display-license-info {\n font-size: 10px;\n color: #323232 ;\n padding: 5px 0 3px 0;\n font-family: Helvetica, Arial, sans-serif;\n text-align: left;\n}\n\n#hot-display-license-info a {\n font-size: 10px;\n}\n\n/* plugins */\n\n/* row + column resizer*/\n.handsontable .manualColumnResizer {\n position: absolute;\n top: 0;\n cursor: col-resize;\n z-index: 210;\n width: 5px;\n height: 25px;\n}\n\n.handsontable .manualRowResizer {\n position: absolute;\n left: 0;\n cursor: row-resize;\n z-index: 210;\n height: 5px;\n width: 50px;\n}\n\n.handsontable .manualColumnResizer:hover,\n.handsontable .manualColumnResizer.active,\n.handsontable .manualRowResizer:hover,\n.handsontable .manualRowResizer.active {\n background-color: #34a9db;\n}\n\n.handsontable .manualColumnResizerGuide {\n position: absolute;\n right: 0;\n top: 0;\n background-color: #34a9db;\n display: none;\n width: 0;\n border-right: 1px dashed #777;\n margin-left: 5px;\n}\n\n.handsontable .manualRowResizerGuide {\n position: absolute;\n left: 0;\n bottom: 0;\n background-color: #34a9db;\n display: none;\n height: 0;\n border-bottom: 1px dashed #777;\n margin-top: 5px;\n}\n\n.handsontable .manualColumnResizerGuide.active,\n.handsontable .manualRowResizerGuide.active {\n display: block;\n z-index: 209;\n}\n\n.handsontable .columnSorting {\n position: relative;\n}\n\n.handsontable .columnSorting.sortAction:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n\n.handsontable span.colHeader {\n display: inline-block;\n line-height: 1.1;\n}\n\n/* Arrow position */\n.handsontable span.colHeader.columnSorting::before {\n /* Centering start */\n top: 50%;\n margin-top: -6px; /* One extra pixel for purpose of proper positioning of sorting arrow, when `font-size` set to default */\n /* Centering end */\n\n padding-left: 8px; /* For purpose of continuous mouse over experience, when moving between the `span` and the `::before` elements */\n position: absolute;\n right: -9px;\n\n content: '';\n height: 10px;\n width: 5px;\n background-size: contain;\n background-repeat: no-repeat;\n background-position-x: right;\n}\n\n.handsontable span.colHeader.columnSorting.ascending::before {\n /* arrow up; 20 x 40 px, scaled to 5 x 10 px; base64 size: 0.3kB */\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFNJREFUeAHtzjkSgCAUBNHPgsoy97+ulGXRqJE5L+xkxoYt2UdsLb5bqFINz+aLuuLn5rIu2RkO3fZpWENimNgiw6iBYRTPMLJjGFxQZ1hxxb/xBI1qC8k39CdKAAAAAElFTkSuQmCC\");\n}\n\n.handsontable span.colHeader.columnSorting.descending::before {\n /* arrow down; 20 x 40 px, scaled to 5 x 10 px; base64 size: 0.3kB */\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFJJREFUeAHtzjkSgCAQRNFmQYUZ7n9dKUvru0TmvPAn3br0QfgdZ5xx6x+rQn23GqTYnq1FDcnuzZIO2WmedVqIRVxgGKEyjNgYRjKGkZ1hFIZ3I70LyM0VtU8AAAAASUVORK5CYII=\");\n}\n\n.htGhostTable .htCore span.colHeader.columnSorting:not(.indicatorDisabled)::after {\n content: '*';\n display: inline-block;\n position: relative;\n /* The multi-line header and header with longer text need more padding to not hide arrow,\n we make header wider in `GhostTable` to make some space for arrow which is positioned absolutely in the main table */\n padding-right: 20px;\n}\n\n/* Selection */\n.handsontable .wtBorder {\n position: absolute;\n font-size: 0;\n}\n.handsontable .wtBorder.hidden{\n display:none !important;\n}\n\n/* A layer order of the selection types */\n.handsontable .wtBorder.current {\n z-index: 10;\n}\n.handsontable .wtBorder.area {\n z-index: 8;\n}\n.handsontable .wtBorder.fill {\n z-index: 6;\n}\n\n.handsontable td.area,\n.handsontable td.area-1,\n.handsontable td.area-2,\n.handsontable td.area-3,\n.handsontable td.area-4,\n.handsontable td.area-5,\n.handsontable td.area-6,\n.handsontable td.area-7 {\n position: relative;\n}\n\n.handsontable td.area:before,\n.handsontable td.area-1:before,\n.handsontable td.area-2:before,\n.handsontable td.area-3:before,\n.handsontable td.area-4:before,\n.handsontable td.area-5:before,\n.handsontable td.area-6:before,\n.handsontable td.area-7:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n bottom: -100%\\9; /* Fix for IE9 to spread the \":before\" pseudo element to 100% height of the parent element */\n background: #005eff;\n}\n\n/* Fix for IE10 and IE11 to spread the \":before\" pseudo element to 100% height of the parent element */\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n .handsontable td.area:before,\n .handsontable td.area-1:before,\n .handsontable td.area-2:before,\n .handsontable td.area-3:before,\n .handsontable td.area-4:before,\n .handsontable td.area-5:before,\n .handsontable td.area-6:before,\n .handsontable td.area-7:before {\n bottom: -100%;\n }\n}\n\n.handsontable td.area:before {\n opacity: 0.1;\n}\n.handsontable td.area-1:before {\n opacity: 0.2;\n}\n.handsontable td.area-2:before {\n opacity: 0.27;\n}\n.handsontable td.area-3:before {\n opacity: 0.35;\n}\n.handsontable td.area-4:before {\n opacity: 0.41;\n}\n.handsontable td.area-5:before {\n opacity: 0.47;\n}\n.handsontable td.area-6:before {\n opacity: 0.54;\n}\n.handsontable td.area-7:before {\n opacity: 0.58;\n}\n\n.handsontable tbody th.ht__highlight,\n.handsontable thead th.ht__highlight {\n background-color: #dcdcdc;\n}\n\n.handsontable tbody th.ht__active_highlight,\n.handsontable thead th.ht__active_highlight {\n background-color: #8eb0e7;\n color: #000;\n}\n\n/* fill handle */\n\n.handsontable .wtBorder.corner {\n font-size: 0;\n cursor: crosshair;\n}\n\n.handsontable .htBorder.htFillBorder {\n background: red;\n width: 1px;\n height: 1px;\n}\n\n.handsontableInput {\n border: none;\n outline-width: 0;\n margin: 0;\n padding: 1px 5px 0 5px;\n font-family: inherit;\n line-height: 21px;\n font-size: inherit;\n box-shadow: 0 0 0 2px #5292F7 inset;\n resize: none;\n /*below are needed to overwrite stuff added by jQuery UI Bootstrap theme*/\n display: block;\n color: #000;\n border-radius: 0;\n background-color: #FFF;\n /*overwrite styles potentionally made by a framework*/\n}\n\n.handsontableInputHolder {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 104;\n}\n\n.htSelectEditor {\n -webkit-appearance: menulist-button !important;\n position: absolute;\n width: auto;\n}\n\n/*\nTextRenderer readOnly cell\n*/\n\n.handsontable .htDimmed {\n color: #777;\n}\n\n.handsontable .htSubmenu {\n position: relative;\n}\n\n.handsontable .htSubmenu :after{\n content: '\\25B6';\n color: #777;\n position: absolute;\n right: 5px;\n font-size: 9px;\n}\n\n\n/*\nTextRenderer horizontal alignment\n*/\n.handsontable .htLeft{\n text-align: left;\n}\n.handsontable .htCenter{\n text-align: center;\n}\n.handsontable .htRight{\n text-align: right;\n}\n.handsontable .htJustify{\n text-align: justify;\n}\n/*\nTextRenderer vertical alignment\n*/\n.handsontable .htTop{\n vertical-align: top;\n}\n.handsontable .htMiddle{\n vertical-align: middle;\n}\n.handsontable .htBottom{\n vertical-align: bottom;\n}\n\n/*\nTextRenderer placeholder value\n*/\n\n.handsontable .htPlaceholder {\n color: #999;\n}\n\n/*\nAutocompleteRenderer down arrow\n*/\n\n.handsontable .htAutocompleteArrow {\n float: right;\n font-size: 10px;\n color: #EEE;\n cursor: default;\n width: 16px;\n text-align: center;\n}\n\n.handsontable td .htAutocompleteArrow:hover {\n color: #777;\n}\n\n.handsontable td.area .htAutocompleteArrow {\n color: #d3d3d3;\n}\n\n/*\nCheckboxRenderer\n*/\n.handsontable .htCheckboxRendererInput {\n display: inline-block;\n}\n.handsontable .htCheckboxRendererInput.noValue {\n opacity: 0.5;\n}\n.handsontable .htCheckboxRendererLabel {\n font-size: inherit;\n vertical-align: middle;\n cursor: pointer;\n display: inline-block;\n width: 100%;\n}\n\n/**\n * Handsontable in Handsontable\n */\n\n.handsontable .handsontable.ht_clone_top .wtHider {\n padding: 0 0 5px 0;\n}\n\n/**\n* Autocomplete Editor\n*/\n.handsontable .autocompleteEditor.handsontable {\n padding-right: 17px;\n}\n.handsontable .autocompleteEditor.handsontable.htMacScroll {\n padding-right: 15px;\n}\n\n\n/**\n * Handsontable listbox theme\n */\n\n.handsontable.listbox {\n margin: 0;\n}\n\n.handsontable.listbox .ht_master table {\n border: 1px solid #ccc;\n border-collapse: separate;\n background: white;\n}\n\n.handsontable.listbox th,\n.handsontable.listbox tr:first-child th,\n.handsontable.listbox tr:last-child th,\n.handsontable.listbox tr:first-child td,\n.handsontable.listbox td {\n border-color: transparent;\n}\n\n.handsontable.listbox th,\n.handsontable.listbox td {\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.handsontable.listbox td.htDimmed {\n cursor: default;\n color: inherit;\n font-style: inherit;\n}\n\n.handsontable.listbox .wtBorder {\n visibility: hidden;\n}\n\n.handsontable.listbox tr td.current,\n.handsontable.listbox tr:hover td {\n background: #eee;\n}\n\n.ht_editor_hidden {\n z-index: -1;\n}\n\n.ht_editor_visible {\n z-index: 200;\n}\n\n.ht_clone_master {\n z-index: 100;\n}\n\n.ht_clone_right {\n z-index: 110;\n}\n\n.ht_clone_left {\n z-index: 120;\n}\n\n.ht_clone_bottom {\n z-index: 130;\n}\n\n.ht_clone_bottom_right_corner {\n z-index: 140;\n}\n\n.ht_clone_bottom_left_corner {\n z-index: 150;\n}\n\n.ht_clone_top {\n z-index: 160;\n}\n\n.ht_clone_top_right_corner {\n z-index: 170;\n}\n\n.ht_clone_top_left_corner {\n z-index: 180;\n}\n\n.handsontable td.htSearchResult {\n background: #fcedd9;\n color: #583707;\n}\n\n/*\nCell borders\n*/\n.htBordered{\n /*box-sizing: border-box !important;*/\n border-width: 1px;\n}\n.htBordered.htTopBorderSolid {\n border-top-style: solid;\n border-top-color: #000;\n}\n.htBordered.htRightBorderSolid {\n border-right-style: solid;\n border-right-color: #000;\n}\n.htBordered.htBottomBorderSolid {\n border-bottom-style: solid;\n border-bottom-color: #000;\n}\n.htBordered.htLeftBorderSolid {\n border-left-style: solid;\n border-left-color: #000;\n}\n\n.handsontable tbody tr th:nth-last-child(2) {\n border-right: 1px solid #CCC;\n}\n\n.handsontable thead tr:nth-last-child(2) th.htGroupIndicatorContainer {\n border-bottom: 1px solid #CCC;\n padding-bottom: 5px;\n}\n\n\n.ht_clone_top_left_corner thead tr th:nth-last-child(2) {\n border-right: 1px solid #CCC;\n}\n\n.htCollapseButton {\n width: 10px;\n height: 10px;\n line-height: 10px;\n text-align: center;\n border-radius: 5px;\n border: 1px solid #f3f3f3;\n -webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);\n box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);\n cursor: pointer;\n margin-bottom: 3px;\n position: relative;\n}\n\n.htCollapseButton:after {\n content: \"\";\n height: 300%;\n width: 1px;\n display: block;\n background: #ccc;\n margin-left: 4px;\n position: absolute;\n /*top: -300%;*/\n bottom: 10px;\n}\n\n\nthead .htCollapseButton {\n right: 5px;\n position: absolute;\n top: 5px;\n background: #fff;\n}\n\nthead .htCollapseButton:after {\n height: 1px;\n width: 700%;\n right: 10px;\n top: 4px;\n}\n\n.handsontable tr th .htExpandButton {\n position: absolute;\n width: 10px;\n height: 10px;\n line-height: 10px;\n text-align: center;\n border-radius: 5px;\n border: 1px solid #f3f3f3;\n -webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);\n box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);\n cursor: pointer;\n top: 0;\n display: none;\n}\n\n.handsontable thead tr th .htExpandButton {\n /*left: 5px;*/\n top: 5px;\n}\n\n.handsontable tr th .htExpandButton.clickable {\n display: block;\n}\n\n.collapsibleIndicator {\n position: absolute;\n top: 50%;\n transform: translate(0% ,-50%);\n right: 5px;\n border: 1px solid #A6A6A6;\n line-height: 10px;\n color: #222;\n border-radius: 10px;\n font-size: 10px;\n width: 10px;\n height: 10px;\n cursor: pointer;\n -webkit-box-shadow: 0 0 0 6px rgba(238,238,238,1);\n -moz-box-shadow: 0 0 0 6px rgba(238,238,238,1);\n box-shadow: 0 0 0 6px rgba(238,238,238,1);\n background: #eee;\n}\n\n.handsontable col.hidden {\n width: 0 !important;\n}\n\n.handsontable table tr th.lightRightBorder {\n border-right: 1px solid #E6E6E6;\n}\n\n.handsontable tr.hidden,\n.handsontable tr.hidden td,\n.handsontable tr.hidden th {\n display: none;\n}\n\n.ht_master,\n.ht_clone_left,\n.ht_clone_top,\n.ht_clone_bottom {\n overflow: hidden;\n}\n\n.ht_master .wtHolder {\n overflow: auto;\n}\n\n.handsontable .ht_master thead,\n.handsontable .ht_master tr th,\n.handsontable .ht_clone_left thead {\n visibility: hidden;\n}\n\n.ht_clone_top .wtHolder,\n.ht_clone_left .wtHolder,\n.ht_clone_bottom .wtHolder {\n overflow: hidden;\n}\n\n/*\n\n Handsontable Mobile Text Editor stylesheet\n\n */\n\n.handsontable.mobile,\n.handsontable.mobile .wtHolder {\n -webkit-touch-callout:none;\n -webkit-user-select:none;\n -khtml-user-select:none;\n -moz-user-select:none;\n -ms-user-select:none;\n user-select:none;\n -webkit-tap-highlight-color:rgba(0,0,0,0);\n -webkit-overflow-scrolling: touch;\n}\n\n.htMobileEditorContainer {\n display: none;\n position: absolute;\n top: 0;\n width: 70%;\n height: 54pt;\n background: #f8f8f8;\n border-radius: 20px;\n border: 1px solid #ebebeb;\n z-index: 999;\n box-sizing: border-box;\n -webkit-box-sizing: border-box;\n -webkit-text-size-adjust: none;\n}\n\n.topLeftSelectionHandle:not(.ht_master .topLeftSelectionHandle),\n.topLeftSelectionHandle-HitArea:not(.ht_master .topLeftSelectionHandle-HitArea) {\n z-index: 9999;\n}\n\n/* Initial left/top coordinates - overwritten when actual position is set */\n.topLeftSelectionHandle,\n.topLeftSelectionHandle-HitArea,\n.bottomRightSelectionHandle,\n.bottomRightSelectionHandle-HitArea {\n left: -10000px;\n top: -10000px;\n}\n\n.htMobileEditorContainer.active {\n display: block;\n}\n\n.htMobileEditorContainer .inputs {\n position: absolute;\n right: 210pt;\n bottom: 10pt;\n top: 10pt;\n left: 14px;\n height: 34pt;\n}\n\n.htMobileEditorContainer .inputs textarea {\n font-size: 13pt;\n border: 1px solid #a1a1a1;\n -webkit-appearance: none;\n -webkit-box-shadow: none;\n -moz-box-shadow: none;\n box-shadow: none;\n position: absolute;\n left: 14px;\n right: 14px;\n top: 0;\n bottom: 0;\n padding: 7pt;\n}\n\n.htMobileEditorContainer .cellPointer {\n position: absolute;\n top: -13pt;\n height: 0;\n width: 0;\n left: 30px;\n\n border-left: 13pt solid transparent;\n border-right: 13pt solid transparent;\n border-bottom: 13pt solid #ebebeb;\n}\n\n.htMobileEditorContainer .cellPointer.hidden {\n display: none;\n}\n\n.htMobileEditorContainer .cellPointer:before {\n content: '';\n display: block;\n position: absolute;\n top: 2px;\n height: 0;\n width: 0;\n left: -13pt;\n\n border-left: 13pt solid transparent;\n border-right: 13pt solid transparent;\n border-bottom: 13pt solid #f8f8f8;\n}\n\n.htMobileEditorContainer .moveHandle {\n position: absolute;\n top: 10pt;\n left: 5px;\n width: 30px;\n bottom: 0px;\n cursor: move;\n z-index: 9999;\n}\n\n.htMobileEditorContainer .moveHandle:after {\n content: \"..\\a..\\a..\\a..\";\n white-space: pre;\n line-height: 10px;\n font-size: 20pt;\n display: inline-block;\n margin-top: -8px;\n color: #ebebeb;\n}\n\n.htMobileEditorContainer .positionControls {\n width: 205pt;\n position: absolute;\n right: 5pt;\n top: 0;\n bottom: 0;\n}\n\n.htMobileEditorContainer .positionControls > div {\n width: 50pt;\n height: 100%;\n float: left;\n}\n\n.htMobileEditorContainer .positionControls > div:after {\n content: \" \";\n display: block;\n width: 15pt;\n height: 15pt;\n text-align: center;\n line-height: 50pt;\n}\n\n.htMobileEditorContainer .leftButton:after,\n.htMobileEditorContainer .rightButton:after,\n.htMobileEditorContainer .upButton:after,\n.htMobileEditorContainer .downButton:after {\n transform-origin: 5pt 5pt;\n -webkit-transform-origin: 5pt 5pt;\n margin: 21pt 0 0 21pt;\n}\n\n.htMobileEditorContainer .leftButton:after {\n border-top: 2px solid #288ffe;\n border-left: 2px solid #288ffe;\n -webkit-transform: rotate(-45deg);\n /*margin-top: 17pt;*/\n /*margin-left: 20pt;*/\n}\n.htMobileEditorContainer .leftButton:active:after {\n border-color: #cfcfcf;\n}\n\n.htMobileEditorContainer .rightButton:after {\n border-top: 2px solid #288ffe;\n border-left: 2px solid #288ffe;\n -webkit-transform: rotate(135deg);\n /*margin-top: 17pt;*/\n /*margin-left: 10pt;*/\n}\n.htMobileEditorContainer .rightButton:active:after {\n border-color: #cfcfcf;\n}\n\n.htMobileEditorContainer .upButton:after {\n /*border-top: 2px solid #cfcfcf;*/\n border-top: 2px solid #288ffe;\n border-left: 2px solid #288ffe;\n -webkit-transform: rotate(45deg);\n /*margin-top: 22pt;*/\n /*margin-left: 15pt;*/\n}\n.htMobileEditorContainer .upButton:active:after {\n border-color: #cfcfcf;\n}\n\n.htMobileEditorContainer .downButton:after {\n border-top: 2px solid #288ffe;\n border-left: 2px solid #288ffe;\n -webkit-transform: rotate(225deg);\n /*margin-top: 15pt;*/\n /*margin-left: 15pt;*/\n}\n.htMobileEditorContainer .downButton:active:after {\n border-color: #cfcfcf;\n}\n\n.handsontable.hide-tween {\n -webkit-animation: opacity-hide 0.3s;\n animation: opacity-hide 0.3s;\n animation-fill-mode: forwards;\n -webkit-animation-fill-mode: forwards;\n}\n\n.handsontable.show-tween {\n -webkit-animation: opacity-show 0.3s;\n animation: opacity-show 0.3s;\n animation-fill-mode: forwards;\n -webkit-animation-fill-mode: forwards;\n}\n\n@charset \"UTF-8\";\n\n/*!\n * Pikaday\n * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/\n */\n\n.pika-single {\n z-index: 9999;\n display: block;\n position: relative;\n color: #333;\n background: #fff;\n border: 1px solid #ccc;\n border-bottom-color: #bbb;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\n\n/*\nclear child float (pika-lendar), using the famous micro clearfix hack\nhttp://nicolasgallagher.com/micro-clearfix-hack/\n*/\n.pika-single:before,\n.pika-single:after {\n content: \" \";\n display: table;\n}\n.pika-single:after { clear: both }\n.pika-single { *zoom: 1 }\n\n.pika-single.is-hidden {\n display: none;\n}\n\n.pika-single.is-bound {\n position: absolute;\n box-shadow: 0 5px 15px -5px rgba(0,0,0,.5);\n}\n\n.pika-lendar {\n float: left;\n width: 240px;\n margin: 8px;\n}\n\n.pika-title {\n position: relative;\n text-align: center;\n}\n\n.pika-label {\n display: inline-block;\n *display: inline;\n position: relative;\n z-index: 9999;\n overflow: hidden;\n margin: 0;\n padding: 5px 3px;\n font-size: 14px;\n line-height: 20px;\n font-weight: bold;\n background-color: #fff;\n}\n.pika-title select {\n cursor: pointer;\n position: absolute;\n z-index: 9998;\n margin: 0;\n left: 0;\n top: 5px;\n filter: alpha(opacity=0);\n opacity: 0;\n}\n\n.pika-prev,\n.pika-next {\n display: block;\n cursor: pointer;\n position: relative;\n outline: none;\n border: 0;\n padding: 0;\n width: 20px;\n height: 30px;\n /* hide text using text-indent trick, using width value (it's enough) */\n text-indent: 20px;\n white-space: nowrap;\n overflow: hidden;\n background-color: transparent;\n background-position: center center;\n background-repeat: no-repeat;\n background-size: 75% 75%;\n opacity: .5;\n *position: absolute;\n *top: 0;\n}\n\n.pika-prev:hover,\n.pika-next:hover {\n opacity: 1;\n}\n\n.pika-prev,\n.is-rtl .pika-next {\n float: left;\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==');\n *left: 0;\n}\n\n.pika-next,\n.is-rtl .pika-prev {\n float: right;\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=');\n *right: 0;\n}\n\n.pika-prev.is-disabled,\n.pika-next.is-disabled {\n cursor: default;\n opacity: .2;\n}\n\n.pika-select {\n display: inline-block;\n *display: inline;\n}\n\n.pika-table {\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n border: 0;\n}\n\n.pika-table th,\n.pika-table td {\n width: 14.285714285714286%;\n padding: 0;\n}\n\n.pika-table th {\n color: #999;\n font-size: 12px;\n line-height: 25px;\n font-weight: bold;\n text-align: center;\n}\n\n.pika-button {\n cursor: pointer;\n display: block;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n outline: none;\n border: 0;\n margin: 0;\n width: 100%;\n padding: 5px;\n color: #666;\n font-size: 12px;\n line-height: 15px;\n text-align: right;\n background: #f5f5f5;\n}\n\n.pika-week {\n font-size: 11px;\n color: #999;\n}\n\n.is-today .pika-button {\n color: #33aaff;\n font-weight: bold;\n}\n\n.is-selected .pika-button {\n color: #fff;\n font-weight: bold;\n background: #33aaff;\n box-shadow: inset 0 1px 3px #178fe5;\n border-radius: 3px;\n}\n\n.is-inrange .pika-button {\n background: #D5E9F7;\n}\n\n.is-startrange .pika-button {\n color: #fff;\n background: #6CB31D;\n box-shadow: none;\n border-radius: 3px;\n}\n\n.is-endrange .pika-button {\n color: #fff;\n background: #33aaff;\n box-shadow: none;\n border-radius: 3px;\n}\n\n.is-disabled .pika-button,\n.is-outside-current-month .pika-button {\n pointer-events: none;\n cursor: default;\n color: #999;\n opacity: .3;\n}\n\n.pika-button:hover {\n color: #fff;\n background: #ff8000;\n box-shadow: none;\n border-radius: 3px;\n}\n\n/* styling for abbr */\n.pika-table abbr {\n border-bottom: none;\n cursor: help;\n}\n\n\n.htCommentCell {\n position: relative;\n}\n\n.htCommentCell:after {\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n border-left: 6px solid transparent;\n border-top: 6px solid black;\n}\n\n.htComments {\n display: none;\n z-index: 1059;\n position: absolute;\n}\n\n.htCommentTextArea {\n box-shadow: rgba(0, 0, 0, 0.117647) 0 1px 3px, rgba(0, 0, 0, 0.239216) 0 1px 2px;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n border: none;\n border-left: 3px solid #ccc;\n background-color: #fff;\n width: 215px;\n height: 90px;\n font-size: 12px;\n padding: 5px;\n outline: 0px !important;\n -webkit-appearance: none;\n}\n\n.htCommentTextArea:focus {\n box-shadow: rgba(0, 0, 0, 0.117647) 0 1px 3px, rgba(0, 0, 0, 0.239216) 0 1px 2px, inset 0 0 0 1px #5292f7;\n border-left: 3px solid #5292f7;\n}\n\n/*!\n * Handsontable ContextMenu\n */\n\n.htContextMenu:not(.htGhostTable) {\n display: none;\n position: absolute;\n z-index: 1060; /* needs to be higher than 1050 - z-index for Twitter Bootstrap modal (#1569) */\n}\n\n.htContextMenu .ht_clone_top,\n.htContextMenu .ht_clone_left,\n.htContextMenu .ht_clone_corner {\n display: none;\n}\n\n.htContextMenu table.htCore {\n border: 1px solid #ccc;\n border-bottom-width: 2px;\n border-right-width: 2px;\n}\n\n.htContextMenu .wtBorder {\n visibility: hidden;\n}\n\n.htContextMenu table tbody tr td {\n background: white;\n border-width: 0;\n padding: 4px 6px 0 6px;\n cursor: pointer;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.htContextMenu table tbody tr td:first-child {\n border: 0;\n}\n\n.htContextMenu table tbody tr td.htDimmed {\n font-style: normal;\n color: #323232;\n}\n\n.htContextMenu table tbody tr td.current,\n.htContextMenu table tbody tr td.zeroclipboard-is-hover {\n background: #f3f3f3;\n}\n\n.htContextMenu table tbody tr td.htSeparator {\n border-top: 1px solid #e6e6e6;\n height: 0;\n padding: 0;\n cursor: default;\n}\n\n.htContextMenu table tbody tr td.htDisabled {\n color: #999;\n cursor: default;\n}\n\n.htContextMenu table tbody tr td.htDisabled:hover {\n background: #fff;\n color: #999;\n cursor: default;\n}\n\n.htContextMenu table tbody tr.htHidden {\n display: none;\n}\n\n.htContextMenu table tbody tr td .htItemWrapper {\n margin-left: 10px;\n margin-right: 6px;\n}\n\n.htContextMenu table tbody tr td div span.selected {\n margin-top: -2px;\n position: absolute;\n left: 4px;\n}\n\n.htContextMenu .ht_master .wtHolder {\n overflow: hidden;\n}\n\ntextarea#HandsontableCopyPaste {\n position: fixed !important;\n top: 0 !important;\n right: 100% !important;\n overflow: hidden;\n opacity: 0;\n outline: 0 none !important;\n}\n\n.htRowHeaders .ht_master.innerBorderLeft ~ .ht_clone_top_left_corner th:nth-child(2),\n.htRowHeaders .ht_master.innerBorderLeft ~ .ht_clone_left td:first-of-type {\n border-left: 0 none;\n}\n\n.handsontable .wtHider {\n position: relative;\n}\n.handsontable.ht__manualColumnMove.after-selection--columns thead th.ht__highlight {\n cursor: move;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n cursor: grab;\n}\n.handsontable.ht__manualColumnMove.on-moving--columns,\n.handsontable.ht__manualColumnMove.on-moving--columns thead th.ht__highlight {\n cursor: move;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n.handsontable.ht__manualColumnMove.on-moving--columns .manualColumnResizer {\n display: none;\n}\n.handsontable .ht__manualColumnMove--guideline,\n.handsontable .ht__manualColumnMove--backlight {\n position: absolute;\n height: 100%;\n display: none;\n}\n.handsontable .ht__manualColumnMove--guideline {\n background: #757575;\n width: 2px;\n top: 0;\n margin-left: -1px;\n z-index: 205;\n}\n.handsontable .ht__manualColumnMove--backlight {\n background: #343434;\n background: rgba(52, 52, 52, 0.25);\n display: none;\n z-index: 205;\n pointer-events: none;\n}\n.handsontable.on-moving--columns.show-ui .ht__manualColumnMove--guideline,\n.handsontable.on-moving--columns .ht__manualColumnMove--backlight {\n display: block;\n}\n\n.handsontable .wtHider {\n position: relative;\n}\n.handsontable.ht__manualRowMove.after-selection--rows tbody th.ht__highlight {\n cursor: move;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n cursor: grab;\n}\n.handsontable.ht__manualRowMove.on-moving--rows,\n.handsontable.ht__manualRowMove.on-moving--rows tbody th.ht__highlight {\n cursor: move;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n.handsontable.ht__manualRowMove.on-moving--rows .manualRowResizer {\n display: none;\n}\n.handsontable .ht__manualRowMove--guideline,\n.handsontable .ht__manualRowMove--backlight {\n position: absolute;\n width: 100%;\n display: none;\n}\n.handsontable .ht__manualRowMove--guideline {\n background: #757575;\n height: 2px;\n left: 0;\n margin-top: -1px;\n z-index: 205;\n}\n.handsontable .ht__manualRowMove--backlight {\n background: #343434;\n background: rgba(52, 52, 52, 0.25);\n display: none;\n z-index: 205;\n pointer-events: none;\n}\n.handsontable.on-moving--rows.show-ui .ht__manualRowMove--guideline,\n.handsontable.on-moving--rows .ht__manualRowMove--backlight {\n display: block;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"]:not([class*=\"fullySelectedMergedCell\"]):before {\n opacity: 0;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-multiple\"]:before {\n opacity: 0.1;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-0\"]:before {\n opacity: 0.1;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-1\"]:before {\n opacity: 0.2;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-2\"]:before {\n opacity: 0.27;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-3\"]:before {\n opacity: 0.35;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-4\"]:before {\n opacity: 0.41;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-5\"]:before {\n opacity: 0.47;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-6\"]:before {\n opacity: 0.54;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-7\"]:before {\n opacity: 0.58;\n}\n\n/*!\n * Handsontable DropdownMenu\n */\n.handsontable .changeType {\n background: #eee;\n border-radius: 2px;\n border: 1px solid #bbb;\n color: #bbb;\n font-size: 9px;\n line-height: 9px;\n padding: 2px;\n margin: 3px 1px 0 5px;\n float: right;\n}\n.handsontable .changeType:before {\n content: '\\25BC\\ ';\n}\n\n.handsontable .changeType:hover {\n border: 1px solid #777;\n color: #777;\n cursor: pointer;\n}\n\n.htDropdownMenu:not(.htGhostTable) {\n display: none;\n position: absolute;\n z-index: 1060; /* needs to be higher than 1050 - z-index for Twitter Bootstrap modal (#1569) */\n}\n\n.htDropdownMenu .ht_clone_top,\n.htDropdownMenu .ht_clone_left,\n.htDropdownMenu .ht_clone_corner {\n display: none;\n}\n\n.htDropdownMenu table.htCore {\n border: 1px solid #bbb;\n border-bottom-width: 2px;\n border-right-width: 2px;\n}\n\n.htDropdownMenu .wtBorder {\n visibility: hidden;\n}\n\n.htDropdownMenu table tbody tr td {\n background: white;\n border-width: 0;\n padding: 4px 6px 0 6px;\n cursor: pointer;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.htDropdownMenu table tbody tr td:first-child {\n border: 0;\n}\n\n.htDropdownMenu table tbody tr td.htDimmed {\n font-style: normal;\n color: #323232;\n}\n\n.htDropdownMenu table tbody tr td.current,\n.htDropdownMenu table tbody tr td.zeroclipboard-is-hover {\n background: #e9e9e9;\n}\n\n.htDropdownMenu table tbody tr td.htSeparator {\n border-top: 1px solid #e6e6e6;\n height: 0;\n padding: 0;\n cursor: default;\n}\n\n.htDropdownMenu table tbody tr td.htDisabled {\n color: #999;\n}\n\n.htDropdownMenu table tbody tr td.htDisabled:hover {\n background: #fff;\n color: #999;\n cursor: default;\n}\n\n.htDropdownMenu:not(.htGhostTable) table tbody tr.htHidden {\n display: none;\n}\n\n.htDropdownMenu table tbody tr td .htItemWrapper {\n margin-left: 10px;\n margin-right: 10px;\n}\n\n.htDropdownMenu table tbody tr td div span.selected {\n margin-top: -2px;\n position: absolute;\n left: 4px;\n}\n\n.htDropdownMenu .ht_master .wtHolder {\n overflow: hidden;\n}\n\n/* Column's number position */\n.handsontable span.colHeader.columnSorting::after {\n /* Centering start */\n top: 50%;\n margin-top: -2px; /* Two extra pixels (-2 instead of -4) for purpose of proper positioning of numeric indicators, when `font-size` set to default */\n /* Centering end */\n\n position: absolute;\n right: -15px;\n padding-left: 5px; ; /* For purpose of continuous mouse over experience, when moving between the `::before` and the `::after` elements */\n\n font-size: 8px;\n height: 8px;\n line-height: 1.1;\n text-decoration: underline; /* Workaround for IE9 - IE11 */\n}\n\n/* Workaround for IE9 - IE11, https://stackoverflow.com/a/21902566, https://stackoverflow.com/a/32120247 */\n.handsontable span.colHeader.columnSorting::after {\n text-decoration: none;\n}\n\n/* We support up to 7 numeric indicators, describing order of column in sorted columns queue */\n.handsontable span.colHeader.columnSorting[class^=\"sort-\"]::after,\n.handsontable span.colHeader.columnSorting[class*=\" sort-\"]::after {\n content: \"+\"\n}\n\n.handsontable span.colHeader.columnSorting.sort-1::after {\n content: '1';\n}\n\n.handsontable span.colHeader.columnSorting.sort-2::after {\n content: '2';\n}\n\n.handsontable span.colHeader.columnSorting.sort-3::after {\n content: '3';\n}\n\n.handsontable span.colHeader.columnSorting.sort-4::after {\n content: '4';\n}\n\n.handsontable span.colHeader.columnSorting.sort-5::after {\n content: '5';\n}\n\n.handsontable span.colHeader.columnSorting.sort-6::after {\n content: '6';\n}\n\n.handsontable span.colHeader.columnSorting.sort-7::after {\n content: '7';\n}\n\n/* Drop-down menu widens header by 5 pixels, sort sequence numbers won't overlap the icon; mainly for the IE9+ */\n.htGhostTable th div button.changeType + span.colHeader.columnSorting:not(.indicatorDisabled) {\n padding-right: 5px;\n}\n\n/*!\n * Handsontable Filters\n */\n\n/* Conditions menu */\n.htFiltersConditionsMenu:not(.htGhostTable) {\n display: none;\n position: absolute;\n z-index: 1070;\n}\n\n.htFiltersConditionsMenu .ht_clone_top,\n.htFiltersConditionsMenu .ht_clone_left,\n.htFiltersConditionsMenu .ht_clone_corner {\n display: none;\n}\n\n.htFiltersConditionsMenu table.htCore {\n border: 1px solid #bbb;\n border-bottom-width: 2px;\n border-right-width: 2px;\n}\n\n.htFiltersConditionsMenu .wtBorder {\n visibility: hidden;\n}\n\n.htFiltersConditionsMenu table tbody tr td {\n background: white;\n border-width: 0;\n padding: 4px 6px 0 6px;\n cursor: pointer;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.htFiltersConditionsMenu table tbody tr td:first-child {\n border: 0;\n}\n\n.htFiltersConditionsMenu table tbody tr td.htDimmed {\n font-style: normal;\n color: #323232;\n}\n\n.htFiltersConditionsMenu table tbody tr td.current,\n.htFiltersConditionsMenu table tbody tr td.zeroclipboard-is-hover {\n background: #e9e9e9;\n}\n\n.htFiltersConditionsMenu table tbody tr td.htSeparator {\n border-top: 1px solid #e6e6e6;\n height: 0;\n padding: 0;\n}\n\n.htFiltersConditionsMenu table tbody tr td.htDisabled {\n color: #999;\n}\n\n.htFiltersConditionsMenu table tbody tr td.htDisabled:hover {\n background: #fff;\n color: #999;\n cursor: default;\n}\n\n.htFiltersConditionsMenu table tbody tr td .htItemWrapper {\n margin-left: 10px;\n margin-right: 10px;\n}\n\n.htFiltersConditionsMenu table tbody tr td div span.selected {\n margin-top: -2px;\n position: absolute;\n left: 4px;\n}\n\n.htFiltersConditionsMenu .ht_master .wtHolder {\n overflow: hidden;\n}\n\n.handsontable .htMenuFiltering {\n border-bottom: 1px dotted #ccc;\n height: 135px;\n overflow: hidden;\n}\n\n.handsontable .ht_master table td.htCustomMenuRenderer {\n background-color: #fff;\n cursor: auto;\n}\n\n/* Menu label */\n.handsontable .htFiltersMenuLabel {\n font-size: 0.75em;\n}\n\n/* Component action bar */\n.handsontable .htFiltersMenuActionBar {\n text-align: center;\n padding-top: 10px;\n padding-bottom: 3px;\n}\n\n/* Component filter by conditional */\n.handsontable .htFiltersMenuCondition.border {\n border-bottom: 1px dotted #ccc !important;\n}\n.handsontable .htFiltersMenuCondition .htUIInput {\n padding: 0 0 5px 0;\n}\n\n/* Component filter by value */\n.handsontable .htFiltersMenuValue {\n border-bottom: 1px dotted #ccc !important;\n}\n.handsontable .htFiltersMenuValue .htUIMultipleSelectSearch {\n padding: 0;\n}\n.handsontable .htFiltersMenuCondition .htUIInput input,\n.handsontable .htFiltersMenuValue .htUIMultipleSelectSearch input {\n font-family: inherit;\n font-size: 0.75em;\n padding: 4px;\n box-sizing: border-box;\n width: 100%;\n}\n\n.htUIMultipleSelect .ht_master .wtHolder {\n overflow-y: scroll;\n}\n\n.handsontable .htFiltersActive .changeType {\n border: 1px solid #509272;\n color: #18804e;\n background-color: #d2e0d9;\n}\n\n.handsontable .htUISelectAll {\n margin-right: 10px;\n}\n\n.handsontable .htUIClearAll, .handsontable .htUISelectAll {\n display: inline-block;\n}\n\n.handsontable .htUIClearAll a, .handsontable .htUISelectAll a {\n color: #3283D8;\n font-size: 0.75em;\n}\n\n.handsontable .htUISelectionControls {\n text-align: right;\n}\n\n.handsontable .htCheckboxRendererInput {\n margin: 0 5px 0 0;\n vertical-align: middle;\n height: 1em;\n}\n\n/* UI elements */\n/* Input */\n.handsontable .htUIInput {\n padding: 3px 0 7px 0;\n position: relative;\n text-align: center;\n}\n.handsontable .htUIInput input {\n border-radius: 2px;\n border: 1px solid #d2d1d1;\n}\n.handsontable .htUIInput input:focus {\n outline: 0;\n}\n.handsontable .htUIInputIcon {\n position: absolute;\n}\n\n/* Button */\n.handsontable .htUIInput.htUIButton {\n cursor: pointer;\n display: inline-block;\n}\n.handsontable .htUIInput.htUIButton input {\n background-color: #eee;\n color: #000;\n cursor: pointer;\n font-family: inherit;\n font-size: 0.7em;\n font-weight: bold;\n height: 19px;\n min-width: 64px;\n}\n.handsontable .htUIInput.htUIButton input:hover {\n border-color: #b9b9b9;\n}\n\n.handsontable .htUIInput.htUIButtonOK {\n margin-right: 10px;\n}\n\n.handsontable .htUIInput.htUIButtonOK input {\n background-color: #0f9d58;\n border-color: #18804e;\n color: #fff;\n}\n.handsontable .htUIInput.htUIButtonOK input:hover {\n border-color: #1a6f46;\n}\n\n/* Select */\n.handsontable .htUISelect {\n cursor: pointer;\n margin-bottom: 7px;\n position: relative;\n}\n.handsontable .htUISelectCaption {\n background-color: #e8e8e8;\n border-radius: 2px;\n border: 1px solid #d2d1d1;\n font-family: inherit;\n font-size: 0.7em;\n font-weight: bold;\n padding: 3px 20px 3px 10px;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n.handsontable .htUISelectCaption:hover {\n background-color: #e8e8e8;\n border: 1px solid #b9b9b9;\n}\n.handsontable .htUISelectDropdown:after {\n content: '\\25B2';\n font-size: 7px;\n position: absolute;\n right: 10px;\n top: 0;\n}\n.handsontable .htUISelectDropdown:before {\n content: '\\25BC';\n font-size: 7px;\n position: absolute;\n right: 10px;\n top: 8px;\n}\n\n/* SelectMultiple */\n.handsontable .htUIMultipleSelect .handsontable .htCore {\n border: none;\n}\n.handsontable .htUIMultipleSelect .handsontable .htCore td:hover {\n background-color: #F5F5F5;\n}\n\n.handsontable .htUIMultipleSelectSearch input {\n border-radius: 2px;\n border: 1px solid #d2d1d1;\n padding: 3px;\n}\n\n.handsontable .htUIRadio {\n display: inline-block;\n margin-right: 5px;\n height: 100%;\n}\n\n.handsontable .htUIRadio:last-child {\n margin-right: 0;\n}\n\n.handsontable .htUIRadio > input[type=radio] {\n margin-right: 0.5ex;\n}\n\n.handsontable .htUIRadio label {\n vertical-align: middle;\n}\n\n.handsontable .htFiltersMenuOperators {\n padding-bottom: 5px;\n}\n\n.handsontable.ganttChart tr:first-child th div.relative {\n padding-right: 21px;\n}\n.handsontable.ganttChart .colHeader {\n display: block;\n}\n.handsontable.ganttChart td.rangeBar {\n background: #48b703;\n border-right-width: 0;\n position: relative;\n -webkit-box-shadow: inset 0 3px 0 #ffffff;\n -moz-box-shadow: inset 0 3px 0 #ffffff;\n box-shadow: inset 0 3px 0 #ffffff;\n}\n.handsontable.ganttChart td.rangeBar.last {\n border-right-width: 1px;\n}\n.handsontable.ganttChart td.rangeBar.area {\n background: #7EC481;\n}\n.handsontable.ganttChart td.rangeBar.partial {\n background: #8edf5a;\n}\n.handsontable.ganttChart td.rangeBar.area.partial {\n background: #A1D8AD;\n}\n\n.handsontable thead th.hiddenHeader:not(:first-of-type) {\n display: none;\n}\n\n.handsontable th.ht_nestingLevels {\n text-align: left;\n padding-left: 7px;\n}\n\n.handsontable th div.ht_nestingLevels {\n display: inline-block;\n position: absolute;\n left: 11px;\n}\n\n.handsontable.innerBorderLeft th div.ht_nestingLevels,\n.handsontable.innerBorderLeft ~ .handsontable th div.ht_nestingLevels {\n right: 10px;\n}\n\n.handsontable th span.ht_nestingLevel {\n display: inline-block;\n}\n\n.handsontable th span.ht_nestingLevel_empty {\n display: inline-block;\n width: 10px;\n height: 1px;\n float: left;\n}\n\n.handsontable th span.ht_nestingLevel::after {\n content: \"\\2510\";\n font-size: 9px;\n display: inline-block;\n position: relative;\n bottom: 3px;\n}\n\n\n.handsontable th div.ht_nestingButton {\n display: inline-block;\n position: absolute;\n right: -2px;\n cursor: pointer;\n}\n\n.handsontable th div.ht_nestingButton.ht_nestingExpand::after {\n content: \"\\002B\";\n}\n\n.handsontable th div.ht_nestingButton.ht_nestingCollapse::after {\n content: \"\\002D\";\n}\n\n.handsontable.innerBorderLeft th div.ht_nestingButton,\n.handsontable.innerBorderLeft ~ .handsontable th div.ht_nestingButton {\n right: 0;\n}\n/*\n * Handsontable HiddenColumns\n */\n.handsontable th.beforeHiddenColumn {\n position: relative;\n}\n\n.handsontable th.beforeHiddenColumn::after,\n.handsontable th.afterHiddenColumn::before {\n color: #bbb;\n position: absolute;\n top: 50%;\n font-size: 5pt;\n transform: translateY(-50%);\n}\n\n.handsontable th.afterHiddenColumn {\n position: relative;\n}\n.handsontable th.beforeHiddenColumn::after {\n right: 1px;\n content: '\\25C0';\n}\n.handsontable th.afterHiddenColumn::before {\n left: 1px;\n content: '\\25B6';\n}\n\n.handsontable td.firstVisibleColumn,\n.handsontable th.firstVisibleColumn {\n border-left: 1px solid #CCC;\n}\n\n/*!\n * Handsontable HiddenRows\n */\n.handsontable th.beforeHiddenRow::before,\n.handsontable th.afterHiddenRow::after {\n color: #bbb;\n font-size: 6pt;\n line-height: 6pt;\n position: absolute;\n left: 2px;\n}\n\n.handsontable th.beforeHiddenRow,\n.handsontable th.afterHiddenRow {\n position: relative;\n}\n\n.handsontable th.beforeHiddenRow::before {\n content: '\\25B2';\n bottom: 2px;\n}\n\n.handsontable th.afterHiddenRow::after {\n content: '\\25BC';\n top: 2px;\n}\n.handsontable.ht__selection--rows tbody th.beforeHiddenRow.ht__highlight:before,\n.handsontable.ht__selection--rows tbody th.afterHiddenRow.ht__highlight:after {\n color: #eee;\n}\n.handsontable td.afterHiddenRow.firstVisibleRow,\n.handsontable th.afterHiddenRow.firstVisibleRow {\n border-top: 1px solid #CCC;\n}\n\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-249.6ca19da539a8ed1a.css.map.gz b/_static/prefix-249.6ca19da539a8ed1a.css.map.gz new file mode 100644 index 0000000..4164ce9 Binary files /dev/null and b/_static/prefix-249.6ca19da539a8ed1a.css.map.gz differ diff --git a/_static/prefix-294.986bf74bfa4ccbd4.css b/_static/prefix-294.986bf74bfa4ccbd4.css new file mode 100644 index 0000000..9a4df80 --- /dev/null +++ b/_static/prefix-294.986bf74bfa4ccbd4.css @@ -0,0 +1,2 @@ +.selectwidthauto{display:inline-block!important;margin:5px;width:auto!important}input.input-validation-error{border:1px solid #e80c4d}.dark-mode .fillintheblank_section input[type=text]{background-color:#333;color:unset}.ptx-runestone-container .fitb-feedback{margin-bottom:0;margin-top:10px}.ptx-runestone-container .fitb-feedback:empty{margin-top:0} +/*# sourceMappingURL=prefix-294.986bf74bfa4ccbd4.css.map*/ \ No newline at end of file diff --git a/_static/prefix-294.986bf74bfa4ccbd4.css.gz b/_static/prefix-294.986bf74bfa4ccbd4.css.gz new file mode 100644 index 0000000..787b2db Binary files /dev/null and b/_static/prefix-294.986bf74bfa4ccbd4.css.gz differ diff --git a/_static/prefix-294.986bf74bfa4ccbd4.css.map b/_static/prefix-294.986bf74bfa4ccbd4.css.map new file mode 100644 index 0000000..08f6d11 --- /dev/null +++ b/_static/prefix-294.986bf74bfa4ccbd4.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-294.986bf74bfa4ccbd4.css","mappings":"AAAA,iBAEK,8BAAgC,CAChC,UAAW,CAFX,oBAGL,CAEA,6BACI,wBACJ,CAGA,oDAEI,qBAAsB,CADtB,WAEJ,CAEA,wCAEI,eAAgB,CADhB,eAEJ,CAEA,8CACI,YACJ","sources":["webpack://WebComponents/./runestone/fitb/css/fitb.css"],"sourcesContent":[".selectwidthauto {\n width:auto !important;\n display: inline-block !important;\n margin: 5px;\n}\n\ninput.input-validation-error {\n border: 1px solid #e80c4d;\n}\n\n\n.dark-mode .fillintheblank_section input[type=\"text\"] {\n color: unset;\n background-color: #333;\n}\n\n.ptx-runestone-container .fitb-feedback {\n margin-top: 10px;\n margin-bottom: 0;\n}\n\n.ptx-runestone-container .fitb-feedback:empty {\n margin-top: 0;\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-294.986bf74bfa4ccbd4.css.map.gz b/_static/prefix-294.986bf74bfa4ccbd4.css.map.gz new file mode 100644 index 0000000..c6b8580 Binary files /dev/null and b/_static/prefix-294.986bf74bfa4ccbd4.css.map.gz differ diff --git a/_static/prefix-350.dbca9271f6e2dfbf.css b/_static/prefix-350.dbca9271f6e2dfbf.css new file mode 100644 index 0000000..322a294 --- /dev/null +++ b/_static/prefix-350.dbca9271f6e2dfbf.css @@ -0,0 +1,2 @@ +.mchoice label p{display:inline;font-weight:400!important}.mchoice label pre{font-weight:400}.mchoice fieldset{margin-bottom:.5em}.mchoice fieldset legend{font-size:small;margin-bottom:.5em}.multiplechoice_section label>.para,.timedAssessment .mchoice label>.para{display:inline}label.mchoice-option{display:block}.ptx-runestone-container input.mchoice-input{margin-right:.5em;vertical-align:top}.mchoice .alert{margin-bottom:0;margin-top:10px} +/*# sourceMappingURL=prefix-350.dbca9271f6e2dfbf.css.map*/ \ No newline at end of file diff --git a/_static/prefix-350.dbca9271f6e2dfbf.css.gz b/_static/prefix-350.dbca9271f6e2dfbf.css.gz new file mode 100644 index 0000000..159cd29 Binary files /dev/null and b/_static/prefix-350.dbca9271f6e2dfbf.css.gz differ diff --git a/_static/prefix-350.dbca9271f6e2dfbf.css.map b/_static/prefix-350.dbca9271f6e2dfbf.css.map new file mode 100644 index 0000000..81344f0 --- /dev/null +++ b/_static/prefix-350.dbca9271f6e2dfbf.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-350.dbca9271f6e2dfbf.css","mappings":"AAAA,iBACI,cAAe,CACf,yBACJ,CAEA,mBACI,eACJ,CAEA,kBACI,kBACJ,CAEA,yBACI,eAAgB,CAChB,kBACJ,CAQA,0EACI,cACJ,CAEA,qBACI,aACJ,CAEA,6CAEI,iBAAmB,CADnB,kBAEJ,CAEA,gBAEI,eAAgB,CADhB,eAEJ","sources":["webpack://WebComponents/./runestone/mchoice/css/mchoice.css"],"sourcesContent":[".mchoice label p {\n display: inline;\n font-weight: normal !important;\n}\n\n.mchoice label pre {\n font-weight: normal;\n}\n\n.mchoice fieldset {\n margin-bottom: 0.5em;\n}\n\n.mchoice fieldset legend {\n font-size: small;\n margin-bottom: 0.5em;\n}\n\n.multiplechoice_section label > .para {\n display: inline;\n}\n\n/* The timed assessment strips off the container with the .multiplechoice_section class,\n so we need to apply the same styles to the .timedAssessment class */\n.timedAssessment .mchoice label > .para {\n display: inline;\n}\n\nlabel.mchoice-option {\n display: block;\n}\n\n.ptx-runestone-container input.mchoice-input {\n vertical-align: top;\n margin-right: 0.5em;\n}\n\n.mchoice .alert {\n margin-top: 10px;\n margin-bottom: 0;\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-350.dbca9271f6e2dfbf.css.map.gz b/_static/prefix-350.dbca9271f6e2dfbf.css.map.gz new file mode 100644 index 0000000..59c36b9 Binary files /dev/null and b/_static/prefix-350.dbca9271f6e2dfbf.css.map.gz differ diff --git a/_static/prefix-380.67748940131a4a84.css b/_static/prefix-380.67748940131a4a84.css new file mode 100644 index 0000000..0b4a47e --- /dev/null +++ b/_static/prefix-380.67748940131a4a84.css @@ -0,0 +1,2 @@ +#component-preview{margin-right:20px;max-height:100%;overflow-y:scroll;padding-top:60px;position:fixed;right:0;top:0}.toggle-preview{background-color:azure;border:4px solid;border-radius:10px;box-shadow:10px 5px 5px gray;padding-top:10px} +/*# sourceMappingURL=prefix-380.67748940131a4a84.css.map*/ \ No newline at end of file diff --git a/_static/prefix-380.67748940131a4a84.css.map b/_static/prefix-380.67748940131a4a84.css.map new file mode 100644 index 0000000..ba3239f --- /dev/null +++ b/_static/prefix-380.67748940131a4a84.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-380.67748940131a4a84.css","mappings":"AAAA,mBACI,iBAAkB,CAGlB,eAAgB,CAChB,iBAAkB,CAElB,gBAAiB,CALjB,cAAe,CACf,OAAU,CAGV,KAEJ,CAEA,gBAGI,sBAAuB,CAFvB,gBAAiB,CACjB,kBAAmB,CAGnB,4BAA6B,CAD7B,gBAEJ","sources":["webpack://WebComponents/./runestone/selectquestion/css/selectquestion.css"],"sourcesContent":["#component-preview {\n margin-right: 20px;\n position: fixed;\n right: 0px;\n max-height: 100%;\n overflow-y: scroll;\n top: 0px;\n padding-top: 60px;\n}\n\n.toggle-preview {\n border: 4px solid;\n border-radius: 10px;\n background-color: azure;\n padding-top: 10px;\n box-shadow: 10px 5px 5px gray;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-380.67748940131a4a84.css.map.gz b/_static/prefix-380.67748940131a4a84.css.map.gz new file mode 100644 index 0000000..242fc37 Binary files /dev/null and b/_static/prefix-380.67748940131a4a84.css.map.gz differ diff --git a/_static/prefix-39.89cf817b9a35aeca.css b/_static/prefix-39.89cf817b9a35aeca.css new file mode 100644 index 0000000..3d4c1d0 --- /dev/null +++ b/_static/prefix-39.89cf817b9a35aeca.css @@ -0,0 +1,2 @@ +.ptx-runestone-container .parsons-container,.runestone-sphinx .parsons-container{clear:both}.ptx-runestone-container .parsons .sortable-code-container,.runestone-sphinx .parsons .sortable-code-container{text-align:center}.ptx-runestone-container .parsons .sortable-code-container:not(.block),.runestone-sphinx .parsons .sortable-code-container:not(.block){-webkit-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}.ptx-runestone-container .parsons .sortable-code,.runestone-sphinx .parsons .sortable-code{display:inline-block;margin:0 15px;padding-left:0;position:static;text-align:left;vertical-align:top}.ptx-runestone-container .parsons .answer,.ptx-runestone-container .parsons .answer1,.ptx-runestone-container .parsons .answer2,.ptx-runestone-container .parsons .answer3,.ptx-runestone-container .parsons .answer4,.ptx-runestone-container .parsons .source,.runestone-sphinx .parsons .answer,.runestone-sphinx .parsons .answer1,.runestone-sphinx .parsons .answer2,.runestone-sphinx .parsons .answer3,.runestone-sphinx .parsons .answer4,.runestone-sphinx .parsons .source{background-color:var(--questionBgColor,#efefff);border:1px solid var(--componentBorderColor,#efefff);font-size:100%;list-style:none;margin-left:0;padding-bottom:10px;padding-left:0;position:relative}.ptx-runestone-container .parsons .source,.runestone-sphinx .parsons .source{background-color:var(--questionBgColor,#efefff)}.ptx-runestone-container .parsons .answer,.runestone-sphinx .parsons .answer{background-color:var(--parsonsBgColor);border-color:var(--parsonsBorderColor)}.ptx-runestone-container .parsons .answer.incorrect,.runestone-sphinx .parsons .answer.incorrect{background-color:var(--parsonsIncorrectBgColor);border-color:var(--parsonsIncorrectBorderColor)}.ptx-runestone-container .parsons .answer.correct,.runestone-sphinx .parsons .answer.correct{background-color:var(--parsonsCorrectBgColor);border-color:var(--parsonsCorrectBorderColor)}.ptx-runestone-container .parsons .answer1,.runestone-sphinx .parsons .answer1{background:linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box;background-color:var(--parsonsBgColor);background-origin:padding-box;background-position:30px 0;background-size:1px 100%;border-color:var(--parsonsBorderColor)}.ptx-runestone-container .parsons .answer1.incorrect,.runestone-sphinx .parsons .answer1.incorrect{background:linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsIncorrectBgColor);background-origin:padding-box;background-position:30px 0;background-size:1px 100%;border-color:var(--parsonsIncorrectBorderColor)}.ptx-runestone-container .parsons .answer1.correct,.runestone-sphinx .parsons .answer1.correct{background:linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsCorrectBgColor);background-origin:padding-box;background-position:30px 0;background-size:1px 100%;border-color:var(--parsonsCorrectBorderColor)}.ptx-runestone-container .parsons .answer2,.runestone-sphinx .parsons .answer2{background:linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box;background-color:var(--parsonsBgColor);background-origin:padding-box,padding-box;background-position:30px 0,60px 0;background-size:1px 100%,1px 100%;border-color:var(--parsonsBorderColor)}.ptx-runestone-container .parsons .answer2.incorrect,.runestone-sphinx .parsons .answer2.incorrect{background:linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsIncorrectBgColor);background-origin:padding-box,padding-box;background-position:30px 0,60px 0;background-size:1px 100%,1px 100%;border-color:var(--parsonsIncorrectBorderColor)}.ptx-runestone-container .parsons .answer2.correct,.runestone-sphinx .parsons .answer2.correct{background:linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsCorrectBgColor);background-origin:padding-box,padding-box;background-position:30px 0,60px 0;background-size:1px 100%,1px 100%;border-color:var(--parsonsCorrectBorderColor)}.ptx-runestone-container .parsons .answer3,.runestone-sphinx .parsons .answer3{background:linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box;background-color:var(--parsonsBgColor);background-origin:padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0;background-size:1px 100%,1px 100%,1px 100%;border-color:var(--parsonsBorderColor)}.ptx-runestone-container .parsons .answer3.incorrect,.runestone-sphinx .parsons .answer3.incorrect{background:linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsIncorrectBgColor);background-origin:padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0;background-size:1px 100%,1px 100%,1px 100%;border-color:var(--parsonsIncorrectBorderColor)}.ptx-runestone-container .parsons .answer3.correct,.runestone-sphinx .parsons .answer3.correct{background:linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsCorrectBgColor);background-origin:padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0;background-size:1px 100%,1px 100%,1px 100%;border-color:var(--parsonsCorrectBorderColor)}.ptx-runestone-container .parsons .answer4,.runestone-sphinx .parsons .answer4{background:linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box;background-color:var(--parsonsBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsBorderColor)}.ptx-runestone-container .parsons .answer4.incorrect,.runestone-sphinx .parsons .answer4.incorrect{background:linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsIncorrectBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsIncorrectBorderColor)}.ptx-runestone-container .parsons .answer4.correct,.runestone-sphinx .parsons .answer4.correct{background:linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsCorrectBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsCorrectBorderColor)}.ptx-runestone-container .parsons .answer5,.runestone-sphinx .parsons .answer5{background:linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box;background-color:var(--parsonsBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0,150px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsBorderColor)}.ptx-runestone-container .parsons .answer5.incorrect,.runestone-sphinx .parsons .answer5.incorrect{background:linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsIncorrectBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0,150px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsIncorrectBorderColor)}.ptx-runestone-container .parsons .answer5.correct,.runestone-sphinx .parsons .answer5.correct{background:linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsCorrectBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0,150px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsCorrectBorderColor)}.ptx-runestone-container .parsons .answer6,.runestone-sphinx .parsons .answer6{background:linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsBorderColor),var(--parsonsBorderColor)) no-repeat border-box;background-color:var(--parsonsBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0,150px 0,180px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsBorderColor)}.ptx-runestone-container .parsons .answer6.incorrect,.runestone-sphinx .parsons .answer6.incorrect{background:linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsIncorrectBorderColor),var(--parsonsIncorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsIncorrectBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0,150px 0,180px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsIncorrectBorderColor)}.ptx-runestone-container .parsons .answer6.correct,.runestone-sphinx .parsons .answer6.correct{background:linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box,linear-gradient(var(--parsonsCorrectBorderColor),var(--parsonsCorrectBorderColor)) no-repeat border-box;background-color:var(--parsonsCorrectBgColor);background-origin:padding-box,padding-box,padding-box,padding-box;background-position:30px 0,60px 0,90px 0,120px 0,150px 0,180px 0;background-size:1px 100%,1px 100%,1px 100%,1px 100%;border-color:var(--parsonsCorrectBorderColor)}.ptx-runestone-container .parsons .block,.runestone-sphinx .parsons .block{background-color:var(--background,#efefef);border:1px solid #d3d3d3;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;cursor:move;margin-top:5px;overflow:hidden;padding:5px 10px;position:absolute}.ptx-runestone-container .parsons .block.disabled,.runestone-sphinx .parsons .block.disabled{opacity:.3}.ptx-runestone-container .parsons .block.down,.runestone-sphinx .parsons .block.down{border:2px solid #000;padding:4px 9px}.ptx-runestone-container .parsons .block.up,.runestone-sphinx .parsons .block.up{background-color:#fff;border:2px solid #000;box-shadow:3px 3px 4px #000;padding:4px 9px}.ptx-runestone-container .parsons,.runestone-sphinx .parsons{display:block}.ptx-runestone-container .parsons .block,.runestone-sphinx .parsons .block{clear:both;float:left}.ptx-runestone-container .parsons .sortable-code code,.runestone-sphinx .parsons .sortable-code code{background-color:transparent;clear:both;float:left;white-space:pre}.ptx-runestone-container .parsons .sortable-code code:empty,.runestone-sphinx .parsons .sortable-code code:empty{height:1.25em}.ptx-runestone-container .parsons .block p,.runestone-sphinx .parsons .block p{margin:0}.ptx-runestone-container .parsons .block,.ptx-runestone-container .parsons .block:after,.ptx-runestone-container .parsons .block:before,.runestone-sphinx .parsons .block,.runestone-sphinx .parsons .block:after,.runestone-sphinx .parsons .block:before{box-sizing:content-box}.ptx-runestone-container .parsons .indent1,.runestone-sphinx .parsons .indent1{margin-left:30px}.ptx-runestone-container .parsons .indent2,.runestone-sphinx .parsons .indent2{margin-left:60px}.ptx-runestone-container .parsons .indent3,.runestone-sphinx .parsons .indent3{margin-left:90px}.ptx-runestone-container .parsons .indent4,.runestone-sphinx .parsons .indent4{margin-left:120px}.ptx-runestone-container .parsons .indent5,.runestone-sphinx .parsons .indent5{margin-left:150px}.ptx-runestone-container .parsons .indent6,.runestone-sphinx .parsons .indent6{margin-left:180px}.ptx-runestone-container .parsons .indent7,.runestone-sphinx .parsons .indent7{margin-left:210px}.ptx-runestone-container .parsons .indent8,.runestone-sphinx .parsons .indent8{margin-left:240px}.ptx-runestone-container .parsons .correct,.runestone-sphinx .parsons .correct{background:none;background-color:var(--parsonsCorrectBgColor);border:1px solid #d6e9c6}.ptx-runestone-container .parsons .indentLeft,.ptx-runestone-container .parsons .indentRight,.runestone-sphinx .parsons .indentLeft,.runestone-sphinx .parsons .indentRight{background-color:#fff0b3;border:2px solid #fc0;padding:4px 9px}.ptx-runestone-container .parsons .indentLeft,.runestone-sphinx .parsons .indentLeft{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSI2MDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGZpbGw9IiNGQzAiIGQ9Ik0xMiAwSDB2NjAwaDEyVjMxMEwyIDMwMGwxMC0xMHoiLz48cGF0aCBkPSJtNSAzMDAgNy03di0zTDIgMzAwbDEwIDEwdi0zeiIvPjwvc3ZnPg==),url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSI2MDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Ik0xMCAzMDd2M0wwIDMwMGwxMC0xMHYzbC03IDd6Ii8+PHBhdGggZmlsbD0iI0ZDMCIgZD0iTTEyIDMwOXYtMThsLTkgOXoiLz48cGF0aCBmaWxsPSIjRkMwIiBkPSJNMTAgMGgydjYwMGgtMnoiLz48L3N2Zz4=);background-position:0,100%;background-repeat:no-repeat,no-repeat}.ptx-runestone-container .parsons .indentRight,.runestone-sphinx .parsons .indentRight{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSI2MDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Im05IDMwMC03LTd2LTNsMTAgMTAtMTAgMTB2LTN6Ii8+PHBhdGggZmlsbD0iI0ZDMCIgZD0ibTkgMzAwLTktOXYxOHoiLz48cGF0aCBmaWxsPSIjRkMwIiBkPSJNMCAwaDJ2NjAwSDB6Ii8+PC9zdmc+),url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSI2MDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGZpbGw9IiNGQzAiIGQ9Im0wIDI5MCAxMCAxMC0xMCAxMHYyOTBoMTJWMEgweiIvPjxwYXRoIGQ9Ik0wIDMwN3YzbDEwLTEwLTEwLTEwdjNsNyA3eiIvPjwvc3ZnPg==);background-position:0,100%;background-repeat:no-repeat,no-repeat}.ptx-runestone-container .parsons .incorrectPosition,.runestone-sphinx .parsons .incorrectPosition{background-color:#ffbaba;border:1px solid red}.ptx-runestone-container .parsons .paired,.runestone-sphinx .parsons .paired{background-color:transparent;border-color:#b8b8f2;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;border-style:solid;border-width:1px 11px;margin-top:5px;overflow:hidden;position:absolute}.ptx-runestone-container .parsons,.runestone-sphinx .parsons{border-left:0;border-radius:0;border-right:0}.ptx-runestone-container .parsons .parsons-text,.runestone-sphinx .parsons .parsons-text{margin-left:auto;margin-right:auto;max-width:var(--contentWidthRegular)}.ptx-runestone-container .parsons .parsons-img,.runestone-sphinx .parsons .parsons-img{display:inline-block;text-align:center;width:100%}.ptx-runestone-container .parsons .parsons-controls,.runestone-sphinx .parsons .parsons-controls{margin-left:auto;margin-right:auto;margin-top:10px;max-width:var(--contentWidthRegular);text-align:center}.ptx-runestone-container .parsons [role=tooltip],.runestone-sphinx .parsons [role=tooltip]{font-style:italic;margin:5px auto;max-width:var(--contentWidthRegular);padding:0 10px;text-align:center;top:0}.ptx-runestone-container .block-label,.runestone-sphinx .block-label{color:#7e7ee7;font-size:90%;vertical-align:top;white-space:pre}.ptx-runestone-container .right-label,.runestone-sphinx .right-label{padding:.2em 0 .3em .6em}.ptx-runestone-container .left-label,.runestone-sphinx .left-label{padding:.2em .6em .3em 0}.ptx-runestone-container .labels,.runestone-sphinx .labels{display:inline-block;padding-top:2px;vertical-align:top}.ptx-runestone-container .runestone .lines,.runestone-sphinx .runestone .lines{align-self:left;display:inline-block}.ptx-runestone-container .border_left,.runestone-sphinx .border_left{border-left:1px solid #b0b0b0}.ptx-runestone-container .block,.runestone-sphinx .block{align-content:stretch;align-items:stretch;display:flex}.ptx-runestone-container .cd_section,.ptx-runestone-container .parsons,.ptx-runestone-container .parsons .sortable-code-container,.runestone-sphinx .cd_section,.runestone-sphinx .parsons,.runestone-sphinx .parsons .sortable-code-container{max-width:none}.ptx-runestone-container #timed_Test .pagination,.runestone-sphinx #timed_Test .pagination{margin:5px 0}.ptx-runestone-container .parsons .block code,.runestone-sphinx .parsons .block code{color:#000}.ptx-runestone-container .parsons .placeholder-block.disabled.block,.runestone-sphinx .parsons .placeholder-block.disabled.block{background-color:#fff;border-style:dashed;font-style:italic;opacity:1;padding:20px 10px}.ptx-runestone-container .parsons .settled-block.disabled.block,.runestone-sphinx .parsons .settled-block.disabled.block{background-color:#afe1af;border:1px solid #000;opacity:1}.ptx-runestone-container .parsons .settled-block.disabled.block:hover .settled-tooltip,.runestone-sphinx .parsons .settled-block.disabled.block:hover .settled-tooltip{opacity:1;visibility:visible}.ptx-runestone-container .parsons .settled-block.disabled.block .settled-tooltip,.runestone-sphinx .parsons .settled-block.disabled.block .settled-tooltip{background-color:#555;border-radius:6px;color:#fff;font-size:.75rem;left:100%;opacity:0;padding:2px 8px;position:sticky;text-align:center;transition:opacity .6s;vertical-align:middle;visibility:hidden;z-index:1}.ptx-runestone-container .parsons .settled-block .block-label,.runestone-sphinx .parsons .settled-block .block-label{color:transparent}.ptx-runestone-container .parsons .alert,.runestone-sphinx .parsons .alert{margin-bottom:0;margin-top:10px}.ptx-runestone-container .parsons .placeholder-block .lines,.ptx-runestone-container .parsons .placeholder-block.hide,.ptx-runestone-container .placeholder-block .labels,.runestone-sphinx .parsons .placeholder-block .lines,.runestone-sphinx .parsons .placeholder-block.hide,.runestone-sphinx .placeholder-block .labels{display:none}.ptx-runestone-container .settled-block .labels .block-label,.runestone-sphinx .settled-block .labels .block-label{color:transparent}:root.dark-mode .ptx-runestone-container .parsons .block:has(code[class*=language-]){background:#141414}.prettyprint{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun{color:#660}.pln{color:#000}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec{color:#606}pre.prettyprint{border:1px solid #888;padding:2px}@media print{.str{color:#060}.kwd{color:#006;font-weight:700}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:700}.lit{color:#044}.pun{color:#440}.pln{color:#000}.tag{color:#006;font-weight:700}.atn{color:#404}.atv{color:#060}}} +/*# sourceMappingURL=prefix-39.89cf817b9a35aeca.css.map*/ \ No newline at end of file diff --git a/_static/prefix-39.89cf817b9a35aeca.css.gz b/_static/prefix-39.89cf817b9a35aeca.css.gz new file mode 100644 index 0000000..e970e1e Binary files /dev/null and b/_static/prefix-39.89cf817b9a35aeca.css.gz differ diff --git a/_static/prefix-39.89cf817b9a35aeca.css.map b/_static/prefix-39.89cf817b9a35aeca.css.map new file mode 100644 index 0000000..dd7b2ee --- /dev/null +++ b/_static/prefix-39.89cf817b9a35aeca.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-39.89cf817b9a35aeca.css","mappings":"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","sources":["webpack://WebComponents/./runestone/parsons/css/parsons.less","webpack://WebComponents/./runestone/parsons/css/parsons.css","webpack://WebComponents/./runestone/parsons/css/prettify.css"],"sourcesContent":[".ptx-runestone-container,.runestone-sphinx {\n @import (less) url(\"./parsons.css\");\n\n}\n\n/* make entire block background match background of code */\n:root.dark-mode {\n .ptx-runestone-container .parsons .block:has(code[class*=language-]) {\n background: hsl(0, 0%, 8%);\n }\n}",".parsons-container {\n clear: both;\n}\n\n.parsons .sortable-code-container {\n text-align: center;\n}\n.parsons .sortable-code-container:not(.block) {\n /* Remove text highlighting in widget */\n -webkit-user-select: none;\n -moz-user-select: -moz-none;\n -ms-user-select: none;\n user-select: none;\n}\n.parsons .sortable-code {\n position: static;\n padding-left: 0px;\n margin: 0px 15px;\n display: inline-block;\n text-align: left;\n vertical-align: top;\n}\n.parsons .source,\n.parsons .answer,\n.parsons .answer1,\n.parsons .answer2,\n.parsons .answer3,\n.parsons .answer4 {\n position: relative;\n font-size: 100%;\n list-style: none;\n background-color: var(--questionBgColor, #efefff);\n padding-bottom: 10px;\n padding-left: 0;\n margin-left: 0;\n border: 1px solid var(--componentBorderColor, #efefff);\n}\n.parsons .source {\n background-color: var(--questionBgColor, #efefff);\n}\n.parsons .answer {\n background-color: var(--parsonsBgColor);\n border-color: var(--parsonsBorderColor);\n}\n.parsons .answer.incorrect {\n background-color: var(--parsonsIncorrectBgColor);\n border-color: var(--parsonsIncorrectBorderColor);\n}\n.parsons .answer.correct {\n background-color: var(--parsonsCorrectBgColor);\n border-color: var(--parsonsCorrectBorderColor);\n}\n.parsons .answer1 {\n background: linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box;\n background-size: 1px 100%;\n background-position: 30px 0;\n background-origin: padding-box;\n background-color: var(--parsonsBgColor);\n border-color: var(--parsonsBorderColor);\n}\n.parsons .answer1.incorrect {\n background: linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%;\n background-position: 30px 0;\n background-origin: padding-box;\n background-color: var(--parsonsIncorrectBgColor);\n border-color: var(--parsonsIncorrectBorderColor);\n}\n.parsons .answer1.correct {\n background: linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%;\n background-position: 30px 0;\n background-origin: padding-box;\n background-color: var(--parsonsCorrectBgColor);\n border-color: var(--parsonsCorrectBorderColor);\n}\n.parsons .answer2 {\n background: linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0;\n background-origin: padding-box, padding-box;\n background-color: var(--parsonsBgColor);\n border-color: var(--parsonsBorderColor);\n}\n.parsons .answer2.incorrect {\n background: linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0;\n background-origin: padding-box, padding-box;\n background-color: var(--parsonsIncorrectBgColor);\n border-color: var(--parsonsIncorrectBorderColor);\n}\n.parsons .answer2.correct {\n background: linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0;\n background-origin: padding-box, padding-box;\n background-color: var(--parsonsCorrectBgColor);\n border-color: var(--parsonsCorrectBorderColor);\n}\n.parsons .answer3 {\n background: linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0;\n background-origin: padding-box, padding-box, padding-box;\n background-color: var(--parsonsBgColor);\n border-color: var(--parsonsBorderColor);\n}\n.parsons .answer3.incorrect {\n background: linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0;\n background-origin: padding-box, padding-box, padding-box;\n background-color: var(--parsonsIncorrectBgColor);\n border-color: var(--parsonsIncorrectBorderColor);\n}\n.parsons .answer3.correct {\n background: linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0;\n background-origin: padding-box, padding-box, padding-box;\n background-color: var(--parsonsCorrectBgColor);\n border-color: var(--parsonsCorrectBorderColor);\n}\n.parsons .answer4 {\n background: linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsBgColor);\n border-color: var(--parsonsBorderColor);\n}\n.parsons .answer4.incorrect {\n background: linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsIncorrectBgColor);\n border-color: var(--parsonsIncorrectBorderColor);\n}\n.parsons .answer4.correct {\n background: linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsCorrectBgColor);\n border-color: var(--parsonsCorrectBorderColor);\n}\n /* The following styles are for the 5th and 6th indentation levels, if applicable */\n.parsons .answer5 {\n background: linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0, 150px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsBgColor);\n border-color: var(--parsonsBorderColor);\n}\n.parsons .answer5.incorrect {\n background: linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0, 150px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsIncorrectBgColor);\n border-color: var(--parsonsIncorrectBorderColor);\n}\n.parsons .answer5.correct {\n background: linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0, 150px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsCorrectBgColor);\n border-color: var(--parsonsCorrectBorderColor);\n}\n.parsons .answer6 {\n background: linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsBorderColor), var(--parsonsBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0, 150px 0, 180px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsBgColor);\n border-color: var(--parsonsBorderColor);\n}\n.parsons .answer6.incorrect {\n background: linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsIncorrectBorderColor), var(--parsonsIncorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0, 150px 0, 180px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsIncorrectBgColor);\n border-color: var(--parsonsIncorrectBorderColor);\n}\n.parsons .answer6.correct {\n background: linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box,\n linear-gradient(var(--parsonsCorrectBorderColor), var(--parsonsCorrectBorderColor)) no-repeat border-box;\n background-size: 1px 100%, 1px 100%, 1px 100%, 1px 100%;\n background-position: 30px 0, 60px 0, 90px 0, 120px 0, 150px 0, 180px 0;\n background-origin: padding-box, padding-box, padding-box, padding-box;\n background-color: var(--parsonsCorrectBgColor);\n border-color: var(--parsonsCorrectBorderColor);\n}\n.parsons .block {\n position: absolute;\n -moz-border-radius: 10px;\n -webkit-border-radius: 10px;\n border-radius: 10px;\n background-color: var(--background, #efefef);\n border: 1px solid #d3d3d3;\n padding: 5px 10px;\n margin-top: 5px;\n overflow: hidden;\n cursor: move;\n}\n.parsons .block.disabled {\n opacity: 0.3;\n}\n.parsons .block.down {\n border: 2px solid black;\n padding: 4px 9px;\n}\n.parsons .block.up {\n border: 2px solid black;\n padding: 4px 9px;\n background-color: white;\n box-shadow: 3px 3px 4px black;\n}\n.parsons {\n display: block;\n}\n.parsons .block {\n clear: both;\n float: left;\n /*background-color: transparent;*/\n}\n\n.parsons .sortable-code code {\n clear: both;\n float: left;\n background-color: transparent;\n white-space: pre;\n}\n\n.parsons .sortable-code code:empty {\n height: 1.25em; /* force some height for empty lines */\n}\n\n.parsons .block p {\n margin: 0;\n}\n.parsons .block,\n.parsons .block:before,\n.parsons .block:after {\n box-sizing: content-box;\n}\n.parsons .indent1 {\n margin-left: 30px;\n}\n.parsons .indent2 {\n margin-left: 60px;\n}\n.parsons .indent3 {\n margin-left: 90px;\n}\n.parsons .indent4 {\n margin-left: 120px;\n}\n.parsons .indent5 {\n margin-left: 150px;\n}\n.parsons .indent6 {\n margin-left: 180px;\n}\n.parsons .indent7 {\n margin-left: 210px;\n}\n.parsons .indent8 {\n margin-left: 240px;\n}\n.parsons .correct {\n border: 1px solid #d6e9c6;\n background: none;\n background-color: var(--parsonsCorrectBgColor);\n}\n.parsons .indentLeft,\n.parsons .indentRight {\n border: 2px solid #ffcc00;\n padding: 4px 9px;\n background-color: #fff0b3;\n}\n.parsons .indentLeft {\n background-image: url(\"./images/parsons-ll.svg\"),\n url(\"./images/parsons-rl.svg\");\n background-repeat: no-repeat, no-repeat;\n background-position: left center, right center;\n}\n.parsons .indentRight {\n background-image: url(\"./images/parsons-lr.svg\"),\n url(\"./images/parsons-rr.svg\");\n background-repeat: no-repeat, no-repeat;\n background-position: left center, right center;\n}\n.parsons .incorrectPosition {\n background-color: #ffbaba;\n border: 1px solid red;\n}\n.parsons .paired {\n position: absolute;\n -moz-border-radius: 10px;\n -webkit-border-radius: 10px;\n border-radius: 10px;\n background-color: transparent;\n border-left: 11px solid #b8b8f2;\n border-right: 11px solid #b8b8f2;\n border-top: 1px solid #b8b8f2;\n border-bottom: 1px solid #b8b8f2;\n margin-top: 5px;\n overflow: hidden;\n}\n.parsons {\n border-left: 0;\n border-right: 0;\n border-radius: 0;\n}\n.parsons .parsons-text {\n max-width: var(--contentWidthRegular);\n margin-left: auto;\n margin-right: auto;\n}\n\n.parsons .parsons-img {\n display: inline-block;\n text-align: center;\n width: 100%;\n}\n\n.parsons .parsons-controls {\n max-width: var(--contentWidthRegular);\n margin-left: auto;\n margin-right: auto;\n text-align: center;\n margin-top: 10px;\n}\n\n.parsons [role=\"tooltip\"] {\n max-width: var(--contentWidthRegular);\n margin-left: auto;\n margin-right: auto;\n margin-top: 5px;\n margin-bottom: 5px;\n padding: 0px 10px;\n top: 0;\n text-align: center;\n font-style: italic;\n}\n\n.block-label {\n font-size: 90%;\n color: #7e7ee7;\n vertical-align: top;\n white-space: pre;\n}\n.right-label {\n padding: 0.2em 0em 0.3em 0.6em;\n}\n.left-label {\n padding: 0.2em 0.6em 0.3em 0em;\n}\n\n.labels {\n padding-top: 2px;\n display: inline-block;\n vertical-align: top;\n}\n\n.runestone .lines {\n display: inline-block;\n align-self: left;\n}\n\n.border_left {\n border-left: 1px solid #b0b0b0;\n}\n\n.block {\n display: flex;\n align-items: stretch;\n align-content: stretch;\n}\n\n.parsons,\n.parsons .sortable-code-container,\n.cd_section {\n max-width: none;\n}\n\n#timed_Test .pagination {\n margin: 5px 0;\n}\n\n/* override red from bootstrap */\n.parsons .block code {\n color: black;\n}\n\n/* CodeTailor-related CSS for Parsons START */\n.parsons .placeholder-block.disabled.block {\n font-style: italic;\n background-color: white;\n border-style: dashed;\n padding: 20px 10px;\n opacity: 1;\n}\n\n.parsons .settled-block.disabled.block {\n border: 1px solid black;\n background-color: #afe1af;\n opacity: 1;\n}\n\n.parsons .settled-block.disabled.block:hover .settled-tooltip {\n visibility: visible;\n opacity: 1;\n}\n\n.parsons .settled-block.disabled.block .settled-tooltip {\n visibility: hidden;\n position: sticky;\n background-color: #555;\n font-size: 0.75rem;\n color: #fff;\n text-align: center;\n padding: 2px 8px;\n border-radius: 6px;\n z-index: 1;\n opacity: 0;\n transition: opacity .6s;\n left: 100%; \n vertical-align: middle; \n}\n.parsons .settled-block .block-label {\n color: transparent;\n}\n\n.parsons .alert {\n margin-top: 10px;\n margin-bottom: 0;\n}\n\n\n.parsons .placeholder-block .lines {\n display: none;\n}\n\n.parsons .placeholder-block.hide {\n display: none;\n}\n\n\n.placeholder-block .labels {\n display: none;\n}\n\n.settled-block .labels .block-label {\n color:transparent;\n}\n/* CodeTailor-related CSS for Parsons END */",".prettyprint {\n .str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun{color:#660}.pln{color:#000}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec{color:#606}pre.prettyprint{padding:2px;border:1px solid #888}@media print{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun{color:#440}.pln{color:#000}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-39.89cf817b9a35aeca.css.map.gz b/_static/prefix-39.89cf817b9a35aeca.css.map.gz new file mode 100644 index 0000000..d131128 Binary files /dev/null and b/_static/prefix-39.89cf817b9a35aeca.css.map.gz differ diff --git a/_static/prefix-412.25f3c4ff23eb9893.css b/_static/prefix-412.25f3c4ff23eb9893.css new file mode 100644 index 0000000..279f3da --- /dev/null +++ b/_static/prefix-412.25f3c4ff23eb9893.css @@ -0,0 +1,2 @@ +div.ExecutionVisualizer{background:#fff;color:#000}div.ExecutionVisualizer .ui-resizable-e{width:7px}div.ExecutionVisualizer .visualizer{display:flex;flex-wrap:wrap;font-family:verdana,arial,helvetica,sans-serif;font-size:10pt;margin-bottom:10px;overflow:auto;width:100%}.visualizer #vizLayoutTdFirst{flex:2;flex-basis:400px}.visualizer #vizLayoutTdSecond{flex:1;flex-basis:200px}.ExecutionVisualizer .codAndNav{max-width:95%}div.ExecutionVisualizer .visualizer .vizLayoutTd{display:inline-block;margin:0 20px;vertical-align:top}#vizLayoutTdThird{text-align:center}div.ExecutionVisualizer #heap_td,div.ExecutionVisualizer #stack_td{font-size:10pt;vertical-align:top}div.ExecutionVisualizer #dataViz{margin-left:25px}div.ExecutionVisualizer div#pyCodeOutputDiv{margin-left:auto;margin-right:auto;max-height:450px;overflow:auto}div.ExecutionVisualizer table#pyCodeOutput{border-bottom:1px solid #bbb;border-collapse:separate;border-spacing:0;border-top:1px solid #bbb;font-family:Andale mono,monospace;font-size:12pt;line-height:1.1em;margin:6px auto;padding-top:3px}div.ExecutionVisualizer table#pyCodeOutput td{vertical-align:middle;white-space:nowrap}div.ExecutionVisualizer #leftCodeGutterSVG{height:0;min-width:18px;width:18px}div.ExecutionVisualizer #curLegendArrowSVG,div.ExecutionVisualizer #prevLegendArrowSVG{height:10px;width:18px}div.ExecutionVisualizer .arrow{font-size:16pt}div.ExecutionVisualizer table#pyCodeOutput .lineNo{color:#aaa;padding:.2em .5em .2em .3em;text-align:right}div.ExecutionVisualizer table#pyCodeOutput .cod{color:#000;margin-left:3px;padding-left:7px;text-align:left}div.ExecutionVisualizer div#progOutputs{margin-top:8px}div.ExecutionVisualizer div#legendDiv{color:#666;font-size:9pt;margin-top:10px;padding:0;text-align:left}div.ExecutionVisualizer div#editCodeLinkDiv{font-size:11pt;margin:8px auto;text-align:center}div.ExecutionVisualizer div#annotateLinkDiv{margin-bottom:12px;margin-top:0}div.ExecutionVisualizer div#stepAnnotationDiv{margin-bottom:12px}div.ExecutionVisualizer textarea#stepAnnotationEditor,div.ExecutionVisualizer textarea#vizDescriptionEditor,div.ExecutionVisualizer textarea#vizTitleEditor{border:1px solid #999;overflow:auto;padding:4px;resize:none}div.ExecutionVisualizer #errorOutput{color:#e93f34;font-size:12pt;line-height:1.5em;margin-bottom:4px;padding:2px}div.ExecutionVisualizer #vcrControls{margin:15px auto;text-align:center}div.ExecutionVisualizer #vcrControls button{margin-left:2px;margin-right:2px}div.ExecutionVisualizer #vcrControls #curInstr{margin-left:4px;margin-right:4px}div.ExecutionVisualizer #pyStdout{border:1px solid #999;font-family:Andale mono,monospace;font-size:12pt;min-height:100px!important;overflow:auto;padding:4px;resize:none}div.ExecutionVisualizer .vizFrame{border-left:2px solid #ccc;margin-bottom:20px;padding-left:8px}div.ExecutionVisualizer .nullObj{font-size:8pt}div.ExecutionVisualizer .customObj,div.ExecutionVisualizer .funcObj,div.ExecutionVisualizer .stringObj{font-family:Andale mono,monospace;white-space:nowrap}div.ExecutionVisualizer .retval{font-size:9pt}div.ExecutionVisualizer .stackFrame .retval{color:#e93f34}div.ExecutionVisualizer table.listTbl,div.ExecutionVisualizer table.setTbl,div.ExecutionVisualizer table.tupleTbl{background-color:#ffffc6}div.ExecutionVisualizer table.listTbl{border:0 solid #000;border-spacing:0}div.ExecutionVisualizer table.listTbl td.listHeader,div.ExecutionVisualizer table.tupleTbl td.tupleHeader{border-left:1px solid #555;color:#777;font-size:8pt;padding-bottom:3px;padding-left:4px;padding-top:2px;text-align:left}div.ExecutionVisualizer table.tupleTbl{border-bottom:1px solid #555;border-right:1px solid #555;border-spacing:0;border-top:1px solid #555;color:#000}div.ExecutionVisualizer table.listTbl td.listElt{border-bottom:1px solid #555;border-left:1px solid #555}div.ExecutionVisualizer table.tupleTbl td.tupleElt{border-left:1px solid #555}div.ExecutionVisualizer table.customObjTbl{background-color:#fff;border:1px solid #000;color:#000}div.ExecutionVisualizer table.customObjTbl td.customObjElt{padding:5px}div.ExecutionVisualizer table.listTbl td.listElt,div.ExecutionVisualizer table.tupleTbl td.tupleElt{padding:0 10px 8px;vertical-align:bottom}div.ExecutionVisualizer table.setTbl{border:1px solid #555;border-spacing:0;text-align:center}div.ExecutionVisualizer table.setTbl td.setElt{padding:8px}div.ExecutionVisualizer table.classTbl,div.ExecutionVisualizer table.dictTbl,div.ExecutionVisualizer table.instTbl{border-spacing:1px}div.ExecutionVisualizer table.classTbl td.classKey,div.ExecutionVisualizer table.dictTbl td.dictKey,div.ExecutionVisualizer table.instTbl td.instKey{background-color:#faebbf}div.ExecutionVisualizer table.classTbl td.classVal,div.ExecutionVisualizer table.dictTbl td.dictVal,div.ExecutionVisualizer table.instTbl td.instVal{background-color:#ffffc6}div.ExecutionVisualizer table.classTbl td.classKey,div.ExecutionVisualizer table.dictTbl td.dictKey,div.ExecutionVisualizer table.instTbl td.instKey{padding:12px 4px 5px 10px;text-align:right}div.ExecutionVisualizer table.classTbl td.classVal,div.ExecutionVisualizer table.dictTbl td.dictVal,div.ExecutionVisualizer table.instTbl td.instVal{padding:12px 10px 5px 4px}div.ExecutionVisualizer table.classTbl td,div.ExecutionVisualizer table.instTbl td{border-bottom:1px solid #888}div.ExecutionVisualizer table.classTbl td.classVal,div.ExecutionVisualizer table.instTbl td.instVal{border-left:1px solid #888}div.ExecutionVisualizer table.classTbl{border:1px solid #888;border-collapse:collapse}div.ExecutionVisualizer td.classVal table.dictTbl,div.ExecutionVisualizer td.dictVal table.dictTbl,div.ExecutionVisualizer td.instVal table.dictTbl,div.ExecutionVisualizer td.listElt table.dictTbl,div.ExecutionVisualizer td.tupleElt table.dictTbl{border:1px solid #888}div.ExecutionVisualizer .objectIdLabel{color:#444;font-size:8pt;margin-bottom:2px}div.ExecutionVisualizer .typeLabel{color:#555;font-size:8pt;margin-bottom:2px}div.ExecutionVisualizer div#globals_area,div.ExecutionVisualizer div#stack{padding-left:10px;padding-right:30px}div.ExecutionVisualizer div.stackFrame,div.ExecutionVisualizer div.zombieStackFrame{background-color:#fff;font-size:10pt;margin-bottom:15px;padding:2px 6px 4px}div.ExecutionVisualizer div.zombieStackFrame{border-left:1px dotted #aaa;color:#a0a0a0}div.ExecutionVisualizer div.highlightedStackFrame{background-color:#e2ebf6}div.ExecutionVisualizer div.highlightedStackFrame,div.ExecutionVisualizer div.stackFrame{border-left:1px solid #a6b3b6}div.ExecutionVisualizer div.stackFrameHeader{font-family:Andale mono,monospace;font-size:10pt;margin-bottom:3px;margin-top:4px;white-space:nowrap}div.ExecutionVisualizer td.stackFrameVar{padding-bottom:3px;padding-right:8px;padding-top:3px;text-align:right}div.ExecutionVisualizer td.stackFrameValue{border-bottom:1px solid #aaa;border-left:1px solid #aaa;padding-bottom:3px;padding-left:3px;padding-top:3px;text-align:left;vertical-align:middle}div.ExecutionVisualizer .stackFrameVarTable{border-collapse:separate;border-spacing:2px;margin-left:auto;margin-right:0;padding-top:3px;text-align:right}div.ExecutionVisualizer div#heap{float:left;padding-left:30px}div.ExecutionVisualizer td.toplevelHeapObject{padding:4px 8px}div.ExecutionVisualizer table.heapRow{margin-bottom:10px}div.ExecutionVisualizer div.heapObject{padding-left:2px}div.ExecutionVisualizer div.heapPrimitive{padding-left:4px}div.ExecutionVisualizer div#stackHeader{margin-bottom:15px;text-align:right}div.ExecutionVisualizer div#heapHeader{margin-bottom:15px}div.ExecutionVisualizer div#heapHeader,div.ExecutionVisualizer div#stackHeader{color:#333;font-size:10pt}div.ExecutionVisualizer #executionSlider{margin:15px auto 5px;width:95%}div.ExecutionVisualizer #executionSliderCaption{color:#666;font-size:8pt;margin-top:15px}div.ExecutionVisualizer #executionSliderFooter{margin-top:-7px}div.ExecutionVisualizer .ui-slider .ui-slider-handle{border:1px solid #999}textarea.bubbleInputText{border:1px solid #ccc;height:35px;max-height:35px;max-width:225px;outline:none;overflow:auto;resize:none;width:225px}.ui-tooltip-pgbootstrap,textarea.bubbleInputText{font-family:verdana,arial,helvetica,sans-serif;font-size:9pt;line-height:1.3em}.ui-tooltip-pgbootstrap{-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;background-color:#fff;border:2px solid #4284d3;*border-bottom-width:2px;*border-right-width:2px;-webkit-box-shadow:2px 2px 3px 0 rgba(0,0,0,.2);-moz-box-shadow:2px 2px 3px 0 rgba(0,0,0,.2);box-shadow:2px 2px 3px 0 rgba(0,0,0,.2);color:#333;cursor:pointer;max-width:250px;min-width:10px}.ui-tooltip-pgbootstrap .ui-tooltip-titlebar{background-color:transparent;border-bottom:1px solid #ccc;font-size:18px;line-height:22px}.ui-tooltip-pgbootstrap .ui-tooltip-content{padding:5px 8px}.ui-tooltip-pgbootstrap .ui-tooltip-titlebar .ui-state-default{border-style:none;right:9px;top:49%}.ui-tooltip-pgbootstrap .ui-tooltip-icon{background:#fff}.ui-tooltip-pgbootstrap .ui-tooltip-icon .ui-icon{color:#000;filter:alpha(opacity=20);float:right;font-size:20px;font-weight:700;height:auto;line-height:18px;opacity:.2;text-shadow:0 1px 0 #fff;width:auto}.ui-tooltip-pgbootstrap .ui-tooltip-icon .ui-icon:hover{color:#000;cursor:pointer;filter:alpha(opacity=40);opacity:.4;text-decoration:none}.ui-tooltip-pgbootstrap{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.ui-tooltip-pgbootstrap-stub{border:1px solid #999}.ui-tooltip-pgbootstrap-stub .ui-tooltip-content{padding:6px 9px}div.ExecutionVisualizer .annotationText,div.ExecutionVisualizer .vizDescriptionText{font-family:verdana,arial,helvetica,sans-serif;font-size:11pt;line-height:1.5em}div.ExecutionVisualizer .vizTitleText{font-family:verdana,arial,helvetica,sans-serif;font-size:16pt;margin-bottom:12pt}div.ExecutionVisualizer div#vizHeader{margin-bottom:10px;max-width:700px;width:700px}div.ExecutionVisualizer .highlight-prev{background-color:#f0f0ea}div.ExecutionVisualizer .highlight-cur{background-color:#ff6}div.ExecutionVisualizer .highlight-legend{padding:2px}.ui-resizable-e{background-color:#ddd;border:3px solid #fff;width:1px}.ui-resizable-e:hover{border-color:#ddd}div.ExecutionVisualizer div#rawUserInputDiv{border:1px solid #e93f34;margin:5px auto;padding:5px;text-align:center;width:95%}div.ExecutionVisualizer .pycrazy-highlight-prev{background-color:#eee}div.ExecutionVisualizer .pycrazy-highlight-cur{background-color:#ff6}div.ExecutionVisualizer .pycrazy-highlight-prev-and-cur{background-color:#ff6;border-bottom:1px solid #999;text-decoration:none}#optTabularView thead.stepTableThead{background-color:#bbb}#optTabularView td.stepTableTd{padding:3px 10px}.codelens-question--reveal{animation:target-fade 5s 1}@keyframes target-fade{0%{background-color:var(--activated-content-bg,var(--componentBgColor))}to{background-color:transparent}}.codelens__question--hidden{display:none}.codelens__questionContainer{border-top:1px solid #ccc;padding:20px}.codelens__question>*,.codelens__questionContainer>*{margin-bottom:10px}.codelens .exercise-statement{background-color:var(--questionBgColor);margin-bottom:10px;padding:10px}.codelens__questionControls input[type=text]{display:inline-block;width:auto} +/*# sourceMappingURL=prefix-412.25f3c4ff23eb9893.css.map*/ \ No newline at end of file diff --git a/_static/prefix-412.25f3c4ff23eb9893.css.gz b/_static/prefix-412.25f3c4ff23eb9893.css.gz new file mode 100644 index 0000000..4a4e5dd Binary files /dev/null and b/_static/prefix-412.25f3c4ff23eb9893.css.gz differ diff --git a/_static/prefix-412.25f3c4ff23eb9893.css.map b/_static/prefix-412.25f3c4ff23eb9893.css.map new file mode 100644 index 0000000..9b38e6d --- /dev/null +++ b/_static/prefix-412.25f3c4ff23eb9893.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-412.25f3c4ff23eb9893.css","mappings":"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","sources":["webpack://WebComponents/./runestone/codelens/css/pytutor.css"],"sourcesContent":["/*\n\nOnline Python Tutor\nhttps://github.com/pgbovine/OnlinePythonTutor/\n\nCopyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net)\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n/* Most recent color scheme redesign on 2012-08-19 */\n\n/* To prevent CSS namespace clashes, prefix all rules with:\n div.ExecutionVisualizer\n*/\n\n\n/* reset some styles to nullify effects of existing stylesheets\n e.g., http://meyerweb.com/eric/tools/css/reset/\n*/\ndiv.ExecutionVisualizer {\n /* make sure dark mode text is still black\n todo: actually make dark mode work */\n color: black;\n background:white;\n}\n\ndiv.ExecutionVisualizer .ui-resizable-e {\n width: 7px;\n}\n\ndiv.ExecutionVisualizer .visualizer {\n font-family: verdana, arial, helvetica, sans-serif;\n font-size: 10pt;\n margin-bottom: 10px;\n width: 100%;\n display: flex;\n flex-wrap: wrap;\n overflow: auto;\n}\n\n.visualizer #vizLayoutTdFirst {\n flex: 2;\n flex-basis: 400px;\n}\n.visualizer #vizLayoutTdSecond {\n flex: 1;\n flex-basis: 200px;\n}\n\n.ExecutionVisualizer .codAndNav {\n max-width: 95%;\n}\n\ndiv.ExecutionVisualizer .visualizer .vizLayoutTd {\n vertical-align: top;\n display: inline-block;\n margin: 0 20px;\n}\n\n#vizLayoutTdThird {\n text-align: center;\n}\n\ndiv.ExecutionVisualizer #stack_td,\ndiv.ExecutionVisualizer #heap_td {\n vertical-align:top;\n font-size: 10pt; /* don't make fonts in the heap so big! */\n}\n\ndiv.ExecutionVisualizer #dataViz {\n margin-left: 25px;\n}\n\ndiv.ExecutionVisualizer div#codeDisplayDiv {\n /* set this as default unless user specifies a custom size */\n}\n\ndiv.ExecutionVisualizer div#pyCodeOutputDiv {\n /*max-width: 550px;*/\n max-height: 450px;\n /*max-height: 620px;*/\n overflow: auto;\n /*margin-bottom: 4px;*/\n\n margin-left: auto;\n margin-right: auto;\n}\n\ndiv.ExecutionVisualizer table#pyCodeOutput {\n font-family: Andale mono, monospace;\n font-size:12pt;\n line-height:1.1em;\n\n border-collapse: separate; /* some crazy CSS voodoo that needs to be\n there so that SVG arrows to the left\n of the code line up vertically in Chrome */\n border-spacing: 0px;\n border-top: 1px solid #bbb;\n padding-top: 3px;\n border-bottom: 1px solid #bbb;\n /*margin-top: 6px;*/\n margin: 6px auto; /* Center code in its pane */\n}\n\n/* don't wrap lines within code output ... FORCE scrollbars to appear */\ndiv.ExecutionVisualizer table#pyCodeOutput td {\n white-space: nowrap;\n vertical-align: middle; /* explicitly force, to override external CSS conflicts */\n}\n\ndiv.ExecutionVisualizer #leftCodeGutterSVG {\n width: 18px;\n min-width: 18px; /* make sure it doesn't squash too thin */\n height: 0px; /* programmatically set this later ... IE needs this to\n be 0 or it defaults to something arbitrary and gross */\n}\n\ndiv.ExecutionVisualizer #prevLegendArrowSVG,\ndiv.ExecutionVisualizer #curLegendArrowSVG {\n width: 18px;\n height: 10px;\n}\n\ndiv.ExecutionVisualizer .arrow {\n font-size: 16pt;\n}\n\ndiv.ExecutionVisualizer table#pyCodeOutput .lineNo {\n color: #aaa;\n padding: 0.2em;\n padding-left: 0.3em;\n padding-right: 0.5em;\n text-align: right;\n}\n\ndiv.ExecutionVisualizer table#pyCodeOutput .cod {\n /*font-weight: bold;*/\n margin-left: 3px;\n padding-left: 7px;\n text-align: left; /* necessary or else doesn't work properly in IE */\n color: black;\n}\n\ndiv.ExecutionVisualizer div#progOutputs {\n margin-top: 8px;\n}\n\ndiv.ExecutionVisualizer div#legendDiv {\n margin-top: 10px;\n padding: 0px;\n text-align: left;\n color: #666;\n font-size: 9pt;\n}\n\ndiv.ExecutionVisualizer div#editCodeLinkDiv {\n text-align: center;\n /*\n margin-top: 12px;\n margin-bottom: 4px;\n */\n margin: 8px auto;\n font-size: 11pt;\n}\n\ndiv.ExecutionVisualizer div#annotateLinkDiv {\n /*text-align: left;*/\n margin-top: 0px;\n margin-bottom: 12px;\n /*\n margin-left: auto;\n margin-right: auto;\n */\n}\n\ndiv.ExecutionVisualizer div#stepAnnotationDiv {\n margin-bottom: 12px;\n}\n\ndiv.ExecutionVisualizer textarea#stepAnnotationEditor,\ndiv.ExecutionVisualizer textarea#vizTitleEditor,\ndiv.ExecutionVisualizer textarea#vizDescriptionEditor {\n border: 1px solid #999999;\n padding: 4px;\n\n overflow: auto; /* to look pretty on IE */\n /* make sure textarea doesn't grow and stretch */\n resize: none;\n}\n\n\ndiv.ExecutionVisualizer #errorOutput {\n color: #e93f34; /* should match brightRed JavaScript variable */\n font-size: 12pt;\n padding: 2px;\n line-height: 1.5em;\n margin-bottom: 4px;\n}\n\n/* VCR control buttons for stepping through execution */\n\ndiv.ExecutionVisualizer #vcrControls {\n margin: 15px auto;\n /*width: 100%;*/\n text-align: center;\n}\n\ndiv.ExecutionVisualizer #vcrControls button {\n margin-left: 2px;\n margin-right: 2px;\n}\n\ndiv.ExecutionVisualizer #vcrControls #curInstr {\n margin-left: 4px;\n margin-right: 4px;\n}\n\ndiv.ExecutionVisualizer #pyStdout {\n border: 1px solid #999999;\n font-size: 12pt;\n padding: 4px;\n font-family: Andale mono, monospace;\n\n overflow: auto; /* to look pretty on IE */\n /* make sure textarea doesn't grow and stretch */\n resize: none;\n min-height: 100px!important;\n}\n\n\ndiv.ExecutionVisualizer .vizFrame {\n margin-bottom: 20px;\n padding-left: 8px;\n border-left: 2px solid #cccccc;\n}\n\n\n/* Rendering of primitive types */\n\ndiv.ExecutionVisualizer .nullObj {\n font-size: 8pt;\n}\n\ndiv.ExecutionVisualizer .stringObj,\ndiv.ExecutionVisualizer .customObj,\ndiv.ExecutionVisualizer .funcObj {\n font-family: Andale mono, monospace;\n white-space: nowrap;\n}\n\ndiv.ExecutionVisualizer .retval {\n font-size: 9pt;\n}\n\ndiv.ExecutionVisualizer .stackFrame .retval {\n color: #e93f34; /* highlight non-zombie stack frame return values -\n should match brightRed JavaScript variable */\n}\n\n/* Rendering of basic compound types */\n\ndiv.ExecutionVisualizer table.listTbl,\ndiv.ExecutionVisualizer table.tupleTbl,\ndiv.ExecutionVisualizer table.setTbl {\n background-color: #ffffc6;\n}\n\n\ndiv.ExecutionVisualizer table.listTbl {\n border: 0px solid black;\n border-spacing: 0px;\n}\n\ndiv.ExecutionVisualizer table.listTbl td.listHeader,\ndiv.ExecutionVisualizer table.tupleTbl td.tupleHeader {\n padding-left: 4px;\n padding-top: 2px;\n padding-bottom: 3px;\n font-size: 8pt;\n color: #777;\n text-align: left;\n border-left: 1px solid #555555;\n}\n\ndiv.ExecutionVisualizer table.tupleTbl {\n border-spacing: 0px;\n color: black;\n\n border-bottom: 1px solid #555555; /* must match td.tupleHeader border */\n border-top: 1px solid #555555; /* must match td.tupleHeader border */\n border-right: 1px solid #555555; /* must match td.tupleHeader border */\n}\n\n\ndiv.ExecutionVisualizer table.listTbl td.listElt {\n border-bottom: 1px solid #555555; /* must match td.listHeader border */\n border-left: 1px solid #555555; /* must match td.listHeader border */\n}\n\ndiv.ExecutionVisualizer table.tupleTbl td.tupleElt {\n border-left: 1px solid #555555; /* must match td.tupleHeader border */\n}\n\ndiv.ExecutionVisualizer table.customObjTbl {\n background-color: white;\n color: black;\n border: 1px solid black;\n}\n\ndiv.ExecutionVisualizer table.customObjTbl td.customObjElt {\n padding: 5px;\n}\n\ndiv.ExecutionVisualizer table.listTbl td.listElt,\ndiv.ExecutionVisualizer table.tupleTbl td.tupleElt {\n padding-top: 0px;\n padding-bottom: 8px;\n padding-left: 10px;\n padding-right: 10px;\n vertical-align: bottom;\n}\n\ndiv.ExecutionVisualizer table.setTbl {\n border: 1px solid #555555;\n border-spacing: 0px;\n text-align: center;\n}\n\ndiv.ExecutionVisualizer table.setTbl td.setElt {\n padding: 8px;\n}\n\n\ndiv.ExecutionVisualizer table.dictTbl,\ndiv.ExecutionVisualizer table.instTbl,\ndiv.ExecutionVisualizer table.classTbl {\n border-spacing: 1px;\n}\n\ndiv.ExecutionVisualizer table.dictTbl td.dictKey,\ndiv.ExecutionVisualizer table.instTbl td.instKey,\ndiv.ExecutionVisualizer table.classTbl td.classKey {\n background-color: #faebbf;\n}\n\ndiv.ExecutionVisualizer table.dictTbl td.dictVal,\ndiv.ExecutionVisualizer table.instTbl td.instVal,\ndiv.ExecutionVisualizer table.classTbl td.classVal {\n background-color: #ffffc6;\n}\n\n\ndiv.ExecutionVisualizer table.dictTbl td.dictKey,\ndiv.ExecutionVisualizer table.instTbl td.instKey,\ndiv.ExecutionVisualizer table.classTbl td.classKey {\n padding-top: 12px /*15px*/;\n padding-bottom: 5px;\n padding-left: 10px;\n padding-right: 4px;\n\n text-align: right;\n}\n\ndiv.ExecutionVisualizer table.dictTbl td.dictVal,\ndiv.ExecutionVisualizer table.instTbl td.instVal,\ndiv.ExecutionVisualizer table.classTbl td.classVal {\n padding-top: 12px /*15px*/;\n padding-bottom: 5px;\n padding-right: 10px;\n padding-left: 4px;\n}\n\n\ndiv.ExecutionVisualizer table.classTbl td,\ndiv.ExecutionVisualizer table.instTbl td {\n border-bottom: 1px #888 solid;\n}\n\ndiv.ExecutionVisualizer table.classTbl td.classVal,\ndiv.ExecutionVisualizer table.instTbl td.instVal {\n border-left: 1px #888 solid;\n}\n\ndiv.ExecutionVisualizer table.classTbl {\n border-collapse: collapse;\n border: 1px #888 solid;\n}\n\n/* only add a border to dicts if they're embedded within another object */\ndiv.ExecutionVisualizer td.listElt table.dictTbl,\ndiv.ExecutionVisualizer td.tupleElt table.dictTbl,\ndiv.ExecutionVisualizer td.dictVal table.dictTbl,\ndiv.ExecutionVisualizer td.instVal table.dictTbl,\ndiv.ExecutionVisualizer td.classVal table.dictTbl {\n border: 1px #888 solid;\n}\n\ndiv.ExecutionVisualizer .objectIdLabel {\n font-size: 8pt;\n color: #444;\n margin-bottom: 2px;\n}\n\ndiv.ExecutionVisualizer .typeLabel {\n font-size: 8pt;\n color: #555;\n margin-bottom: 2px;\n}\n\ndiv.ExecutionVisualizer div#stack,\ndiv.ExecutionVisualizer div#globals_area {\n padding-left: 10px;\n padding-right: 30px;\n\n /* no longer necessary ... */\n /*float: left;*/\n /* border-right: 1px dashed #bbbbbb; */\n}\n\ndiv.ExecutionVisualizer div.stackFrame,\ndiv.ExecutionVisualizer div.zombieStackFrame {\n background-color: #ffffff;\n margin-bottom: 15px;\n padding: 2px;\n padding-left: 6px;\n padding-right: 6px;\n padding-bottom: 4px;\n font-size: 10pt;\n}\n\ndiv.ExecutionVisualizer div.zombieStackFrame {\n border-left: 1px dotted #aaa;\n /*color: #c0c0c0;*/\n color: #a0a0a0;\n}\n\ndiv.ExecutionVisualizer div.highlightedStackFrame {\n background-color: #e2ebf6;\n /*background-color: #d7e7fb;*/\n\n /*background-color: #c0daf8;*/\n /*background-color: #9eeaff #c5dfea;*/\n}\n\ndiv.ExecutionVisualizer div.stackFrame,\ndiv.ExecutionVisualizer div.highlightedStackFrame {\n border-left: 1px solid #a6b3b6;\n}\n\n\ndiv.ExecutionVisualizer div.stackFrameHeader {\n font-family: Andale mono, monospace;\n font-size: 10pt;\n margin-top: 4px;\n margin-bottom: 3px;\n white-space: nowrap;\n}\n\ndiv.ExecutionVisualizer td.stackFrameVar {\n text-align: right;\n padding-right: 8px;\n padding-top: 3px;\n padding-bottom: 3px;\n}\n\ndiv.ExecutionVisualizer td.stackFrameValue {\n text-align: left;\n border-bottom: 1px solid #aaaaaa;\n border-left: 1px solid #aaaaaa;\n\n vertical-align: middle;\n\n padding-top: 3px;\n padding-left: 3px;\n padding-bottom: 3px;\n}\n\ndiv.ExecutionVisualizer .stackFrameVarTable tr {\n\n}\n\ndiv.ExecutionVisualizer .stackFrameVarTable {\n text-align: right;\n padding-top: 3px;\n\n /* right-align the table */\n margin-left: auto;\n margin-right: 0px;\n\n /* hack to counteract possible nasty CSS reset styles from parent divs */\n border-collapse: separate;\n border-spacing: 2px;\n}\n\ndiv.ExecutionVisualizer div#heap {\n float: left;\n padding-left: 30px;\n}\n\ndiv.ExecutionVisualizer td.toplevelHeapObject {\n /* needed for d3 to do transitions */\n padding-left: 8px;\n padding-right: 8px;\n padding-top: 4px;\n padding-bottom: 4px;\n /*\n border: 2px dotted white;\n border-color: white;\n */\n}\n\ndiv.ExecutionVisualizer table.heapRow {\n margin-bottom: 10px;\n}\n\ndiv.ExecutionVisualizer div.heapObject {\n padding-left: 2px; /* leave a TINY amount of room for connector endpoints */\n}\n\ndiv.ExecutionVisualizer div.heapPrimitive {\n padding-left: 4px; /* leave some more room for connector endpoints */\n}\n\ndiv.ExecutionVisualizer div#stackHeader {\n margin-bottom: 15px;\n text-align: right;\n}\n\ndiv.ExecutionVisualizer div#heapHeader {\n /*margin-top: 2px;\n margin-bottom: 13px;*/\n margin-bottom: 15px;\n}\n\ndiv.ExecutionVisualizer div#stackHeader,\ndiv.ExecutionVisualizer div#heapHeader {\n color: #333333;\n font-size: 10pt;\n}\n\ndiv.ExecutionVisualizer #executionSlider {\n /* if you set 'width', then it looks ugly when you dynamically resize */\n margin-top: 15px;\n margin-bottom: 5px;\n\n margin-left: auto;\n margin-right: auto;\n\n width: 95%;\n}\n\ndiv.ExecutionVisualizer #executionSliderCaption {\n font-size: 8pt;\n color: #666666;\n margin-top: 15px;\n}\n\ndiv.ExecutionVisualizer #executionSliderFooter {\n margin-top: -7px; /* make it butt up against #executionSlider */\n}\n\n\n/* darken slider handle a bit */\ndiv.ExecutionVisualizer .ui-slider .ui-slider-handle {\n border: 1px solid #999;\n}\n\n\n/* for annotation bubbles */\n\n/* For styling tricks, see: http://css-tricks.com/textarea-tricks/ */\ntextarea.bubbleInputText {\n border: 1px solid #ccc;\n outline: none;\n overflow: auto; /* to look pretty on IE */\n\n /* make sure textarea doesn't grow and stretch the enclosing bubble */\n resize: none;\n width: 225px;\n max-width: 225px;\n height: 35px;\n max-height: 35px;\n}\n\n\n.ui-tooltip-pgbootstrap,\ntextarea.bubbleInputText {\n font-family: verdana, arial, helvetica, sans-serif;\n\tfont-size: 9pt;\n\tline-height: 1.3em;\n}\n\n\n/* modified version of Twitter bootstrap style by Philip Guo */\n.ui-tooltip-pgbootstrap{\n\tcolor: #333;\n\tbackground-color: #ffffff;\n\n\tmax-width: 250px;\n\tmin-width: 10px;\n\n\tborder: 2px solid #4284D3;\n\n cursor: pointer;\n\n\t*border-right-width: 2px;\n\t*border-bottom-width: 2px;\n\n\t-webkit-border-radius: 5px;\n\t-moz-border-radius: 5px;\n\tborder-radius: 5px;\n\n /* way too poofy ...\n\t-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n\t-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n\tbox-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n */\n\n\t-webkit-box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2);\n\t-moz-box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2);\n\tbox-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2);\n\n\t-webkit-background-clip: padding-box;\n\t-moz-background-clip: padding;\n\tbackground-clip: padding-box;\n}\n\n\t.ui-tooltip-pgbootstrap .ui-tooltip-titlebar{\n\t\tfont-size: 18px;\n\t\tline-height: 22px;\n\n\t\tborder-bottom: 1px solid #ccc;\n\t\tbackground-color: transparent;\n\t}\n\n\t.ui-tooltip-pgbootstrap .ui-tooltip-content{\n\t\tpadding: 5px /* 5px is minimum or else it might look ugly */ 8px;\n\t}\n\n\n\t\t.ui-tooltip-pgbootstrap .ui-tooltip-titlebar .ui-state-default{\n\t\t\tright: 9px; top: 49%;\n\t\t\tborder-style: none;\n\t\t}\n\n\t.ui-tooltip-pgbootstrap .ui-tooltip-icon{\n\t\tbackground: white;\n\t}\n\n\t\t.ui-tooltip-pgbootstrap .ui-tooltip-icon .ui-icon{\n\t\t\twidth: auto;\n\t\t\theight: auto;\n\t\t\tfloat: right;\n\t\t\tfont-size: 20px;\n\t\t\tfont-weight: bold;\n\t\t\tline-height: 18px;\n\t\t\tcolor: #000000;\n\t\t\ttext-shadow: 0 1px 0 #ffffff;\n\t\t\topacity: 0.2;\n\t\t\tfilter: alpha(opacity=20);\n\t\t}\n\n\t\t.ui-tooltip-pgbootstrap .ui-tooltip-icon .ui-icon:hover{\n\t\t\tcolor: #000000;\n\t\t\ttext-decoration: none;\n\t\t\tcursor: pointer;\n\t\t\topacity: 0.4;\n\t\t\tfilter: alpha(opacity=40);\n\t\t}\n\n\n/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */\n.ui-tooltip-pgbootstrap{\n\t-moz-border-radius: 5px;\n\t-webkit-border-radius: 5px;\n\tborder-radius: 5px;\n}\n\n\n.ui-tooltip-pgbootstrap-stub{\n\tborder: 1px solid #999;\n\n /*\n\t-webkit-box-shadow: none;\n\t-moz-box-shadow: none;\n\tbox-shadow: none;\n */\n}\n\n\t.ui-tooltip-pgbootstrap-stub .ui-tooltip-content{\n\t\tpadding: 6px 9px;\n\t}\n\n\ndiv.ExecutionVisualizer .annotationText,\ndiv.ExecutionVisualizer .vizDescriptionText {\n font-family: verdana, arial, helvetica, sans-serif;\n font-size: 11pt;\n line-height: 1.5em;\n}\n\ndiv.ExecutionVisualizer .vizTitleText {\n font-family: verdana, arial, helvetica, sans-serif;\n font-size: 16pt;\n margin-bottom: 12pt;\n}\n\ndiv.ExecutionVisualizer div#vizHeader {\n margin-bottom: 10px;\n width: 700px;\n max-width: 700px;\n}\n\n/* prev then curr, so curr gets precedence when both apply */\ndiv.ExecutionVisualizer .highlight-prev {\n background-color: #F0F0EA;\n}\n\ndiv.ExecutionVisualizer .highlight-cur {\n background-color: #FFFF66;\n}\n\ndiv.ExecutionVisualizer .highlight-legend {\n padding: 2px;\n}\n\n/* resizing sliders from David Pritchard */\n.ui-resizable-e {\n background-color: #dddddd;\n width: 1px;\n border: 3px solid white;\n}\n\n.ui-resizable-e:hover {\n border-color: #dddddd;\n}\n\ndiv.ExecutionVisualizer div#rawUserInputDiv {\n padding: 5px;\n width: 95%;\n margin: 5px auto;\n text-align: center;\n border: 1px #e93f34 solid;\n}\n\n/* for pyCrazyMode */\n\n/* prev then curr, so curr gets precedence when both apply */\ndiv.ExecutionVisualizer .pycrazy-highlight-prev {\n background-color: #eeeeee; /*#F0F0EA;*/\n /*\n text-decoration: none;\n border-bottom: 1px solid #dddddd;\n */\n}\n\ndiv.ExecutionVisualizer .pycrazy-highlight-cur {\n background-color: #FFFF66;\n /* aligned slightly higher than border-bottom */\n /*\n text-decoration: none;\n border-bottom: 1px solid #e93f34;\n */\n}\n\ndiv.ExecutionVisualizer .pycrazy-highlight-prev-and-cur {\n background-color: #FFFF66;\n\n text-decoration: none;\n border-bottom: 1px solid #999999;\n}\n\n\n#optTabularView thead.stepTableThead {\n background-color: #bbb;\n}\n\n#optTabularView tbody.stepTableTbody {\n}\n\n#optTabularView td.stepTableTd {\n padding: 3px 10px;\n}\n\n\n.codelens-question--reveal {\n animation: target-fade 5s 1;\n}\n\n@keyframes target-fade {\n 0% {\n background-color: var(--activated-content-bg, var(--componentBgColor));\n }\n 100% {\n background-color: transparent;\n }\n}\n\n.codelens__question--hidden {\n display: none;\n}\n\n\n.codelens__questionContainer {\n border-top: 1px solid #ccc;\n padding: 20px;\n}\n\n.codelens__questionContainer > * {\n margin-bottom: 10px;\n}\n\n.codelens__question > * {\n margin-bottom: 10px;\n}\n\n\n.codelens .exercise-statement {\n background-color: var(--questionBgColor);\n padding: 10px;\n margin-bottom: 10px;\n}\n\n.codelens__questionControls input[type=\"text\"] {\n width: auto;\n display: inline-block;\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-412.25f3c4ff23eb9893.css.map.gz b/_static/prefix-412.25f3c4ff23eb9893.css.map.gz new file mode 100644 index 0000000..87f8e0f Binary files /dev/null and b/_static/prefix-412.25f3c4ff23eb9893.css.map.gz differ diff --git a/_static/prefix-442.6ae0ea584f8e75c5.css b/_static/prefix-442.6ae0ea584f8e75c5.css new file mode 100644 index 0000000..e3f3a51 --- /dev/null +++ b/_static/prefix-442.6ae0ea584f8e75c5.css @@ -0,0 +1,2 @@ +.tab-pane{padding:20px 15px 10px}.nav.nav-tabs{background-color:var(--componentBgColor);border-color:var(--componentBorderColor);padding-top:6px}.nav.nav-tabs>li{margin-left:6px;margin-right:1px}.nav.nav-tabs>li>a{border:1px solid var(--componentBorderColor);border-radius:4px 4px 0 0;color:var(--bodyFont,#555)}.nav.nav-tabs>li.active>a,.nav.nav-tabs>li.active>a:is(:hover,:focus),.nav.nav-tabs>li>a:is(:hover,:focus){background-color:#156ba4;color:#fff} +/*# sourceMappingURL=prefix-442.6ae0ea584f8e75c5.css.map*/ \ No newline at end of file diff --git a/_static/prefix-442.6ae0ea584f8e75c5.css.gz b/_static/prefix-442.6ae0ea584f8e75c5.css.gz new file mode 100644 index 0000000..f813d27 Binary files /dev/null and b/_static/prefix-442.6ae0ea584f8e75c5.css.gz differ diff --git a/_static/prefix-442.6ae0ea584f8e75c5.css.map b/_static/prefix-442.6ae0ea584f8e75c5.css.map new file mode 100644 index 0000000..1bf166c --- /dev/null +++ b/_static/prefix-442.6ae0ea584f8e75c5.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-442.6ae0ea584f8e75c5.css","mappings":"AAAA,UACI,sBACJ,CAEA,cAEI,wCAAyC,CACzC,wCAAyC,CAFzC,eAGJ,CAEA,iBAEI,eAAgB,CADhB,gBAEJ,CAEA,mBACI,4CAA6C,CAC7C,yBAA0B,CAC1B,0BACJ,CAEA,2GAGI,wBAAyB,CACzB,UACJ","sources":["webpack://WebComponents/./runestone/tabbedStuff/css/tabbedstuff.css"],"sourcesContent":[".tab-pane {\n padding: 20px 15px 10px 15px;\n}\n\n.nav.nav-tabs {\n padding-top: 6px;\n background-color: var(--componentBgColor);\n border-color: var(--componentBorderColor);\n}\n\n.nav.nav-tabs > li {\n margin-right: 1px;\n margin-left: 6px;\n}\n\n.nav.nav-tabs > li > a {\n border: 1px solid var(--componentBorderColor);\n border-radius: 4px 4px 0 0;\n color: var(--bodyFont, #555);\n}\n\n.nav.nav-tabs > li.active > a,\n.nav.nav-tabs > li > a:is(:hover, :focus),\n.nav.nav-tabs > li.active > a:is(:hover, :focus) {\n background-color: #156ba4;\n color: white;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-442.6ae0ea584f8e75c5.css.map.gz b/_static/prefix-442.6ae0ea584f8e75c5.css.map.gz new file mode 100644 index 0000000..466e569 Binary files /dev/null and b/_static/prefix-442.6ae0ea584f8e75c5.css.map.gz differ diff --git a/_static/prefix-460.7c0b70502d117f7d.css b/_static/prefix-460.7c0b70502d117f7d.css new file mode 100644 index 0000000..3114c8f --- /dev/null +++ b/_static/prefix-460.7c0b70502d117f7d.css @@ -0,0 +1,2 @@ +.iguide{background-color:#dfd;padding:1em} +/*# sourceMappingURL=prefix-460.7c0b70502d117f7d.css.map*/ \ No newline at end of file diff --git a/_static/prefix-460.7c0b70502d117f7d.css.map b/_static/prefix-460.7c0b70502d117f7d.css.map new file mode 100644 index 0000000..91ac533 --- /dev/null +++ b/_static/prefix-460.7c0b70502d117f7d.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-460.7c0b70502d117f7d.css","mappings":"AAAA,QACI,qBAAyB,CACzB,WACJ","sources":["webpack://WebComponents/./runestone/reveal/css/reveal.css"],"sourcesContent":[".iguide {\n background-color: #ddffdd;\n padding: 1em;\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-486.990aca82e7ba3e1c.css b/_static/prefix-486.990aca82e7ba3e1c.css new file mode 100644 index 0000000..da3e2b1 --- /dev/null +++ b/_static/prefix-486.990aca82e7ba3e1c.css @@ -0,0 +1,2 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.xml .hljs-meta{color:silver}.hljs-comment,.hljs-quote{color:#007400}.hljs-attribute,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-selector-tag,.hljs-tag{color:#aa0d91}.hljs-template-variable,.hljs-variable{color:#3f6e74}.hljs-code,.hljs-meta .hljs-string,.hljs-string{color:#c41a16}.hljs-link,.hljs-regexp{color:#0e0eff}.hljs-bullet,.hljs-number,.hljs-symbol,.hljs-title{color:#1c00cf}.hljs-meta,.hljs-section{color:#643820}.hljs-built_in,.hljs-class .hljs-title,.hljs-params,.hljs-title.class_,.hljs-type{color:#5c2699}.hljs-attr{color:#836c28}.hljs-subst{color:#000}.hljs-formula{background-color:#eee;font-style:italic}.hljs-addition{background-color:#baeeba}.hljs-deletion{background-color:#ffc8bd}.hljs-selector-class,.hljs-selector-id{color:#9b703f}.hljs-doctag,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic}.hparsons-input{padding:15px}.hparsons-tip{font-style:italic}.parsons-tooltip{background-color:#000;border-radius:6px;color:#fff;max-width:120px;padding:5px;position:absolute;text-align:center;top:30px;visibility:hidden;width:max-content;z-index:1}.parsons-block:hover .parsons-tooltip{visibility:visible}.parsons-block{background-color:#efefef;border:1px solid #d3d3d3;border-radius:10px;display:inline-block;font-family:monospace;margin:5px 1px 0;padding:5px 10px;position:relative}.drop-area .parsons-block.incorrectPosition{background-color:#ffbaba;border:1px solid red}.parsons-block:focus,.parsons-block:hover{border-color:#000}.drop-area{background-color:#ffa;height:auto;margin:2px 0;min-height:32px;padding:0 5px 5px}.drop-area.incorrect{background-color:#f2dede;border-color:#f2b6b6}.drop-area.correct{background-color:#dff0d8;border-color:#ade595}.drag-area .parsons-block:hover .tooltip{visibility:visible}.drag-area{background-color:#efefff;height:auto;margin:2px 0;min-height:32px;padding:0 5px 5px}pre.context{background-color:#ffd;margin:0;padding:2px 10px}.hp_actions{margin-top:10px;text-align:center}.hparsons-input{padding:0}.hparsons-tip{margin-top:10px}.hp_output{background-color:inherit;display:none}.hp_output pre{background-color:var(--questionBgColor,#d3d3d3)}.hp_feedback{margin-top:10px}.hp_sql_result{background-color:var(--questionBgColor,#d3d3d3);border-radius:6px;margin-bottom:10px;padding:10px}.hp_sql_result_success{color:var(--parsonsCorrectBgColor,green)}.hp_sql_result_failure,.hp_sql_result_success{background-color:transparent;border:0;margin-bottom:10px;margin-top:10px;min-height:0!important;padding:0}.hp_sql_result_failure{color:var(--parsonsIncorrectBgColor,red)}micro-parsons .drag-area{background-color:var(--questionBgColor,#efefff);border:1px solid var(--componentBorderColor,#efefff)}micro-parsons .parsons-block{color:#000} +/*# sourceMappingURL=prefix-486.990aca82e7ba3e1c.css.map*/ \ No newline at end of file diff --git a/_static/prefix-486.990aca82e7ba3e1c.css.gz b/_static/prefix-486.990aca82e7ba3e1c.css.gz new file mode 100644 index 0000000..bfd08bf Binary files /dev/null and b/_static/prefix-486.990aca82e7ba3e1c.css.gz differ diff --git a/_static/prefix-486.990aca82e7ba3e1c.css.map b/_static/prefix-486.990aca82e7ba3e1c.css.map new file mode 100644 index 0000000..954f8f0 --- /dev/null +++ b/_static/prefix-486.990aca82e7ba3e1c.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-486.990aca82e7ba3e1c.css","mappings":"AAAA,cAAc,aAAa,CAAC,eAAe,CAAC,WAAW,CAAC,UAAU,eAAe,CAAC,MAAM,eAAe,CAAC,UAAU,CAAC,gBAAgB,YAAY,CAAC,0BAA0B,aAAa,CAAC,oFAAoF,aAAa,CAAC,uCAAuC,aAAa,CAAC,gDAAgD,aAAa,CAAC,wBAAwB,aAAa,CAAC,mDAAmD,aAAa,CAAC,yBAAyB,aAAa,CAAC,kFAAkF,aAAa,CAAC,WAAW,aAAa,CAAC,YAAY,UAAU,CAAC,cAAc,qBAAqB,CAAC,iBAAiB,CAAC,eAAe,wBAAwB,CAAC,eAAe,wBAAwB,CAAC,uCAAuC,aAAa,CAAC,0BAA0B,eAAe,CAAC,eAAe,iBAAiB,CCAh7B,gBACE,YACF,CACA,cACE,iBACF,CACA,iBAIE,qBAAuB,CAGvB,iBAAkB,CAFlB,UAAW,CAHX,eAAgB,CAMhB,WAAY,CACZ,iBAAkB,CAHlB,iBAAkB,CAKlB,QAAS,CAVT,iBAAkB,CAElB,iBAAkB,CAOlB,SAEF,CACA,sCACE,kBACF,CACA,eAOE,wBAAyB,CACzB,wBAAyB,CAFzB,kBAAmB,CALnB,oBAAqB,CACrB,qBAAsB,CAQtB,gBAAe,CADf,gBAAiB,CAJjB,iBAMF,CACA,4CACE,wBAAyB,CACzB,oBACF,CACA,0CAEE,iBACF,CACA,WACE,qBAAsB,CAGtB,WAAY,CACZ,YAAa,CAFb,eAAgB,CADhB,iBAIF,CACA,qBACE,wBAAyB,CACzB,oBACF,CACA,mBACE,wBAAyB,CACzB,oBACF,CACA,yCACE,kBACF,CACA,WACE,wBAAyB,CAGzB,WAAY,CACZ,YAAa,CAFb,eAAgB,CADhB,iBAIF,CAEA,YAEE,qBAAsB,CACtB,QAAS,CACT,gBACF,CCvEA,YACI,eAAgB,CAChB,iBACJ,CAEA,gBACI,SACJ,CAEA,cACI,eACJ,CAEA,WAEI,wBAAyB,CADzB,YAEJ,CACA,eACI,+CACJ,CAEA,aACI,eACJ,CAEA,eACI,+CAAmD,CAEnD,iBAAkB,CAClB,kBAAmB,CAFnB,YAGJ,CAEA,uBAEI,wCAMJ,CAEA,8CATI,4BAA6B,CAE7B,QAAW,CAGX,kBAAmB,CADnB,eAAgB,CAEhB,sBAA0B,CAH1B,SAcJ,CARA,uBAEI,wCAMJ,CAEA,yBACI,+CAAiD,CACjD,oDACJ,CAEA,6BACI,UACJ","sources":["webpack://WebComponents/./runestone/hparsons/css/hljs-xcode.css","webpack://WebComponents/./node_modules/micro-parsons/micro-parsons/micro-parsons.css","webpack://WebComponents/./runestone/hparsons/css/hparsons.css"],"sourcesContent":["pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.xml .hljs-meta{color:silver}.hljs-comment,.hljs-quote{color:#007400}.hljs-attribute,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-selector-tag,.hljs-tag{color:#aa0d91}.hljs-template-variable,.hljs-variable{color:#3f6e74}.hljs-code,.hljs-meta .hljs-string,.hljs-string{color:#c41a16}.hljs-link,.hljs-regexp{color:#0e0eff}.hljs-bullet,.hljs-number,.hljs-symbol,.hljs-title{color:#1c00cf}.hljs-meta,.hljs-section{color:#643820}.hljs-built_in,.hljs-class .hljs-title,.hljs-params,.hljs-title.class_,.hljs-type{color:#5c2699}.hljs-attr{color:#836c28}.hljs-subst{color:#000}.hljs-formula{background-color:#eee;font-style:italic}.hljs-addition{background-color:#baeeba}.hljs-deletion{background-color:#ffc8bd}.hljs-selector-class,.hljs-selector-id{color:#9b703f}.hljs-doctag,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic}",".hparsons-input {\n padding: 15px;\n}\n.hparsons-tip {\n font-style: italic;\n}\n.parsons-tooltip {\n visibility: hidden;\n max-width: 120px;\n width: max-content;\n background-color: black;\n color: #fff;\n text-align: center;\n border-radius: 6px;\n padding: 5px;\n position: absolute;\n z-index: 1;\n top: 30px;\n}\n.parsons-block:hover .parsons-tooltip {\n visibility: visible;\n}\n.parsons-block {\n display: inline-block;\n font-family: monospace;\n border-color: gray;\n margin: 0 1px;\n position: relative;\n border-radius: 10px;\n background-color: #efefef;\n border: 1px solid #d3d3d3;\n padding: 5px 10px;\n margin-top: 5px;\n}\n.drop-area .parsons-block.incorrectPosition {\n background-color: #ffbaba;\n border: 1px solid red;\n}\n.parsons-block:hover,\n.parsons-block:focus {\n border-color: black;\n}\n.drop-area {\n background-color: #ffa;\n padding: 0 5px 5px 5px;\n min-height: 32px;\n height: auto;\n margin: 2px 0;\n}\n.drop-area.incorrect {\n background-color: #f2dede;\n border-color: #f2b6b6;\n}\n.drop-area.correct {\n background-color: #dff0d8;\n border-color: #ade595;\n}\n.drag-area .parsons-block:hover .tooltip {\n visibility: visible;\n}\n.drag-area {\n background-color: #efefff;\n padding: 0 5px 5px 5px;\n min-height: 32px;\n height: auto;\n margin: 2px 0;\n}\n\npre.context {\n /* white-space: pre; */\n background-color: #ffd;\n margin: 0;\n padding: 2px 10px;\n}\n","/* Todo, better integration with prism and Pretext dark mode*/\n\n.hp_actions {\n margin-top: 10px;\n text-align: center;\n}\n\n.hparsons-input {\n padding: 0;\n}\n\n.hparsons-tip {\n margin-top: 10px;\n}\n\n.hp_output {\n display: none;\n background-color: inherit;\n}\n.hp_output pre {\n background-color: var(--questionBgColor, lightgray);\n}\n\n.hp_feedback {\n margin-top: 10px;\n}\n\n.hp_sql_result {\n background-color: var(--questionBgColor, lightgray);\n padding: 10px;\n border-radius: 6px;\n margin-bottom: 10px;\n}\n\n.hp_sql_result_success {\n background-color: transparent;\n color: var(--parsonsCorrectBgColor, green);\n border: 0px;\n padding: 0px;\n margin-top: 10px;\n margin-bottom: 10px;\n min-height: 0px !important;\n}\n\n.hp_sql_result_failure {\n background-color: transparent;\n color: var(--parsonsIncorrectBgColor, red);\n border: 0px;\n padding: 0px;\n margin-top: 10px;\n margin-bottom: 10px;\n min-height: 0px !important;\n} \n\nmicro-parsons .drag-area {\n background-color: var(--questionBgColor, #efefff);\n border: 1px solid var(--componentBorderColor, #efefff);\n}\n\nmicro-parsons .parsons-block {\n color: black;\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-486.990aca82e7ba3e1c.css.map.gz b/_static/prefix-486.990aca82e7ba3e1c.css.map.gz new file mode 100644 index 0000000..4361748 Binary files /dev/null and b/_static/prefix-486.990aca82e7ba3e1c.css.map.gz differ diff --git a/_static/prefix-576.9b1852878840651d.css b/_static/prefix-576.9b1852878840651d.css new file mode 100644 index 0000000..d278ade --- /dev/null +++ b/_static/prefix-576.9b1852878840651d.css @@ -0,0 +1,2 @@ +.CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:transparent}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:transparent}.cm-fat-cursor{caret-color:transparent}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:-50px}.CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;overflow:hidden;position:relative}.CodeMirror-scroll{height:100%;margin-bottom:-50px;margin-right:-50px;outline:none;overflow:scroll!important;padding-bottom:50px;position:relative;z-index:0}.CodeMirror-sizer{border-right:50px solid transparent;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{display:none;outline:none;position:absolute;z-index:6}.CodeMirror-vscrollbar{overflow-x:hidden;overflow-y:scroll;right:0;top:0}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-x:scroll;overflow-y:hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-50px;vertical-align:top;white-space:normal}.CodeMirror-gutter-wrapper{background:none!important;border:none!important;position:absolute;z-index:4}.CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{word-wrap:normal;-webkit-tap-highlight-color:transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual;line-height:inherit;margin:0;overflow:visible;position:relative;white-space:pre;z-index:2}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{bottom:0;left:0;position:absolute;right:0;top:0;z-index:0}.CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none} +/*# sourceMappingURL=prefix-576.9b1852878840651d.css.map*/ \ No newline at end of file diff --git a/_static/prefix-576.9b1852878840651d.css.gz b/_static/prefix-576.9b1852878840651d.css.gz new file mode 100644 index 0000000..b0861fc Binary files /dev/null and b/_static/prefix-576.9b1852878840651d.css.gz differ diff --git a/_static/prefix-576.9b1852878840651d.css.map b/_static/prefix-576.9b1852878840651d.css.map new file mode 100644 index 0000000..1d5bd39 --- /dev/null +++ b/_static/prefix-576.9b1852878840651d.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-576.9b1852878840651d.css","mappings":"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","sources":["webpack://WebComponents/./node_modules/codemirror/lib/codemirror.css"],"sourcesContent":["/* BASICS */\n\n.CodeMirror {\n /* Set height, width, borders, and global font properties here */\n font-family: monospace;\n height: 300px;\n color: black;\n direction: ltr;\n}\n\n/* PADDING */\n\n.CodeMirror-lines {\n padding: 4px 0; /* Vertical padding around content */\n}\n.CodeMirror pre.CodeMirror-line,\n.CodeMirror pre.CodeMirror-line-like {\n padding: 0 4px; /* Horizontal padding of content */\n}\n\n.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n background-color: white; /* The little square between H and V scrollbars */\n}\n\n/* GUTTER */\n\n.CodeMirror-gutters {\n border-right: 1px solid #ddd;\n background-color: #f7f7f7;\n white-space: nowrap;\n}\n.CodeMirror-linenumbers {}\n.CodeMirror-linenumber {\n padding: 0 3px 0 5px;\n min-width: 20px;\n text-align: right;\n color: #999;\n white-space: nowrap;\n}\n\n.CodeMirror-guttermarker { color: black; }\n.CodeMirror-guttermarker-subtle { color: #999; }\n\n/* CURSOR */\n\n.CodeMirror-cursor {\n border-left: 1px solid black;\n border-right: none;\n width: 0;\n}\n/* Shown when moving in bi-directional text */\n.CodeMirror div.CodeMirror-secondarycursor {\n border-left: 1px solid silver;\n}\n.cm-fat-cursor .CodeMirror-cursor {\n width: auto;\n border: 0 !important;\n background: #7e7;\n}\n.cm-fat-cursor div.CodeMirror-cursors {\n z-index: 1;\n}\n.cm-fat-cursor .CodeMirror-line::selection,\n.cm-fat-cursor .CodeMirror-line > span::selection, \n.cm-fat-cursor .CodeMirror-line > span > span::selection { background: transparent; }\n.cm-fat-cursor .CodeMirror-line::-moz-selection,\n.cm-fat-cursor .CodeMirror-line > span::-moz-selection,\n.cm-fat-cursor .CodeMirror-line > span > span::-moz-selection { background: transparent; }\n.cm-fat-cursor { caret-color: transparent; }\n@-moz-keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n@-webkit-keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n@keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n\n/* Can style cursor different in overwrite (non-insert) mode */\n.CodeMirror-overwrite .CodeMirror-cursor {}\n\n.cm-tab { display: inline-block; text-decoration: inherit; }\n\n.CodeMirror-rulers {\n position: absolute;\n left: 0; right: 0; top: -50px; bottom: 0;\n overflow: hidden;\n}\n.CodeMirror-ruler {\n border-left: 1px solid #ccc;\n top: 0; bottom: 0;\n position: absolute;\n}\n\n/* DEFAULT THEME */\n\n.cm-s-default .cm-header {color: blue;}\n.cm-s-default .cm-quote {color: #090;}\n.cm-negative {color: #d44;}\n.cm-positive {color: #292;}\n.cm-header, .cm-strong {font-weight: bold;}\n.cm-em {font-style: italic;}\n.cm-link {text-decoration: underline;}\n.cm-strikethrough {text-decoration: line-through;}\n\n.cm-s-default .cm-keyword {color: #708;}\n.cm-s-default .cm-atom {color: #219;}\n.cm-s-default .cm-number {color: #164;}\n.cm-s-default .cm-def {color: #00f;}\n.cm-s-default .cm-variable,\n.cm-s-default .cm-punctuation,\n.cm-s-default .cm-property,\n.cm-s-default .cm-operator {}\n.cm-s-default .cm-variable-2 {color: #05a;}\n.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}\n.cm-s-default .cm-comment {color: #a50;}\n.cm-s-default .cm-string {color: #a11;}\n.cm-s-default .cm-string-2 {color: #f50;}\n.cm-s-default .cm-meta {color: #555;}\n.cm-s-default .cm-qualifier {color: #555;}\n.cm-s-default .cm-builtin {color: #30a;}\n.cm-s-default .cm-bracket {color: #997;}\n.cm-s-default .cm-tag {color: #170;}\n.cm-s-default .cm-attribute {color: #00c;}\n.cm-s-default .cm-hr {color: #999;}\n.cm-s-default .cm-link {color: #00c;}\n\n.cm-s-default .cm-error {color: #f00;}\n.cm-invalidchar {color: #f00;}\n\n.CodeMirror-composing { border-bottom: 2px solid; }\n\n/* Default styles for common addons */\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}\n.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }\n.CodeMirror-activeline-background {background: #e8f2ff;}\n\n/* STOP */\n\n/* The rest of this file contains styles related to the mechanics of\n the editor. You probably shouldn't touch them. */\n\n.CodeMirror {\n position: relative;\n overflow: hidden;\n background: white;\n}\n\n.CodeMirror-scroll {\n overflow: scroll !important; /* Things will break if this is overridden */\n /* 50px is the magic margin used to hide the element's real scrollbars */\n /* See overflow: hidden in .CodeMirror */\n margin-bottom: -50px; margin-right: -50px;\n padding-bottom: 50px;\n height: 100%;\n outline: none; /* Prevent dragging from highlighting the element */\n position: relative;\n z-index: 0;\n}\n.CodeMirror-sizer {\n position: relative;\n border-right: 50px solid transparent;\n}\n\n/* The fake, visible scrollbars. Used to force redraw during scrolling\n before actual scrolling happens, thus preventing shaking and\n flickering artifacts. */\n.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n position: absolute;\n z-index: 6;\n display: none;\n outline: none;\n}\n.CodeMirror-vscrollbar {\n right: 0; top: 0;\n overflow-x: hidden;\n overflow-y: scroll;\n}\n.CodeMirror-hscrollbar {\n bottom: 0; left: 0;\n overflow-y: hidden;\n overflow-x: scroll;\n}\n.CodeMirror-scrollbar-filler {\n right: 0; bottom: 0;\n}\n.CodeMirror-gutter-filler {\n left: 0; bottom: 0;\n}\n\n.CodeMirror-gutters {\n position: absolute; left: 0; top: 0;\n min-height: 100%;\n z-index: 3;\n}\n.CodeMirror-gutter {\n white-space: normal;\n height: 100%;\n display: inline-block;\n vertical-align: top;\n margin-bottom: -50px;\n}\n.CodeMirror-gutter-wrapper {\n position: absolute;\n z-index: 4;\n background: none !important;\n border: none !important;\n}\n.CodeMirror-gutter-background {\n position: absolute;\n top: 0; bottom: 0;\n z-index: 4;\n}\n.CodeMirror-gutter-elt {\n position: absolute;\n cursor: default;\n z-index: 4;\n}\n.CodeMirror-gutter-wrapper ::selection { background-color: transparent }\n.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }\n\n.CodeMirror-lines {\n cursor: text;\n min-height: 1px; /* prevents collapsing before first draw */\n}\n.CodeMirror pre.CodeMirror-line,\n.CodeMirror pre.CodeMirror-line-like {\n /* Reset some styles that the rest of the page might have set */\n -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;\n border-width: 0;\n background: transparent;\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n white-space: pre;\n word-wrap: normal;\n line-height: inherit;\n color: inherit;\n z-index: 2;\n position: relative;\n overflow: visible;\n -webkit-tap-highlight-color: transparent;\n -webkit-font-variant-ligatures: contextual;\n font-variant-ligatures: contextual;\n}\n.CodeMirror-wrap pre.CodeMirror-line,\n.CodeMirror-wrap pre.CodeMirror-line-like {\n word-wrap: break-word;\n white-space: pre-wrap;\n word-break: normal;\n}\n\n.CodeMirror-linebackground {\n position: absolute;\n left: 0; right: 0; top: 0; bottom: 0;\n z-index: 0;\n}\n\n.CodeMirror-linewidget {\n position: relative;\n z-index: 2;\n padding: 0.1px; /* Force widget margins to stay inside of the container */\n}\n\n.CodeMirror-widget {}\n\n.CodeMirror-rtl pre { direction: rtl; }\n\n.CodeMirror-code {\n outline: none;\n}\n\n/* Force content-box sizing for the elements where we expect it */\n.CodeMirror-scroll,\n.CodeMirror-sizer,\n.CodeMirror-gutter,\n.CodeMirror-gutters,\n.CodeMirror-linenumber {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n}\n\n.CodeMirror-measure {\n position: absolute;\n width: 100%;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n}\n\n.CodeMirror-cursor {\n position: absolute;\n pointer-events: none;\n}\n.CodeMirror-measure pre { position: static; }\n\ndiv.CodeMirror-cursors {\n visibility: hidden;\n position: relative;\n z-index: 3;\n}\ndiv.CodeMirror-dragcursors {\n visibility: visible;\n}\n\n.CodeMirror-focused div.CodeMirror-cursors {\n visibility: visible;\n}\n\n.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n.CodeMirror-crosshair { cursor: crosshair; }\n.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }\n.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }\n\n.cm-searching {\n background-color: #ffa;\n background-color: rgba(255, 255, 0, .4);\n}\n\n/* Used to force a border model for a node */\n.cm-force-border { padding-right: .1px; }\n\n@media print {\n /* Hide the cursor when printing */\n .CodeMirror div.CodeMirror-cursors {\n visibility: hidden;\n }\n}\n\n/* See issue #2901 */\n.cm-tab-wrap-hack:after { content: ''; }\n\n/* Help users use markselection to safely style text background */\nspan.CodeMirror-selectedtext { background: none; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-576.9b1852878840651d.css.map.gz b/_static/prefix-576.9b1852878840651d.css.map.gz new file mode 100644 index 0000000..e441ba4 Binary files /dev/null and b/_static/prefix-576.9b1852878840651d.css.map.gz differ diff --git a/_static/prefix-580.22958d4327b0425a.css b/_static/prefix-580.22958d4327b0425a.css new file mode 100644 index 0000000..c233039 --- /dev/null +++ b/_static/prefix-580.22958d4327b0425a.css @@ -0,0 +1,2 @@ +.datafiletextfield{border:1px solid var(--componentBorderColor);display:block}.datafile_caption{background:var(--componentBgColor);border:1px solid var(--componentBorderColor);border-radius:4px 4px 0 0;color:var(--bodyFont);display:block;font-style:italic;margin-bottom:-1px;padding:0 .2em;width:fit-content}.datafile_caption code{background:none;border:none}.datafile pre{border:1px solid var(--componentBorderColor);font-size:90%;line-height:1.5em;max-height:30em;max-width:100%;overflow:auto;white-space:pre}.datafile_hidden{display:none}.datafile img{border:1px solid var(--componentBorderColor);display:block;margin:0}.datafile_caption code.code-inline{background:inherit;border:0;color:inherit} +/*# sourceMappingURL=prefix-580.22958d4327b0425a.css.map*/ \ No newline at end of file diff --git a/_static/prefix-580.22958d4327b0425a.css.gz b/_static/prefix-580.22958d4327b0425a.css.gz new file mode 100644 index 0000000..6ff7209 Binary files /dev/null and b/_static/prefix-580.22958d4327b0425a.css.gz differ diff --git a/_static/prefix-580.22958d4327b0425a.css.map b/_static/prefix-580.22958d4327b0425a.css.map new file mode 100644 index 0000000..e3b6b25 --- /dev/null +++ b/_static/prefix-580.22958d4327b0425a.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-580.22958d4327b0425a.css","mappings":"AAAA,mBAEI,4CAA6C,CAD7C,aAEJ,CAEA,kBAQI,kCAAmC,CACnC,4CAA6C,CAJ7C,yBAA0B,CAE1B,qBAAsB,CALtB,aAAc,CAId,iBAAkB,CALlB,kBAAmB,CAGnB,cAAgB,CADhB,iBAOJ,CACA,uBACI,eAAgB,CAChB,WACJ,CACA,cAOI,4CAA6C,CAC7C,aAAc,CANd,iBAAkB,CAIlB,eAAgB,CAHhB,cAAe,CACf,aAAc,CACd,eAIJ,CACA,iBACI,YACJ,CACA,cAEI,4CAA6C,CAD7C,aAAc,CAEd,QACJ,CAEA,mCAEI,kBAAmB,CACnB,QAAS,CAFT,aAGJ","sources":["webpack://WebComponents/./runestone/datafile/css/datafile.css"],"sourcesContent":[".datafiletextfield {\n display: block;\n border: 1px solid var(--componentBorderColor);\n}\n\n.datafile_caption {\n margin-bottom: -1px; /* to collapse border w/ below w/o needing border-bottom: none */\n display: block;\n width:fit-content;\n padding: 0 0.2em;\n border-radius: 4px 4px 0 0;\n font-style: italic;\n color: var(--bodyFont);\n background: var(--componentBgColor);\n border: 1px solid var(--componentBorderColor);\n}\n.datafile_caption code {\n background: none;\n border: none;\n}\n.datafile pre {\n /* for ease of setting height based on #rows */\n line-height: 1.5em;\n max-width: 100%;\n overflow: auto;\n white-space: pre;\n max-height: 30em;\n border: 1px solid var(--componentBorderColor);\n font-size: 90%;\n}\n.datafile_hidden {\n display: none;\n}\n.datafile img {\n display: block;\n border: 1px solid var(--componentBorderColor);\n margin: 0;\n}\n\n.datafile_caption code.code-inline {\n color: inherit;\n background: inherit;\n border: 0;\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-580.22958d4327b0425a.css.map.gz b/_static/prefix-580.22958d4327b0425a.css.map.gz new file mode 100644 index 0000000..743e5e8 Binary files /dev/null and b/_static/prefix-580.22958d4327b0425a.css.map.gz differ diff --git a/_static/prefix-616.5c78f604ddad1ec0.css b/_static/prefix-616.5c78f604ddad1ec0.css new file mode 100644 index 0000000..0cd437c --- /dev/null +++ b/_static/prefix-616.5c78f604ddad1ec0.css @@ -0,0 +1,2 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;overflow:hidden;padding-left:8px;padding-right:20px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{background-color:transparent;border:none;font-size:1em}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-left:20px;padding-right:8px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline;list-style:none;padding:0}.select2-container .select2-selection--multiple .select2-selection__clear{background-color:transparent;border:none;font-size:1em}.select2-container .select2-search--inline .select2-search__field{border:none;box-sizing:border-box;font-family:sans-serif;font-size:100%;height:18px;margin-left:5px;margin-top:5px;max-width:100%;overflow:hidden;padding:0;resize:none;vertical-align:bottom;word-break:keep-all}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;left:-100000px;position:absolute;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option--selectable{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{box-sizing:border-box;padding:4px;width:100%}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{background-color:#fff;border:0;display:block;filter:alpha(opacity=0);height:auto;left:0;margin:0;min-height:100%;min-width:100%;opacity:0;padding:0;position:fixed;top:0;width:auto;z-index:99}.select2-hidden-accessible{clip:rect(0 0 0 0)!important;border:0!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;height:1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700;height:26px;margin-right:20px;padding-right:0}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;right:1px;top:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--default .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text;padding-bottom:5px;padding-right:5px;position:relative}.select2-container--default .select2-selection--multiple.select2-selection--clearable{padding-right:25px}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;font-weight:700;height:20px;margin-right:10px;margin-top:5px;padding:1px;position:absolute;right:0}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:inline-block;margin-left:5px;margin-top:5px;max-width:100%;overflow:hidden;padding:0 0 0 20px;position:relative;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap}.select2-container--default .select2-selection--multiple .select2-selection__choice__display{cursor:default;padding-left:2px;padding-right:5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{background-color:transparent;border:none;border-bottom-left-radius:4px;border-right:1px solid #aaa;border-top-left-radius:4px;color:#999;cursor:pointer;font-size:1em;font-weight:700;left:0;padding:0 4px;position:absolute;top:0}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:focus,.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{background-color:#f1f1f1;color:#333;outline:none}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__display{padding-left:5px;padding-right:2px}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{border-bottom-left-radius:0;border-bottom-right-radius:4px;border-left:1px solid #aaa;border-right:none;border-top-left-radius:0;border-top-right-radius:4px}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__clear{float:left;margin-left:10px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:1px solid #000;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--above .select2-selection--single{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{-webkit-appearance:textfield;background:transparent;border:none;box-shadow:none;outline:0}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--group{padding:0}.select2-container--default .select2-results__option--disabled{color:#999}.select2-container--default .select2-results__option--selected{background-color:#ddd}.select2-container--default .select2-results__option--highlighted.select2-results__option--selectable{background-color:#5897fb;color:#fff}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;background-image:-webkit-linear-gradient(top,#fff 50%,#eee);background-image:-o-linear-gradient(top,#fff 50%,#eee 100%);background-image:linear-gradient(180deg,#fff 50%,#eee);background-repeat:repeat-x;border:1px solid #aaa;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFFFF",endColorstr="#FFEEEEEE",GradientType=0);outline:0}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700;height:26px;margin-right:20px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;background-image:-webkit-linear-gradient(top,#eee 50%,#ccc);background-image:-o-linear-gradient(top,#eee 50%,#ccc 100%);background-image:linear-gradient(180deg,#eee 50%,#ccc);background-repeat:repeat-x;border:none;border-bottom-right-radius:4px;border-left:1px solid #aaa;border-top-right-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFEEEEEE",endColorstr="#FFCCCCCC",GradientType=0);height:26px;position:absolute;right:1px;top:1px;width:20px}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow{border:none;border-radius:0;border-bottom-left-radius:4px;border-right:1px solid #aaa;border-top-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{background-image:-webkit-linear-gradient(top,#fff,#eee 50%);background-image:-o-linear-gradient(top,#fff 0,#eee 50%);background-image:linear-gradient(180deg,#fff 0,#eee 50%);background-repeat:repeat-x;border-top:none;border-top-left-radius:0;border-top-right-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFFFF",endColorstr="#FFEEEEEE",GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{background-image:-webkit-linear-gradient(top,#eee 50%,#fff);background-image:-o-linear-gradient(top,#eee 50%,#fff 100%);background-image:linear-gradient(180deg,#eee 50%,#fff);background-repeat:repeat-x;border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFEEEEEE",endColorstr="#FFFFFFFF",GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0;padding-bottom:5px;padding-right:5px}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;display:inline-block;margin-left:5px;margin-top:5px;padding:0}.select2-container--classic .select2-selection--multiple .select2-selection__choice__display{cursor:default;padding-left:2px;padding-right:5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{background-color:transparent;border:none;border-bottom-left-radius:4px;border-top-left-radius:4px;color:#888;cursor:pointer;font-size:1em;font-weight:700;padding:0 4px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555;outline:none}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__display{padding-left:5px;padding-right:2px}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{border-bottom-left-radius:0;border-bottom-right-radius:4px;border-top-left-radius:0;border-top-right-radius:4px}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{box-shadow:none;outline:0}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option--group{padding:0}.select2-container--classic .select2-results__option--disabled{color:grey}.select2-container--classic .select2-results__option--highlighted.select2-results__option--selectable{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} +/*# sourceMappingURL=prefix-616.5c78f604ddad1ec0.css.map*/ \ No newline at end of file diff --git a/_static/prefix-616.5c78f604ddad1ec0.css.gz b/_static/prefix-616.5c78f604ddad1ec0.css.gz new file mode 100644 index 0000000..fea002a Binary files /dev/null and b/_static/prefix-616.5c78f604ddad1ec0.css.gz differ diff --git a/_static/prefix-616.5c78f604ddad1ec0.css.map b/_static/prefix-616.5c78f604ddad1ec0.css.map new file mode 100644 index 0000000..7b6f708 --- /dev/null +++ b/_static/prefix-616.5c78f604ddad1ec0.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-616.5c78f604ddad1ec0.css","mappings":"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","sources":["webpack://WebComponents/./node_modules/select2/dist/css/select2.css"],"sourcesContent":[".select2-container {\n box-sizing: border-box;\n display: inline-block;\n margin: 0;\n position: relative;\n vertical-align: middle; }\n .select2-container .select2-selection--single {\n box-sizing: border-box;\n cursor: pointer;\n display: block;\n height: 28px;\n user-select: none;\n -webkit-user-select: none; }\n .select2-container .select2-selection--single .select2-selection__rendered {\n display: block;\n padding-left: 8px;\n padding-right: 20px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .select2-container .select2-selection--single .select2-selection__clear {\n background-color: transparent;\n border: none;\n font-size: 1em; }\n .select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n padding-right: 8px;\n padding-left: 20px; }\n .select2-container .select2-selection--multiple {\n box-sizing: border-box;\n cursor: pointer;\n display: block;\n min-height: 32px;\n user-select: none;\n -webkit-user-select: none; }\n .select2-container .select2-selection--multiple .select2-selection__rendered {\n display: inline;\n list-style: none;\n padding: 0; }\n .select2-container .select2-selection--multiple .select2-selection__clear {\n background-color: transparent;\n border: none;\n font-size: 1em; }\n .select2-container .select2-search--inline .select2-search__field {\n box-sizing: border-box;\n border: none;\n font-size: 100%;\n margin-top: 5px;\n margin-left: 5px;\n padding: 0;\n max-width: 100%;\n resize: none;\n height: 18px;\n vertical-align: bottom;\n font-family: sans-serif;\n overflow: hidden;\n word-break: keep-all; }\n .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {\n -webkit-appearance: none; }\n\n.select2-dropdown {\n background-color: white;\n border: 1px solid #aaa;\n border-radius: 4px;\n box-sizing: border-box;\n display: block;\n position: absolute;\n left: -100000px;\n width: 100%;\n z-index: 1051; }\n\n.select2-results {\n display: block; }\n\n.select2-results__options {\n list-style: none;\n margin: 0;\n padding: 0; }\n\n.select2-results__option {\n padding: 6px;\n user-select: none;\n -webkit-user-select: none; }\n\n.select2-results__option--selectable {\n cursor: pointer; }\n\n.select2-container--open .select2-dropdown {\n left: 0; }\n\n.select2-container--open .select2-dropdown--above {\n border-bottom: none;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0; }\n\n.select2-container--open .select2-dropdown--below {\n border-top: none;\n border-top-left-radius: 0;\n border-top-right-radius: 0; }\n\n.select2-search--dropdown {\n display: block;\n padding: 4px; }\n .select2-search--dropdown .select2-search__field {\n padding: 4px;\n width: 100%;\n box-sizing: border-box; }\n .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {\n -webkit-appearance: none; }\n .select2-search--dropdown.select2-search--hide {\n display: none; }\n\n.select2-close-mask {\n border: 0;\n margin: 0;\n padding: 0;\n display: block;\n position: fixed;\n left: 0;\n top: 0;\n min-height: 100%;\n min-width: 100%;\n height: auto;\n width: auto;\n opacity: 0;\n z-index: 99;\n background-color: #fff;\n filter: alpha(opacity=0); }\n\n.select2-hidden-accessible {\n border: 0 !important;\n clip: rect(0 0 0 0) !important;\n -webkit-clip-path: inset(50%) !important;\n clip-path: inset(50%) !important;\n height: 1px !important;\n overflow: hidden !important;\n padding: 0 !important;\n position: absolute !important;\n width: 1px !important;\n white-space: nowrap !important; }\n\n.select2-container--default .select2-selection--single {\n background-color: #fff;\n border: 1px solid #aaa;\n border-radius: 4px; }\n .select2-container--default .select2-selection--single .select2-selection__rendered {\n color: #444;\n line-height: 28px; }\n .select2-container--default .select2-selection--single .select2-selection__clear {\n cursor: pointer;\n float: right;\n font-weight: bold;\n height: 26px;\n margin-right: 20px;\n padding-right: 0px; }\n .select2-container--default .select2-selection--single .select2-selection__placeholder {\n color: #999; }\n .select2-container--default .select2-selection--single .select2-selection__arrow {\n height: 26px;\n position: absolute;\n top: 1px;\n right: 1px;\n width: 20px; }\n .select2-container--default .select2-selection--single .select2-selection__arrow b {\n border-color: #888 transparent transparent transparent;\n border-style: solid;\n border-width: 5px 4px 0 4px;\n height: 0;\n left: 50%;\n margin-left: -4px;\n margin-top: -2px;\n position: absolute;\n top: 50%;\n width: 0; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n float: left; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n left: 1px;\n right: auto; }\n\n.select2-container--default.select2-container--disabled .select2-selection--single {\n background-color: #eee;\n cursor: default; }\n .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {\n display: none; }\n\n.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {\n border-color: transparent transparent #888 transparent;\n border-width: 0 4px 5px 4px; }\n\n.select2-container--default .select2-selection--multiple {\n background-color: white;\n border: 1px solid #aaa;\n border-radius: 4px;\n cursor: text;\n padding-bottom: 5px;\n padding-right: 5px;\n position: relative; }\n .select2-container--default .select2-selection--multiple.select2-selection--clearable {\n padding-right: 25px; }\n .select2-container--default .select2-selection--multiple .select2-selection__clear {\n cursor: pointer;\n font-weight: bold;\n height: 20px;\n margin-right: 10px;\n margin-top: 5px;\n position: absolute;\n right: 0;\n padding: 1px; }\n .select2-container--default .select2-selection--multiple .select2-selection__choice {\n background-color: #e4e4e4;\n border: 1px solid #aaa;\n border-radius: 4px;\n box-sizing: border-box;\n display: inline-block;\n margin-left: 5px;\n margin-top: 5px;\n padding: 0;\n padding-left: 20px;\n position: relative;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom;\n white-space: nowrap; }\n .select2-container--default .select2-selection--multiple .select2-selection__choice__display {\n cursor: default;\n padding-left: 2px;\n padding-right: 5px; }\n .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n background-color: transparent;\n border: none;\n border-right: 1px solid #aaa;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n color: #999;\n cursor: pointer;\n font-size: 1em;\n font-weight: bold;\n padding: 0 4px;\n position: absolute;\n left: 0;\n top: 0; }\n .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover, .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:focus {\n background-color: #f1f1f1;\n color: #333;\n outline: none; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n margin-left: 5px;\n margin-right: auto; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__display {\n padding-left: 5px;\n padding-right: 2px; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n border-left: 1px solid #aaa;\n border-right: none;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__clear {\n float: left;\n margin-left: 10px;\n margin-right: auto; }\n\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n border: solid black 1px;\n outline: 0; }\n\n.select2-container--default.select2-container--disabled .select2-selection--multiple {\n background-color: #eee;\n cursor: default; }\n\n.select2-container--default.select2-container--disabled .select2-selection__choice__remove {\n display: none; }\n\n.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {\n border-top-left-radius: 0;\n border-top-right-radius: 0; }\n\n.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0; }\n\n.select2-container--default .select2-search--dropdown .select2-search__field {\n border: 1px solid #aaa; }\n\n.select2-container--default .select2-search--inline .select2-search__field {\n background: transparent;\n border: none;\n outline: 0;\n box-shadow: none;\n -webkit-appearance: textfield; }\n\n.select2-container--default .select2-results > .select2-results__options {\n max-height: 200px;\n overflow-y: auto; }\n\n.select2-container--default .select2-results__option .select2-results__option {\n padding-left: 1em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__group {\n padding-left: 0; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -1em;\n padding-left: 2em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -2em;\n padding-left: 3em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -3em;\n padding-left: 4em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -4em;\n padding-left: 5em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -5em;\n padding-left: 6em; }\n\n.select2-container--default .select2-results__option--group {\n padding: 0; }\n\n.select2-container--default .select2-results__option--disabled {\n color: #999; }\n\n.select2-container--default .select2-results__option--selected {\n background-color: #ddd; }\n\n.select2-container--default .select2-results__option--highlighted.select2-results__option--selectable {\n background-color: #5897fb;\n color: white; }\n\n.select2-container--default .select2-results__group {\n cursor: default;\n display: block;\n padding: 6px; }\n\n.select2-container--classic .select2-selection--single {\n background-color: #f7f7f7;\n border: 1px solid #aaa;\n border-radius: 4px;\n outline: 0;\n background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);\n background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);\n background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }\n .select2-container--classic .select2-selection--single:focus {\n border: 1px solid #5897fb; }\n .select2-container--classic .select2-selection--single .select2-selection__rendered {\n color: #444;\n line-height: 28px; }\n .select2-container--classic .select2-selection--single .select2-selection__clear {\n cursor: pointer;\n float: right;\n font-weight: bold;\n height: 26px;\n margin-right: 20px; }\n .select2-container--classic .select2-selection--single .select2-selection__placeholder {\n color: #999; }\n .select2-container--classic .select2-selection--single .select2-selection__arrow {\n background-color: #ddd;\n border: none;\n border-left: 1px solid #aaa;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n height: 26px;\n position: absolute;\n top: 1px;\n right: 1px;\n width: 20px;\n background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }\n .select2-container--classic .select2-selection--single .select2-selection__arrow b {\n border-color: #888 transparent transparent transparent;\n border-style: solid;\n border-width: 5px 4px 0 4px;\n height: 0;\n left: 50%;\n margin-left: -4px;\n margin-top: -2px;\n position: absolute;\n top: 50%;\n width: 0; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n float: left; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n border: none;\n border-right: 1px solid #aaa;\n border-radius: 0;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n left: 1px;\n right: auto; }\n\n.select2-container--classic.select2-container--open .select2-selection--single {\n border: 1px solid #5897fb; }\n .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {\n background: transparent;\n border: none; }\n .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {\n border-color: transparent transparent #888 transparent;\n border-width: 0 4px 5px 4px; }\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {\n border-top: none;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);\n background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);\n background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {\n border-bottom: none;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);\n background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);\n background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }\n\n.select2-container--classic .select2-selection--multiple {\n background-color: white;\n border: 1px solid #aaa;\n border-radius: 4px;\n cursor: text;\n outline: 0;\n padding-bottom: 5px;\n padding-right: 5px; }\n .select2-container--classic .select2-selection--multiple:focus {\n border: 1px solid #5897fb; }\n .select2-container--classic .select2-selection--multiple .select2-selection__clear {\n display: none; }\n .select2-container--classic .select2-selection--multiple .select2-selection__choice {\n background-color: #e4e4e4;\n border: 1px solid #aaa;\n border-radius: 4px;\n display: inline-block;\n margin-left: 5px;\n margin-top: 5px;\n padding: 0; }\n .select2-container--classic .select2-selection--multiple .select2-selection__choice__display {\n cursor: default;\n padding-left: 2px;\n padding-right: 5px; }\n .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {\n background-color: transparent;\n border: none;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n color: #888;\n cursor: pointer;\n font-size: 1em;\n font-weight: bold;\n padding: 0 4px; }\n .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {\n color: #555;\n outline: none; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n margin-left: 5px;\n margin-right: auto; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__display {\n padding-left: 5px;\n padding-right: 2px; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px; }\n\n.select2-container--classic.select2-container--open .select2-selection--multiple {\n border: 1px solid #5897fb; }\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {\n border-top: none;\n border-top-left-radius: 0;\n border-top-right-radius: 0; }\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {\n border-bottom: none;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0; }\n\n.select2-container--classic .select2-search--dropdown .select2-search__field {\n border: 1px solid #aaa;\n outline: 0; }\n\n.select2-container--classic .select2-search--inline .select2-search__field {\n outline: 0;\n box-shadow: none; }\n\n.select2-container--classic .select2-dropdown {\n background-color: white;\n border: 1px solid transparent; }\n\n.select2-container--classic .select2-dropdown--above {\n border-bottom: none; }\n\n.select2-container--classic .select2-dropdown--below {\n border-top: none; }\n\n.select2-container--classic .select2-results > .select2-results__options {\n max-height: 200px;\n overflow-y: auto; }\n\n.select2-container--classic .select2-results__option--group {\n padding: 0; }\n\n.select2-container--classic .select2-results__option--disabled {\n color: grey; }\n\n.select2-container--classic .select2-results__option--highlighted.select2-results__option--selectable {\n background-color: #3875d7;\n color: white; }\n\n.select2-container--classic .select2-results__group {\n cursor: default;\n display: block;\n padding: 6px; }\n\n.select2-container--classic.select2-container--open .select2-dropdown {\n border-color: #5897fb; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-616.5c78f604ddad1ec0.css.map.gz b/_static/prefix-616.5c78f604ddad1ec0.css.map.gz new file mode 100644 index 0000000..80f7def Binary files /dev/null and b/_static/prefix-616.5c78f604ddad1ec0.css.map.gz differ diff --git a/_static/prefix-621.8c109e297bdd8ce7.css b/_static/prefix-621.8c109e297bdd8ce7.css new file mode 100644 index 0000000..f8e0429 --- /dev/null +++ b/_static/prefix-621.8c109e297bdd8ce7.css @@ -0,0 +1,2 @@ +.ptx-runestone-container .rsdraggable,.runestone-sphinx .rsdraggable{background-color:var(--questionBgColor,#efefff);border:1px solid var(--componentBorderColor,#efefff);box-sizing:border-box;display:inline;float:left;margin-left:1%;margin-right:1%;margin-top:5px;min-width:28%;padding-bottom:10px;text-align:left;vertical-align:top}.ptx-runestone-container .dnd-button-container,.runestone-sphinx .dnd-button-container{display:flex;justify-content:center;margin-top:1em;width:100%}.ptx-runestone-container .drag-button,.runestone-sphinx .drag-button{display:inline-block}.ptx-runestone-container .drag-reset,.runestone-sphinx .drag-reset{background-color:#474949;color:#fff}.ptx-runestone-container .drag-reset:hover,.runestone-sphinx .drag-reset:hover{background-color:#000;color:#fff}.ptx-runestone-container .drop-incorrect,.runestone-sphinx .drop-incorrect{background-color:var(--draggableIncorrectBg,#f2dede)!important;border:1px solid var(--draggableIncorrectBorder,red)!important}.ptx-runestone-container .drag-reset:enabled,.runestone-sphinx .drag-reset:enabled{background-color:#474949;color:#fff}.ptx-runestone-container .draggable-drag,.runestone-sphinx .draggable-drag{background-color:var(--draggableBgColor);border:1px solid #d3d3d3;border-radius:10px;cursor:grab;display:block;margin-top:5px;padding:10px}.ptx-runestone-container .draggable-feedback,.runestone-sphinx .draggable-feedback{clear:both;margin-bottom:0;margin-top:10px;text-align:left!important}.ptx-runestone-container .draggable-drop,.runestone-sphinx .draggable-drop{background-color:var(--dropableBgColor);border:1px solid #d3d3d3;border-radius:10px;cursor:grab;display:block;margin-top:5px;padding:10px}.ptx-runestone-container .draggable-container,.runestone-sphinx .draggable-container{text-align:center}.ptx-runestone-container .possibleDrop,.runestone-sphinx .possibleDrop{background-color:#ccc;border-color:#000}.ptx-runestone-container .draggable-drop .MathJax,.ptx-runestone-container .draggable-drop .process-math,.runestone-sphinx .draggable-drop .MathJax,.runestone-sphinx .draggable-drop .process-math{cursor:not-allowed;pointer-events:none}.ptx-runestone-container .vh-dnd-error,.runestone-sphinx .vh-dnd-error{clip:rect(0,0,0,0);border:0;height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.ptx-runestone-container .cardsort-statement,.runestone-sphinx .cardsort-statement{background-color:var(--questionBgColor);margin-bottom:10px;padding:10px;text-align:left}:root{--draggableBgColor:#efefef;--dropableBgColor:#ddd;--draggableIncorrectBorder:red;--draggableIncorrectBg:#f2dede;--dragLineColor:#000;--boxBorderColor:#000}:root.dark-mode,[data-theme=dark]{--draggableBgColor:#393434;--dropableBgColor:#2a2d30;--draggableIncorrectBorder:red;--draggableIncorrectBg:#6d2d2d;--dragLineColor:#fff;--boxBorderColor:#fff} +/*# sourceMappingURL=prefix-621.8c109e297bdd8ce7.css.map*/ \ No newline at end of file diff --git a/_static/prefix-621.8c109e297bdd8ce7.css.gz b/_static/prefix-621.8c109e297bdd8ce7.css.gz new file mode 100644 index 0000000..b71f4f6 Binary files /dev/null and b/_static/prefix-621.8c109e297bdd8ce7.css.gz differ diff --git a/_static/prefix-621.8c109e297bdd8ce7.css.map b/_static/prefix-621.8c109e297bdd8ce7.css.map new file mode 100644 index 0000000..3bde531 --- /dev/null +++ b/_static/prefix-621.8c109e297bdd8ce7.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-621.8c109e297bdd8ce7.css","mappings":"AAAA,qECQI,+CAAiD,CAGjD,oDAAsD,CACtD,qBAAsB,CARtB,cAAe,CACf,UAAW,CAJX,cAAe,CACf,eAAgB,CAChB,cAAe,CAOf,aAAc,CADd,mBAAoB,CAHpB,eAAgB,CAChB,kBDeJ,CAtBA,uFCgBI,YAAa,CACb,sBAAuB,CAEvB,cAAe,CADf,UDWJ,CA7BA,qECuBI,oBDUJ,CAjCA,mEC2BI,wBAAyB,CACzB,UDUJ,CAtCA,+ECgCI,qBAAuB,CACvB,UDUJ,CA3CA,2ECsCI,8DAAiE,CADjE,8DDWJ,CAhDA,mFC0CI,wBAAyB,CACzB,UDUJ,CArDA,2ECiDI,wCAAyC,CACzC,wBAA2B,CAH3B,kBAAmB,CAMnB,WAAY,CALZ,aAAc,CAId,cAAe,CADf,YDYJ,CA/DA,mFC0DI,UAAW,CACX,eAAgB,CAChB,eAAgB,CAHhB,yBDaJ,CAtEA,2ECkEI,uCAAwC,CACxC,wBAA2B,CAH3B,kBAAmB,CAMnB,WAAY,CALZ,aAAc,CAId,cAAe,CADf,YDYJ,CAhFA,qFC0EI,iBDUJ,CApFA,uEC+EI,qBAAyB,CADzB,iBDWJ,CAzFA,oMCyFI,kBAAmB,CADnB,mBDQJ,CAhGA,uECmGI,kBAAsB,CAEtB,QAAS,CALT,UAAW,CAEX,eAAgB,CADhB,SAAU,CAHV,iBAAkB,CAMlB,kBAAmB,CALnB,SDYJ,CA3GA,mFC0GI,uCAAwC,CAExC,kBAAmB,CADnB,YAAa,CAFb,eDSJ,CElHA,MACI,0BAA2B,CAC3B,sBAA0B,CAC1B,8BAA+B,CAC/B,8BAA+B,CAC/B,oBAAwB,CACxB,qBFoHJ,CEhHA,kCAEI,0BAA2B,CAC3B,0BACA,8BAA+B,CAC/B,8BAA+B,CAC/B,oBAAwB,CACxB,qBFkHJ","sources":["webpack://WebComponents/./runestone/dragndrop/css/dragndrop.less","webpack://WebComponents/./runestone/dragndrop/css/dragndrop.css","webpack://WebComponents/./runestone/common/css/variables.less"],"sourcesContent":[".ptx-runestone-container,.runestone-sphinx {\n @import (less) url(\"./dragndrop.css\");\n}\n\n@import (less) url(\"../../common/css/variables.less\");",".rsdraggable {\n margin-left: 1%;\n margin-right: 1%;\n margin-top: 5px;\n display: inline;\n float: left;\n text-align: left;\n vertical-align: top;\n background-color: var(--questionBgColor, #efefff);\n padding-bottom: 10px;\n min-width: 28%;\n border: 1px solid var(--componentBorderColor, #efefff);\n box-sizing: border-box;\n}\n\n.dnd-button-container {\n display: flex;\n justify-content: center;\n width: 100%;\n margin-top: 1em;\n}\n\n.drag-button {\n display: inline-block;\n}\n\n.drag-reset {\n background-color: #474949;\n color: white;\n}\n\n.drag-reset:hover {\n background-color: black;\n color: white;\n}\n\n.drop-incorrect {\n border: 1px solid var(--draggableIncorrectBorder, red) !important;\n background-color: var(--draggableIncorrectBg, #f2dede) !important;\n}\n\n.drag-reset:enabled {\n background-color: #474949;\n color: white;\n}\n\n.draggable-drag {\n border-radius: 10px;\n display: block;\n background-color: var(--draggableBgColor);\n border: 1px solid lightgray;\n padding: 10px;\n margin-top: 5px;\n cursor: grab;\n}\n\n.draggable-feedback {\n text-align: left !important;\n clear: both;\n margin-bottom: 0;\n margin-top: 10px;\n}\n\n.draggable-drop {\n border-radius: 10px;\n display: block;\n background-color: var(--dropableBgColor);\n border: 1px solid lightgray;\n padding: 10px;\n margin-top: 5px;\n cursor: grab;\n}\n\n.draggable-container {\n text-align: center;\n}\n\n.possibleDrop {\n border-color: #000000;\n background-color: #CCCCCC;\n}\n\n/*\n * This is a hack to allow us to drop on the drop target when\n * the drop area contains mathjax or or other child elements.\n*/\n.draggable-drop .process-math,\n.draggable-drop .MathJax {\n pointer-events: none;\n cursor: not-allowed;\n}\n\n/* Hide the error message from people but let screen readers see it */\n.vh-dnd-error {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.cardsort-statement {\n text-align: left;\n background-color: var(--questionBgColor);\n padding: 10px;\n margin-bottom: 10px;\n}",":root {\n --draggableBgColor: #EFEFEF;\n --dropableBgColor: #DDDDDD;\n --draggableIncorrectBorder: red;\n --draggableIncorrectBg: #f2dede;\n --dragLineColor: #000000;\n --boxBorderColor: #000000;\n\n}\n\n:root.dark-mode,\n[data-theme=\"dark\"] {\n --draggableBgColor: #393434;\n --dropableBgColor: #2a2d30;\n --draggableIncorrectBorder: red;\n --draggableIncorrectBg: #6d2d2d;\n --dragLineColor: #ffffff;\n --boxBorderColor: #ffffff;\n\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-621.8c109e297bdd8ce7.css.map.gz b/_static/prefix-621.8c109e297bdd8ce7.css.map.gz new file mode 100644 index 0000000..3e3549b Binary files /dev/null and b/_static/prefix-621.8c109e297bdd8ce7.css.map.gz differ diff --git a/_static/prefix-723.3bccd435914aa0ff.css b/_static/prefix-723.3bccd435914aa0ff.css new file mode 100644 index 0000000..6f7ea22 --- /dev/null +++ b/_static/prefix-723.3bccd435914aa0ff.css @@ -0,0 +1,185 @@ +/*! + * jQuery UI CSS Framework 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{border:0;font-size:100%;line-height:1.3;list-style:none;margin:0;outline:0;padding:0;text-decoration:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{border-collapse:collapse;content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{filter:Alpha(Opacity=0);height:100%;left:0;opacity:0;position:absolute;top:0;width:100%}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{background-repeat:no-repeat;display:block;overflow:hidden;text-indent:-99999px}.ui-widget-overlay{height:100%;left:0;position:fixed;top:0;width:100%} + +/*! + * jQuery UI Accordion 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/accordion/#theming + */.ui-accordion .ui-accordion-header{cursor:pointer;display:block;margin-top:2px;min-height:0;padding:.5em .5em .5em .7em;position:relative}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{left:.5em;margin-top:-8px;position:absolute;top:50%}.ui-accordion .ui-accordion-content{border-top:0;overflow:auto;padding:1em 2.2em} + +/*! + * jQuery UI Autocomplete 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/autocomplete/#theming + */.ui-autocomplete{cursor:default;left:0;position:absolute;top:0} + +/*! + * jQuery UI Button 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/button/#theming + */.ui-button{cursor:pointer;display:inline-block;line-height:normal;margin-right:.1em;overflow:visible;padding:0;position:relative;text-align:center;vertical-align:middle}.ui-button,.ui-button:active,.ui-button:hover,.ui-button:link,.ui-button:visited{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-icons-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon{margin-top:-8px;position:absolute;top:50%}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-icons-only .ui-button-icon-primary,.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary{left:.5em}.ui-button-icons-only .ui-button-icon-secondary,.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner,input.ui-button::-moz-focus-inner{border:0;padding:0} + +/*! + * jQuery UI Datepicker 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/datepicker/#theming + */.ui-datepicker{display:none;padding:.2em .2em 0;width:17em}.ui-datepicker .ui-datepicker-header{padding:.2em 0;position:relative}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{height:1.8em;position:absolute;top:2px;width:1.8em}.ui-datepicker .ui-datepicker-next-hover,.ui-datepicker .ui-datepicker-prev-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;left:50%;margin-left:-8px;margin-top:-8px;position:absolute;top:50%}.ui-datepicker .ui-datepicker-title{line-height:1.8em;margin:0 2.3em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{border-collapse:collapse;font-size:.9em;margin:0 0 .4em;width:100%}.ui-datepicker th{border:0;font-weight:700;padding:.7em .3em;text-align:center}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;border-bottom:0;border-left:0;border-right:0;margin:.7em 0 0;padding:0 .2em}.ui-datepicker .ui-datepicker-buttonpane button{cursor:pointer;float:right;margin:.5em .2em .4em;overflow:visible;padding:.2em .6em .3em;width:auto}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{margin:0 auto .4em;width:95%}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;font-size:0;width:100%}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{left:auto;right:2px}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{left:auto;right:1px}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:1px;border-right-width:0} + +/*! + * jQuery UI Dialog 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/dialog/#theming + */.ui-dialog{left:0;outline:0;overflow:hidden;padding:.2em;position:absolute;top:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:90%}.ui-dialog .ui-dialog-titlebar-close{height:20px;margin:-10px 0 0;padding:1px;position:absolute;right:.3em;top:50%;width:20px}.ui-dialog .ui-dialog-content{background:none;border:0;overflow:auto;padding:.5em 1em;position:relative}.ui-dialog .ui-dialog-buttonpane{background-image:none;border-width:1px 0 0;margin-top:.5em;padding:.3em 1em .5em .4em;text-align:left}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{cursor:pointer;margin:.5em .4em .5em 0}.ui-dialog .ui-resizable-se{background-position:16px 16px;bottom:-5px;height:12px;right:-5px;width:12px}.ui-draggable .ui-dialog-titlebar{cursor:move} + +/*! + * jQuery UI Menu 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/menu/#theming + */.ui-menu{display:block;list-style:none;margin:0;outline:none;padding:2px}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);margin:0;padding:0;width:100%}.ui-menu .ui-menu-divider{border-width:1px 0 0;font-size:0;height:0;line-height:0;margin:5px -2px}.ui-menu .ui-menu-item a{display:block;font-weight:400;line-height:1.5;min-height:0;padding:2px .4em;text-decoration:none}.ui-menu .ui-menu-item a.ui-state-active,.ui-menu .ui-menu-item a.ui-state-focus{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;line-height:1.5;margin:.4em 0 .2em}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{padding-left:2em;position:relative}.ui-menu .ui-icon{left:.2em;position:absolute;top:.2em}.ui-menu .ui-menu-icon{float:right;position:static} + +/*! + * jQuery UI Progressbar 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/progressbar/#theming + */.ui-progressbar{height:2em;overflow:hidden;text-align:left}.ui-progressbar .ui-progressbar-value{height:100%;margin:-1px}.ui-progressbar .ui-progressbar-overlay{background:url(data:image/gif;base64,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);filter:alpha(opacity=25);height:100%;opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none} + +/*! + * jQuery UI Resizable 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */.ui-resizable{position:relative}.ui-resizable-handle{display:block;font-size:.1px;position:absolute}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;left:0;top:-5px;width:100%}.ui-resizable-s{bottom:-5px;cursor:s-resize;height:7px;left:0;width:100%}.ui-resizable-e{cursor:e-resize;height:100%;right:-5px;top:0;width:7px}.ui-resizable-w{cursor:w-resize;height:100%;left:-5px;top:0;width:7px}.ui-resizable-se{bottom:1px;cursor:se-resize;height:12px;right:1px;width:12px}.ui-resizable-sw{bottom:-5px;cursor:sw-resize;height:9px;left:-5px;width:9px}.ui-resizable-nw{cursor:nw-resize;height:9px;left:-5px;top:-5px;width:9px}.ui-resizable-ne{cursor:ne-resize;height:9px;right:-5px;top:-5px;width:9px} + +/*! + * jQuery UI Selectable 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */.ui-selectable-helper{border:1px dotted #000;position:absolute;z-index:100} + +/*! + * jQuery UI Slider 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/slider/#theming + */.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{cursor:default;height:1.2em;position:absolute;width:1.2em;z-index:2}.ui-slider .ui-slider-range{background-position:0 0;border:0;display:block;font-size:.7em;position:absolute;z-index:1}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{margin-left:-.6em;top:-.3em}.ui-slider-horizontal .ui-slider-range{height:100%;top:0}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{height:100px;width:.8em}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-bottom:-.6em;margin-left:0}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0} + +/*! + * jQuery UI Spinner 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/spinner/#theming + */.ui-spinner{display:inline-block;overflow:hidden;position:relative}.ui-spinner,.ui-spinner-input{padding:0;vertical-align:middle}.ui-spinner-input{background:none;border:none;color:inherit;margin:.2em 22px .2em .4em}.ui-spinner-button{cursor:default;display:block;font-size:.5em;height:50%;margin:0;overflow:hidden;padding:0;position:absolute;right:0;text-align:center;width:16px}.ui-spinner a.ui-spinner-button{border-bottom:none;border-right:none;border-top:none}.ui-spinner .ui-icon{left:0;margin-top:-8px;position:absolute;top:50%}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px} + +/*! + * jQuery UI Tabs 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/tabs/#theming + */.ui-tabs{padding:.2em;position:relative}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{border-bottom-width:0;float:left;list-style:none;margin:1px .2em 0 0;padding:0;position:relative;top:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{background:none;border-width:0;display:block;padding:1em 1.4em} + +/*! + * jQuery UI Tooltip 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/tooltip/#theming + */.ui-tooltip{-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa;max-width:300px;padding:8px;position:absolute;z-index:9999}body .ui-tooltip{border-width:2px} + +/*! + * jQuery UI CSS Framework 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + */ + +/*! + * jQuery UI CSS Framework 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/ + */.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAD0ZHJ6AAAAeUlEQVRoge3OMQHAIBAAsVL/nh8JDDfAkCjImpn5HvbfDpwIVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJVhtqiwTEKTLXTgAAAABJRU5ErkJggg==) 50% 50% repeat-x;border:1px solid #aaa;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{background:#ccc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAYAAABHLFpgAAAALElEQVQYlWN49OjRfyYGBgaGIUT8//8fSqBx0Yh///4RL8vAwAAVQ2MNOwIAl6g6KkOJwk8AAAAASUVORK5CYII=) 50% 50% repeat-x;border:1px solid #aaa;color:#222;font-weight:700}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{background:#e6e6e6 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAANUlEQVQ4je3LMQoAIBADwb38/6t5wFXaWAiCtUiaYZvF9hBACOFbuntVVe11B0CSjjeE8BwThQIJ8dhEl0YAAAAASUVORK5CYII=) 50% 50% repeat-x;border:1px solid #d3d3d3;color:#555;font-weight:400}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-focus,.ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{background:#dadada url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAANklEQVQ4jWN48uTJfyYGBgaGUWKUGCWGLfHt2zcoi5GREYNgYmJCZiG42IiB98woMUqMEtgIAMdjCdyg+eEBAAAAAElFTkSuQmCC) 50% 50% repeat-x;border:1px solid #999;color:#212121;font-weight:400}.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAMElEQVQ4je3LIQ4AIBTD0O3f/8wrFgmKhMy8pKJKwkhSKeVbbGuAPU9f4PIopTxgAeS0DRtI4yK0AAAAAElFTkSuQmCC) 50% 50% repeat-x;border:1px solid #aaa;color:#212121;font-weight:400}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{background:#fbf9ee url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAP0lEQVQ4je3PMQrAMABC0a/3v2zX0mCXNkOgc6C4PARd5DqPGKCU8luS8SbAQhiCQRgJE56kZTfbbP9RSvnkBsWcEAZRWcgqAAAAAElFTkSuQmCC) 50% 50% repeat-x;border:1px solid #fcefa1;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{background:#fef1ec url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAPklEQVQ4je3PMQqAMABD0Z/c/7aCIAXjJIhD10LJ8vgZw30eMUApZV/GhZNgSTjoLYElY/hNMJ/S6gullCkPiCIPCr4NiEwAAAAASUVORK5CYII=) 50% 50% repeat-x;border:1px solid #cd0a0a;color:#cd0a0a}.ui-state-error a,.ui-state-error-text,.ui-widget-content .ui-state-error a,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error a,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{filter:Alpha(Opacity=70);font-weight:400;opacity:.7}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{background-image:none;filter:Alpha(Opacity=35);opacity:.35}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{height:16px;width:16px}.ui-icon,.ui-widget-content .ui-icon,.ui-widget-header .ui-icon{background-image:url(data:image/png;base64,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)}.ui-state-default .ui-icon{background-image:url(data:image/png;base64,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)}.ui-state-active .ui-icon,.ui-state-focus .ui-icon,.ui-state-hover .ui-icon{background-image:url(data:image/png;base64,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)}.ui-state-highlight .ui-icon{background-image:url(data:image/png;base64,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)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(data:image/png;base64,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)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-first,.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-left,.ui-corner-tl,.ui-corner-top{border-top-left-radius:4px}.ui-corner-all,.ui-corner-right,.ui-corner-top,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bl,.ui-corner-bottom,.ui-corner-left{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-br,.ui-corner-right{border-bottom-right-radius:4px}.ui-widget-overlay,.ui-widget-shadow{background:#aaa url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAD0ZHJ6AAAAe0lEQVRoge3OMQHAIBAAMcC/kjdZJHTI0A4XBdkz86wfO18H3hRUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUF8O8A8WdY6opAAAAAElFTkSuQmCC) 50% 50% repeat-x;filter:Alpha(Opacity=30);opacity:.3}.ui-widget-shadow{border-radius:8px;margin:-8px 0 0 -8px;padding:8px} + +/*! + * jQuery UI CSS Framework 1.10.4 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + */ +/*# sourceMappingURL=prefix-723.3bccd435914aa0ff.css.map*/ \ No newline at end of file diff --git a/_static/prefix-723.3bccd435914aa0ff.css.gz b/_static/prefix-723.3bccd435914aa0ff.css.gz new file mode 100644 index 0000000..a332c58 Binary files /dev/null and b/_static/prefix-723.3bccd435914aa0ff.css.gz differ diff --git a/_static/prefix-723.3bccd435914aa0ff.css.map b/_static/prefix-723.3bccd435914aa0ff.css.map new file mode 100644 index 0000000..e15dc8a --- /dev/null +++ b/_static/prefix-723.3bccd435914aa0ff.css.map @@ -0,0 +1 @@ +{"version":3,"file":"prefix-723.3bccd435914aa0ff.css","mappings":"AAAA;;;;;;;;;EASE,CAIF,kBACC,YACD,CACA,6BAEC,kBAAmB,CADnB,QAAS,CAET,UAAW,CACX,WAAY,CACZ,eAAgB,CAChB,SAAU,CACV,iBAAkB,CAClB,SACD,CACA,iBAGC,QAAS,CAIT,cAAe,CAFf,eAAgB,CAGhB,eAAgB,CAPhB,QAAS,CAGT,SAAU,CAFV,SAAU,CAIV,oBAGD,CACA,qDAIC,wBAAyB,CAFzB,UAAW,CACX,aAED,CACA,0BACC,UACD,CACA,oBACC,YACD,CACA,gBAOC,uBAAuB,CALvB,WAAY,CAEZ,MAAO,CAEP,SAAU,CADV,iBAAkB,CAFlB,KAAM,CAFN,UAOD,CAEA,UACC,WACD,CAKA,mBACC,wBACD,CAOA,SAIC,2BAA4B,CAH5B,aAAc,CAEd,eAAgB,CADhB,oBAGD,CAOA,mBAKC,WAAY,CAFZ,MAAO,CAFP,cAAe,CACf,KAAM,CAEN,UAED;;AC5FA;;;;;;;;;EASE,CACF,mCAEC,cAAe,CADf,aAAc,CAGd,cAAe,CAEf,YAAa,CADb,2BAA4B,CAF5B,iBAID,CACA,kCACC,kBACD,CACA,oCACC,iBACD,CACA,sDACC,kBACD,CACA,6DAEC,SAAU,CAEV,eAAgB,CAHhB,iBAAkB,CAElB,OAED,CACA,oCAEC,YAAa,CACb,aAAc,CAFd,iBAGD;;ACrCA;;;;;;;;;EASE,CACF,iBAIC,cAAe,CADf,MAAO,CAFP,iBAAkB,CAClB,KAGD;;ACfA;;;;;;;;;EASE,CACF,WAMC,cAAe,CALf,oBAAqB,CAGrB,kBAAmB,CACnB,iBAAkB,CAIlB,gBAAiB,CANjB,SAAU,CADV,iBAAkB,CAMlB,iBAAkB,CADlB,qBAGD,CACA,iFAKC,oBACD,CAEA,qBACC,WACD,CAEA,2BACC,WACD,CACA,sBACC,WACD,CACA,4BACC,WACD,CAGA,2BACC,aAAc,CACd,kBACD,CACA,qCACC,gBACD,CACA,2EAEC,YAAa,CACb,sBACD,CACA,mFAEC,2BACD,CACA,qFAEC,2BACD,CACA,sCACC,kBAAmB,CACnB,mBACD,CAEA,gBACC,gBACD,CAGA,0KAOC,eAAgB,CAFhB,iBAAkB,CAClB,OAED,CACA,8BACC,QAAS,CACT,gBACD,CACA,iJAGC,SACD,CACA,yJAGC,UACD,CAGA,cACC,gBACD,CACA,yBACC,aAAc,CACd,kBACD,CAIA,qEAEC,QAAS,CACT,SACD;;ACjHA;;;;;;;;;EASE,CACF,eAGC,YAAa,CADb,mBAAoB,CADpB,UAGD,CACA,qCAEC,cAAe,CADf,iBAED,CACA,sEAKC,YAAa,CAHb,iBAAkB,CAClB,OAAQ,CACR,WAED,CACA,kFAEC,OACD,CACA,mCACC,QACD,CACA,mCACC,SACD,CACA,yCACC,QACD,CACA,yCACC,SACD,CACA,gFAEC,aAAc,CAEd,QAAS,CACT,gBAAiB,CAEjB,eAAgB,CAJhB,iBAAkB,CAGlB,OAED,CACA,oCAEC,iBAAkB,CADlB,cAAe,CAEf,iBACD,CACA,2CACC,aAAc,CACd,YACD,CACA,mFAEC,SACD,CACA,qBAGC,wBAAyB,CADzB,cAAe,CAEf,eAAgB,CAHhB,UAID,CACA,kBAIC,QAAS,CADT,eAAiB,CAFjB,iBAAkB,CAClB,iBAGD,CACA,kBACC,QAAS,CACT,WACD,CACA,2CAEC,aAAc,CACd,YAAa,CACb,gBAAiB,CACjB,oBACD,CACA,yCACC,qBAAsB,CAKtB,eAAgB,CAFhB,aAAc,CACd,cAAe,CAHf,eAAkB,CAClB,cAID,CACA,gDAGC,cAAe,CAFf,WAAY,CACZ,qBAAsB,CAItB,gBAAiB,CAFjB,sBAA4B,CAC5B,UAED,CACA,sEACC,UACD,CAGA,mCACC,UACD,CACA,0CACC,UACD,CACA,gDAEC,kBAAmB,CADnB,SAED,CACA,4CACC,SACD,CACA,4CACC,WACD,CACA,4CACC,SACD,CACA,4IAEC,mBACD,CACA,+CACC,UACD,CACA,yBACC,UAAW,CAEX,WAAY,CADZ,UAED,CAGA,mBACC,aACD,CACA,uCAEC,SAAU,CADV,SAED,CACA,uCACC,QAAS,CACT,UACD,CACA,6CAEC,SAAU,CADV,SAED,CACA,6CACC,QAAS,CACT,UACD,CACA,6CACC,WACD,CACA,oDACC,UACD,CACA,kHAEC,WA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","sources":["webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.core.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.accordion.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.autocomplete.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.button.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.datepicker.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.dialog.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.menu.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.progressbar.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.resizable.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.selectable.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.slider.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.spinner.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.tabs.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.tooltip.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.base.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.theme.css","webpack://WebComponents/./node_modules/jquery-ui/themes/base/jquery.ui.all.css"],"sourcesContent":["/*!\n * jQuery UI CSS Framework 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n */\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden {\n\tdisplay: none;\n}\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(0 0 0 0);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n}\n.ui-helper-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\toutline: 0;\n\tline-height: 1.3;\n\ttext-decoration: none;\n\tfont-size: 100%;\n\tlist-style: none;\n}\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n\tcontent: \"\";\n\tdisplay: table;\n\tborder-collapse: collapse;\n}\n.ui-helper-clearfix:after {\n\tclear: both;\n}\n.ui-helper-clearfix {\n\tmin-height: 0; /* support: IE7 */\n}\n.ui-helper-zfix {\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tposition: absolute;\n\topacity: 0;\n\tfilter:Alpha(Opacity=0);\n}\n\n.ui-front {\n\tz-index: 100;\n}\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled {\n\tcursor: default !important;\n}\n\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\tdisplay: block;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n}\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n","/*!\n * jQuery UI Accordion 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/accordion/#theming\n */\n.ui-accordion .ui-accordion-header {\n\tdisplay: block;\n\tcursor: pointer;\n\tposition: relative;\n\tmargin-top: 2px;\n\tpadding: .5em .5em .5em .7em;\n\tmin-height: 0; /* support: IE7 */\n}\n.ui-accordion .ui-accordion-icons {\n\tpadding-left: 2.2em;\n}\n.ui-accordion .ui-accordion-noicons {\n\tpadding-left: .7em;\n}\n.ui-accordion .ui-accordion-icons .ui-accordion-icons {\n\tpadding-left: 2.2em;\n}\n.ui-accordion .ui-accordion-header .ui-accordion-header-icon {\n\tposition: absolute;\n\tleft: .5em;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-accordion .ui-accordion-content {\n\tpadding: 1em 2.2em;\n\tborder-top: 0;\n\toverflow: auto;\n}\n","/*!\n * jQuery UI Autocomplete 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/autocomplete/#theming\n */\n.ui-autocomplete {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tcursor: default;\n}\n","/*!\n * jQuery UI Button 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/button/#theming\n */\n.ui-button {\n\tdisplay: inline-block;\n\tposition: relative;\n\tpadding: 0;\n\tline-height: normal;\n\tmargin-right: .1em;\n\tcursor: pointer;\n\tvertical-align: middle;\n\ttext-align: center;\n\toverflow: visible; /* removes extra width in IE */\n}\n.ui-button,\n.ui-button:link,\n.ui-button:visited,\n.ui-button:hover,\n.ui-button:active {\n\ttext-decoration: none;\n}\n/* to make room for the icon, a width needs to be set here */\n.ui-button-icon-only {\n\twidth: 2.2em;\n}\n/* button elements seem to need a little more width */\nbutton.ui-button-icon-only {\n\twidth: 2.4em;\n}\n.ui-button-icons-only {\n\twidth: 3.4em;\n}\nbutton.ui-button-icons-only {\n\twidth: 3.7em;\n}\n\n/* button text element */\n.ui-button .ui-button-text {\n\tdisplay: block;\n\tline-height: normal;\n}\n.ui-button-text-only .ui-button-text {\n\tpadding: .4em 1em;\n}\n.ui-button-icon-only .ui-button-text,\n.ui-button-icons-only .ui-button-text {\n\tpadding: .4em;\n\ttext-indent: -9999999px;\n}\n.ui-button-text-icon-primary .ui-button-text,\n.ui-button-text-icons .ui-button-text {\n\tpadding: .4em 1em .4em 2.1em;\n}\n.ui-button-text-icon-secondary .ui-button-text,\n.ui-button-text-icons .ui-button-text {\n\tpadding: .4em 2.1em .4em 1em;\n}\n.ui-button-text-icons .ui-button-text {\n\tpadding-left: 2.1em;\n\tpadding-right: 2.1em;\n}\n/* no icon support for input elements, provide padding by default */\ninput.ui-button {\n\tpadding: .4em 1em;\n}\n\n/* button icon element(s) */\n.ui-button-icon-only .ui-icon,\n.ui-button-text-icon-primary .ui-icon,\n.ui-button-text-icon-secondary .ui-icon,\n.ui-button-text-icons .ui-icon,\n.ui-button-icons-only .ui-icon {\n\tposition: absolute;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-button-icon-only .ui-icon {\n\tleft: 50%;\n\tmargin-left: -8px;\n}\n.ui-button-text-icon-primary .ui-button-icon-primary,\n.ui-button-text-icons .ui-button-icon-primary,\n.ui-button-icons-only .ui-button-icon-primary {\n\tleft: .5em;\n}\n.ui-button-text-icon-secondary .ui-button-icon-secondary,\n.ui-button-text-icons .ui-button-icon-secondary,\n.ui-button-icons-only .ui-button-icon-secondary {\n\tright: .5em;\n}\n\n/* button sets */\n.ui-buttonset {\n\tmargin-right: 7px;\n}\n.ui-buttonset .ui-button {\n\tmargin-left: 0;\n\tmargin-right: -.3em;\n}\n\n/* workarounds */\n/* reset extra padding in Firefox, see h5bp.com/l */\ninput.ui-button::-moz-focus-inner,\nbutton.ui-button::-moz-focus-inner {\n\tborder: 0;\n\tpadding: 0;\n}\n","/*!\n * jQuery UI Datepicker 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/datepicker/#theming\n */\n.ui-datepicker {\n\twidth: 17em;\n\tpadding: .2em .2em 0;\n\tdisplay: none;\n}\n.ui-datepicker .ui-datepicker-header {\n\tposition: relative;\n\tpadding: .2em 0;\n}\n.ui-datepicker .ui-datepicker-prev,\n.ui-datepicker .ui-datepicker-next {\n\tposition: absolute;\n\ttop: 2px;\n\twidth: 1.8em;\n\theight: 1.8em;\n}\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover {\n\ttop: 1px;\n}\n.ui-datepicker .ui-datepicker-prev {\n\tleft: 2px;\n}\n.ui-datepicker .ui-datepicker-next {\n\tright: 2px;\n}\n.ui-datepicker .ui-datepicker-prev-hover {\n\tleft: 1px;\n}\n.ui-datepicker .ui-datepicker-next-hover {\n\tright: 1px;\n}\n.ui-datepicker .ui-datepicker-prev span,\n.ui-datepicker .ui-datepicker-next span {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-datepicker .ui-datepicker-title {\n\tmargin: 0 2.3em;\n\tline-height: 1.8em;\n\ttext-align: center;\n}\n.ui-datepicker .ui-datepicker-title select {\n\tfont-size: 1em;\n\tmargin: 1px 0;\n}\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n\twidth: 49%;\n}\n.ui-datepicker table {\n\twidth: 100%;\n\tfont-size: .9em;\n\tborder-collapse: collapse;\n\tmargin: 0 0 .4em;\n}\n.ui-datepicker th {\n\tpadding: .7em .3em;\n\ttext-align: center;\n\tfont-weight: bold;\n\tborder: 0;\n}\n.ui-datepicker td {\n\tborder: 0;\n\tpadding: 1px;\n}\n.ui-datepicker td span,\n.ui-datepicker td a {\n\tdisplay: block;\n\tpadding: .2em;\n\ttext-align: right;\n\ttext-decoration: none;\n}\n.ui-datepicker .ui-datepicker-buttonpane {\n\tbackground-image: none;\n\tmargin: .7em 0 0 0;\n\tpadding: 0 .2em;\n\tborder-left: 0;\n\tborder-right: 0;\n\tborder-bottom: 0;\n}\n.ui-datepicker .ui-datepicker-buttonpane button {\n\tfloat: right;\n\tmargin: .5em .2em .4em;\n\tcursor: pointer;\n\tpadding: .2em .6em .3em .6em;\n\twidth: auto;\n\toverflow: visible;\n}\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\n\tfloat: left;\n}\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi {\n\twidth: auto;\n}\n.ui-datepicker-multi .ui-datepicker-group {\n\tfloat: left;\n}\n.ui-datepicker-multi .ui-datepicker-group table {\n\twidth: 95%;\n\tmargin: 0 auto .4em;\n}\n.ui-datepicker-multi-2 .ui-datepicker-group {\n\twidth: 50%;\n}\n.ui-datepicker-multi-3 .ui-datepicker-group {\n\twidth: 33.3%;\n}\n.ui-datepicker-multi-4 .ui-datepicker-group {\n\twidth: 25%;\n}\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-left-width: 0;\n}\n.ui-datepicker-multi .ui-datepicker-buttonpane {\n\tclear: left;\n}\n.ui-datepicker-row-break {\n\tclear: both;\n\twidth: 100%;\n\tfont-size: 0;\n}\n\n/* RTL support */\n.ui-datepicker-rtl {\n\tdirection: rtl;\n}\n.ui-datepicker-rtl .ui-datepicker-prev {\n\tright: 2px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next {\n\tleft: 2px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\n\tright: 1px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next:hover {\n\tleft: 1px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\n\tclear: right;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\n\tfloat: left;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\n.ui-datepicker-rtl .ui-datepicker-group {\n\tfloat: right;\n}\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-right-width: 0;\n\tborder-left-width: 1px;\n}\n","/*!\n * jQuery UI Dialog 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/dialog/#theming\n */\n.ui-dialog {\n\toverflow: hidden;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding: .2em;\n\toutline: 0;\n}\n.ui-dialog .ui-dialog-titlebar {\n\tpadding: .4em 1em;\n\tposition: relative;\n}\n.ui-dialog .ui-dialog-title {\n\tfloat: left;\n\tmargin: .1em 0;\n\twhite-space: nowrap;\n\twidth: 90%;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-dialog .ui-dialog-titlebar-close {\n\tposition: absolute;\n\tright: .3em;\n\ttop: 50%;\n\twidth: 20px;\n\tmargin: -10px 0 0 0;\n\tpadding: 1px;\n\theight: 20px;\n}\n.ui-dialog .ui-dialog-content {\n\tposition: relative;\n\tborder: 0;\n\tpadding: .5em 1em;\n\tbackground: none;\n\toverflow: auto;\n}\n.ui-dialog .ui-dialog-buttonpane {\n\ttext-align: left;\n\tborder-width: 1px 0 0 0;\n\tbackground-image: none;\n\tmargin-top: .5em;\n\tpadding: .3em 1em .5em .4em;\n}\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {\n\tfloat: right;\n}\n.ui-dialog .ui-dialog-buttonpane button {\n\tmargin: .5em .4em .5em 0;\n\tcursor: pointer;\n}\n.ui-dialog .ui-resizable-se {\n\twidth: 12px;\n\theight: 12px;\n\tright: -5px;\n\tbottom: -5px;\n\tbackground-position: 16px 16px;\n}\n.ui-draggable .ui-dialog-titlebar {\n\tcursor: move;\n}\n","/*!\n * jQuery UI Menu 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/menu/#theming\n */\n.ui-menu {\n\tlist-style: none;\n\tpadding: 2px;\n\tmargin: 0;\n\tdisplay: block;\n\toutline: none;\n}\n.ui-menu .ui-menu {\n\tmargin-top: -3px;\n\tposition: absolute;\n}\n.ui-menu .ui-menu-item {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\t/* support: IE10, see #8844 */\n\tlist-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n}\n.ui-menu .ui-menu-divider {\n\tmargin: 5px -2px 5px -2px;\n\theight: 0;\n\tfont-size: 0;\n\tline-height: 0;\n\tborder-width: 1px 0 0 0;\n}\n.ui-menu .ui-menu-item a {\n\ttext-decoration: none;\n\tdisplay: block;\n\tpadding: 2px .4em;\n\tline-height: 1.5;\n\tmin-height: 0; /* support: IE7 */\n\tfont-weight: normal;\n}\n.ui-menu .ui-menu-item a.ui-state-focus,\n.ui-menu .ui-menu-item a.ui-state-active {\n\tfont-weight: normal;\n\tmargin: -1px;\n}\n\n.ui-menu .ui-state-disabled {\n\tfont-weight: normal;\n\tmargin: .4em 0 .2em;\n\tline-height: 1.5;\n}\n.ui-menu .ui-state-disabled a {\n\tcursor: default;\n}\n\n/* icon support */\n.ui-menu-icons {\n\tposition: relative;\n}\n.ui-menu-icons .ui-menu-item a {\n\tposition: relative;\n\tpadding-left: 2em;\n}\n\n/* left-aligned */\n.ui-menu .ui-icon {\n\tposition: absolute;\n\ttop: .2em;\n\tleft: .2em;\n}\n\n/* right-aligned */\n.ui-menu .ui-menu-icon {\n\tposition: static;\n\tfloat: right;\n}\n","/*!\n * jQuery UI Progressbar 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/progressbar/#theming\n */\n.ui-progressbar {\n\theight: 2em;\n\ttext-align: left;\n\toverflow: hidden;\n}\n.ui-progressbar .ui-progressbar-value {\n\tmargin: -1px;\n\theight: 100%;\n}\n.ui-progressbar .ui-progressbar-overlay {\n\tbackground: url(\"images/animated-overlay.gif\");\n\theight: 100%;\n\tfilter: alpha(opacity=25);\n\topacity: 0.25;\n}\n.ui-progressbar-indeterminate .ui-progressbar-value {\n\tbackground-image: none;\n}\n","/*!\n * jQuery UI Resizable 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n.ui-resizable {\n\tposition: relative;\n}\n.ui-resizable-handle {\n\tposition: absolute;\n\tfont-size: 0.1px;\n\tdisplay: block;\n}\n.ui-resizable-disabled .ui-resizable-handle,\n.ui-resizable-autohide .ui-resizable-handle {\n\tdisplay: none;\n}\n.ui-resizable-n {\n\tcursor: n-resize;\n\theight: 7px;\n\twidth: 100%;\n\ttop: -5px;\n\tleft: 0;\n}\n.ui-resizable-s {\n\tcursor: s-resize;\n\theight: 7px;\n\twidth: 100%;\n\tbottom: -5px;\n\tleft: 0;\n}\n.ui-resizable-e {\n\tcursor: e-resize;\n\twidth: 7px;\n\tright: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-w {\n\tcursor: w-resize;\n\twidth: 7px;\n\tleft: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-se {\n\tcursor: se-resize;\n\twidth: 12px;\n\theight: 12px;\n\tright: 1px;\n\tbottom: 1px;\n}\n.ui-resizable-sw {\n\tcursor: sw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\tbottom: -5px;\n}\n.ui-resizable-nw {\n\tcursor: nw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\ttop: -5px;\n}\n.ui-resizable-ne {\n\tcursor: ne-resize;\n\twidth: 9px;\n\theight: 9px;\n\tright: -5px;\n\ttop: -5px;\n}\n","/*!\n * jQuery UI Selectable 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n.ui-selectable-helper {\n\tposition: absolute;\n\tz-index: 100;\n\tborder: 1px dotted black;\n}\n","/*!\n * jQuery UI Slider 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/slider/#theming\n */\n.ui-slider {\n\tposition: relative;\n\ttext-align: left;\n}\n.ui-slider .ui-slider-handle {\n\tposition: absolute;\n\tz-index: 2;\n\twidth: 1.2em;\n\theight: 1.2em;\n\tcursor: default;\n}\n.ui-slider .ui-slider-range {\n\tposition: absolute;\n\tz-index: 1;\n\tfont-size: .7em;\n\tdisplay: block;\n\tborder: 0;\n\tbackground-position: 0 0;\n}\n\n/* For IE8 - See #6727 */\n.ui-slider.ui-state-disabled .ui-slider-handle,\n.ui-slider.ui-state-disabled .ui-slider-range {\n\tfilter: inherit;\n}\n\n.ui-slider-horizontal {\n\theight: .8em;\n}\n.ui-slider-horizontal .ui-slider-handle {\n\ttop: -.3em;\n\tmargin-left: -.6em;\n}\n.ui-slider-horizontal .ui-slider-range {\n\ttop: 0;\n\theight: 100%;\n}\n.ui-slider-horizontal .ui-slider-range-min {\n\tleft: 0;\n}\n.ui-slider-horizontal .ui-slider-range-max {\n\tright: 0;\n}\n\n.ui-slider-vertical {\n\twidth: .8em;\n\theight: 100px;\n}\n.ui-slider-vertical .ui-slider-handle {\n\tleft: -.3em;\n\tmargin-left: 0;\n\tmargin-bottom: -.6em;\n}\n.ui-slider-vertical .ui-slider-range {\n\tleft: 0;\n\twidth: 100%;\n}\n.ui-slider-vertical .ui-slider-range-min {\n\tbottom: 0;\n}\n.ui-slider-vertical .ui-slider-range-max {\n\ttop: 0;\n}\n","/*!\n * jQuery UI Spinner 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/spinner/#theming\n */\n.ui-spinner {\n\tposition: relative;\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tpadding: 0;\n\tvertical-align: middle;\n}\n.ui-spinner-input {\n\tborder: none;\n\tbackground: none;\n\tcolor: inherit;\n\tpadding: 0;\n\tmargin: .2em 0;\n\tvertical-align: middle;\n\tmargin-left: .4em;\n\tmargin-right: 22px;\n}\n.ui-spinner-button {\n\twidth: 16px;\n\theight: 50%;\n\tfont-size: .5em;\n\tpadding: 0;\n\tmargin: 0;\n\ttext-align: center;\n\tposition: absolute;\n\tcursor: default;\n\tdisplay: block;\n\toverflow: hidden;\n\tright: 0;\n}\n/* more specificity required here to override default borders */\n.ui-spinner a.ui-spinner-button {\n\tborder-top: none;\n\tborder-bottom: none;\n\tborder-right: none;\n}\n/* vertically center icon */\n.ui-spinner .ui-icon {\n\tposition: absolute;\n\tmargin-top: -8px;\n\ttop: 50%;\n\tleft: 0;\n}\n.ui-spinner-up {\n\ttop: 0;\n}\n.ui-spinner-down {\n\tbottom: 0;\n}\n\n/* TR overrides */\n.ui-spinner .ui-icon-triangle-1-s {\n\t/* need to fix icons sprite */\n\tbackground-position: -65px -16px;\n}\n","/*!\n * jQuery UI Tabs 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/tabs/#theming\n */\n.ui-tabs {\n\tposition: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n\tpadding: .2em;\n}\n.ui-tabs .ui-tabs-nav {\n\tmargin: 0;\n\tpadding: .2em .2em 0;\n}\n.ui-tabs .ui-tabs-nav li {\n\tlist-style: none;\n\tfloat: left;\n\tposition: relative;\n\ttop: 0;\n\tmargin: 1px .2em 0 0;\n\tborder-bottom-width: 0;\n\tpadding: 0;\n\twhite-space: nowrap;\n}\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\n\tfloat: left;\n\tpadding: .5em 1em;\n\ttext-decoration: none;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\n\tmargin-bottom: -1px;\n\tpadding-bottom: 1px;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {\n\tcursor: text;\n}\n.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {\n\tcursor: pointer;\n}\n.ui-tabs .ui-tabs-panel {\n\tdisplay: block;\n\tborder-width: 0;\n\tpadding: 1em 1.4em;\n\tbackground: none;\n}\n","/*!\n * jQuery UI Tooltip 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/tooltip/#theming\n */\n.ui-tooltip {\n\tpadding: 8px;\n\tposition: absolute;\n\tz-index: 9999;\n\tmax-width: 300px;\n\t-webkit-box-shadow: 0 0 5px #aaa;\n\tbox-shadow: 0 0 5px #aaa;\n}\nbody .ui-tooltip {\n\tborder-width: 2px;\n}\n","/*!\n * jQuery UI CSS Framework 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n */\n@import url(\"jquery.ui.core.css\");\n\n@import url(\"jquery.ui.accordion.css\");\n@import url(\"jquery.ui.autocomplete.css\");\n@import url(\"jquery.ui.button.css\");\n@import url(\"jquery.ui.datepicker.css\");\n@import url(\"jquery.ui.dialog.css\");\n@import url(\"jquery.ui.menu.css\");\n@import url(\"jquery.ui.progressbar.css\");\n@import url(\"jquery.ui.resizable.css\");\n@import url(\"jquery.ui.selectable.css\");\n@import url(\"jquery.ui.slider.css\");\n@import url(\"jquery.ui.spinner.css\");\n@import url(\"jquery.ui.tabs.css\");\n@import url(\"jquery.ui.tooltip.css\");\n","/*!\n * jQuery UI CSS Framework 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n *\n * To view and modify this theme, visit http://jqueryui.com/themeroller/\n */\n\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n\tfont-family: Verdana,Arial,sans-serif/*{ffDefault}*/;\n\tfont-size: 1.1em/*{fsDefault}*/;\n}\n.ui-widget .ui-widget {\n\tfont-size: 1em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n\tfont-family: Verdana,Arial,sans-serif/*{ffDefault}*/;\n\tfont-size: 1em;\n}\n.ui-widget-content {\n\tborder: 1px solid #aaaaaa/*{borderColorContent}*/;\n\tbackground: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/;\n\tcolor: #222222/*{fcContent}*/;\n}\n.ui-widget-content a {\n\tcolor: #222222/*{fcContent}*/;\n}\n.ui-widget-header {\n\tborder: 1px solid #aaaaaa/*{borderColorHeader}*/;\n\tbackground: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/;\n\tcolor: #222222/*{fcHeader}*/;\n\tfont-weight: bold;\n}\n.ui-widget-header a {\n\tcolor: #222222/*{fcHeader}*/;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default {\n\tborder: 1px solid #d3d3d3/*{borderColorDefault}*/;\n\tbackground: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/;\n\tfont-weight: normal/*{fwDefault}*/;\n\tcolor: #555555/*{fcDefault}*/;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited {\n\tcolor: #555555/*{fcDefault}*/;\n\ttext-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus {\n\tborder: 1px solid #999999/*{borderColorHover}*/;\n\tbackground: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/;\n\tfont-weight: normal/*{fwDefault}*/;\n\tcolor: #212121/*{fcHover}*/;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited {\n\tcolor: #212121/*{fcHover}*/;\n\ttext-decoration: none;\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active {\n\tborder: 1px solid #aaaaaa/*{borderColorActive}*/;\n\tbackground: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/;\n\tfont-weight: normal/*{fwDefault}*/;\n\tcolor: #212121/*{fcActive}*/;\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: #212121/*{fcActive}*/;\n\ttext-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid #fcefa1/*{borderColorHighlight}*/;\n\tbackground: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/;\n\tcolor: #363636/*{fcHighlight}*/;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: #363636/*{fcHighlight}*/;\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: 1px solid #cd0a0a/*{borderColorError}*/;\n\tbackground: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/;\n\tcolor: #cd0a0a/*{fcError}*/;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #cd0a0a/*{fcError}*/;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #cd0a0a/*{fcError}*/;\n}\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n\tfont-weight: bold;\n}\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n\topacity: .7;\n\tfilter:Alpha(Opacity=70);\n\tfont-weight: normal;\n}\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n\topacity: .35;\n\tfilter:Alpha(Opacity=35);\n\tbackground-image: none;\n}\n.ui-state-disabled .ui-icon {\n\tfilter:Alpha(Opacity=35); /* For IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n.ui-icon,\n.ui-widget-content .ui-icon {\n\tbackground-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/;\n}\n.ui-widget-header .ui-icon {\n\tbackground-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/;\n}\n.ui-state-default .ui-icon {\n\tbackground-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/;\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon {\n\tbackground-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/;\n}\n.ui-state-active .ui-icon {\n\tbackground-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/;\n}\n.ui-state-highlight .ui-icon {\n\tbackground-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/;\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/;\n}\n\n/* positioning */\n.ui-icon-blank { background-position: 16px 16px; }\n.ui-icon-carat-1-n { background-position: 0 0; }\n.ui-icon-carat-1-ne { background-position: -16px 0; }\n.ui-icon-carat-1-e { background-position: -32px 0; }\n.ui-icon-carat-1-se { background-position: -48px 0; }\n.ui-icon-carat-1-s { background-position: -64px 0; }\n.ui-icon-carat-1-sw { background-position: -80px 0; }\n.ui-icon-carat-1-w { background-position: -96px 0; }\n.ui-icon-carat-1-nw { background-position: -112px 0; }\n.ui-icon-carat-2-n-s { background-position: -128px 0; }\n.ui-icon-carat-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -64px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -64px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 0 -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-on { background-position: -96px -144px; }\n.ui-icon-radio-off { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n\tborder-top-left-radius: 4px/*{cornerRadius}*/;\n}\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n\tborder-top-right-radius: 4px/*{cornerRadius}*/;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n\tborder-bottom-left-radius: 4px/*{cornerRadius}*/;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n\tborder-bottom-right-radius: 4px/*{cornerRadius}*/;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/;\n\topacity: .3/*{opacityOverlay}*/;\n\tfilter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/;\n}\n.ui-widget-shadow {\n\tmargin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/;\n\tpadding: 8px/*{thicknessShadow}*/;\n\tbackground: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/;\n\topacity: .3/*{opacityShadow}*/;\n\tfilter: Alpha(Opacity=30)/*{opacityFilterShadow}*/;\n\tborder-radius: 8px/*{cornerRadiusShadow}*/;\n}\n","/*!\n * jQuery UI CSS Framework 1.10.4\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n */\n@import \"jquery.ui.base.css\";\n@import \"jquery.ui.theme.css\";\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/prefix-723.3bccd435914aa0ff.css.map.gz b/_static/prefix-723.3bccd435914aa0ff.css.map.gz new file mode 100644 index 0000000..878dcc2 Binary files /dev/null and b/_static/prefix-723.3bccd435914aa0ff.css.map.gz differ diff --git a/_static/prefix-723.3e6434f80549315a.bundle.js b/_static/prefix-723.3e6434f80549315a.bundle.js new file mode 100644 index 0000000..41efc17 --- /dev/null +++ b/_static/prefix-723.3e6434f80549315a.bundle.js @@ -0,0 +1,3 @@ +/*! For license information please see prefix-723.3e6434f80549315a.bundle.js.LICENSE.txt */ +(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[723],{52754:()=>{if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");!function(){"use strict";var t=jQuery.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1==t[0]&&9==t[1]&&t[2]<1||t[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(),function(t){"use strict";t.fn.emulateTransitionEnd=function(e){var i=!1,s=this;return t(this).one("bsTransitionEnd",(function(){i=!0})),setTimeout((function(){i||t(s).trigger(t.support.transition.end)}),e),this},t((function(){t.support.transition=function(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})}))}(jQuery),function(t){"use strict";var e='[data-dismiss="alert"]',i=function(i){t(i).on("click",e,this.close)};i.VERSION="3.4.1",i.TRANSITION_DURATION=150,i.prototype.close=function(e){var s=t(this),n=s.attr("data-target");n||(n=(n=s.attr("href"))&&n.replace(/.*(?=#[^\s]*$)/,"")),n="#"===n?[]:n;var o=t(document).find(n);function a(){o.detach().trigger("closed.bs.alert").remove()}e&&e.preventDefault(),o.length||(o=s.closest(".alert")),o.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(o.removeClass("in"),t.support.transition&&o.hasClass("fade")?o.one("bsTransitionEnd",a).emulateTransitionEnd(i.TRANSITION_DURATION):a())};var s=t.fn.alert;t.fn.alert=function(e){return this.each((function(){var s=t(this),n=s.data("bs.alert");n||s.data("bs.alert",n=new i(this)),"string"==typeof e&&n[e].call(s)}))},t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=s,this},t(document).on("click.bs.alert.data-api",e,i.prototype.close)}(jQuery),function(t){"use strict";var e=function(i,s){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,s),this.isLoading=!1};function i(i){return this.each((function(){var s=t(this),n=s.data("bs.button"),o="object"==typeof i&&i;n||s.data("bs.button",n=new e(this,o)),"toggle"==i?n.toggle():i&&n.setState(i)}))}e.VERSION="3.4.1",e.DEFAULTS={loadingText:"loading..."},e.prototype.setState=function(e){var i="disabled",s=this.$element,n=s.is("input")?"val":"html",o=s.data();e+="Text",null==o.resetText&&s.data("resetText",s[n]()),setTimeout(t.proxy((function(){s[n](null==o[e]?this.options[e]:o[e]),"loadingText"==e?(this.isLoading=!0,s.addClass(i).attr(i,i).prop(i,!0)):this.isLoading&&(this.isLoading=!1,s.removeClass(i).removeAttr(i).prop(i,!1))}),this),0)},e.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var s=t.fn.button;t.fn.button=i,t.fn.button.Constructor=e,t.fn.button.noConflict=function(){return t.fn.button=s,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(e){var s=t(e.target).closest(".btn");i.call(s,"toggle"),t(e.target).is('input[type="radio"], input[type="checkbox"]')||(e.preventDefault(),s.is("input,button")?s.trigger("focus"):s.find("input:visible,button:visible").first().trigger("focus"))})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))}))}(jQuery),function(t){"use strict";var e=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};function i(i){return this.each((function(){var s=t(this),n=s.data("bs.carousel"),o=t.extend({},e.DEFAULTS,s.data(),"object"==typeof i&&i),a="string"==typeof i?i:o.slide;n||s.data("bs.carousel",n=new e(this,o)),"number"==typeof i?n.to(i):a?n[a]():o.interval&&n.pause().cycle()}))}e.VERSION="3.4.1",e.TRANSITION_DURATION=600,e.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},e.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},e.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},e.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},e.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e);if(("prev"==t&&0===i||"next"==t&&i==this.$items.length-1)&&!this.options.wrap)return e;var s=(i+("prev"==t?-1:1))%this.$items.length;return this.$items.eq(s)},e.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",(function(){e.to(t)})):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},e.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},e.prototype.next=function(){if(!this.sliding)return this.slide("next")},e.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},e.prototype.slide=function(i,s){var n=this.$element.find(".item.active"),o=s||this.getItemForDirection(i,n),a=this.interval,r="next"==i?"left":"right",l=this;if(o.hasClass("active"))return this.sliding=!1;var h=o[0],c=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(c),!c.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var u=t(this.$indicators.children()[this.getItemIndex(o)]);u&&u.addClass("active")}var d=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(o.addClass(i),"object"==typeof o&&o.length&&o[0].offsetWidth,n.addClass(r),o.addClass(r),n.one("bsTransitionEnd",(function(){o.removeClass([i,r].join(" ")).addClass("active"),n.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout((function(){l.$element.trigger(d)}),0)})).emulateTransitionEnd(e.TRANSITION_DURATION)):(n.removeClass("active"),o.addClass("active"),this.sliding=!1,this.$element.trigger(d)),a&&this.cycle(),this}};var s=t.fn.carousel;t.fn.carousel=i,t.fn.carousel.Constructor=e,t.fn.carousel.noConflict=function(){return t.fn.carousel=s,this};var n=function(e){var s=t(this),n=s.attr("href");n&&(n=n.replace(/.*(?=#[^\s]+$)/,""));var o=s.attr("data-target")||n,a=t(document).find(o);if(a.hasClass("carousel")){var r=t.extend({},a.data(),s.data()),l=s.attr("data-slide-to");l&&(r.interval=!1),i.call(a,r),l&&a.data("bs.carousel").to(l),e.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",n).on("click.bs.carousel.data-api","[data-slide-to]",n),t(window).on("load",(function(){t('[data-ride="carousel"]').each((function(){var e=t(this);i.call(e,e.data())}))}))}(jQuery),function(t){"use strict";var e=function(i,s){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,s),this.$trigger=t('[data-toggle="collapse"][href="#'+i.id+'"],[data-toggle="collapse"][data-target="#'+i.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function i(e){var i,s=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return t(document).find(s)}function s(i){return this.each((function(){var s=t(this),n=s.data("bs.collapse"),o=t.extend({},e.DEFAULTS,s.data(),"object"==typeof i&&i);!n&&o.toggle&&/show|hide/.test(i)&&(o.toggle=!1),n||s.data("bs.collapse",n=new e(this,o)),"string"==typeof i&&n[i]()}))}e.VERSION="3.4.1",e.TRANSITION_DURATION=350,e.DEFAULTS={toggle:!0},e.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},e.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var i,n=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(n&&n.length&&(i=n.data("bs.collapse"))&&i.transitioning)){var o=t.Event("show.bs.collapse");if(this.$element.trigger(o),!o.isDefaultPrevented()){n&&n.length&&(s.call(n,"hide"),i||n.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(e.TRANSITION_DURATION)[a](this.$element[0][l])}}}},e.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var i=t.Event("hide.bs.collapse");if(this.$element.trigger(i),!i.isDefaultPrevented()){var s=this.dimension();this.$element[s](this.$element[s]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var n=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!t.support.transition)return n.call(this);this.$element[s](0).one("bsTransitionEnd",t.proxy(n,this)).emulateTransitionEnd(e.TRANSITION_DURATION)}}},e.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},e.prototype.getParent=function(){return t(document).find(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy((function(e,s){var n=t(s);this.addAriaAndCollapsedClass(i(n),n)}),this)).end()},e.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var n=t.fn.collapse;t.fn.collapse=s,t.fn.collapse.Constructor=e,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(e){var n=t(this);n.attr("data-target")||e.preventDefault();var o=i(n),a=o.data("bs.collapse")?"toggle":n.data();s.call(o,a)}))}(jQuery),function(t){"use strict";var e='[data-toggle="dropdown"]',i=function(e){t(e).on("click.bs.dropdown",this.toggle)};function s(e){var i=e.attr("data-target");i||(i=(i=e.attr("href"))&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var s="#"!==i?t(document).find(i):null;return s&&s.length?s:e.parent()}function n(i){i&&3===i.which||(t(".dropdown-backdrop").remove(),t(e).each((function(){var e=t(this),n=s(e),o={relatedTarget:this};n.hasClass("open")&&(i&&"click"==i.type&&/input|textarea/i.test(i.target.tagName)&&t.contains(n[0],i.target)||(n.trigger(i=t.Event("hide.bs.dropdown",o)),i.isDefaultPrevented()||(e.attr("aria-expanded","false"),n.removeClass("open").trigger(t.Event("hidden.bs.dropdown",o)))))})))}i.VERSION="3.4.1",i.prototype.toggle=function(e){var i=t(this);if(!i.is(".disabled, :disabled")){var o=s(i),a=o.hasClass("open");if(n(),!a){"ontouchstart"in document.documentElement&&!o.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",n);var r={relatedTarget:this};if(o.trigger(e=t.Event("show.bs.dropdown",r)),e.isDefaultPrevented())return;i.trigger("focus").attr("aria-expanded","true"),o.toggleClass("open").trigger(t.Event("shown.bs.dropdown",r))}return!1}},i.prototype.keydown=function(i){if(/(38|40|27|32)/.test(i.which)&&!/input|textarea/i.test(i.target.tagName)){var n=t(this);if(i.preventDefault(),i.stopPropagation(),!n.is(".disabled, :disabled")){var o=s(n),a=o.hasClass("open");if(!a&&27!=i.which||a&&27==i.which)return 27==i.which&&o.find(e).trigger("focus"),n.trigger("click");var r=o.find(".dropdown-menu li:not(.disabled):visible a");if(r.length){var l=r.index(i.target);38==i.which&&l>0&&l--,40==i.which&&ldocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},e.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},e.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
                ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]}},r.prototype.init=function(e,i,s){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(s),this.$viewport=this.options.viewport&&t(document).find(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var n=this.options.trigger.split(" "),o=n.length;o--;){var a=n[o];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},r.prototype.getDefaults=function(){return r.DEFAULTS},r.prototype.getOptions=function(i){var s=this.$element.data();for(var n in s)s.hasOwnProperty(n)&&-1!==t.inArray(n,e)&&delete s[n];return(i=t.extend({},this.getDefaults(),s,i)).delay&&"number"==typeof i.delay&&(i.delay={show:i.delay,hide:i.delay}),i.sanitize&&(i.template=a(i.template,i.whiteList,i.sanitizeFn)),i},r.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,(function(t,s){i[t]!=s&&(e[t]=s)})),e},r.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusin"==e.type?"focus":"hover"]=!0),i.tip().hasClass("in")||"in"==i.hoverState)i.hoverState="in";else{if(clearTimeout(i.timeout),i.hoverState="in",!i.options.delay||!i.options.delay.show)return i.show();i.timeout=setTimeout((function(){"in"==i.hoverState&&i.show()}),i.options.delay.show)}},r.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},r.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusout"==e.type?"focus":"hover"]=!1),!i.isInStateTrue()){if(clearTimeout(i.timeout),i.hoverState="out",!i.options.delay||!i.options.delay.hide)return i.hide();i.timeout=setTimeout((function(){"out"==i.hoverState&&i.hide()}),i.options.delay.hide)}},r.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var i=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!i)return;var s=this,n=this.tip(),o=this.getUID(this.type);this.setContent(),n.attr("id",o),this.$element.attr("aria-describedby",o),this.options.animation&&n.addClass("fade");var a="function"==typeof this.options.placement?this.options.placement.call(this,n[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,h=l.test(a);h&&(a=a.replace(l,"")||"top"),n.detach().css({top:0,left:0,display:"block"}).addClass(a).data("bs."+this.type,this),this.options.container?n.appendTo(t(document).find(this.options.container)):n.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var c=this.getPosition(),u=n[0].offsetWidth,d=n[0].offsetHeight;if(h){var p=a,f=this.getPosition(this.$viewport);a="bottom"==a&&c.bottom+d>f.bottom?"top":"top"==a&&c.top-df.width?"left":"left"==a&&c.left-ua.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-o,c=e.left+o+i;ha.right&&(n.left=a.left+a.width-c)}return n},r.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},r.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},r.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},r.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},r.prototype.enable=function(){this.enabled=!0},r.prototype.disable=function(){this.enabled=!1},r.prototype.toggleEnabled=function(){this.enabled=!this.enabled},r.prototype.toggle=function(e){var i=this;e&&((i=t(e.currentTarget).data("bs."+this.type))||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass("in")?i.leave(i):i.enter(i)},r.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide((function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null}))},r.prototype.sanitizeHtml=function(t){return a(t,this.options.whiteList,this.options.sanitizeFn)};var l=t.fn.tooltip;t.fn.tooltip=function(e){return this.each((function(){var i=t(this),s=i.data("bs.tooltip"),n="object"==typeof e&&e;!s&&/destroy|hide/.test(e)||(s||i.data("bs.tooltip",s=new r(this,n)),"string"==typeof e&&s[e]())}))},t.fn.tooltip.Constructor=r,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=l,this}}(jQuery),function(t){"use strict";var e=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");e.VERSION="3.4.1",e.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),(e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype)).constructor=e,e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();if(this.options.html){var s=typeof i;this.options.sanitize&&(e=this.sanitizeHtml(e),"string"===s&&(i=this.sanitizeHtml(i))),t.find(".popover-title").html(e),t.find(".popover-content").children().detach().end()["string"===s?"html":"append"](i)}else t.find(".popover-title").text(e),t.find(".popover-content").children().detach().end().text(i);t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},e.prototype.hasContent=function(){return this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=t.fn.popover;t.fn.popover=function(i){return this.each((function(){var s=t(this),n=s.data("bs.popover"),o="object"==typeof i&&i;!n&&/destroy|hide/.test(i)||(n||s.data("bs.popover",n=new e(this,o)),"string"==typeof i&&n[i]())}))},t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}(jQuery),function(t){"use strict";function e(i,s){this.$body=t(document.body),this.$scrollElement=t(i).is(document.body)?t(window):t(i),this.options=t.extend({},e.DEFAULTS,s),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function i(i){return this.each((function(){var s=t(this),n=s.data("bs.scrollspy"),o="object"==typeof i&&i;n||s.data("bs.scrollspy",n=new e(this,o)),"string"==typeof i&&n[i]()}))}e.VERSION="3.4.1",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,i="offset",s=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",s=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map((function(){var e=t(this),n=e.data("target")||e.attr("href"),o=/^#./.test(n)&&t(n);return o&&o.length&&o.is(":visible")&&[[o[i]().top+s,n]]||null})).sort((function(t,e){return t[0]-e[0]})).each((function(){e.offsets.push(this[0]),e.targets.push(this[1])}))},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),s=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,o=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=s)return a!=(t=o[o.length-1])&&this.activate(t);if(a&&e=n[t]&&(void 0===n[t+1]||e .active"),a=n&&t.support.transition&&(o.length&&o.hasClass("fade")||!!s.find("> .fade").length);function r(){o.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),i.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),a?(i[0].offsetWidth,i.addClass("in")):i.removeClass("fade"),i.parent(".dropdown-menu").length&&i.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),n&&n()}o.length&&a?o.one("bsTransitionEnd",r).emulateTransitionEnd(e.TRANSITION_DURATION):r(),o.removeClass("in")};var s=t.fn.tab;t.fn.tab=i,t.fn.tab.Constructor=e,t.fn.tab.noConflict=function(){return t.fn.tab=s,this};var n=function(e){e.preventDefault(),i.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',n).on("click.bs.tab.data-api",'[data-toggle="pill"]',n)}(jQuery),function(t){"use strict";var e=function(i,s){this.options=t.extend({},e.DEFAULTS,s);var n=this.options.target===e.DEFAULTS.target?t(this.options.target):t(document).find(this.options.target);this.$target=n.on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(i),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function i(i){return this.each((function(){var s=t(this),n=s.data("bs.affix"),o="object"==typeof i&&i;n||s.data("bs.affix",n=new e(this,o)),"string"==typeof i&&n[i]()}))}e.VERSION="3.4.1",e.RESET="affix affix-top affix-bottom",e.DEFAULTS={offset:0,target:window},e.prototype.getState=function(t,e,i,s){var n=this.$target.scrollTop(),o=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return n=t-s&&"bottom"},e.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(e.RESET).addClass("affix");var t=this.$target.scrollTop(),i=this.$element.offset();return this.pinnedOffset=i.top-t},e.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},e.prototype.checkPosition=function(){if(this.$element.is(":visible")){var i=this.$element.height(),s=this.options.offset,n=s.top,o=s.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof s&&(o=n=s),"function"==typeof n&&(n=s.top(this.$element)),"function"==typeof o&&(o=s.bottom(this.$element));var r=this.getState(a,i,n,o);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(e.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-i-o})}};var s=t.fn.affix;t.fn.affix=i,t.fn.affix.Constructor=e,t.fn.affix.noConflict=function(){return t.fn.affix=s,this},t(window).on("load",(function(){t('[data-spy="affix"]').each((function(){var e=t(this),s=e.data();s.offset=s.offset||{},null!=s.offsetBottom&&(s.offset.bottom=s.offsetBottom),null!=s.offsetTop&&(s.offset.top=s.offsetTop),i.call(e,s)}))}))}(jQuery)},67375:(t,e,i)=>{var s,n,o=i(41669);!function(t,e){var i,s,n=0,o=/^ui-id-\d+$/;function a(e,i){var s,n,o,a=e.nodeName.toLowerCase();return"area"===a?(n=(s=e.parentNode).name,!(!e.href||!n||"map"!==s.nodeName.toLowerCase())&&!!(o=t("img[usemap=#"+n+"]")[0])&&r(o)):(/input|select|textarea|button|object/.test(a)?!e.disabled:"a"===a&&e.href||i)&&r(e)}function r(e){return t.expr.filters.visible(e)&&!t(e).parents().addBack().filter((function(){return"hidden"===t.css(this,"visibility")})).length}t.ui=t.ui||{},t.extend(t.ui,{version:"1.10.3",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),t.fn.extend({focus:(i=t.fn.focus,function(e,s){return"number"==typeof e?this.each((function(){var i=this;setTimeout((function(){t(i).focus(),s&&s.call(i)}),e)})):i.apply(this,arguments)}),scrollParent:function(){var e;return e=t.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter((function(){return/(relative|absolute|fixed)/.test(t.css(this,"position"))&&/(auto|scroll)/.test(t.css(this,"overflow")+t.css(this,"overflow-y")+t.css(this,"overflow-x"))})).eq(0):this.parents().filter((function(){return/(auto|scroll)/.test(t.css(this,"overflow")+t.css(this,"overflow-y")+t.css(this,"overflow-x"))})).eq(0),/fixed/.test(this.css("position"))||!e.length?t(document):e},zIndex:function(i){if(i!==e)return this.css("zIndex",i);if(this.length)for(var s,n,o=t(this[0]);o.length&&o[0]!==document;){if(("absolute"===(s=o.css("position"))||"relative"===s||"fixed"===s)&&(n=parseInt(o.css("zIndex"),10),!isNaN(n)&&0!==n))return n;o=o.parent()}return 0},uniqueId:function(){return this.each((function(){this.id||(this.id="ui-id-"+ ++n)}))},removeUniqueId:function(){return this.each((function(){o.test(this.id)&&t(this).removeAttr("id")}))}}),t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo((function(e){return function(i){return!!t.data(i,e)}})):function(e,i,s){return!!t.data(e,s[3])},focusable:function(e){return a(e,!isNaN(t.attr(e,"tabindex")))},tabbable:function(e){var i=t.attr(e,"tabindex"),s=isNaN(i);return(s||i>=0)&&a(e,!s)}}),t("").outerWidth(1).jquery||t.each(["Width","Height"],(function(i,s){var n="Width"===s?["Left","Right"]:["Top","Bottom"],o=s.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};function r(e,i,s,o){return t.each(n,(function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)})),i}t.fn["inner"+s]=function(i){return i===e?a["inner"+s].call(this):this.each((function(){t(this).css(o,r(this,i)+"px")}))},t.fn["outer"+s]=function(e,i){return"number"!=typeof e?a["outer"+s].call(this,e):this.each((function(){t(this).css(o,r(this,e,!0,i)+"px")}))}})),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t("").data("a-b","a").removeData("a-b").data("a-b")&&(t.fn.removeData=(s=t.fn.removeData,function(e){return arguments.length?s.call(this,t.camelCase(e)):s.call(this)})),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),t.support.selectstart="onselectstart"in document.createElement("div"),t.fn.extend({disableSelection:function(){return this.bind((t.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",(function(t){t.preventDefault()}))},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),t.extend(t.ui,{plugin:{add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i){var s,n=t.plugins[e];if(n&&t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType)for(s=0;s0||(e[n]=1,s=e[n]>0,e[n]=0,s)}})}(o),function(t,e){var i=0,s=Array.prototype.slice,n=t.cleanData;t.cleanData=function(e){for(var i,s=0;null!=(i=e[s]);s++)try{t(i).triggerHandler("remove")}catch(t){}n(e)},t.widget=function(e,i,s){var n,o,a,r,l={},h=e.split(".")[0];e=e.split(".")[1],n=h+"-"+e,s||(s=i,i=t.Widget),t.expr[":"][n.toLowerCase()]=function(e){return!!t.data(e,n)},t[h]=t[h]||{},o=t[h][e],a=t[h][e]=function(t,e){if(!this._createWidget)return new a(t,e);arguments.length&&this._createWidget(t,e)},t.extend(a,o,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),(r=new i).options=t.widget.extend({},r.options),t.each(s,(function(e,s){var n,o;t.isFunction(s)?l[e]=(n=function(){return i.prototype[e].apply(this,arguments)},o=function(t){return i.prototype[e].apply(this,t)},function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}):l[e]=s})),a.prototype=t.widget.extend(r,{widgetEventPrefix:o?r.widgetEventPrefix:e},l,{constructor:a,namespace:h,widgetName:e,widgetFullName:n}),o?(t.each(o._childConstructors,(function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,a,i._proto)})),delete o._childConstructors):i._childConstructors.push(a),t.widget.bridge(e,a)},t.widget.extend=function(i){for(var n,o,a=s.call(arguments,1),r=0,l=a.length;r",options:{disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this.bindings=t(),this.hoverable=t(),this.focusable=t(),s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:t.noop,_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:t.noop,widget:function(){return this.element},option:function(i,s){var n,o,a,r=i;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof i)if(r={},n=i.split("."),i=n.shift(),n.length){for(o=r[i]=t.widget.extend({},this.options[i]),a=0;a=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(t){t.widget("ui.draggable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(e){var i=this.options;return!(this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0||(this.handle=this._getHandle(e),!this.handle||(t(!0===i.iframeFix?"iframe":i.iframeFix).each((function(){t("
                ").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(t(this).offset()).appendTo("body")})),0)))},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),!1===this._trigger("start",e)?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_mouseDrag:function(e,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(!1===this._trigger("drag",e,s))return this._mouseUp({}),!1;this.position=s.position}return this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),!("original"===this.options.helper&&!t.contains(this.element[0].ownerDocument,this.element[0])||("invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||!0===this.options.revert||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),(function(){!1!==i._trigger("stop",e)&&i._clear()})):!1!==this._trigger("stop",e)&&this._clear(),1))},_mouseUp:function(e){return t("div.ui-draggable-iframeFix").each((function(){this.parentNode.removeChild(this)})),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(e){return!this.options.handle||!!t(e.target).closest(this.element.find(this.options.handle)).length},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.element.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;n.containment?"window"!==n.containment?"document"!==n.containment?n.containment.constructor!==Array?("parent"===n.containment&&(n.containment=this.helper[0].parentNode),(s=(i=t(n.containment))[0])&&(e="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i)):this.containment=n.containment:this.containment=[0,0,t(document).width()-this.helperProportions.width-this.margins.left,(t(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]:this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]:this.containment=null},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent;return this.offset.scroll||(this.offset.scroll={top:n.scrollTop(),left:n.scrollLeft()}),{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top)*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)*s}},_generatePosition:function(e){var i,s,n,o,a=this.options,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,l=e.pageX,h=e.pageY;return this.offset.scroll||(this.offset.scroll={top:r.scrollTop(),left:r.scrollLeft()}),this.originalPosition&&(this.containment&&(this.relative_container?(s=this.relative_container.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.lefti[2]&&(l=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(h=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,h=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((l-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,l=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o)),{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top),left:l-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s]),"drag"===e&&(this.positionAbs=this._convertPositionTo("absolute")),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i){var s=t(this).data("ui-draggable"),n=s.options,o=t.extend({},i,{item:s.element});s.sortables=[],t(n.connectToSortable).each((function(){var i=t.data(this,"ui-sortable");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",e,o))}))},stop:function(e,i){var s=t(this).data("ui-draggable"),n=t.extend({},i,{item:s.element});t.each(s.sortables,(function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(e),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",e,n))}))},drag:function(e,i){var s=t(this).data("ui-draggable"),n=this;t.each(s.sortables,(function(){var o=!1,a=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(o=!0,t.each(s.sortables,(function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==a&&this.instance._intersectsWith(this.instance.containerCache)&&t.contains(a.instance.element[0],this.instance.element[0])&&(o=!1),o}))),o?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=t(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},e.target=this.instance.currentItem[0],this.instance._mouseCapture(e,!0),this.instance._mouseStart(e,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",e),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(e)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",e,this.instance._uiHash(this.instance)),this.instance._mouseStop(e,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",e),s.dropped=!1)}))}}),t.ui.plugin.add("draggable","cursor",{start:function(){var e=t("body"),i=t(this).data("ui-draggable").options;e.css("cursor")&&(i._cursor=e.css("cursor")),e.css("cursor",i.cursor)},stop:function(){var e=t(this).data("ui-draggable").options;e._cursor&&t("body").css("cursor",e._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i){var s=t(i.helper),n=t(this).data("ui-draggable").options;s.css("opacity")&&(n._opacity=s.css("opacity")),s.css("opacity",n.opacity)},stop:function(e,i){var s=t(this).data("ui-draggable").options;s._opacity&&t(i.helper).css("opacity",s._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(){var e=t(this).data("ui-draggable");e.scrollParent[0]!==document&&"HTML"!==e.scrollParent[0].tagName&&(e.overflowOffset=e.scrollParent.offset())},drag:function(e){var i=t(this).data("ui-draggable"),s=i.options,n=!1;i.scrollParent[0]!==document&&"HTML"!==i.scrollParent[0].tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+i.scrollParent[0].offsetHeight-e.pageY=0;u--)l=(r=p.snapElements[u].left)+p.snapElements[u].width,c=(h=p.snapElements[u].top)+p.snapElements[u].height,vl+g||_c+g||!t.contains(p.snapElements[u].item.ownerDocument,p.snapElements[u].item)?(p.snapElements[u].snapping&&p.options.snap.release&&p.options.snap.release.call(p.element,e,t.extend(p._uiHash(),{snapItem:p.snapElements[u].item})),p.snapElements[u].snapping=!1):("inner"!==f.snapMode&&(s=Math.abs(h-_)<=g,n=Math.abs(c-b)<=g,o=Math.abs(r-v)<=g,a=Math.abs(l-m)<=g,s&&(i.position.top=p._convertPositionTo("relative",{top:h-p.helperProportions.height,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:c,left:0}).top-p.margins.top),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r-p.helperProportions.width}).left-p.margins.left),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:l}).left-p.margins.left)),d=s||n||o||a,"outer"!==f.snapMode&&(s=Math.abs(h-b)<=g,n=Math.abs(c-_)<=g,o=Math.abs(r-m)<=g,a=Math.abs(l-v)<=g,s&&(i.position.top=p._convertPositionTo("relative",{top:h,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:c-p.helperProportions.height,left:0}).top-p.margins.top),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r}).left-p.margins.left),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:l-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[u].snapping&&(s||n||o||a||d)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,e,t.extend(p._uiHash(),{snapItem:p.snapElements[u].item})),p.snapElements[u].snapping=s||n||o||a||d)}}),t.ui.plugin.add("draggable","stack",{start:function(){var e,i=this.data("ui-draggable").options,s=t.makeArray(t(i.stack)).sort((function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)}));s.length&&(e=parseInt(t(s[0]).css("zIndex"),10)||0,t(s).each((function(i){t(this).css("zIndex",e+i)})),this.css("zIndex",e+s.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i){var s=t(i.helper),n=t(this).data("ui-draggable").options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(e,i){var s=t(this).data("ui-draggable").options;s._zIndex&&t(i.helper).css("zIndex",s._zIndex)}})}(o),function(t){function e(t,e,i){return t>e&&t=u&&r<=d||l>=u&&l<=d||rd)&&(o>=h&&o<=c||a>=h&&a<=c||oc);default:return!1}},t.ui.ddmanager={current:null,droppables:{default:[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;s").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),e=this.handles.split(","),this.handles={},i=0;i")).css({zIndex:a.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(e){var i,s,n,o;for(i in e=e||this.element,this.handles)this.handles[i].constructor===String&&(this.handles[i]=t(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),t(this.handles[i]).length},this._renderAxis(this.element),this._handles=t(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover((function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")})),a.autoHide&&(this._handles.hide(),t(this.element).addClass("ui-resizable-autohide").mouseenter((function(){a.disabled||(t(this).removeClass("ui-resizable-autohide"),o._handles.show())})).mouseleave((function(){a.disabled||o.resizing||(t(this).addClass("ui-resizable-autohide"),o._handles.hide())}))),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)((s=t(this.handles[i])[0])===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,o,a=this.options,r=this.element.position(),l=this.element;return this.resizing=!0,/absolute/.test(l.css("position"))?l.css({position:"absolute",top:l.css("top"),left:l.css("left")}):l.is(".ui-draggable")&&l.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=e(this.helper.css("left")),n=e(this.helper.css("top")),a.containment&&(s+=t(a.containment).scrollLeft()||0,n+=t(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:l.outerWidth(),height:l.outerHeight()}:{width:l.width(),height:l.height()},this.originalSize=this._helper?{width:l.outerWidth(),height:l.outerHeight()}:{width:l.width(),height:l.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:l.outerWidth()-l.width(),height:l.outerHeight()-l.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,o=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===o?this.axis+"-resize":o),l.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(e){var i,s=this.helper,n={},o=this.originalMousePosition,a=this.axis,r=this.position.top,l=this.position.left,h=this.size.width,c=this.size.height,u=e.pageX-o.left||0,d=e.pageY-o.top||0,p=this._change[a];return!!p&&(i=p.apply(this,[e,u,d]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==l&&(n.left=this.position.left+"px"),this.size.width!==h&&(n.width=this.size.width+"px"),this.size.height!==c&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(n)||this._trigger("resize",e,this.ui()),!1)},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,l,h=this.options,c=this;return this._helper&&(n=(s=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&t.ui.hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null,l=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null,h.animate||this.element.css(t.extend(a,{top:l,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!h.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(t){var e,s,n,o,a,r=this.options;a={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||t)&&(e=a.minHeight*this.aspectRatio,n=a.minWidth/this.aspectRatio,s=a.maxHeight*this.aspectRatio,o=a.maxWidth/this.aspectRatio,e>a.minWidth&&(a.minWidth=e),n>a.minHeight&&(a.minHeight=n),st.width,r=i(t.height)&&e.minHeight&&e.minHeight>t.height,l=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,c=/sw|nw|w/.test(s),u=/nw|ne|n/.test(s);return a&&(t.width=e.minWidth),r&&(t.height=e.minHeight),n&&(t.width=e.maxWidth),o&&(t.height=e.maxHeight),a&&c&&(t.left=l-e.minWidth),n&&c&&(t.left=l-e.maxWidth),r&&u&&(t.top=h-e.minHeight),o&&u&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var t,e,i,s,n,o=this.helper||this.element;for(t=0;t"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&t.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,l={width:i.size.width-r,height:i.size.height-a},h=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,c=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(l,c&&h?{top:c,left:h}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,o,a,r,l,h=t(this).data("ui-resizable"),c=h.options,u=h.element,d=c.containment,p=d instanceof t?d.get(0):/parent/.test(d)?u.parent().get(0):d;p&&(h.containerElement=t(p),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(i=t(p),s=[],t(["Top","Right","Left","Bottom"]).each((function(t,n){s[t]=e(i.css("padding"+n))})),h.containerOffset=i.offset(),h.containerPosition=i.position(),h.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=h.containerOffset,o=h.containerSize.height,a=h.containerSize.width,r=t.ui.hasScroll(p,"left")?p.scrollWidth:a,l=t.ui.hasScroll(p)?p.scrollHeight:o,h.parentData={element:p,left:n.left,top:n.top,width:r,height:l}))},resize:function(e){var i,s,n,o,a=t(this).data("ui-resizable"),r=a.options,l=a.containerOffset,h=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(u=l),h.left<(a._helper?l.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-l.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio),a.position.left=r.helper?l.left:0),h.top<(a._helper?l.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-l.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio),a.position.top=a._helper?l.top:0),a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top,i=Math.abs((a._helper,a.offset.left-u.left+a.sizeDiff.width)),s=Math.abs((a._helper?a.offset.top-u.top:a.offset.top-l.top)+a.sizeDiff.height),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o&&(i-=a.parentData.left),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio))},stop:function(){var e=t(this).data("ui-resizable"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),l=a.outerWidth()-e.sizeDiff.width,h=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:l,height:h}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:l,height:h})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).data("ui-resizable").options,i=function(e){t(e).each((function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseInt(e.width(),10),height:parseInt(e.height(),10),left:parseInt(e.css("left"),10),top:parseInt(e.css("top"),10)})}))};"object"!=typeof e.alsoResize||e.alsoResize.parentNode?i(e.alsoResize):e.alsoResize.length?(e.alsoResize=e.alsoResize[0],i(e.alsoResize)):t.each(e.alsoResize,(function(t){i(t)}))},resize:function(e,i){var s=t(this).data("ui-resizable"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0},l=function(e,s){t(e).each((function(){var e=t(this),n=t(this).data("ui-resizable-alsoresize"),o={},a=s&&s.length?s:e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(a,(function(t,e){var i=(n[e]||0)+(r[e]||0);i&&i>=0&&(o[e]=i||null)})),e.css(o)}))};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?l(n.alsoResize):t.each(n.alsoResize,(function(t,e){l(t,e)}))},stop:function(){t(this).removeData("resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).data("ui-resizable"),i=e.options,s=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).data("ui-resizable");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).data("ui-resizable");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e=t(this).data("ui-resizable"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,a=e.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,l=r[0]||1,h=r[1]||1,c=Math.round((s.width-n.width)/l)*l,u=Math.round((s.height-n.height)/h)*h,d=n.width+c,p=n.height+u,f=i.maxWidth&&i.maxWidthd,v=i.minHeight&&i.minHeight>p;i.grid=r,m&&(d+=l),v&&(p+=h),f&&(d-=l),g&&(p-=h),/^(se|s|e)$/.test(a)?(e.size.width=d,e.size.height=p):/^(ne)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.top=o.top-u):/^(sw)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.left=o.left-c):(e.size.width=d,e.size.height=p,e.position.top=o.top-u,e.position.left=o.left-c)}})}(o),function(t){t.widget("ui.selectable",t.ui.mouse,{version:"1.10.3",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){(e=t(i.options.filter,i.element[0])).addClass("ui-selectee"),e.each((function(){var e=t(this),i=e.offset();t.data(this,"selectable-item",{element:this,$element:e,left:i.left,top:i.top,right:i.left+e.outerWidth(),bottom:i.top+e.outerHeight(),startselected:!1,selected:e.hasClass("ui-selected"),selecting:e.hasClass("ui-selecting"),unselecting:e.hasClass("ui-unselecting")})}))},this.refresh(),this.selectees=e.addClass("ui-selectee"),this._mouseInit(),this.helper=t("
                ")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each((function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))})),t(e.target).parents().addBack().each((function(){var s,n=t.data(this,"selectable-item");if(n)return s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1})))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,l=e.pageY;return o>r&&(i=r,r=o,o=i),a>l&&(i=l,l=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:l-a}),this.selectees.each((function(){var i=t.data(this,"selectable-item"),h=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?h=!(i.left>r||i.rightl||i.bottomo&&i.righta&&i.bottome&&t *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var t=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=!!this.items.length&&("x"===t.axis||i(this.items[0].item)),this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_setOption:function(e,i){"disabled"===e?(this.options[e]=i,this.widget().toggleClass("ui-sortable-disabled",!!i)):t.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return!(this.reverting||this.options.disabled||"static"===this.options.type||(this._refreshItems(e),t(e.target).parents().each((function(){if(t.data(this,o.widgetName+"-item")===o)return s=t(this),!1})),t.data(e.target,o.widgetName+"-item")===o&&(s=t(e.target)),!s||this.options.handle&&!i&&(t(this.options.handle,s).find("*").addBack().each((function(){this===e.target&&(n=!0)})),!n)||(this.currentItem=s,this._removeCurrentsFromItems(),0)))},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY=0;i--)if(n=(s=this.items[i]).item[0],(o=this._intersectsWithPointer(s))&&s.instance===this.currentContainer&&!(n===this.currentItem[0]||this.placeholder[1===o?"next":"prev"]()[0]===n||t.contains(this.placeholder[0],n)||"semi-dynamic"===this.options.type&&t.contains(this.element[0],n))){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,(function(){s._clear(e)}))}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each((function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))})),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each((function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")})),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,l=r+t.height,h=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+h>r&&s+ho&&e+ct[this.floating?"width":"height"]?p:o0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,s,n,o,a=[],r=[],l=this._connectWith();if(l&&e)for(i=l.length-1;i>=0;i--)for(s=(n=t(l[i])).length-1;s>=0;s--)(o=t.data(n[s],this.widgetFullName))&&o!==this&&!o.options.disabled&&r.push([t.isFunction(o.options.items)?o.options.items.call(o.element):t(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(r.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=r.length-1;i>=0;i--)r[i][0].each((function(){a.push(this)}));return t(a)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,(function(t){for(var i=0;i=0;i--)for(s=(n=t(d[i])).length-1;s>=0;s--)(o=t.data(n[s],this.widgetFullName))&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],s=0,h=(r=u[i][0]).length;s=0;i--)(s=this.items[i]).instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){var i,s=(e=e||this).options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]).addClass(i||e.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?e.currentItem.children().each((function(){t(" ",e.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(n)})):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){i&&!s.forcePlaceholderSize||(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_contactContainers:function(s){var n,o,a,r,l,h,c,u,d,p,f=null,g=null;for(n=this.containers.length-1;n>=0;n--)if(!t.contains(this.currentItem[0],this.containers[n].element[0]))if(this._intersectsWith(this.containers[n].containerCache)){if(f&&t.contains(this.containers[n].element[0],f.element[0]))continue;f=this.containers[n],g=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",s,this._uiHash(this)),this.containers[n].containerCache.over=0);if(f)if(1===this.containers.length)this.containers[g].containerCache.over||(this.containers[g]._trigger("over",s,this._uiHash(this)),this.containers[g].containerCache.over=1);else{for(a=1e4,r=null,l=(p=f.floating||i(this.currentItem))?"left":"top",h=p?"width":"height",c=this.positionAbs[l]+this.offset.click[l],o=this.items.length-1;o>=0;o--)t.contains(this.containers[g].element[0],this.items[o].item[0])&&this.items[o].item[0]!==this.currentItem[0]&&(p&&!e(this.positionAbs.top+this.offset.click.top,this.items[o].top,this.items[o].height)||(u=this.items[o].item.offset()[l],d=!1,Math.abs(u-c)>Math.abs(u+this.items[o][h]-c)&&(d=!0,u+=this.items[o][h]),Math.abs(u-c)this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():l?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():l?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay((function(){n===this.counter&&this.refreshPositions(!s)}))},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)"auto"!==this._storedCSS[i]&&"static"!==this._storedCSS[i]||(this._storedCSS[i]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&s.push((function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))})),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push((function(t){this._trigger("update",t,this._uiHash())})),this!==this.currentContainer&&(e||(s.push((function(t){this._trigger("remove",t,this._uiHash())})),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i>=0;i--)e||s.push(function(t){return function(e){t._trigger("deactivate",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(function(t){return function(e){t._trigger("out",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!e){for(this._trigger("beforeStop",t,this._uiHash()),i=0;i")[0],c=t.each;function u(t,e,i){var s=r[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:s.max-1,c(a,(function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}})),o.fn=t.extend(o.prototype,{parse:function(s,n,r,l){if(s===e)return this._rgba=[null,null,null,null],this;(s.jquery||s.nodeType)&&(s=t(s).css(n),n=e);var h=this,p=t.type(s),f=this._rgba=[];return n!==e&&(s=[s,n,r,l],p="array"),"string"===p?this.parse(d(s)||i._default):"array"===p?(c(a.rgba.props,(function(t,e){f[e.idx]=u(s[e.idx],e)})),this):"object"===p?(c(a,s instanceof o?function(t,e){s[e.cache]&&(h[e.cache]=s[e.cache].slice())}:function(e,i){var n=i.cache;c(i.props,(function(t,e){if(!h[n]&&i.to){if("alpha"===t||null==s[t])return;h[n]=i.to(h._rgba)}h[n][e.idx]=u(s[t],e,!0)})),h[n]&&t.inArray(null,h[n].slice(0,3))<0&&(h[n][3]=1,i.from&&(h._rgba=i.from(h[n])))}),this):void 0},is:function(t){var e=o(t),i=!0,s=this;return c(a,(function(t,n){var o,a=e[n.cache];return a&&(o=s[n.cache]||n.to&&n.to(s._rgba)||[],c(n.props,(function(t,e){if(null!=a[e.idx])return i=a[e.idx]===o[e.idx]}))),i})),i},_space:function(){var t=[],e=this;return c(a,(function(i,s){e[s.cache]&&t.push(i)})),t.pop()},transition:function(t,e){var i=o(t),s=i._space(),n=a[s],l=0===this.alpha()?o("transparent"):this,h=l[n.cache]||n.to(l._rgba),d=h.slice();return i=i[n.cache],c(n.props,(function(t,s){var n=s.idx,o=h[n],a=i[n],l=r[s.type]||{};null!==a&&(null===o?d[n]=a:(l.mod&&(a-o>l.mod/2?o+=l.mod:o-a>l.mod/2&&(o-=l.mod)),d[n]=u((a-o)*e+o,s)))})),this[s](d)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=o(e)._rgba;return o(t.map(i,(function(t,e){return(1-s)*n[e]+s*t})))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,(function(t,e){return null==t?e>2?1:0:t}));return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),(function(t,e){return null==t&&(t=e>2?1:0),e&&e<3&&(t=Math.round(100*t)+"%"),t}));return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,(function(t){return 1===(t=(t||0).toString(16)).length?"0"+t:t})).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),o.fn.parse.prototype=o.fn,a.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),l=Math.min(s,n,o),h=r-l,c=r+l,u=.5*c;return e=l===r?0:s===r?60*(n-o)/h+360:n===r?60*(o-s)/h+120:60*(s-n)/h+240,i=0===h?0:u<=.5?h/c:h/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},a.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],n=t[3],o=s<=.5?s*(1+i):s+i-s*i,a=2*s-o;return[Math.round(255*p(a,o,e+1/3)),Math.round(255*p(a,o,e)),Math.round(255*p(a,o,e-1/3)),n]},c(a,(function(i,n){var a=n.props,r=n.cache,l=n.to,h=n.from;o.fn[i]=function(i){if(l&&!this[r]&&(this[r]=l(this._rgba)),i===e)return this[r].slice();var s,n=t.type(i),d="array"===n||"object"===n?i:arguments,p=this[r].slice();return c(a,(function(t,e){var i=d["object"===n?t:e.idx];null==i&&(i=p[e.idx]),p[e.idx]=u(i,e)})),h?((s=o(h(p)))[r]=p,s):o(p)},c(a,(function(e,n){o.fn[e]||(o.fn[e]=function(o){var a,r=t.type(o),l="alpha"===e?this._hsla?"hsla":"rgba":i,h=this[l](),c=h[n.idx];return"undefined"===r?c:("function"===r&&(o=o.call(this,c),r=t.type(o)),null==o&&n.empty?this:("string"===r&&(a=s.exec(o))&&(o=c+parseFloat(a[2])*("+"===a[1]?1:-1)),h[n.idx]=o,this[l](h)))})}))})),o.hook=function(e){var i=e.split(" ");c(i,(function(e,i){t.cssHooks[i]={set:function(e,s){var n,a,r="";if("transparent"!==s&&("string"!==t.type(s)||(n=d(s)))){if(s=o(n||s),!l.rgba&&1!==s._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(t){}s=s.blend(r&&"transparent"!==r?r:"_default")}s=s.toRgbaString()}try{e.style[i]=s}catch(t){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=o(e.elem,i),e.end=o(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}}))},o.hook("backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor"),t.cssHooks.borderColor={expand:function(t){var e={};return c(["Top","Right","Bottom","Left"],(function(i,s){e["border"+s+"Color"]=t})),e}},i=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(o),function(){var i,s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};function a(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)"string"==typeof n[i=n[s]]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],(function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(o.style(t.elem,i,t.end),t.setAttr=!0)}})),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(e,i,o,r){var l=t.speed(i,o,r);return this.queue((function(){var i,o=t(this),r=o.attr("class")||"",h=l.children?o.find("*").addBack():o;h=h.map((function(){return{el:t(this),start:a(this)}})),(i=function(){t.each(s,(function(t,i){e[i]&&o[i+"Class"](e[i])}))})(),h=h.map((function(){return this.end=a(this.el[0]),this.diff=function(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||!t.fx.step[s]&&isNaN(parseFloat(o))||(a[s]=o));return a}(this.start,this.end),this})),o.attr("class",r),h=h.map((function(){var e=this,i=t.Deferred(),s=t.extend({},l,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()})),t.when.apply(t,h.get()).done((function(){i(),t.each(arguments,(function(){var e=this.el;t.each(this.diff,(function(t){e.css(t,"")}))})),l.complete.call(o[0])}))}))},t.fn.extend({addClass:(i=t.fn.addClass,function(e,s,n,o){return s?t.effects.animateClass.call(this,{add:e},s,n,o):i.apply(this,arguments)}),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(i){return function(s,n,o,a,r){return"boolean"==typeof n||n===e?o?t.effects.animateClass.call(this,n?{add:s}:{remove:s},o,a,r):i.apply(this,arguments):t.effects.animateClass.call(this,{toggle:s},n,o,a)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function i(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function n(e){return!(e&&"number"!=typeof e&&!t.fx.speeds[e])||"string"==typeof e&&!t.effects.effect[e]||!!t.isFunction(e)||"object"==typeof e&&!e.effect}var o;t.extend(t.effects,{version:"1.10.3",save:function(t,e){for(var i=0;i").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(t){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).focus(),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],(function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")})),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).focus()),e},setTransition:function(e,i,s,n){return n=n||{},t.each(i,(function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])})),n}}),t.fn.extend({effect:function(){var e=i.apply(this,arguments),s=e.mode,n=e.queue,o=t.effects.effect[e.effect];if(t.fx.off||!o)return s?this[s](e.duration,e.complete):this.each((function(){e.complete&&e.complete.call(this)}));function a(i){var s=t(this),n=e.complete,a=e.mode;function r(){t.isFunction(n)&&n.call(s[0]),t.isFunction(i)&&i()}(s.is(":hidden")?"hide"===a:"show"===a)?(s[a](),r()):o.call(s[0],e,r)}return!1===n?this.each(a):this.queue(n||"fx",a)},show:(o=t.fn.show,function(t){if(n(t))return o.apply(this,arguments);var e=i.apply(this,arguments);return e.mode="show",this.effect.call(this,e)}),hide:function(t){return function(e){if(n(e))return t.apply(this,arguments);var s=i.apply(this,arguments);return s.mode="hide",this.effect.call(this,s)}}(t.fn.hide),toggle:function(t){return function(e){if(n(e)||"boolean"==typeof e)return t.apply(this,arguments);var s=i.apply(this,arguments);return s.mode="toggle",this.effect.call(this,s)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],(function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])})),s}})}(),i={},t.each(["Quad","Cubic","Quart","Quint","Expo"],(function(t,e){i[e]=function(e){return Math.pow(e,t+2)}})),t.extend(i,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(i,(function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return t<.5?i(2*t)/2:1-i(-2*t+2)/2}}))}(o),function(t){var e=0,i={},s={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",s.height=s.paddingTop=s.paddingBottom=s.borderTopWidth=s.borderBottomWidth="show",t.widget("ui.accordion",{version:"1.10.3",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||!1!==e.active&&null!=e.active||(e.active=0),this._processPanels(),e.active<0&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t(),content:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each((function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")})),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each((function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")})),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){"active"!==t?("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),"disabled"===t&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e)):this._activate(e)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),o.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),!1===e.active&&!0===e.collapsible||!this.headers.length?(e.active=!1,this.active=t()):!1===e.active?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,s=this.options,n=s.heightStyle,o=this.element.parent(),a=this.accordionId="ui-accordion-"+(this.element.attr("id")||++e);this.active=this._findActive(s.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each((function(e){var i=t(this),s=i.attr("id"),n=i.next(),o=n.attr("id");s||(s=a+"-header-"+e,i.attr("id",s)),o||(o=a+"-panel-"+e,n.attr("id",o)),i.attr("aria-controls",o),n.attr("aria-labelledby",s)})).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(s.event),"fill"===n?(i=o.height(),this.element.siblings(":visible").each((function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))})),this.headers.each((function(){i-=t(this).outerHeight(!0)})),this.headers.next().each((function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))})).css("overflow","auto")):"auto"===n&&(i=0,this.headers.next().each((function(){i=Math.max(i,t(this).css("height","").height())})).height(i))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),(function(t,e){i[e]="_eventHandler"})),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n[0]===s[0],a=o&&i.collapsible,r=a?t():n.next(),l=s.next(),h={oldHeader:s,oldPanel:l,newHeader:a?t():n,newPanel:r};e.preventDefault(),o&&!i.collapsible||!1===this._trigger("beforeActivate",e,h)||(i.active=!a&&this.headers.index(n),this.active=o?t():n,this._toggle(h),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),o||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-expanded":"false","aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr("tabIndex",-1):i.length&&this.headers.filter((function(){return 0===t(this).attr("tabIndex")})).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(t,e,n){var o,a,r,l=this,h=0,c=t.length&&(!e.length||t.index()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;this.isMultiLine=!!o||!a&&this.element.prop("isContentEditable"),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,void(i=!0);e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:case o.NUMPAD_ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||s.preventDefault());if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){if(s)return s=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){this.cancelBlur?delete this.cancelBlur:(clearTimeout(this.searching),this.close(t),this._change(t))}}),this._initSource(),this.menu=t("